// 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  S3222C4_nt  {
  int s3222c4f0[2];
  void  mf3222c4(); // _ZN10S3222C4_nt8mf3222c4Ev
};
//SIG(-1 S3222C4_nt) C1{ m Fi[2]}


void  S3222C4_nt ::mf3222c4(){}

//skip512 S3222C4_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S3222C4_nt[];
VTBL_ENTRY *P__ZTI10S3222C4_nt = _ZTI10S3222C4_nt; 
Class_Descriptor cd_S3222C4_nt = {  "S3222C4_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI10S3222C4_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  S3222C3_nt  {
  int s3222c3f0;
  __tsi64 s3222c3f1;
  void *s3222c3f2[4];
  int s3222c3f3[2];
  void *s3222c3f4;
  ::S3222C4_nt s3222c3f5;
  void *s3222c3f6[2];
  virtual  ~S3222C3_nt(); // _ZN10S3222C3_ntD1Ev
  virtual void  v4(); // _ZN10S3222C3_nt2v4Ev
  virtual void  v5(); // _ZN10S3222C3_nt2v5Ev
  virtual void  v6(); // _ZN10S3222C3_nt2v6Ev
  virtual void  v7(); // _ZN10S3222C3_nt2v7Ev
  virtual void  v8(); // _ZN10S3222C3_nt2v8Ev
  virtual void  v9(); // _ZN10S3222C3_nt2v9Ev
  virtual void  v10(); // _ZN10S3222C3_nt3v10Ev
  virtual void  v11(); // _ZN10S3222C3_nt3v11Ev
  virtual void  v12(); // _ZN10S3222C3_nt3v12Ev
  virtual void  v13(); // _ZN10S3222C3_nt3v13Ev
  virtual void  v14(); // _ZN10S3222C3_nt3v14Ev
  virtual void  v15(); // _ZN10S3222C3_nt3v15Ev
  virtual void  v16(); // _ZN10S3222C3_nt3v16Ev
  virtual void  v17(); // _ZN10S3222C3_nt3v17Ev
  virtual void  v18(); // _ZN10S3222C3_nt3v18Ev
  virtual void  v19(); // _ZN10S3222C3_nt3v19Ev
  virtual void  v20(); // _ZN10S3222C3_nt3v20Ev
  virtual void  v21(); // _ZN10S3222C3_nt3v21Ev
  virtual void  v22(); // _ZN10S3222C3_nt3v22Ev
  virtual void  v23(); // _ZN10S3222C3_nt3v23Ev
  virtual void  v24(); // _ZN10S3222C3_nt3v24Ev
  virtual void  v25(); // _ZN10S3222C3_nt3v25Ev
  virtual void  v26(); // _ZN10S3222C3_nt3v26Ev
  virtual void  v27(); // _ZN10S3222C3_nt3v27Ev
  virtual void  v28(); // _ZN10S3222C3_nt3v28Ev
  virtual void  v29(); // _ZN10S3222C3_nt3v29Ev
  virtual void  v30(); // _ZN10S3222C3_nt3v30Ev
  virtual void  v31(); // _ZN10S3222C3_nt3v31Ev
  virtual void  v32(); // _ZN10S3222C3_nt3v32Ev
  virtual void  v33(); // _ZN10S3222C3_nt3v33Ev
  virtual void  v34(); // _ZN10S3222C3_nt3v34Ev
  virtual void  v35(); // _ZN10S3222C3_nt3v35Ev
  virtual void  v36(); // _ZN10S3222C3_nt3v36Ev
  virtual void  v37(); // _ZN10S3222C3_nt3v37Ev
  virtual void  v38(); // _ZN10S3222C3_nt3v38Ev
  virtual void  v39(); // _ZN10S3222C3_nt3v39Ev
  virtual void  v40(); // _ZN10S3222C3_nt3v40Ev
  virtual void  v41(); // _ZN10S3222C3_nt3v41Ev
  virtual void  v42(); // _ZN10S3222C3_nt3v42Ev
  virtual void  v43(); // _ZN10S3222C3_nt3v43Ev
  virtual void  v44(); // _ZN10S3222C3_nt3v44Ev
  virtual void  v45(); // _ZN10S3222C3_nt3v45Ev
  virtual void  v46(); // _ZN10S3222C3_nt3v46Ev
  virtual void  v47(); // _ZN10S3222C3_nt3v47Ev
  virtual void  v48(); // _ZN10S3222C3_nt3v48Ev
  virtual void  v49(); // _ZN10S3222C3_nt3v49Ev
  virtual void  v50(); // _ZN10S3222C3_nt3v50Ev
  virtual void  v51(); // _ZN10S3222C3_nt3v51Ev
  virtual void  v52(); // _ZN10S3222C3_nt3v52Ev
  virtual void  v53(); // _ZN10S3222C3_nt3v53Ev
  virtual void  v54(); // _ZN10S3222C3_nt3v54Ev
  virtual void  v55(); // _ZN10S3222C3_nt3v55Ev
  virtual void  v56(); // _ZN10S3222C3_nt3v56Ev
  virtual void  v57(); // _ZN10S3222C3_nt3v57Ev
  virtual void  v58(); // _ZN10S3222C3_nt3v58Ev
  virtual void  v59(); // _ZN10S3222C3_nt3v59Ev
  virtual void  v60(); // _ZN10S3222C3_nt3v60Ev
  virtual void  v61(); // _ZN10S3222C3_nt3v61Ev
  virtual void  v62(); // _ZN10S3222C3_nt3v62Ev
  virtual void  v63(); // _ZN10S3222C3_nt3v63Ev
  virtual void  v64(); // _ZN10S3222C3_nt3v64Ev
  virtual void  v65(); // _ZN10S3222C3_nt3v65Ev
  virtual void  v66(); // _ZN10S3222C3_nt3v66Ev
  virtual void  v67(); // _ZN10S3222C3_nt3v67Ev
  S3222C3_nt(); // tgen
};
//SIG(-1 S3222C3_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]}


 S3222C3_nt ::~S3222C3_nt(){ note_dtor("S3222C3_nt", this);}
void  S3222C3_nt ::v4(){vfunc_called(this, "_ZN10S3222C3_nt2v4Ev");}
void  S3222C3_nt ::v5(){vfunc_called(this, "_ZN10S3222C3_nt2v5Ev");}
void  S3222C3_nt ::v6(){vfunc_called(this, "_ZN10S3222C3_nt2v6Ev");}
void  S3222C3_nt ::v7(){vfunc_called(this, "_ZN10S3222C3_nt2v7Ev");}
void  S3222C3_nt ::v8(){vfunc_called(this, "_ZN10S3222C3_nt2v8Ev");}
void  S3222C3_nt ::v9(){vfunc_called(this, "_ZN10S3222C3_nt2v9Ev");}
void  S3222C3_nt ::v10(){vfunc_called(this, "_ZN10S3222C3_nt3v10Ev");}
void  S3222C3_nt ::v11(){vfunc_called(this, "_ZN10S3222C3_nt3v11Ev");}
void  S3222C3_nt ::v12(){vfunc_called(this, "_ZN10S3222C3_nt3v12Ev");}
void  S3222C3_nt ::v13(){vfunc_called(this, "_ZN10S3222C3_nt3v13Ev");}
void  S3222C3_nt ::v14(){vfunc_called(this, "_ZN10S3222C3_nt3v14Ev");}
void  S3222C3_nt ::v15(){vfunc_called(this, "_ZN10S3222C3_nt3v15Ev");}
void  S3222C3_nt ::v16(){vfunc_called(this, "_ZN10S3222C3_nt3v16Ev");}
void  S3222C3_nt ::v17(){vfunc_called(this, "_ZN10S3222C3_nt3v17Ev");}
void  S3222C3_nt ::v18(){vfunc_called(this, "_ZN10S3222C3_nt3v18Ev");}
void  S3222C3_nt ::v19(){vfunc_called(this, "_ZN10S3222C3_nt3v19Ev");}
void  S3222C3_nt ::v20(){vfunc_called(this, "_ZN10S3222C3_nt3v20Ev");}
void  S3222C3_nt ::v21(){vfunc_called(this, "_ZN10S3222C3_nt3v21Ev");}
void  S3222C3_nt ::v22(){vfunc_called(this, "_ZN10S3222C3_nt3v22Ev");}
void  S3222C3_nt ::v23(){vfunc_called(this, "_ZN10S3222C3_nt3v23Ev");}
void  S3222C3_nt ::v24(){vfunc_called(this, "_ZN10S3222C3_nt3v24Ev");}
void  S3222C3_nt ::v25(){vfunc_called(this, "_ZN10S3222C3_nt3v25Ev");}
void  S3222C3_nt ::v26(){vfunc_called(this, "_ZN10S3222C3_nt3v26Ev");}
void  S3222C3_nt ::v27(){vfunc_called(this, "_ZN10S3222C3_nt3v27Ev");}
void  S3222C3_nt ::v28(){vfunc_called(this, "_ZN10S3222C3_nt3v28Ev");}
void  S3222C3_nt ::v29(){vfunc_called(this, "_ZN10S3222C3_nt3v29Ev");}
void  S3222C3_nt ::v30(){vfunc_called(this, "_ZN10S3222C3_nt3v30Ev");}
void  S3222C3_nt ::v31(){vfunc_called(this, "_ZN10S3222C3_nt3v31Ev");}
void  S3222C3_nt ::v32(){vfunc_called(this, "_ZN10S3222C3_nt3v32Ev");}
void  S3222C3_nt ::v33(){vfunc_called(this, "_ZN10S3222C3_nt3v33Ev");}
void  S3222C3_nt ::v34(){vfunc_called(this, "_ZN10S3222C3_nt3v34Ev");}
void  S3222C3_nt ::v35(){vfunc_called(this, "_ZN10S3222C3_nt3v35Ev");}
void  S3222C3_nt ::v36(){vfunc_called(this, "_ZN10S3222C3_nt3v36Ev");}
void  S3222C3_nt ::v37(){vfunc_called(this, "_ZN10S3222C3_nt3v37Ev");}
void  S3222C3_nt ::v38(){vfunc_called(this, "_ZN10S3222C3_nt3v38Ev");}
void  S3222C3_nt ::v39(){vfunc_called(this, "_ZN10S3222C3_nt3v39Ev");}
void  S3222C3_nt ::v40(){vfunc_called(this, "_ZN10S3222C3_nt3v40Ev");}
void  S3222C3_nt ::v41(){vfunc_called(this, "_ZN10S3222C3_nt3v41Ev");}
void  S3222C3_nt ::v42(){vfunc_called(this, "_ZN10S3222C3_nt3v42Ev");}
void  S3222C3_nt ::v43(){vfunc_called(this, "_ZN10S3222C3_nt3v43Ev");}
void  S3222C3_nt ::v44(){vfunc_called(this, "_ZN10S3222C3_nt3v44Ev");}
void  S3222C3_nt ::v45(){vfunc_called(this, "_ZN10S3222C3_nt3v45Ev");}
void  S3222C3_nt ::v46(){vfunc_called(this, "_ZN10S3222C3_nt3v46Ev");}
void  S3222C3_nt ::v47(){vfunc_called(this, "_ZN10S3222C3_nt3v47Ev");}
void  S3222C3_nt ::v48(){vfunc_called(this, "_ZN10S3222C3_nt3v48Ev");}
void  S3222C3_nt ::v49(){vfunc_called(this, "_ZN10S3222C3_nt3v49Ev");}
void  S3222C3_nt ::v50(){vfunc_called(this, "_ZN10S3222C3_nt3v50Ev");}
void  S3222C3_nt ::v51(){vfunc_called(this, "_ZN10S3222C3_nt3v51Ev");}
void  S3222C3_nt ::v52(){vfunc_called(this, "_ZN10S3222C3_nt3v52Ev");}
void  S3222C3_nt ::v53(){vfunc_called(this, "_ZN10S3222C3_nt3v53Ev");}
void  S3222C3_nt ::v54(){vfunc_called(this, "_ZN10S3222C3_nt3v54Ev");}
void  S3222C3_nt ::v55(){vfunc_called(this, "_ZN10S3222C3_nt3v55Ev");}
void  S3222C3_nt ::v56(){vfunc_called(this, "_ZN10S3222C3_nt3v56Ev");}
void  S3222C3_nt ::v57(){vfunc_called(this, "_ZN10S3222C3_nt3v57Ev");}
void  S3222C3_nt ::v58(){vfunc_called(this, "_ZN10S3222C3_nt3v58Ev");}
void  S3222C3_nt ::v59(){vfunc_called(this, "_ZN10S3222C3_nt3v59Ev");}
void  S3222C3_nt ::v60(){vfunc_called(this, "_ZN10S3222C3_nt3v60Ev");}
void  S3222C3_nt ::v61(){vfunc_called(this, "_ZN10S3222C3_nt3v61Ev");}
void  S3222C3_nt ::v62(){vfunc_called(this, "_ZN10S3222C3_nt3v62Ev");}
void  S3222C3_nt ::v63(){vfunc_called(this, "_ZN10S3222C3_nt3v63Ev");}
void  S3222C3_nt ::v64(){vfunc_called(this, "_ZN10S3222C3_nt3v64Ev");}
void  S3222C3_nt ::v65(){vfunc_called(this, "_ZN10S3222C3_nt3v65Ev");}
void  S3222C3_nt ::v66(){vfunc_called(this, "_ZN10S3222C3_nt3v66Ev");}
void  S3222C3_nt ::v67(){vfunc_called(this, "_ZN10S3222C3_nt3v67Ev");}
S3222C3_nt ::S3222C3_nt(){ note_ctor("S3222C3_nt", this);} // tgen

//skip512 S3222C3_nt

#else // __cplusplus

extern void _ZN10S3222C3_ntC1Ev();
extern void _ZN10S3222C3_ntD1Ev();
Name_Map name_map_S3222C3_nt[] = {
  NSPAIR(_ZN10S3222C3_ntC1Ev),
  NSPAIR(_ZN10S3222C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3222C3_nt[];
extern void _ZN10S3222C3_ntD1Ev();
extern void _ZN10S3222C3_ntD0Ev();
extern void _ZN10S3222C3_nt2v4Ev();
extern void _ZN10S3222C3_nt2v5Ev();
extern void _ZN10S3222C3_nt2v6Ev();
extern void _ZN10S3222C3_nt2v7Ev();
extern void _ZN10S3222C3_nt2v8Ev();
extern void _ZN10S3222C3_nt2v9Ev();
extern void _ZN10S3222C3_nt3v10Ev();
extern void _ZN10S3222C3_nt3v11Ev();
extern void _ZN10S3222C3_nt3v12Ev();
extern void _ZN10S3222C3_nt3v13Ev();
extern void _ZN10S3222C3_nt3v14Ev();
extern void _ZN10S3222C3_nt3v15Ev();
extern void _ZN10S3222C3_nt3v16Ev();
extern void _ZN10S3222C3_nt3v17Ev();
extern void _ZN10S3222C3_nt3v18Ev();
extern void _ZN10S3222C3_nt3v19Ev();
extern void _ZN10S3222C3_nt3v20Ev();
extern void _ZN10S3222C3_nt3v21Ev();
extern void _ZN10S3222C3_nt3v22Ev();
extern void _ZN10S3222C3_nt3v23Ev();
extern void _ZN10S3222C3_nt3v24Ev();
extern void _ZN10S3222C3_nt3v25Ev();
extern void _ZN10S3222C3_nt3v26Ev();
extern void _ZN10S3222C3_nt3v27Ev();
extern void _ZN10S3222C3_nt3v28Ev();
extern void _ZN10S3222C3_nt3v29Ev();
extern void _ZN10S3222C3_nt3v30Ev();
extern void _ZN10S3222C3_nt3v31Ev();
extern void _ZN10S3222C3_nt3v32Ev();
extern void _ZN10S3222C3_nt3v33Ev();
extern void _ZN10S3222C3_nt3v34Ev();
extern void _ZN10S3222C3_nt3v35Ev();
extern void _ZN10S3222C3_nt3v36Ev();
extern void _ZN10S3222C3_nt3v37Ev();
extern void _ZN10S3222C3_nt3v38Ev();
extern void _ZN10S3222C3_nt3v39Ev();
extern void _ZN10S3222C3_nt3v40Ev();
extern void _ZN10S3222C3_nt3v41Ev();
extern void _ZN10S3222C3_nt3v42Ev();
extern void _ZN10S3222C3_nt3v43Ev();
extern void _ZN10S3222C3_nt3v44Ev();
extern void _ZN10S3222C3_nt3v45Ev();
extern void _ZN10S3222C3_nt3v46Ev();
extern void _ZN10S3222C3_nt3v47Ev();
extern void _ZN10S3222C3_nt3v48Ev();
extern void _ZN10S3222C3_nt3v49Ev();
extern void _ZN10S3222C3_nt3v50Ev();
extern void _ZN10S3222C3_nt3v51Ev();
extern void _ZN10S3222C3_nt3v52Ev();
extern void _ZN10S3222C3_nt3v53Ev();
extern void _ZN10S3222C3_nt3v54Ev();
extern void _ZN10S3222C3_nt3v55Ev();
extern void _ZN10S3222C3_nt3v56Ev();
extern void _ZN10S3222C3_nt3v57Ev();
extern void _ZN10S3222C3_nt3v58Ev();
extern void _ZN10S3222C3_nt3v59Ev();
extern void _ZN10S3222C3_nt3v60Ev();
extern void _ZN10S3222C3_nt3v61Ev();
extern void _ZN10S3222C3_nt3v62Ev();
extern void _ZN10S3222C3_nt3v63Ev();
extern void _ZN10S3222C3_nt3v64Ev();
extern void _ZN10S3222C3_nt3v65Ev();
extern void _ZN10S3222C3_nt3v66Ev();
extern void _ZN10S3222C3_nt3v67Ev();
static  VTBL_ENTRY vtc_S3222C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3222C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3222C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v67Ev,
};
extern VTBL_ENTRY _ZTI10S3222C3_nt[];
VTBL_ENTRY *P__ZTI10S3222C3_nt = _ZTI10S3222C3_nt; 
extern  VTBL_ENTRY _ZTV10S3222C3_nt[];
Class_Descriptor cd_S3222C3_nt = {  "S3222C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3222C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S3222C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3222C3_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  S3222C7_nt  {
  void *s3222c7f0;
  int s3222c7f1[2];
  void  mf3222c7(); // _ZN10S3222C7_nt8mf3222c7Ev
};
//SIG(-1 S3222C7_nt) C1{ m Fp Fi[2]}


void  S3222C7_nt ::mf3222c7(){}

//skip512 S3222C7_nt

#else // __cplusplus

Class_Descriptor cd_S3222C7_nt = {  "S3222C7_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  S3222C6_nt  : S3222C7_nt {
};
//SIG(-1 S3222C6_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S3222C6_nt

#else // __cplusplus

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



//skip512 S3222C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S3222C7_nt;
extern Class_Descriptor cd_S3222C6_nt;
static Base_Class bases_S3222C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3222C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3222C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S3222C8_nt  {
  int s3222c8f0;
  void  mf3222c8(); // _ZN10S3222C8_nt8mf3222c8Ev
};
//SIG(-1 S3222C8_nt) C1{ m Fi}


void  S3222C8_nt ::mf3222c8(){}

//skip512 S3222C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S3222C8_nt[];
VTBL_ENTRY *P__ZTI10S3222C8_nt = _ZTI10S3222C8_nt; 
Class_Descriptor cd_S3222C8_nt = {  "S3222C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S3222C8_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  S3222C12  : S3222C7_nt {
};
//SIG(-1 S3222C12) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3222C12()
{
  extern Class_Descriptor cd_S3222C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3222C12, buf);
    S3222C12 &lv = *(new (buf) S3222C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3222C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3222C12)");
    check_base_class_offset(lv, (S3222C7_nt*), 0, "S3222C12");
    test_class_info(&lv, &cd_S3222C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3222C12(Test_S3222C12, "S3222C12", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S3222C11()
{
  extern Class_Descriptor cd_S3222C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3222C11, buf);
    S3222C11 &lv = *(new (buf) S3222C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3222C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3222C11)");
    check_base_class_offset(lv, (S3222C7_nt*)(S3222C12*), 0, "S3222C11");
    check_base_class_offset(lv, (S3222C12*), 0, "S3222C11");
    test_class_info(&lv, &cd_S3222C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3222C11(Test_S3222C11, "S3222C11", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3222C7_nt;
extern Class_Descriptor cd_S3222C12;
static Base_Class bases_S3222C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3222C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3222C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3222C11 = {  "S3222C11", // class name
  bases_S3222C11, 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  S3222C13_nt  {
  int s3222c13f0[3];
  void  mf3222c13(); // _ZN11S3222C13_nt9mf3222c13Ev
};
//SIG(-1 S3222C13_nt) C1{ m Fi[3]}


void  S3222C13_nt ::mf3222c13(){}

//skip512 S3222C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S3222C18()
{
  extern Class_Descriptor cd_S3222C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3222C18, buf);
    S3222C18 &lv = *(new (buf) S3222C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3222C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3222C18)");
    check_base_class_offset(lv, (S3222C7_nt*), 0, "S3222C18");
    test_class_info(&lv, &cd_S3222C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3222C18(Test_S3222C18, "S3222C18", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S3222C17()
{
  extern Class_Descriptor cd_S3222C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3222C17, buf);
    S3222C17 &lv = *(new (buf) S3222C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3222C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3222C17)");
    check_base_class_offset(lv, (S3222C7_nt*)(S3222C18*), 0, "S3222C17");
    check_base_class_offset(lv, (S3222C18*), 0, "S3222C17");
    test_class_info(&lv, &cd_S3222C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3222C17(Test_S3222C17, "S3222C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3222C7_nt;
extern Class_Descriptor cd_S3222C18;
static Base_Class bases_S3222C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3222C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3222C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3222C17 = {  "S3222C17", // class name
  bases_S3222C17, 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  S3222C2_nt  : S3222C3_nt {
  ::S3222C5_nt s3222c2f0;
  ::S3222C5_nt s3222c2f1;
  ::S3222C8_nt s3222c2f2;
  int s3222c2f3;
  char s3222c2f4[4];
  void *s3222c2f5[2];
  ::S3222C5_nt s3222c2f6;
  unsigned int s3222c2f7:1;
  unsigned int s3222c2f8:1;
  unsigned int s3222c2f9:1;
  unsigned int s3222c2f10:1;
  unsigned int s3222c2f11:1;
  unsigned int s3222c2f12:1;
  unsigned int s3222c2f13:1;
  unsigned int s3222c2f14:1;
  unsigned int s3222c2f15:1;
  unsigned int s3222c2f16:1;
  unsigned int s3222c2f17:1;
  unsigned int s3222c2f18:1;
  unsigned int s3222c2f19:1;
  unsigned int s3222c2f20:1;
  unsigned int s3222c2f21:1;
  unsigned int s3222c2f22:1;
  unsigned int s3222c2f23:1;
  unsigned int s3222c2f24:1;
  unsigned int s3222c2f25:1;
  unsigned int s3222c2f26:1;
  unsigned int s3222c2f27:1;
  unsigned int s3222c2f28:1;
  unsigned int s3222c2f29:1;
  unsigned int s3222c2f30:1;
  unsigned int s3222c2f31:1;
  unsigned int s3222c2f32:1;
  unsigned int s3222c2f33:1;
  unsigned int s3222c2f34:1;
  unsigned int s3222c2f35:1;
  unsigned int s3222c2f36:1;
  unsigned int s3222c2f37:1;
  unsigned int s3222c2f38:1;
  unsigned int s3222c2f39:1;
  unsigned int s3222c2f40:1;
  unsigned int s3222c2f41:1;
  unsigned int s3222c2f42:1;
  unsigned int s3222c2f43:1;
  unsigned int s3222c2f44:1;
  unsigned int s3222c2f45:1;
  unsigned int s3222c2f46:1;
  unsigned int s3222c2f47:1;
  unsigned int s3222c2f48:1;
  unsigned int s3222c2f49:1;
  unsigned int s3222c2f50:1;
  unsigned int s3222c2f51:1;
  unsigned int s3222c2f52:1;
  unsigned int s3222c2f53:1;
  unsigned int s3222c2f54:1;
  unsigned int s3222c2f55:1;
  unsigned int s3222c2f56:1;
  unsigned int s3222c2f57:1;
  unsigned int s3222c2f58:1;
  unsigned int s3222c2f59:1;
  unsigned int s3222c2f60:1;
  unsigned int s3222c2f61:1;
  unsigned int s3222c2f62:1;
  unsigned int s3222c2f63:1;
  unsigned int s3222c2f64:1;
  unsigned int s3222c2f65:1;
  unsigned int s3222c2f66:1;
  unsigned int s3222c2f67:1;
  unsigned int s3222c2f68:1;
  unsigned int s3222c2f69:1;
  unsigned int s3222c2f70:1;
  unsigned int s3222c2f71:1;
  unsigned int s3222c2f72:1;
  unsigned int s3222c2f73:1;
  unsigned int s3222c2f74:1;
  unsigned int s3222c2f75:1;
  unsigned int s3222c2f76:1;
  unsigned int s3222c2f77:1;
  unsigned int s3222c2f78:1;
  unsigned int s3222c2f79:1;
  unsigned int s3222c2f80:1;
  unsigned int s3222c2f81:1;
  unsigned int s3222c2f82:1;
  unsigned int s3222c2f83:1;
  int s3222c2f84[5];
  void *s3222c2f85[2];
  int s3222c2f86[3];
  ::S3222C4_nt s3222c2f87;
  ::S3222C4_nt s3222c2f88;
  ::S3222C4_nt s3222c2f89;
  ::S3222C11 s3222c2f90;
  ::S3222C11 s3222c2f91;
  int s3222c2f92;
  void *s3222c2f93[2];
  ::S3222C13_nt s3222c2f94;
  ::S3222C13_nt s3222c2f95;
  ::S3222C13_nt s3222c2f96;
  ::S3222C13_nt s3222c2f97;
  void *s3222c2f98;
  ::S3222C4_nt s3222c2f99;
  ::S3222C11 s3222c2f100;
  ::S3222C13_nt s3222c2f101;
  ::S3222C13_nt s3222c2f102;
  int s3222c2f103;
  ::S3222C13_nt s3222c2f104;
  ::S3222C13_nt s3222c2f105;
  void *s3222c2f106;
  int s3222c2f107;
  char s3222c2f108;
  ::S3222C13_nt s3222c2f109;
  ::S3222C13_nt s3222c2f110;
  void *s3222c2f111;
  int s3222c2f112;
  void *s3222c2f113;
  ::S3222C11 s3222c2f114;
  ::S3222C17 s3222c2f115;
  ::S3222C17 s3222c2f116;
  virtual  ~S3222C2_nt(); // _ZN10S3222C2_ntD1Ev
  virtual void  v68(); // _ZN10S3222C2_nt3v68Ev
  virtual void  v69(); // _ZN10S3222C2_nt3v69Ev
  virtual void  v70(); // _ZN10S3222C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3222C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3222C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3222C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3222C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3222C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3222C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3222C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3222C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3222C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3222C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3222C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3222C2_nt3v82Ev
  virtual void  v83(); // _ZN10S3222C2_nt3v83Ev
  virtual void  v84(); // _ZN10S3222C2_nt3v84Ev
  virtual void  v85(); // _ZN10S3222C2_nt3v85Ev
  virtual void  v86(); // _ZN10S3222C2_nt3v86Ev
  virtual void  v87(); // _ZN10S3222C2_nt3v87Ev
  virtual void  v88(); // _ZN10S3222C2_nt3v88Ev
  virtual void  v89(); // _ZN10S3222C2_nt3v89Ev
  virtual void  v90(); // _ZN10S3222C2_nt3v90Ev
  virtual void  v91(); // _ZN10S3222C2_nt3v91Ev
  virtual void  v92(); // _ZN10S3222C2_nt3v92Ev
  virtual void  v93(); // _ZN10S3222C2_nt3v93Ev
  virtual void  v94(); // _ZN10S3222C2_nt3v94Ev
  virtual void  v95(); // _ZN10S3222C2_nt3v95Ev
  virtual void  v96(); // _ZN10S3222C2_nt3v96Ev
  virtual void  v97(); // _ZN10S3222C2_nt3v97Ev
  virtual void  v98(); // _ZN10S3222C2_nt3v98Ev
  virtual void  v99(); // _ZN10S3222C2_nt3v99Ev
  virtual void  v100(); // _ZN10S3222C2_nt4v100Ev
  virtual void  v101(); // _ZN10S3222C2_nt4v101Ev
  virtual void  v102(); // _ZN10S3222C2_nt4v102Ev
  virtual void  v103(); // _ZN10S3222C2_nt4v103Ev
  virtual void  v104(); // _ZN10S3222C2_nt4v104Ev
  virtual void  v105(); // _ZN10S3222C2_nt4v105Ev
  virtual void  v106(); // _ZN10S3222C2_nt4v106Ev
  virtual void  v107(); // _ZN10S3222C2_nt4v107Ev
  virtual void  v108(); // _ZN10S3222C2_nt4v108Ev
  virtual void  v109(); // _ZN10S3222C2_nt4v109Ev
  virtual void  v110(); // _ZN10S3222C2_nt4v110Ev
  virtual void  v111(); // _ZN10S3222C2_nt4v111Ev
  virtual void  v112(); // _ZN10S3222C2_nt4v112Ev
  virtual void  v113(); // _ZN10S3222C2_nt4v113Ev
  virtual void  v114(); // _ZN10S3222C2_nt4v114Ev
  virtual void  v115(); // _ZN10S3222C2_nt4v115Ev
  virtual void  v116(); // _ZN10S3222C2_nt4v116Ev
  virtual void  v117(); // _ZN10S3222C2_nt4v117Ev
  virtual void  v118(); // _ZN10S3222C2_nt4v118Ev
  virtual void  v119(); // _ZN10S3222C2_nt4v119Ev
  virtual void  v120(); // _ZN10S3222C2_nt4v120Ev
  virtual void  v121(); // _ZN10S3222C2_nt4v121Ev
  virtual void  v122(); // _ZN10S3222C2_nt4v122Ev
  virtual void  v123(); // _ZN10S3222C2_nt4v123Ev
  virtual void  v124(); // _ZN10S3222C2_nt4v124Ev
  virtual void  v125(); // _ZN10S3222C2_nt4v125Ev
  virtual void  v126(); // _ZN10S3222C2_nt4v126Ev
  virtual void  v127(); // _ZN10S3222C2_nt4v127Ev
  virtual void  v128(); // _ZN10S3222C2_nt4v128Ev
  virtual void  v129(); // _ZN10S3222C2_nt4v129Ev
  virtual void  v130(); // _ZN10S3222C2_nt4v130Ev
  virtual void  v131(); // _ZN10S3222C2_nt4v131Ev
  virtual void  v132(); // _ZN10S3222C2_nt4v132Ev
  virtual void  v133(); // _ZN10S3222C2_nt4v133Ev
  virtual void  v134(); // _ZN10S3222C2_nt4v134Ev
  virtual void  v135(); // _ZN10S3222C2_nt4v135Ev
  virtual void  v136(); // _ZN10S3222C2_nt4v136Ev
  virtual void  v137(); // _ZN10S3222C2_nt4v137Ev
  virtual void  v138(); // _ZN10S3222C2_nt4v138Ev
  virtual void  v139(); // _ZN10S3222C2_nt4v139Ev
  virtual void  v140(); // _ZN10S3222C2_nt4v140Ev
  virtual void  v141(); // _ZN10S3222C2_nt4v141Ev
  virtual void  v142(); // _ZN10S3222C2_nt4v142Ev
  virtual void  v143(); // _ZN10S3222C2_nt4v143Ev
  virtual void  v144(); // _ZN10S3222C2_nt4v144Ev
  virtual void  v145(); // _ZN10S3222C2_nt4v145Ev
  virtual void  v146(); // _ZN10S3222C2_nt4v146Ev
  virtual void  v147(); // _ZN10S3222C2_nt4v147Ev
  virtual void  v148(); // _ZN10S3222C2_nt4v148Ev
  virtual void  v149(); // _ZN10S3222C2_nt4v149Ev
  virtual void  v150(); // _ZN10S3222C2_nt4v150Ev
  virtual void  v151(); // _ZN10S3222C2_nt4v151Ev
  virtual void  v152(); // _ZN10S3222C2_nt4v152Ev
  virtual void  v153(); // _ZN10S3222C2_nt4v153Ev
  virtual void  v154(); // _ZN10S3222C2_nt4v154Ev
  virtual void  v155(); // _ZN10S3222C2_nt4v155Ev
  virtual void  v156(); // _ZN10S3222C2_nt4v156Ev
  virtual void  v157(); // _ZN10S3222C2_nt4v157Ev
  virtual void  v158(); // _ZN10S3222C2_nt4v158Ev
  virtual void  v159(); // _ZN10S3222C2_nt4v159Ev
  virtual void  v160(); // _ZN10S3222C2_nt4v160Ev
  virtual void  v161(); // _ZN10S3222C2_nt4v161Ev
  virtual void  v162(); // _ZN10S3222C2_nt4v162Ev
  virtual void  v163(); // _ZN10S3222C2_nt4v163Ev
  virtual void  v164(); // _ZN10S3222C2_nt4v164Ev
  virtual void  v165(); // _ZN10S3222C2_nt4v165Ev
  virtual void  v166(); // _ZN10S3222C2_nt4v166Ev
  virtual void  v167(); // _ZN10S3222C2_nt4v167Ev
  virtual void  v168(); // _ZN10S3222C2_nt4v168Ev
  virtual void  v169(); // _ZN10S3222C2_nt4v169Ev
  virtual void  v170(); // _ZN10S3222C2_nt4v170Ev
  virtual void  v171(); // _ZN10S3222C2_nt4v171Ev
  virtual void  v172(); // _ZN10S3222C2_nt4v172Ev
  virtual void  v173(); // _ZN10S3222C2_nt4v173Ev
  virtual void  v174(); // _ZN10S3222C2_nt4v174Ev
  virtual void  v175(); // _ZN10S3222C2_nt4v175Ev
  virtual void  v176(); // _ZN10S3222C2_nt4v176Ev
  virtual void  v177(); // _ZN10S3222C2_nt4v177Ev
  virtual void  v178(); // _ZN10S3222C2_nt4v178Ev
  virtual void  v179(); // _ZN10S3222C2_nt4v179Ev
  virtual void  v180(); // _ZN10S3222C2_nt4v180Ev
  virtual void  v181(); // _ZN10S3222C2_nt4v181Ev
  virtual void  v182(); // _ZN10S3222C2_nt4v182Ev
  virtual void  v183(); // _ZN10S3222C2_nt4v183Ev
  virtual void  v184(); // _ZN10S3222C2_nt4v184Ev
  virtual void  v185(); // _ZN10S3222C2_nt4v185Ev
  virtual void  v186(); // _ZN10S3222C2_nt4v186Ev
  virtual void  v187(); // _ZN10S3222C2_nt4v187Ev
  virtual void  v188(); // _ZN10S3222C2_nt4v188Ev
  virtual void  v189(); // _ZN10S3222C2_nt4v189Ev
  virtual void  v190(); // _ZN10S3222C2_nt4v190Ev
  virtual void  v191(); // _ZN10S3222C2_nt4v191Ev
  virtual void  v192(); // _ZN10S3222C2_nt4v192Ev
  virtual void  v193(); // _ZN10S3222C2_nt4v193Ev
  virtual void  v194(); // _ZN10S3222C2_nt4v194Ev
  virtual void  v195(); // _ZN10S3222C2_nt4v195Ev
  virtual void  v196(); // _ZN10S3222C2_nt4v196Ev
  virtual void  v197(); // _ZN10S3222C2_nt4v197Ev
  virtual void  v198(); // _ZN10S3222C2_nt4v198Ev
  virtual void  v199(); // _ZN10S3222C2_nt4v199Ev
  virtual void  v200(); // _ZN10S3222C2_nt4v200Ev
  virtual void  v201(); // _ZN10S3222C2_nt4v201Ev
  virtual void  v202(); // _ZN10S3222C2_nt4v202Ev
  virtual void  v203(); // _ZN10S3222C2_nt4v203Ev
  virtual void  v204(); // _ZN10S3222C2_nt4v204Ev
  virtual void  v205(); // _ZN10S3222C2_nt4v205Ev
  virtual void  v206(); // _ZN10S3222C2_nt4v206Ev
  virtual void  v207(); // _ZN10S3222C2_nt4v207Ev
  virtual void  v208(); // _ZN10S3222C2_nt4v208Ev
  virtual void  v209(); // _ZN10S3222C2_nt4v209Ev
  virtual void  v210(); // _ZN10S3222C2_nt4v210Ev
  S3222C2_nt(); // tgen
};
//SIG(-1 S3222C2_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}


 S3222C2_nt ::~S3222C2_nt(){ note_dtor("S3222C2_nt", this);}
void  S3222C2_nt ::v68(){vfunc_called(this, "_ZN10S3222C2_nt3v68Ev");}
void  S3222C2_nt ::v69(){vfunc_called(this, "_ZN10S3222C2_nt3v69Ev");}
void  S3222C2_nt ::v70(){vfunc_called(this, "_ZN10S3222C2_nt3v70Ev");}
void  S3222C2_nt ::v71(){vfunc_called(this, "_ZN10S3222C2_nt3v71Ev");}
void  S3222C2_nt ::v72(){vfunc_called(this, "_ZN10S3222C2_nt3v72Ev");}
void  S3222C2_nt ::v73(){vfunc_called(this, "_ZN10S3222C2_nt3v73Ev");}
void  S3222C2_nt ::v74(){vfunc_called(this, "_ZN10S3222C2_nt3v74Ev");}
void  S3222C2_nt ::v75(){vfunc_called(this, "_ZN10S3222C2_nt3v75Ev");}
void  S3222C2_nt ::v76(){vfunc_called(this, "_ZN10S3222C2_nt3v76Ev");}
void  S3222C2_nt ::v77(){vfunc_called(this, "_ZN10S3222C2_nt3v77Ev");}
void  S3222C2_nt ::v78(){vfunc_called(this, "_ZN10S3222C2_nt3v78Ev");}
void  S3222C2_nt ::v79(){vfunc_called(this, "_ZN10S3222C2_nt3v79Ev");}
void  S3222C2_nt ::v80(){vfunc_called(this, "_ZN10S3222C2_nt3v80Ev");}
void  S3222C2_nt ::v81(){vfunc_called(this, "_ZN10S3222C2_nt3v81Ev");}
void  S3222C2_nt ::v82(){vfunc_called(this, "_ZN10S3222C2_nt3v82Ev");}
void  S3222C2_nt ::v83(){vfunc_called(this, "_ZN10S3222C2_nt3v83Ev");}
void  S3222C2_nt ::v84(){vfunc_called(this, "_ZN10S3222C2_nt3v84Ev");}
void  S3222C2_nt ::v85(){vfunc_called(this, "_ZN10S3222C2_nt3v85Ev");}
void  S3222C2_nt ::v86(){vfunc_called(this, "_ZN10S3222C2_nt3v86Ev");}
void  S3222C2_nt ::v87(){vfunc_called(this, "_ZN10S3222C2_nt3v87Ev");}
void  S3222C2_nt ::v88(){vfunc_called(this, "_ZN10S3222C2_nt3v88Ev");}
void  S3222C2_nt ::v89(){vfunc_called(this, "_ZN10S3222C2_nt3v89Ev");}
void  S3222C2_nt ::v90(){vfunc_called(this, "_ZN10S3222C2_nt3v90Ev");}
void  S3222C2_nt ::v91(){vfunc_called(this, "_ZN10S3222C2_nt3v91Ev");}
void  S3222C2_nt ::v92(){vfunc_called(this, "_ZN10S3222C2_nt3v92Ev");}
void  S3222C2_nt ::v93(){vfunc_called(this, "_ZN10S3222C2_nt3v93Ev");}
void  S3222C2_nt ::v94(){vfunc_called(this, "_ZN10S3222C2_nt3v94Ev");}
void  S3222C2_nt ::v95(){vfunc_called(this, "_ZN10S3222C2_nt3v95Ev");}
void  S3222C2_nt ::v96(){vfunc_called(this, "_ZN10S3222C2_nt3v96Ev");}
void  S3222C2_nt ::v97(){vfunc_called(this, "_ZN10S3222C2_nt3v97Ev");}
void  S3222C2_nt ::v98(){vfunc_called(this, "_ZN10S3222C2_nt3v98Ev");}
void  S3222C2_nt ::v99(){vfunc_called(this, "_ZN10S3222C2_nt3v99Ev");}
void  S3222C2_nt ::v100(){vfunc_called(this, "_ZN10S3222C2_nt4v100Ev");}
void  S3222C2_nt ::v101(){vfunc_called(this, "_ZN10S3222C2_nt4v101Ev");}
void  S3222C2_nt ::v102(){vfunc_called(this, "_ZN10S3222C2_nt4v102Ev");}
void  S3222C2_nt ::v103(){vfunc_called(this, "_ZN10S3222C2_nt4v103Ev");}
void  S3222C2_nt ::v104(){vfunc_called(this, "_ZN10S3222C2_nt4v104Ev");}
void  S3222C2_nt ::v105(){vfunc_called(this, "_ZN10S3222C2_nt4v105Ev");}
void  S3222C2_nt ::v106(){vfunc_called(this, "_ZN10S3222C2_nt4v106Ev");}
void  S3222C2_nt ::v107(){vfunc_called(this, "_ZN10S3222C2_nt4v107Ev");}
void  S3222C2_nt ::v108(){vfunc_called(this, "_ZN10S3222C2_nt4v108Ev");}
void  S3222C2_nt ::v109(){vfunc_called(this, "_ZN10S3222C2_nt4v109Ev");}
void  S3222C2_nt ::v110(){vfunc_called(this, "_ZN10S3222C2_nt4v110Ev");}
void  S3222C2_nt ::v111(){vfunc_called(this, "_ZN10S3222C2_nt4v111Ev");}
void  S3222C2_nt ::v112(){vfunc_called(this, "_ZN10S3222C2_nt4v112Ev");}
void  S3222C2_nt ::v113(){vfunc_called(this, "_ZN10S3222C2_nt4v113Ev");}
void  S3222C2_nt ::v114(){vfunc_called(this, "_ZN10S3222C2_nt4v114Ev");}
void  S3222C2_nt ::v115(){vfunc_called(this, "_ZN10S3222C2_nt4v115Ev");}
void  S3222C2_nt ::v116(){vfunc_called(this, "_ZN10S3222C2_nt4v116Ev");}
void  S3222C2_nt ::v117(){vfunc_called(this, "_ZN10S3222C2_nt4v117Ev");}
void  S3222C2_nt ::v118(){vfunc_called(this, "_ZN10S3222C2_nt4v118Ev");}
void  S3222C2_nt ::v119(){vfunc_called(this, "_ZN10S3222C2_nt4v119Ev");}
void  S3222C2_nt ::v120(){vfunc_called(this, "_ZN10S3222C2_nt4v120Ev");}
void  S3222C2_nt ::v121(){vfunc_called(this, "_ZN10S3222C2_nt4v121Ev");}
void  S3222C2_nt ::v122(){vfunc_called(this, "_ZN10S3222C2_nt4v122Ev");}
void  S3222C2_nt ::v123(){vfunc_called(this, "_ZN10S3222C2_nt4v123Ev");}
void  S3222C2_nt ::v124(){vfunc_called(this, "_ZN10S3222C2_nt4v124Ev");}
void  S3222C2_nt ::v125(){vfunc_called(this, "_ZN10S3222C2_nt4v125Ev");}
void  S3222C2_nt ::v126(){vfunc_called(this, "_ZN10S3222C2_nt4v126Ev");}
void  S3222C2_nt ::v127(){vfunc_called(this, "_ZN10S3222C2_nt4v127Ev");}
void  S3222C2_nt ::v128(){vfunc_called(this, "_ZN10S3222C2_nt4v128Ev");}
void  S3222C2_nt ::v129(){vfunc_called(this, "_ZN10S3222C2_nt4v129Ev");}
void  S3222C2_nt ::v130(){vfunc_called(this, "_ZN10S3222C2_nt4v130Ev");}
void  S3222C2_nt ::v131(){vfunc_called(this, "_ZN10S3222C2_nt4v131Ev");}
void  S3222C2_nt ::v132(){vfunc_called(this, "_ZN10S3222C2_nt4v132Ev");}
void  S3222C2_nt ::v133(){vfunc_called(this, "_ZN10S3222C2_nt4v133Ev");}
void  S3222C2_nt ::v134(){vfunc_called(this, "_ZN10S3222C2_nt4v134Ev");}
void  S3222C2_nt ::v135(){vfunc_called(this, "_ZN10S3222C2_nt4v135Ev");}
void  S3222C2_nt ::v136(){vfunc_called(this, "_ZN10S3222C2_nt4v136Ev");}
void  S3222C2_nt ::v137(){vfunc_called(this, "_ZN10S3222C2_nt4v137Ev");}
void  S3222C2_nt ::v138(){vfunc_called(this, "_ZN10S3222C2_nt4v138Ev");}
void  S3222C2_nt ::v139(){vfunc_called(this, "_ZN10S3222C2_nt4v139Ev");}
void  S3222C2_nt ::v140(){vfunc_called(this, "_ZN10S3222C2_nt4v140Ev");}
void  S3222C2_nt ::v141(){vfunc_called(this, "_ZN10S3222C2_nt4v141Ev");}
void  S3222C2_nt ::v142(){vfunc_called(this, "_ZN10S3222C2_nt4v142Ev");}
void  S3222C2_nt ::v143(){vfunc_called(this, "_ZN10S3222C2_nt4v143Ev");}
void  S3222C2_nt ::v144(){vfunc_called(this, "_ZN10S3222C2_nt4v144Ev");}
void  S3222C2_nt ::v145(){vfunc_called(this, "_ZN10S3222C2_nt4v145Ev");}
void  S3222C2_nt ::v146(){vfunc_called(this, "_ZN10S3222C2_nt4v146Ev");}
void  S3222C2_nt ::v147(){vfunc_called(this, "_ZN10S3222C2_nt4v147Ev");}
void  S3222C2_nt ::v148(){vfunc_called(this, "_ZN10S3222C2_nt4v148Ev");}
void  S3222C2_nt ::v149(){vfunc_called(this, "_ZN10S3222C2_nt4v149Ev");}
void  S3222C2_nt ::v150(){vfunc_called(this, "_ZN10S3222C2_nt4v150Ev");}
void  S3222C2_nt ::v151(){vfunc_called(this, "_ZN10S3222C2_nt4v151Ev");}
void  S3222C2_nt ::v152(){vfunc_called(this, "_ZN10S3222C2_nt4v152Ev");}
void  S3222C2_nt ::v153(){vfunc_called(this, "_ZN10S3222C2_nt4v153Ev");}
void  S3222C2_nt ::v154(){vfunc_called(this, "_ZN10S3222C2_nt4v154Ev");}
void  S3222C2_nt ::v155(){vfunc_called(this, "_ZN10S3222C2_nt4v155Ev");}
void  S3222C2_nt ::v156(){vfunc_called(this, "_ZN10S3222C2_nt4v156Ev");}
void  S3222C2_nt ::v157(){vfunc_called(this, "_ZN10S3222C2_nt4v157Ev");}
void  S3222C2_nt ::v158(){vfunc_called(this, "_ZN10S3222C2_nt4v158Ev");}
void  S3222C2_nt ::v159(){vfunc_called(this, "_ZN10S3222C2_nt4v159Ev");}
void  S3222C2_nt ::v160(){vfunc_called(this, "_ZN10S3222C2_nt4v160Ev");}
void  S3222C2_nt ::v161(){vfunc_called(this, "_ZN10S3222C2_nt4v161Ev");}
void  S3222C2_nt ::v162(){vfunc_called(this, "_ZN10S3222C2_nt4v162Ev");}
void  S3222C2_nt ::v163(){vfunc_called(this, "_ZN10S3222C2_nt4v163Ev");}
void  S3222C2_nt ::v164(){vfunc_called(this, "_ZN10S3222C2_nt4v164Ev");}
void  S3222C2_nt ::v165(){vfunc_called(this, "_ZN10S3222C2_nt4v165Ev");}
void  S3222C2_nt ::v166(){vfunc_called(this, "_ZN10S3222C2_nt4v166Ev");}
void  S3222C2_nt ::v167(){vfunc_called(this, "_ZN10S3222C2_nt4v167Ev");}
void  S3222C2_nt ::v168(){vfunc_called(this, "_ZN10S3222C2_nt4v168Ev");}
void  S3222C2_nt ::v169(){vfunc_called(this, "_ZN10S3222C2_nt4v169Ev");}
void  S3222C2_nt ::v170(){vfunc_called(this, "_ZN10S3222C2_nt4v170Ev");}
void  S3222C2_nt ::v171(){vfunc_called(this, "_ZN10S3222C2_nt4v171Ev");}
void  S3222C2_nt ::v172(){vfunc_called(this, "_ZN10S3222C2_nt4v172Ev");}
void  S3222C2_nt ::v173(){vfunc_called(this, "_ZN10S3222C2_nt4v173Ev");}
void  S3222C2_nt ::v174(){vfunc_called(this, "_ZN10S3222C2_nt4v174Ev");}
void  S3222C2_nt ::v175(){vfunc_called(this, "_ZN10S3222C2_nt4v175Ev");}
void  S3222C2_nt ::v176(){vfunc_called(this, "_ZN10S3222C2_nt4v176Ev");}
void  S3222C2_nt ::v177(){vfunc_called(this, "_ZN10S3222C2_nt4v177Ev");}
void  S3222C2_nt ::v178(){vfunc_called(this, "_ZN10S3222C2_nt4v178Ev");}
void  S3222C2_nt ::v179(){vfunc_called(this, "_ZN10S3222C2_nt4v179Ev");}
void  S3222C2_nt ::v180(){vfunc_called(this, "_ZN10S3222C2_nt4v180Ev");}
void  S3222C2_nt ::v181(){vfunc_called(this, "_ZN10S3222C2_nt4v181Ev");}
void  S3222C2_nt ::v182(){vfunc_called(this, "_ZN10S3222C2_nt4v182Ev");}
void  S3222C2_nt ::v183(){vfunc_called(this, "_ZN10S3222C2_nt4v183Ev");}
void  S3222C2_nt ::v184(){vfunc_called(this, "_ZN10S3222C2_nt4v184Ev");}
void  S3222C2_nt ::v185(){vfunc_called(this, "_ZN10S3222C2_nt4v185Ev");}
void  S3222C2_nt ::v186(){vfunc_called(this, "_ZN10S3222C2_nt4v186Ev");}
void  S3222C2_nt ::v187(){vfunc_called(this, "_ZN10S3222C2_nt4v187Ev");}
void  S3222C2_nt ::v188(){vfunc_called(this, "_ZN10S3222C2_nt4v188Ev");}
void  S3222C2_nt ::v189(){vfunc_called(this, "_ZN10S3222C2_nt4v189Ev");}
void  S3222C2_nt ::v190(){vfunc_called(this, "_ZN10S3222C2_nt4v190Ev");}
void  S3222C2_nt ::v191(){vfunc_called(this, "_ZN10S3222C2_nt4v191Ev");}
void  S3222C2_nt ::v192(){vfunc_called(this, "_ZN10S3222C2_nt4v192Ev");}
void  S3222C2_nt ::v193(){vfunc_called(this, "_ZN10S3222C2_nt4v193Ev");}
void  S3222C2_nt ::v194(){vfunc_called(this, "_ZN10S3222C2_nt4v194Ev");}
void  S3222C2_nt ::v195(){vfunc_called(this, "_ZN10S3222C2_nt4v195Ev");}
void  S3222C2_nt ::v196(){vfunc_called(this, "_ZN10S3222C2_nt4v196Ev");}
void  S3222C2_nt ::v197(){vfunc_called(this, "_ZN10S3222C2_nt4v197Ev");}
void  S3222C2_nt ::v198(){vfunc_called(this, "_ZN10S3222C2_nt4v198Ev");}
void  S3222C2_nt ::v199(){vfunc_called(this, "_ZN10S3222C2_nt4v199Ev");}
void  S3222C2_nt ::v200(){vfunc_called(this, "_ZN10S3222C2_nt4v200Ev");}
void  S3222C2_nt ::v201(){vfunc_called(this, "_ZN10S3222C2_nt4v201Ev");}
void  S3222C2_nt ::v202(){vfunc_called(this, "_ZN10S3222C2_nt4v202Ev");}
void  S3222C2_nt ::v203(){vfunc_called(this, "_ZN10S3222C2_nt4v203Ev");}
void  S3222C2_nt ::v204(){vfunc_called(this, "_ZN10S3222C2_nt4v204Ev");}
void  S3222C2_nt ::v205(){vfunc_called(this, "_ZN10S3222C2_nt4v205Ev");}
void  S3222C2_nt ::v206(){vfunc_called(this, "_ZN10S3222C2_nt4v206Ev");}
void  S3222C2_nt ::v207(){vfunc_called(this, "_ZN10S3222C2_nt4v207Ev");}
void  S3222C2_nt ::v208(){vfunc_called(this, "_ZN10S3222C2_nt4v208Ev");}
void  S3222C2_nt ::v209(){vfunc_called(this, "_ZN10S3222C2_nt4v209Ev");}
void  S3222C2_nt ::v210(){vfunc_called(this, "_ZN10S3222C2_nt4v210Ev");}
S3222C2_nt ::S3222C2_nt(){ note_ctor("S3222C2_nt", this);} // tgen

//skip512 S3222C2_nt

#else // __cplusplus

extern void _ZN10S3222C2_ntC1Ev();
extern void _ZN10S3222C2_ntD1Ev();
Name_Map name_map_S3222C2_nt[] = {
  NSPAIR(_ZN10S3222C2_ntC1Ev),
  NSPAIR(_ZN10S3222C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3222C3_nt;
extern VTBL_ENTRY _ZTI10S3222C3_nt[];
extern  VTBL_ENTRY _ZTV10S3222C3_nt[];
static Base_Class bases_S3222C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3222C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3222C2_nt[];
extern void _ZN10S3222C2_ntD1Ev();
extern void _ZN10S3222C2_ntD0Ev();
extern void _ZN10S3222C3_nt2v4Ev();
extern void _ZN10S3222C3_nt2v5Ev();
extern void _ZN10S3222C3_nt2v6Ev();
extern void _ZN10S3222C3_nt2v7Ev();
extern void _ZN10S3222C3_nt2v8Ev();
extern void _ZN10S3222C3_nt2v9Ev();
extern void _ZN10S3222C3_nt3v10Ev();
extern void _ZN10S3222C3_nt3v11Ev();
extern void _ZN10S3222C3_nt3v12Ev();
extern void _ZN10S3222C3_nt3v13Ev();
extern void _ZN10S3222C3_nt3v14Ev();
extern void _ZN10S3222C3_nt3v15Ev();
extern void _ZN10S3222C3_nt3v16Ev();
extern void _ZN10S3222C3_nt3v17Ev();
extern void _ZN10S3222C3_nt3v18Ev();
extern void _ZN10S3222C3_nt3v19Ev();
extern void _ZN10S3222C3_nt3v20Ev();
extern void _ZN10S3222C3_nt3v21Ev();
extern void _ZN10S3222C3_nt3v22Ev();
extern void _ZN10S3222C3_nt3v23Ev();
extern void _ZN10S3222C3_nt3v24Ev();
extern void _ZN10S3222C3_nt3v25Ev();
extern void _ZN10S3222C3_nt3v26Ev();
extern void _ZN10S3222C3_nt3v27Ev();
extern void _ZN10S3222C3_nt3v28Ev();
extern void _ZN10S3222C3_nt3v29Ev();
extern void _ZN10S3222C3_nt3v30Ev();
extern void _ZN10S3222C3_nt3v31Ev();
extern void _ZN10S3222C3_nt3v32Ev();
extern void _ZN10S3222C3_nt3v33Ev();
extern void _ZN10S3222C3_nt3v34Ev();
extern void _ZN10S3222C3_nt3v35Ev();
extern void _ZN10S3222C3_nt3v36Ev();
extern void _ZN10S3222C3_nt3v37Ev();
extern void _ZN10S3222C3_nt3v38Ev();
extern void _ZN10S3222C3_nt3v39Ev();
extern void _ZN10S3222C3_nt3v40Ev();
extern void _ZN10S3222C3_nt3v41Ev();
extern void _ZN10S3222C3_nt3v42Ev();
extern void _ZN10S3222C3_nt3v43Ev();
extern void _ZN10S3222C3_nt3v44Ev();
extern void _ZN10S3222C3_nt3v45Ev();
extern void _ZN10S3222C3_nt3v46Ev();
extern void _ZN10S3222C3_nt3v47Ev();
extern void _ZN10S3222C3_nt3v48Ev();
extern void _ZN10S3222C3_nt3v49Ev();
extern void _ZN10S3222C3_nt3v50Ev();
extern void _ZN10S3222C3_nt3v51Ev();
extern void _ZN10S3222C3_nt3v52Ev();
extern void _ZN10S3222C3_nt3v53Ev();
extern void _ZN10S3222C3_nt3v54Ev();
extern void _ZN10S3222C3_nt3v55Ev();
extern void _ZN10S3222C3_nt3v56Ev();
extern void _ZN10S3222C3_nt3v57Ev();
extern void _ZN10S3222C3_nt3v58Ev();
extern void _ZN10S3222C3_nt3v59Ev();
extern void _ZN10S3222C3_nt3v60Ev();
extern void _ZN10S3222C3_nt3v61Ev();
extern void _ZN10S3222C3_nt3v62Ev();
extern void _ZN10S3222C3_nt3v63Ev();
extern void _ZN10S3222C3_nt3v64Ev();
extern void _ZN10S3222C3_nt3v65Ev();
extern void _ZN10S3222C3_nt3v66Ev();
extern void _ZN10S3222C3_nt3v67Ev();
extern void _ZN10S3222C2_nt3v68Ev();
extern void _ZN10S3222C2_nt3v69Ev();
extern void _ZN10S3222C2_nt3v70Ev();
extern void _ZN10S3222C2_nt3v71Ev();
extern void _ZN10S3222C2_nt3v72Ev();
extern void _ZN10S3222C2_nt3v73Ev();
extern void _ZN10S3222C2_nt3v74Ev();
extern void _ZN10S3222C2_nt3v75Ev();
extern void _ZN10S3222C2_nt3v76Ev();
extern void _ZN10S3222C2_nt3v77Ev();
extern void _ZN10S3222C2_nt3v78Ev();
extern void _ZN10S3222C2_nt3v79Ev();
extern void _ZN10S3222C2_nt3v80Ev();
extern void _ZN10S3222C2_nt3v81Ev();
extern void _ZN10S3222C2_nt3v82Ev();
extern void _ZN10S3222C2_nt3v83Ev();
extern void _ZN10S3222C2_nt3v84Ev();
extern void _ZN10S3222C2_nt3v85Ev();
extern void _ZN10S3222C2_nt3v86Ev();
extern void _ZN10S3222C2_nt3v87Ev();
extern void _ZN10S3222C2_nt3v88Ev();
extern void _ZN10S3222C2_nt3v89Ev();
extern void _ZN10S3222C2_nt3v90Ev();
extern void _ZN10S3222C2_nt3v91Ev();
extern void _ZN10S3222C2_nt3v92Ev();
extern void _ZN10S3222C2_nt3v93Ev();
extern void _ZN10S3222C2_nt3v94Ev();
extern void _ZN10S3222C2_nt3v95Ev();
extern void _ZN10S3222C2_nt3v96Ev();
extern void _ZN10S3222C2_nt3v97Ev();
extern void _ZN10S3222C2_nt3v98Ev();
extern void _ZN10S3222C2_nt3v99Ev();
extern void _ZN10S3222C2_nt4v100Ev();
extern void _ZN10S3222C2_nt4v101Ev();
extern void _ZN10S3222C2_nt4v102Ev();
extern void _ZN10S3222C2_nt4v103Ev();
extern void _ZN10S3222C2_nt4v104Ev();
extern void _ZN10S3222C2_nt4v105Ev();
extern void _ZN10S3222C2_nt4v106Ev();
extern void _ZN10S3222C2_nt4v107Ev();
extern void _ZN10S3222C2_nt4v108Ev();
extern void _ZN10S3222C2_nt4v109Ev();
extern void _ZN10S3222C2_nt4v110Ev();
extern void _ZN10S3222C2_nt4v111Ev();
extern void _ZN10S3222C2_nt4v112Ev();
extern void _ZN10S3222C2_nt4v113Ev();
extern void _ZN10S3222C2_nt4v114Ev();
extern void _ZN10S3222C2_nt4v115Ev();
extern void _ZN10S3222C2_nt4v116Ev();
extern void _ZN10S3222C2_nt4v117Ev();
extern void _ZN10S3222C2_nt4v118Ev();
extern void _ZN10S3222C2_nt4v119Ev();
extern void _ZN10S3222C2_nt4v120Ev();
extern void _ZN10S3222C2_nt4v121Ev();
extern void _ZN10S3222C2_nt4v122Ev();
extern void _ZN10S3222C2_nt4v123Ev();
extern void _ZN10S3222C2_nt4v124Ev();
extern void _ZN10S3222C2_nt4v125Ev();
extern void _ZN10S3222C2_nt4v126Ev();
extern void _ZN10S3222C2_nt4v127Ev();
extern void _ZN10S3222C2_nt4v128Ev();
extern void _ZN10S3222C2_nt4v129Ev();
extern void _ZN10S3222C2_nt4v130Ev();
extern void _ZN10S3222C2_nt4v131Ev();
extern void _ZN10S3222C2_nt4v132Ev();
extern void _ZN10S3222C2_nt4v133Ev();
extern void _ZN10S3222C2_nt4v134Ev();
extern void _ZN10S3222C2_nt4v135Ev();
extern void _ZN10S3222C2_nt4v136Ev();
extern void _ZN10S3222C2_nt4v137Ev();
extern void _ZN10S3222C2_nt4v138Ev();
extern void _ZN10S3222C2_nt4v139Ev();
extern void _ZN10S3222C2_nt4v140Ev();
extern void _ZN10S3222C2_nt4v141Ev();
extern void _ZN10S3222C2_nt4v142Ev();
extern void _ZN10S3222C2_nt4v143Ev();
extern void _ZN10S3222C2_nt4v144Ev();
extern void _ZN10S3222C2_nt4v145Ev();
extern void _ZN10S3222C2_nt4v146Ev();
extern void _ZN10S3222C2_nt4v147Ev();
extern void _ZN10S3222C2_nt4v148Ev();
extern void _ZN10S3222C2_nt4v149Ev();
extern void _ZN10S3222C2_nt4v150Ev();
extern void _ZN10S3222C2_nt4v151Ev();
extern void _ZN10S3222C2_nt4v152Ev();
extern void _ZN10S3222C2_nt4v153Ev();
extern void _ZN10S3222C2_nt4v154Ev();
extern void _ZN10S3222C2_nt4v155Ev();
extern void _ZN10S3222C2_nt4v156Ev();
extern void _ZN10S3222C2_nt4v157Ev();
extern void _ZN10S3222C2_nt4v158Ev();
extern void _ZN10S3222C2_nt4v159Ev();
extern void _ZN10S3222C2_nt4v160Ev();
extern void _ZN10S3222C2_nt4v161Ev();
extern void _ZN10S3222C2_nt4v162Ev();
extern void _ZN10S3222C2_nt4v163Ev();
extern void _ZN10S3222C2_nt4v164Ev();
extern void _ZN10S3222C2_nt4v165Ev();
extern void _ZN10S3222C2_nt4v166Ev();
extern void _ZN10S3222C2_nt4v167Ev();
extern void _ZN10S3222C2_nt4v168Ev();
extern void _ZN10S3222C2_nt4v169Ev();
extern void _ZN10S3222C2_nt4v170Ev();
extern void _ZN10S3222C2_nt4v171Ev();
extern void _ZN10S3222C2_nt4v172Ev();
extern void _ZN10S3222C2_nt4v173Ev();
extern void _ZN10S3222C2_nt4v174Ev();
extern void _ZN10S3222C2_nt4v175Ev();
extern void _ZN10S3222C2_nt4v176Ev();
extern void _ZN10S3222C2_nt4v177Ev();
extern void _ZN10S3222C2_nt4v178Ev();
extern void _ZN10S3222C2_nt4v179Ev();
extern void _ZN10S3222C2_nt4v180Ev();
extern void _ZN10S3222C2_nt4v181Ev();
extern void _ZN10S3222C2_nt4v182Ev();
extern void _ZN10S3222C2_nt4v183Ev();
extern void _ZN10S3222C2_nt4v184Ev();
extern void _ZN10S3222C2_nt4v185Ev();
extern void _ZN10S3222C2_nt4v186Ev();
extern void _ZN10S3222C2_nt4v187Ev();
extern void _ZN10S3222C2_nt4v188Ev();
extern void _ZN10S3222C2_nt4v189Ev();
extern void _ZN10S3222C2_nt4v190Ev();
extern void _ZN10S3222C2_nt4v191Ev();
extern void _ZN10S3222C2_nt4v192Ev();
extern void _ZN10S3222C2_nt4v193Ev();
extern void _ZN10S3222C2_nt4v194Ev();
extern void _ZN10S3222C2_nt4v195Ev();
extern void _ZN10S3222C2_nt4v196Ev();
extern void _ZN10S3222C2_nt4v197Ev();
extern void _ZN10S3222C2_nt4v198Ev();
extern void _ZN10S3222C2_nt4v199Ev();
extern void _ZN10S3222C2_nt4v200Ev();
extern void _ZN10S3222C2_nt4v201Ev();
extern void _ZN10S3222C2_nt4v202Ev();
extern void _ZN10S3222C2_nt4v203Ev();
extern void _ZN10S3222C2_nt4v204Ev();
extern void _ZN10S3222C2_nt4v205Ev();
extern void _ZN10S3222C2_nt4v206Ev();
extern void _ZN10S3222C2_nt4v207Ev();
extern void _ZN10S3222C2_nt4v208Ev();
extern void _ZN10S3222C2_nt4v209Ev();
extern void _ZN10S3222C2_nt4v210Ev();
static  VTBL_ENTRY vtc_S3222C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3222C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3222C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v210Ev,
};
extern VTBL_ENTRY _ZTI10S3222C2_nt[];
VTBL_ENTRY *P__ZTI10S3222C2_nt = _ZTI10S3222C2_nt; 
extern  VTBL_ENTRY _ZTV10S3222C2_nt[];
Class_Descriptor cd_S3222C2_nt = {  "S3222C2_nt", // class name
  bases_S3222C2_nt, 1,
  &(vtc_S3222C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S3222C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3222C2_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  S3222C1  : S3222C2_nt {
  void *s3222c1f0;
  int s3222c1f1[2];
  ::S3222C4_nt s3222c1f2;
  int s3222c1f3[2];
  virtual  ~S3222C1(); // _ZN7S3222C1D1Ev
  virtual void  v1(); // _ZN7S3222C12v1Ev
  virtual void  v2(); // _ZN7S3222C12v2Ev
  virtual void  v3(); // _ZN7S3222C12v3Ev
  S3222C1(); // tgen
};
//SIG(1 S3222C1) 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[2] FC4 Fi[2]}


 S3222C1 ::~S3222C1(){ note_dtor("S3222C1", this);}
void  S3222C1 ::v1(){vfunc_called(this, "_ZN7S3222C12v1Ev");}
void  S3222C1 ::v2(){vfunc_called(this, "_ZN7S3222C12v2Ev");}
void  S3222C1 ::v3(){vfunc_called(this, "_ZN7S3222C12v3Ev");}
S3222C1 ::S3222C1(){ note_ctor("S3222C1", this);} // tgen

static void Test_S3222C1()
{
  extern Class_Descriptor cd_S3222C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(76,117)];
    init_test(&cd_S3222C1, buf);
    S3222C1 *dp, &lv = *(dp=new (buf) S3222C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(600,464), "sizeof(S3222C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3222C1)");
    check_base_class_offset(lv, (S3222C3_nt*)(S3222C2_nt*), 0, "S3222C1");
    check_base_class_offset(lv, (S3222C2_nt*), 0, "S3222C1");
    check_field_offset(lv, s3222c1f0, ABISELECT(568,436), "S3222C1.s3222c1f0");
    check_field_offset(lv, s3222c1f1, ABISELECT(576,440), "S3222C1.s3222c1f1");
    check_field_offset(lv, s3222c1f2, ABISELECT(584,448), "S3222C1.s3222c1f2");
    check_field_offset(lv, s3222c1f3, ABISELECT(592,456), "S3222C1.s3222c1f3");
    test_class_info(&lv, &cd_S3222C1);
    dp->~S3222C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3222C1(Test_S3222C1, "S3222C1", ABISELECT(600,464));

#else // __cplusplus

extern void _ZN7S3222C1C1Ev();
extern void _ZN7S3222C1D1Ev();
Name_Map name_map_S3222C1[] = {
  NSPAIR(_ZN7S3222C1C1Ev),
  NSPAIR(_ZN7S3222C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3222C3_nt;
extern VTBL_ENTRY _ZTI10S3222C3_nt[];
extern  VTBL_ENTRY _ZTV10S3222C3_nt[];
extern Class_Descriptor cd_S3222C2_nt;
extern VTBL_ENTRY _ZTI10S3222C2_nt[];
extern  VTBL_ENTRY _ZTV10S3222C2_nt[];
static Base_Class bases_S3222C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3222C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3222C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3222C1[];
extern void _ZN7S3222C1D1Ev();
extern void _ZN7S3222C1D0Ev();
extern void _ZN10S3222C3_nt2v4Ev();
extern void _ZN10S3222C3_nt2v5Ev();
extern void _ZN10S3222C3_nt2v6Ev();
extern void _ZN10S3222C3_nt2v7Ev();
extern void _ZN10S3222C3_nt2v8Ev();
extern void _ZN10S3222C3_nt2v9Ev();
extern void _ZN10S3222C3_nt3v10Ev();
extern void _ZN10S3222C3_nt3v11Ev();
extern void _ZN10S3222C3_nt3v12Ev();
extern void _ZN10S3222C3_nt3v13Ev();
extern void _ZN10S3222C3_nt3v14Ev();
extern void _ZN10S3222C3_nt3v15Ev();
extern void _ZN10S3222C3_nt3v16Ev();
extern void _ZN10S3222C3_nt3v17Ev();
extern void _ZN10S3222C3_nt3v18Ev();
extern void _ZN10S3222C3_nt3v19Ev();
extern void _ZN10S3222C3_nt3v20Ev();
extern void _ZN10S3222C3_nt3v21Ev();
extern void _ZN10S3222C3_nt3v22Ev();
extern void _ZN10S3222C3_nt3v23Ev();
extern void _ZN10S3222C3_nt3v24Ev();
extern void _ZN10S3222C3_nt3v25Ev();
extern void _ZN10S3222C3_nt3v26Ev();
extern void _ZN10S3222C3_nt3v27Ev();
extern void _ZN10S3222C3_nt3v28Ev();
extern void _ZN10S3222C3_nt3v29Ev();
extern void _ZN10S3222C3_nt3v30Ev();
extern void _ZN10S3222C3_nt3v31Ev();
extern void _ZN10S3222C3_nt3v32Ev();
extern void _ZN10S3222C3_nt3v33Ev();
extern void _ZN10S3222C3_nt3v34Ev();
extern void _ZN10S3222C3_nt3v35Ev();
extern void _ZN10S3222C3_nt3v36Ev();
extern void _ZN10S3222C3_nt3v37Ev();
extern void _ZN10S3222C3_nt3v38Ev();
extern void _ZN10S3222C3_nt3v39Ev();
extern void _ZN10S3222C3_nt3v40Ev();
extern void _ZN10S3222C3_nt3v41Ev();
extern void _ZN10S3222C3_nt3v42Ev();
extern void _ZN10S3222C3_nt3v43Ev();
extern void _ZN10S3222C3_nt3v44Ev();
extern void _ZN10S3222C3_nt3v45Ev();
extern void _ZN10S3222C3_nt3v46Ev();
extern void _ZN10S3222C3_nt3v47Ev();
extern void _ZN10S3222C3_nt3v48Ev();
extern void _ZN10S3222C3_nt3v49Ev();
extern void _ZN10S3222C3_nt3v50Ev();
extern void _ZN10S3222C3_nt3v51Ev();
extern void _ZN10S3222C3_nt3v52Ev();
extern void _ZN10S3222C3_nt3v53Ev();
extern void _ZN10S3222C3_nt3v54Ev();
extern void _ZN10S3222C3_nt3v55Ev();
extern void _ZN10S3222C3_nt3v56Ev();
extern void _ZN10S3222C3_nt3v57Ev();
extern void _ZN10S3222C3_nt3v58Ev();
extern void _ZN10S3222C3_nt3v59Ev();
extern void _ZN10S3222C3_nt3v60Ev();
extern void _ZN10S3222C3_nt3v61Ev();
extern void _ZN10S3222C3_nt3v62Ev();
extern void _ZN10S3222C3_nt3v63Ev();
extern void _ZN10S3222C3_nt3v64Ev();
extern void _ZN10S3222C3_nt3v65Ev();
extern void _ZN10S3222C3_nt3v66Ev();
extern void _ZN10S3222C3_nt3v67Ev();
extern void _ZN10S3222C2_nt3v68Ev();
extern void _ZN10S3222C2_nt3v69Ev();
extern void _ZN10S3222C2_nt3v70Ev();
extern void _ZN10S3222C2_nt3v71Ev();
extern void _ZN10S3222C2_nt3v72Ev();
extern void _ZN10S3222C2_nt3v73Ev();
extern void _ZN10S3222C2_nt3v74Ev();
extern void _ZN10S3222C2_nt3v75Ev();
extern void _ZN10S3222C2_nt3v76Ev();
extern void _ZN10S3222C2_nt3v77Ev();
extern void _ZN10S3222C2_nt3v78Ev();
extern void _ZN10S3222C2_nt3v79Ev();
extern void _ZN10S3222C2_nt3v80Ev();
extern void _ZN10S3222C2_nt3v81Ev();
extern void _ZN10S3222C2_nt3v82Ev();
extern void _ZN10S3222C2_nt3v83Ev();
extern void _ZN10S3222C2_nt3v84Ev();
extern void _ZN10S3222C2_nt3v85Ev();
extern void _ZN10S3222C2_nt3v86Ev();
extern void _ZN10S3222C2_nt3v87Ev();
extern void _ZN10S3222C2_nt3v88Ev();
extern void _ZN10S3222C2_nt3v89Ev();
extern void _ZN10S3222C2_nt3v90Ev();
extern void _ZN10S3222C2_nt3v91Ev();
extern void _ZN10S3222C2_nt3v92Ev();
extern void _ZN10S3222C2_nt3v93Ev();
extern void _ZN10S3222C2_nt3v94Ev();
extern void _ZN10S3222C2_nt3v95Ev();
extern void _ZN10S3222C2_nt3v96Ev();
extern void _ZN10S3222C2_nt3v97Ev();
extern void _ZN10S3222C2_nt3v98Ev();
extern void _ZN10S3222C2_nt3v99Ev();
extern void _ZN10S3222C2_nt4v100Ev();
extern void _ZN10S3222C2_nt4v101Ev();
extern void _ZN10S3222C2_nt4v102Ev();
extern void _ZN10S3222C2_nt4v103Ev();
extern void _ZN10S3222C2_nt4v104Ev();
extern void _ZN10S3222C2_nt4v105Ev();
extern void _ZN10S3222C2_nt4v106Ev();
extern void _ZN10S3222C2_nt4v107Ev();
extern void _ZN10S3222C2_nt4v108Ev();
extern void _ZN10S3222C2_nt4v109Ev();
extern void _ZN10S3222C2_nt4v110Ev();
extern void _ZN10S3222C2_nt4v111Ev();
extern void _ZN10S3222C2_nt4v112Ev();
extern void _ZN10S3222C2_nt4v113Ev();
extern void _ZN10S3222C2_nt4v114Ev();
extern void _ZN10S3222C2_nt4v115Ev();
extern void _ZN10S3222C2_nt4v116Ev();
extern void _ZN10S3222C2_nt4v117Ev();
extern void _ZN10S3222C2_nt4v118Ev();
extern void _ZN10S3222C2_nt4v119Ev();
extern void _ZN10S3222C2_nt4v120Ev();
extern void _ZN10S3222C2_nt4v121Ev();
extern void _ZN10S3222C2_nt4v122Ev();
extern void _ZN10S3222C2_nt4v123Ev();
extern void _ZN10S3222C2_nt4v124Ev();
extern void _ZN10S3222C2_nt4v125Ev();
extern void _ZN10S3222C2_nt4v126Ev();
extern void _ZN10S3222C2_nt4v127Ev();
extern void _ZN10S3222C2_nt4v128Ev();
extern void _ZN10S3222C2_nt4v129Ev();
extern void _ZN10S3222C2_nt4v130Ev();
extern void _ZN10S3222C2_nt4v131Ev();
extern void _ZN10S3222C2_nt4v132Ev();
extern void _ZN10S3222C2_nt4v133Ev();
extern void _ZN10S3222C2_nt4v134Ev();
extern void _ZN10S3222C2_nt4v135Ev();
extern void _ZN10S3222C2_nt4v136Ev();
extern void _ZN10S3222C2_nt4v137Ev();
extern void _ZN10S3222C2_nt4v138Ev();
extern void _ZN10S3222C2_nt4v139Ev();
extern void _ZN10S3222C2_nt4v140Ev();
extern void _ZN10S3222C2_nt4v141Ev();
extern void _ZN10S3222C2_nt4v142Ev();
extern void _ZN10S3222C2_nt4v143Ev();
extern void _ZN10S3222C2_nt4v144Ev();
extern void _ZN10S3222C2_nt4v145Ev();
extern void _ZN10S3222C2_nt4v146Ev();
extern void _ZN10S3222C2_nt4v147Ev();
extern void _ZN10S3222C2_nt4v148Ev();
extern void _ZN10S3222C2_nt4v149Ev();
extern void _ZN10S3222C2_nt4v150Ev();
extern void _ZN10S3222C2_nt4v151Ev();
extern void _ZN10S3222C2_nt4v152Ev();
extern void _ZN10S3222C2_nt4v153Ev();
extern void _ZN10S3222C2_nt4v154Ev();
extern void _ZN10S3222C2_nt4v155Ev();
extern void _ZN10S3222C2_nt4v156Ev();
extern void _ZN10S3222C2_nt4v157Ev();
extern void _ZN10S3222C2_nt4v158Ev();
extern void _ZN10S3222C2_nt4v159Ev();
extern void _ZN10S3222C2_nt4v160Ev();
extern void _ZN10S3222C2_nt4v161Ev();
extern void _ZN10S3222C2_nt4v162Ev();
extern void _ZN10S3222C2_nt4v163Ev();
extern void _ZN10S3222C2_nt4v164Ev();
extern void _ZN10S3222C2_nt4v165Ev();
extern void _ZN10S3222C2_nt4v166Ev();
extern void _ZN10S3222C2_nt4v167Ev();
extern void _ZN10S3222C2_nt4v168Ev();
extern void _ZN10S3222C2_nt4v169Ev();
extern void _ZN10S3222C2_nt4v170Ev();
extern void _ZN10S3222C2_nt4v171Ev();
extern void _ZN10S3222C2_nt4v172Ev();
extern void _ZN10S3222C2_nt4v173Ev();
extern void _ZN10S3222C2_nt4v174Ev();
extern void _ZN10S3222C2_nt4v175Ev();
extern void _ZN10S3222C2_nt4v176Ev();
extern void _ZN10S3222C2_nt4v177Ev();
extern void _ZN10S3222C2_nt4v178Ev();
extern void _ZN10S3222C2_nt4v179Ev();
extern void _ZN10S3222C2_nt4v180Ev();
extern void _ZN10S3222C2_nt4v181Ev();
extern void _ZN10S3222C2_nt4v182Ev();
extern void _ZN10S3222C2_nt4v183Ev();
extern void _ZN10S3222C2_nt4v184Ev();
extern void _ZN10S3222C2_nt4v185Ev();
extern void _ZN10S3222C2_nt4v186Ev();
extern void _ZN10S3222C2_nt4v187Ev();
extern void _ZN10S3222C2_nt4v188Ev();
extern void _ZN10S3222C2_nt4v189Ev();
extern void _ZN10S3222C2_nt4v190Ev();
extern void _ZN10S3222C2_nt4v191Ev();
extern void _ZN10S3222C2_nt4v192Ev();
extern void _ZN10S3222C2_nt4v193Ev();
extern void _ZN10S3222C2_nt4v194Ev();
extern void _ZN10S3222C2_nt4v195Ev();
extern void _ZN10S3222C2_nt4v196Ev();
extern void _ZN10S3222C2_nt4v197Ev();
extern void _ZN10S3222C2_nt4v198Ev();
extern void _ZN10S3222C2_nt4v199Ev();
extern void _ZN10S3222C2_nt4v200Ev();
extern void _ZN10S3222C2_nt4v201Ev();
extern void _ZN10S3222C2_nt4v202Ev();
extern void _ZN10S3222C2_nt4v203Ev();
extern void _ZN10S3222C2_nt4v204Ev();
extern void _ZN10S3222C2_nt4v205Ev();
extern void _ZN10S3222C2_nt4v206Ev();
extern void _ZN10S3222C2_nt4v207Ev();
extern void _ZN10S3222C2_nt4v208Ev();
extern void _ZN10S3222C2_nt4v209Ev();
extern void _ZN10S3222C2_nt4v210Ev();
extern void _ZN7S3222C12v1Ev();
extern void _ZN7S3222C12v2Ev();
extern void _ZN7S3222C12v3Ev();
static  VTBL_ENTRY vtc_S3222C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3222C1[0]),
  (VTBL_ENTRY)&_ZN7S3222C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3222C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3222C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3222C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN7S3222C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3222C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3222C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3222C1[];
extern  VTBL_ENTRY _ZTV7S3222C1[];
Class_Descriptor cd_S3222C1 = {  "S3222C1", // class name
  bases_S3222C1, 2,
  &(vtc_S3222C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(600,464), // object size
  NSPAIRA(_ZTI7S3222C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3222C1),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  S2014C7_nt  {
  void  mf2014c7(); // _ZN10S2014C7_nt8mf2014c7Ev
};
//SIG(-1 S2014C7_nt) C1{ m}


void  S2014C7_nt ::mf2014c7(){}

//skip512 S2014C7_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S2014C7_nt[];
VTBL_ENTRY *P__ZTI10S2014C7_nt = _ZTI10S2014C7_nt; 
Class_Descriptor cd_S2014C7_nt = {  "S2014C7_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S2014C7_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  S2014C6_nt  {
  void *s2014c6f0;
  int s2014c6f1;
  ::S2014C7_nt s2014c6f2;
  ::S2014C7_nt s2014c6f3;
  void  mf2014c6(); // _ZN10S2014C6_nt8mf2014c6Ev
};
//SIG(-1 S2014C6_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S2014C6_nt ::mf2014c6(){}

//skip512 S2014C6_nt

#else // __cplusplus

Class_Descriptor cd_S2014C6_nt = {  "S2014C6_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  S2014C5_nt  : S2014C6_nt {
};
//SIG(-1 S2014C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S2014C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2014C6_nt;
static Base_Class bases_S2014C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S2014C4_nt  {
  void *s2014c4f0;
  int s2014c4f1;
  ::S2014C5_nt s2014c4f2;
  ::S2014C5_nt s2014c4f3;
  int s2014c4f4;
  virtual  ~S2014C4_nt(); // _ZN10S2014C4_ntD1Ev
  virtual void  v11(); // _ZN10S2014C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2014C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2014C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2014C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2014C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2014C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2014C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2014C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2014C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2014C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2014C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2014C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2014C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2014C4_nt3v24Ev
  virtual void  v25(); // _ZN10S2014C4_nt3v25Ev
  virtual void  v26(); // _ZN10S2014C4_nt3v26Ev
  virtual void  v27(); // _ZN10S2014C4_nt3v27Ev
  virtual void  v28(); // _ZN10S2014C4_nt3v28Ev
  virtual void  v29(); // _ZN10S2014C4_nt3v29Ev
  virtual void  v30(); // _ZN10S2014C4_nt3v30Ev
  virtual void  v31(); // _ZN10S2014C4_nt3v31Ev
  virtual void  v32(); // _ZN10S2014C4_nt3v32Ev
  virtual void  v33(); // _ZN10S2014C4_nt3v33Ev
  S2014C4_nt(); // tgen
};
//SIG(-1 S2014C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC2 Fi}


 S2014C4_nt ::~S2014C4_nt(){ note_dtor("S2014C4_nt", this);}
void  S2014C4_nt ::v11(){vfunc_called(this, "_ZN10S2014C4_nt3v11Ev");}
void  S2014C4_nt ::v12(){vfunc_called(this, "_ZN10S2014C4_nt3v12Ev");}
void  S2014C4_nt ::v13(){vfunc_called(this, "_ZN10S2014C4_nt3v13Ev");}
void  S2014C4_nt ::v14(){vfunc_called(this, "_ZN10S2014C4_nt3v14Ev");}
void  S2014C4_nt ::v15(){vfunc_called(this, "_ZN10S2014C4_nt3v15Ev");}
void  S2014C4_nt ::v16(){vfunc_called(this, "_ZN10S2014C4_nt3v16Ev");}
void  S2014C4_nt ::v17(){vfunc_called(this, "_ZN10S2014C4_nt3v17Ev");}
void  S2014C4_nt ::v18(){vfunc_called(this, "_ZN10S2014C4_nt3v18Ev");}
void  S2014C4_nt ::v19(){vfunc_called(this, "_ZN10S2014C4_nt3v19Ev");}
void  S2014C4_nt ::v20(){vfunc_called(this, "_ZN10S2014C4_nt3v20Ev");}
void  S2014C4_nt ::v21(){vfunc_called(this, "_ZN10S2014C4_nt3v21Ev");}
void  S2014C4_nt ::v22(){vfunc_called(this, "_ZN10S2014C4_nt3v22Ev");}
void  S2014C4_nt ::v23(){vfunc_called(this, "_ZN10S2014C4_nt3v23Ev");}
void  S2014C4_nt ::v24(){vfunc_called(this, "_ZN10S2014C4_nt3v24Ev");}
void  S2014C4_nt ::v25(){vfunc_called(this, "_ZN10S2014C4_nt3v25Ev");}
void  S2014C4_nt ::v26(){vfunc_called(this, "_ZN10S2014C4_nt3v26Ev");}
void  S2014C4_nt ::v27(){vfunc_called(this, "_ZN10S2014C4_nt3v27Ev");}
void  S2014C4_nt ::v28(){vfunc_called(this, "_ZN10S2014C4_nt3v28Ev");}
void  S2014C4_nt ::v29(){vfunc_called(this, "_ZN10S2014C4_nt3v29Ev");}
void  S2014C4_nt ::v30(){vfunc_called(this, "_ZN10S2014C4_nt3v30Ev");}
void  S2014C4_nt ::v31(){vfunc_called(this, "_ZN10S2014C4_nt3v31Ev");}
void  S2014C4_nt ::v32(){vfunc_called(this, "_ZN10S2014C4_nt3v32Ev");}
void  S2014C4_nt ::v33(){vfunc_called(this, "_ZN10S2014C4_nt3v33Ev");}
S2014C4_nt ::S2014C4_nt(){ note_ctor("S2014C4_nt", this);} // tgen

//skip512 S2014C4_nt

#else // __cplusplus

extern void _ZN10S2014C4_ntC1Ev();
extern void _ZN10S2014C4_ntD1Ev();
Name_Map name_map_S2014C4_nt[] = {
  NSPAIR(_ZN10S2014C4_ntC1Ev),
  NSPAIR(_ZN10S2014C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2014C4_nt[];
extern void _ZN10S2014C4_ntD1Ev();
extern void _ZN10S2014C4_ntD0Ev();
extern void _ZN10S2014C4_nt3v11Ev();
extern void _ZN10S2014C4_nt3v12Ev();
extern void _ZN10S2014C4_nt3v13Ev();
extern void _ZN10S2014C4_nt3v14Ev();
extern void _ZN10S2014C4_nt3v15Ev();
extern void _ZN10S2014C4_nt3v16Ev();
extern void _ZN10S2014C4_nt3v17Ev();
extern void _ZN10S2014C4_nt3v18Ev();
extern void _ZN10S2014C4_nt3v19Ev();
extern void _ZN10S2014C4_nt3v20Ev();
extern void _ZN10S2014C4_nt3v21Ev();
extern void _ZN10S2014C4_nt3v22Ev();
extern void _ZN10S2014C4_nt3v23Ev();
extern void _ZN10S2014C4_nt3v24Ev();
extern void _ZN10S2014C4_nt3v25Ev();
extern void _ZN10S2014C4_nt3v26Ev();
extern void _ZN10S2014C4_nt3v27Ev();
extern void _ZN10S2014C4_nt3v28Ev();
extern void _ZN10S2014C4_nt3v29Ev();
extern void _ZN10S2014C4_nt3v30Ev();
extern void _ZN10S2014C4_nt3v31Ev();
extern void _ZN10S2014C4_nt3v32Ev();
extern void _ZN10S2014C4_nt3v33Ev();
static  VTBL_ENTRY vtc_S2014C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2014C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2014C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v33Ev,
};
extern VTBL_ENTRY _ZTI10S2014C4_nt[];
VTBL_ENTRY *P__ZTI10S2014C4_nt = _ZTI10S2014C4_nt; 
extern  VTBL_ENTRY _ZTV10S2014C4_nt[];
Class_Descriptor cd_S2014C4_nt = {  "S2014C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2014C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2014C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2014C4_nt),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C14_nt  {
  __tsi64 s2014c14f0[2];
  void  mf2014c14(); // _ZN11S2014C14_nt9mf2014c14Ev
};
//SIG(-1 S2014C14_nt) C1{ m FL[2]}


void  S2014C14_nt ::mf2014c14(){}

//skip512 S2014C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C13_nt  {
  ::S2014C14_nt s2014c13f0;
  void  mf2014c13(); // _ZN11S2014C13_nt9mf2014c13Ev
};
//SIG(-1 S2014C13_nt) C1{ m FC2{ m FL[2]}}


void  S2014C13_nt ::mf2014c13(){}

//skip512 S2014C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C17_nt  {
  ::S2014C13_nt s2014c17f0;
  void  mf2014c17(); // _ZN11S2014C17_nt9mf2014c17Ev
};
//SIG(-1 S2014C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2014C17_nt ::mf2014c17(){}

//skip512 S2014C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C18_nt  {
  ::S2014C13_nt s2014c18f0;
  ::S2014C13_nt s2014c18f1;
  ::S2014C13_nt s2014c18f2;
  ::S2014C13_nt s2014c18f3;
  void  mf2014c18(); // _ZN11S2014C18_nt9mf2014c18Ev
};
//SIG(-1 S2014C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2014C18_nt ::mf2014c18(){}

//skip512 S2014C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C21  {
  void  mf2014c21(); // _ZN8S2014C219mf2014c21Ev
};
//SIG(-1 S2014C21) C1{ m}


void  S2014C21 ::mf2014c21(){}

static void Test_S2014C21()
{
  {
    init_simple_test("S2014C21");
    S2014C21 lv;
    check2(sizeof(lv), 1, "sizeof(S2014C21)");
    check2(__alignof__(lv), 1, "__alignof__(S2014C21)");
  }
}
static Arrange_To_Call_Me vS2014C21(Test_S2014C21, "S2014C21", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2014C21[];
VTBL_ENTRY *P__ZTI8S2014C21 = _ZTI8S2014C21; 
Class_Descriptor cd_S2014C21 = {  "S2014C21", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2014C21),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  S2014C20_nt  {
  void *s2014c20f0;
  int s2014c20f1;
  ::S2014C21 s2014c20f2;
  void  mf2014c20(); // _ZN11S2014C20_nt9mf2014c20Ev
};
//SIG(-1 S2014C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2014C20_nt ::mf2014c20(){}

//skip512 S2014C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C19_nt  {
  ::S2014C20_nt s2014c19f0;
  int s2014c19f1;
  void  mf2014c19(); // _ZN11S2014C19_nt9mf2014c19Ev
};
//SIG(-1 S2014C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2014C19_nt ::mf2014c19(){}

//skip512 S2014C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C24  {
  void  mf2014c24(); // _ZN8S2014C249mf2014c24Ev
};
//SIG(-1 S2014C24) C1{ m}


void  S2014C24 ::mf2014c24(){}

static void Test_S2014C24()
{
  {
    init_simple_test("S2014C24");
    S2014C24 lv;
    check2(sizeof(lv), 1, "sizeof(S2014C24)");
    check2(__alignof__(lv), 1, "__alignof__(S2014C24)");
  }
}
static Arrange_To_Call_Me vS2014C24(Test_S2014C24, "S2014C24", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2014C24[];
VTBL_ENTRY *P__ZTI8S2014C24 = _ZTI8S2014C24; 
Class_Descriptor cd_S2014C24 = {  "S2014C24", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2014C24),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  S2014C22  {
  void *s2014c22f0;
  int s2014c22f1;
  ::S2014C21 s2014c22f2;
  ::S2014C24 s2014c22f3;
  void  mf2014c22(); // _ZN8S2014C229mf2014c22Ev
};
//SIG(-1 S2014C22) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2014C22 ::mf2014c22(){}

static void Test_S2014C22()
{
  {
    init_simple_test("S2014C22");
    S2014C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2014C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2014C22)");
    check_field_offset(lv, s2014c22f0, 0, "S2014C22.s2014c22f0");
    check_field_offset(lv, s2014c22f1, ABISELECT(8,4), "S2014C22.s2014c22f1");
    check_field_offset(lv, s2014c22f2, ABISELECT(12,8), "S2014C22.s2014c22f2");
    check_field_offset(lv, s2014c22f3, ABISELECT(13,9), "S2014C22.s2014c22f3");
  }
}
static Arrange_To_Call_Me vS2014C22(Test_S2014C22, "S2014C22", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C28  {
  void  mf2014c28(); // _ZN8S2014C289mf2014c28Ev
};
//SIG(-1 S2014C28) C1{ m}


void  S2014C28 ::mf2014c28(){}

static void Test_S2014C28()
{
  {
    init_simple_test("S2014C28");
    S2014C28 lv;
    check2(sizeof(lv), 1, "sizeof(S2014C28)");
    check2(__alignof__(lv), 1, "__alignof__(S2014C28)");
  }
}
static Arrange_To_Call_Me vS2014C28(Test_S2014C28, "S2014C28", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2014C28[];
VTBL_ENTRY *P__ZTI8S2014C28 = _ZTI8S2014C28; 
Class_Descriptor cd_S2014C28 = {  "S2014C28", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2014C28),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  S2014C26  {
  void *s2014c26f0;
  int s2014c26f1;
  ::S2014C24 s2014c26f2;
  ::S2014C28 s2014c26f3;
  void  mf2014c26(); // _ZN8S2014C269mf2014c26Ev
};
//SIG(-1 S2014C26) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2014C26 ::mf2014c26(){}

static void Test_S2014C26()
{
  {
    init_simple_test("S2014C26");
    S2014C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2014C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2014C26)");
    check_field_offset(lv, s2014c26f0, 0, "S2014C26.s2014c26f0");
    check_field_offset(lv, s2014c26f1, ABISELECT(8,4), "S2014C26.s2014c26f1");
    check_field_offset(lv, s2014c26f2, ABISELECT(12,8), "S2014C26.s2014c26f2");
    check_field_offset(lv, s2014c26f3, ABISELECT(13,9), "S2014C26.s2014c26f3");
  }
}
static Arrange_To_Call_Me vS2014C26(Test_S2014C26, "S2014C26", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S2014C26 = {  "S2014C26", // 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  S2014C25  : S2014C26 {
};
//SIG(-1 S2014C25) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S2014C25()
{
  extern Class_Descriptor cd_S2014C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2014C25, buf);
    S2014C25 &lv = *(new (buf) S2014C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2014C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2014C25)");
    check_base_class_offset(lv, (S2014C26*), 0, "S2014C25");
    test_class_info(&lv, &cd_S2014C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2014C25(Test_S2014C25, "S2014C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2014C26;
static Base_Class bases_S2014C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2014C25 = {  "S2014C25", // class name
  bases_S2014C25, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C29_nt  {
  void *s2014c29f0;
  int s2014c29f1[2];
  ::S2014C28 s2014c29f2;
  void  mf2014c29(); // _ZN11S2014C29_nt9mf2014c29Ev
};
//SIG(-1 S2014C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2014C29_nt ::mf2014c29(){}

//skip512 S2014C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C38  {
  void  mf2014c38(); // _ZN8S2014C389mf2014c38Ev
};
//SIG(-1 S2014C38) C1{ m}


void  S2014C38 ::mf2014c38(){}

static void Test_S2014C38()
{
  {
    init_simple_test("S2014C38");
    S2014C38 lv;
    check2(sizeof(lv), 1, "sizeof(S2014C38)");
    check2(__alignof__(lv), 1, "__alignof__(S2014C38)");
  }
}
static Arrange_To_Call_Me vS2014C38(Test_S2014C38, "S2014C38", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2014C38[];
VTBL_ENTRY *P__ZTI8S2014C38 = _ZTI8S2014C38; 
Class_Descriptor cd_S2014C38 = {  "S2014C38", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2014C38),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  S2014C37  {
  void *s2014c37f0;
  int s2014c37f1[2];
  ::S2014C38 s2014c37f2;
  void  mf2014c37(); // _ZN8S2014C379mf2014c37Ev
};
//SIG(-1 S2014C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2014C37 ::mf2014c37(){}

static void Test_S2014C37()
{
  {
    init_simple_test("S2014C37");
    S2014C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2014C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2014C37)");
    check_field_offset(lv, s2014c37f0, 0, "S2014C37.s2014c37f0");
    check_field_offset(lv, s2014c37f1, ABISELECT(8,4), "S2014C37.s2014c37f1");
    check_field_offset(lv, s2014c37f2, ABISELECT(16,12), "S2014C37.s2014c37f2");
  }
}
static Arrange_To_Call_Me vS2014C37(Test_S2014C37, "S2014C37", ABISELECT(24,16));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2014C37[];
VTBL_ENTRY *P__ZTI8S2014C37 = _ZTI8S2014C37; 
Class_Descriptor cd_S2014C37 = {  "S2014C37", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S2014C37),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  S2014C3_nt  : S2014C4_nt {
  ::S2014C13_nt s2014c3f0;
  ::S2014C13_nt s2014c3f1;
  ::S2014C13_nt s2014c3f2;
  ::S2014C13_nt s2014c3f3;
  ::S2014C17_nt s2014c3f4;
  ::S2014C18_nt s2014c3f5;
  ::S2014C18_nt s2014c3f6;
  ::S2014C13_nt s2014c3f7;
  ::S2014C13_nt s2014c3f8;
  ::S2014C13_nt s2014c3f9;
  void *s2014c3f10;
  ::S2014C17_nt s2014c3f11;
  ::S2014C19_nt s2014c3f12;
  int s2014c3f13;
  void *s2014c3f14[7];
  ::S2014C22 s2014c3f15;
  int s2014c3f16:8;
  int s2014c3f17:8;
  int s2014c3f18:16;
  int s2014c3f19:16;
  int s2014c3f20:8;
  int s2014c3f21:8;
  int s2014c3f22:8;
  int s2014c3f23:32;
  int s2014c3f24:8;
  int s2014c3f25:4;
  int s2014c3f26:4;
  int s2014c3f27:4;
  int s2014c3f28:4;
  int s2014c3f29:4;
  int s2014c3f30:4;
  int s2014c3f31:4;
  int s2014c3f32:4;
  int s2014c3f33:4;
  int s2014c3f34:4;
  unsigned char s2014c3f35:1;
  unsigned char s2014c3f36:1;
  unsigned char s2014c3f37:1;
  unsigned char s2014c3f38:1;
  unsigned char s2014c3f39:1;
  unsigned char s2014c3f40:1;
  unsigned char s2014c3f41:1;
  unsigned char s2014c3f42:1;
  unsigned char s2014c3f43:1;
  unsigned char s2014c3f44:1;
  unsigned char s2014c3f45:1;
  unsigned char s2014c3f46:1;
  unsigned char s2014c3f47:1;
  unsigned char s2014c3f48:1;
  unsigned char s2014c3f49:1;
  unsigned char s2014c3f50:1;
  unsigned char s2014c3f51:1;
  unsigned char s2014c3f52:1;
  unsigned char s2014c3f53:1;
  unsigned char s2014c3f54:1;
  unsigned char s2014c3f55:1;
  unsigned char s2014c3f56:1;
  unsigned char s2014c3f57:1;
  unsigned char s2014c3f58:1;
  unsigned char s2014c3f59:1;
  unsigned char s2014c3f60:1;
  unsigned char s2014c3f61:1;
  unsigned char s2014c3f62:1;
  unsigned char s2014c3f63:1;
  unsigned char s2014c3f64:1;
  unsigned char s2014c3f65:1;
  unsigned char s2014c3f66:1;
  unsigned char s2014c3f67:1;
  unsigned char s2014c3f68:1;
  unsigned char s2014c3f69:1;
  unsigned char s2014c3f70:1;
  unsigned char s2014c3f71:1;
  unsigned char s2014c3f72:1;
  unsigned char s2014c3f73:1;
  unsigned char s2014c3f74:1;
  unsigned char s2014c3f75:1;
  int s2014c3f76[7];
  void *s2014c3f77[6];
  int s2014c3f78:8;
  int s2014c3f79:8;
  int s2014c3f80:8;
  int s2014c3f81:8;
  int s2014c3f82:8;
  int s2014c3f83:8;
  ::S2014C25 s2014c3f84;
  void *s2014c3f85[4];
  int s2014c3f86:8;
  int s2014c3f87:8;
  int s2014c3f88:8;
  int s2014c3f89:8;
  int s2014c3f90:8;
  int s2014c3f91:16;
  int s2014c3f92:16;
  int s2014c3f93:16;
  int s2014c3f94:4;
  int s2014c3f95:4;
  int s2014c3f96:4;
  int s2014c3f97:4;
  int s2014c3f98:4;
  int s2014c3f99:4;
  int s2014c3f100:4;
  int s2014c3f101:4;
  int s2014c3f102:4;
  int s2014c3f103:4;
  int s2014c3f104:4;
  int s2014c3f105:4;
  int s2014c3f106:8;
  int s2014c3f107:8;
  int s2014c3f108:8;
  void *s2014c3f109[7];
  ::S2014C29_nt s2014c3f110;
  void *s2014c3f111[2];
  int s2014c3f112:16;
  int s2014c3f113:16;
  ::S2014C25 s2014c3f114;
  ::S2014C29_nt s2014c3f115;
  ::S2014C37 s2014c3f116;
  void *s2014c3f117[2];
  int s2014c3f118:24;
  int s2014c3f119:8;
  void *s2014c3f120;
  virtual  ~S2014C3_nt(); // _ZN10S2014C3_ntD1Ev
  virtual void  v34(); // _ZN10S2014C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2014C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2014C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2014C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2014C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2014C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2014C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2014C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2014C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2014C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2014C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2014C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2014C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2014C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2014C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2014C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2014C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2014C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2014C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2014C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2014C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2014C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2014C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2014C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2014C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2014C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2014C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2014C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2014C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2014C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2014C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2014C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2014C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2014C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2014C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2014C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2014C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2014C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2014C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2014C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2014C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2014C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2014C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2014C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2014C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2014C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2014C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2014C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2014C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2014C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2014C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2014C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2014C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2014C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2014C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2014C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2014C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2014C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2014C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2014C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2014C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2014C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2014C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2014C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2014C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2014C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2014C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2014C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2014C3_nt4v102Ev
  virtual void  v103(); // _ZN10S2014C3_nt4v103Ev
  virtual void  v104(); // _ZN10S2014C3_nt4v104Ev
  virtual void  v105(); // _ZN10S2014C3_nt4v105Ev
  virtual void  v106(); // _ZN10S2014C3_nt4v106Ev
  virtual void  v107(); // _ZN10S2014C3_nt4v107Ev
  virtual void  v108(); // _ZN10S2014C3_nt4v108Ev
  virtual void  v109(); // _ZN10S2014C3_nt4v109Ev
  virtual void  v110(); // _ZN10S2014C3_nt4v110Ev
  virtual void  v111(); // _ZN10S2014C3_nt4v111Ev
  S2014C3_nt(); // tgen
};
//SIG(-1 S2014C3_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC6{ m FC7{ m FL[2]}} FC6 FC6 FC6 FC8{ m FC6} FC9{ m FC6 FC6 FC6 FC6} FC9 FC6 FC6 FC6 Fp FC8 FC10{ m FC11{ m Fp Fi FC12{ m}} Fi} Fi Fp[7] FC13{ m Fp Fi FC12 FC14{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC14 FC17{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC17} Fp[2] Fi:16 Fi:16 FC15 FC18 FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:24 Fi:8 Fp}


 S2014C3_nt ::~S2014C3_nt(){ note_dtor("S2014C3_nt", this);}
void  S2014C3_nt ::v34(){vfunc_called(this, "_ZN10S2014C3_nt3v34Ev");}
void  S2014C3_nt ::v35(){vfunc_called(this, "_ZN10S2014C3_nt3v35Ev");}
void  S2014C3_nt ::v36(){vfunc_called(this, "_ZN10S2014C3_nt3v36Ev");}
void  S2014C3_nt ::v37(){vfunc_called(this, "_ZN10S2014C3_nt3v37Ev");}
void  S2014C3_nt ::v38(){vfunc_called(this, "_ZN10S2014C3_nt3v38Ev");}
void  S2014C3_nt ::v39(){vfunc_called(this, "_ZN10S2014C3_nt3v39Ev");}
void  S2014C3_nt ::v40(){vfunc_called(this, "_ZN10S2014C3_nt3v40Ev");}
void  S2014C3_nt ::v41(){vfunc_called(this, "_ZN10S2014C3_nt3v41Ev");}
void  S2014C3_nt ::v42(){vfunc_called(this, "_ZN10S2014C3_nt3v42Ev");}
void  S2014C3_nt ::v43(){vfunc_called(this, "_ZN10S2014C3_nt3v43Ev");}
void  S2014C3_nt ::v44(){vfunc_called(this, "_ZN10S2014C3_nt3v44Ev");}
void  S2014C3_nt ::v45(){vfunc_called(this, "_ZN10S2014C3_nt3v45Ev");}
void  S2014C3_nt ::v46(){vfunc_called(this, "_ZN10S2014C3_nt3v46Ev");}
void  S2014C3_nt ::v47(){vfunc_called(this, "_ZN10S2014C3_nt3v47Ev");}
void  S2014C3_nt ::v48(){vfunc_called(this, "_ZN10S2014C3_nt3v48Ev");}
void  S2014C3_nt ::v49(){vfunc_called(this, "_ZN10S2014C3_nt3v49Ev");}
void  S2014C3_nt ::v50(){vfunc_called(this, "_ZN10S2014C3_nt3v50Ev");}
void  S2014C3_nt ::v51(){vfunc_called(this, "_ZN10S2014C3_nt3v51Ev");}
void  S2014C3_nt ::v52(){vfunc_called(this, "_ZN10S2014C3_nt3v52Ev");}
void  S2014C3_nt ::v53(){vfunc_called(this, "_ZN10S2014C3_nt3v53Ev");}
void  S2014C3_nt ::v54(){vfunc_called(this, "_ZN10S2014C3_nt3v54Ev");}
void  S2014C3_nt ::v55(){vfunc_called(this, "_ZN10S2014C3_nt3v55Ev");}
void  S2014C3_nt ::v56(){vfunc_called(this, "_ZN10S2014C3_nt3v56Ev");}
void  S2014C3_nt ::v57(){vfunc_called(this, "_ZN10S2014C3_nt3v57Ev");}
void  S2014C3_nt ::v58(){vfunc_called(this, "_ZN10S2014C3_nt3v58Ev");}
void  S2014C3_nt ::v59(){vfunc_called(this, "_ZN10S2014C3_nt3v59Ev");}
void  S2014C3_nt ::v60(){vfunc_called(this, "_ZN10S2014C3_nt3v60Ev");}
void  S2014C3_nt ::v61(){vfunc_called(this, "_ZN10S2014C3_nt3v61Ev");}
void  S2014C3_nt ::v62(){vfunc_called(this, "_ZN10S2014C3_nt3v62Ev");}
void  S2014C3_nt ::v63(){vfunc_called(this, "_ZN10S2014C3_nt3v63Ev");}
void  S2014C3_nt ::v64(){vfunc_called(this, "_ZN10S2014C3_nt3v64Ev");}
void  S2014C3_nt ::v65(){vfunc_called(this, "_ZN10S2014C3_nt3v65Ev");}
void  S2014C3_nt ::v66(){vfunc_called(this, "_ZN10S2014C3_nt3v66Ev");}
void  S2014C3_nt ::v67(){vfunc_called(this, "_ZN10S2014C3_nt3v67Ev");}
void  S2014C3_nt ::v68(){vfunc_called(this, "_ZN10S2014C3_nt3v68Ev");}
void  S2014C3_nt ::v69(){vfunc_called(this, "_ZN10S2014C3_nt3v69Ev");}
void  S2014C3_nt ::v70(){vfunc_called(this, "_ZN10S2014C3_nt3v70Ev");}
void  S2014C3_nt ::v71(){vfunc_called(this, "_ZN10S2014C3_nt3v71Ev");}
void  S2014C3_nt ::v72(){vfunc_called(this, "_ZN10S2014C3_nt3v72Ev");}
void  S2014C3_nt ::v73(){vfunc_called(this, "_ZN10S2014C3_nt3v73Ev");}
void  S2014C3_nt ::v74(){vfunc_called(this, "_ZN10S2014C3_nt3v74Ev");}
void  S2014C3_nt ::v75(){vfunc_called(this, "_ZN10S2014C3_nt3v75Ev");}
void  S2014C3_nt ::v76(){vfunc_called(this, "_ZN10S2014C3_nt3v76Ev");}
void  S2014C3_nt ::v77(){vfunc_called(this, "_ZN10S2014C3_nt3v77Ev");}
void  S2014C3_nt ::v78(){vfunc_called(this, "_ZN10S2014C3_nt3v78Ev");}
void  S2014C3_nt ::v79(){vfunc_called(this, "_ZN10S2014C3_nt3v79Ev");}
void  S2014C3_nt ::v80(){vfunc_called(this, "_ZN10S2014C3_nt3v80Ev");}
void  S2014C3_nt ::v81(){vfunc_called(this, "_ZN10S2014C3_nt3v81Ev");}
void  S2014C3_nt ::v82(){vfunc_called(this, "_ZN10S2014C3_nt3v82Ev");}
void  S2014C3_nt ::v83(){vfunc_called(this, "_ZN10S2014C3_nt3v83Ev");}
void  S2014C3_nt ::v84(){vfunc_called(this, "_ZN10S2014C3_nt3v84Ev");}
void  S2014C3_nt ::v85(){vfunc_called(this, "_ZN10S2014C3_nt3v85Ev");}
void  S2014C3_nt ::v86(){vfunc_called(this, "_ZN10S2014C3_nt3v86Ev");}
void  S2014C3_nt ::v87(){vfunc_called(this, "_ZN10S2014C3_nt3v87Ev");}
void  S2014C3_nt ::v88(){vfunc_called(this, "_ZN10S2014C3_nt3v88Ev");}
void  S2014C3_nt ::v89(){vfunc_called(this, "_ZN10S2014C3_nt3v89Ev");}
void  S2014C3_nt ::v90(){vfunc_called(this, "_ZN10S2014C3_nt3v90Ev");}
void  S2014C3_nt ::v91(){vfunc_called(this, "_ZN10S2014C3_nt3v91Ev");}
void  S2014C3_nt ::v92(){vfunc_called(this, "_ZN10S2014C3_nt3v92Ev");}
void  S2014C3_nt ::v93(){vfunc_called(this, "_ZN10S2014C3_nt3v93Ev");}
void  S2014C3_nt ::v94(){vfunc_called(this, "_ZN10S2014C3_nt3v94Ev");}
void  S2014C3_nt ::v95(){vfunc_called(this, "_ZN10S2014C3_nt3v95Ev");}
void  S2014C3_nt ::v96(){vfunc_called(this, "_ZN10S2014C3_nt3v96Ev");}
void  S2014C3_nt ::v97(){vfunc_called(this, "_ZN10S2014C3_nt3v97Ev");}
void  S2014C3_nt ::v98(){vfunc_called(this, "_ZN10S2014C3_nt3v98Ev");}
void  S2014C3_nt ::v99(){vfunc_called(this, "_ZN10S2014C3_nt3v99Ev");}
void  S2014C3_nt ::v100(){vfunc_called(this, "_ZN10S2014C3_nt4v100Ev");}
void  S2014C3_nt ::v101(){vfunc_called(this, "_ZN10S2014C3_nt4v101Ev");}
void  S2014C3_nt ::v102(){vfunc_called(this, "_ZN10S2014C3_nt4v102Ev");}
void  S2014C3_nt ::v103(){vfunc_called(this, "_ZN10S2014C3_nt4v103Ev");}
void  S2014C3_nt ::v104(){vfunc_called(this, "_ZN10S2014C3_nt4v104Ev");}
void  S2014C3_nt ::v105(){vfunc_called(this, "_ZN10S2014C3_nt4v105Ev");}
void  S2014C3_nt ::v106(){vfunc_called(this, "_ZN10S2014C3_nt4v106Ev");}
void  S2014C3_nt ::v107(){vfunc_called(this, "_ZN10S2014C3_nt4v107Ev");}
void  S2014C3_nt ::v108(){vfunc_called(this, "_ZN10S2014C3_nt4v108Ev");}
void  S2014C3_nt ::v109(){vfunc_called(this, "_ZN10S2014C3_nt4v109Ev");}
void  S2014C3_nt ::v110(){vfunc_called(this, "_ZN10S2014C3_nt4v110Ev");}
void  S2014C3_nt ::v111(){vfunc_called(this, "_ZN10S2014C3_nt4v111Ev");}
S2014C3_nt ::S2014C3_nt(){ note_ctor("S2014C3_nt", this);} // tgen

//skip512 S2014C3_nt

#else // __cplusplus

extern void _ZN10S2014C3_ntC1Ev();
extern void _ZN10S2014C3_ntD1Ev();
Name_Map name_map_S2014C3_nt[] = {
  NSPAIR(_ZN10S2014C3_ntC1Ev),
  NSPAIR(_ZN10S2014C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C4_nt;
extern VTBL_ENTRY _ZTI10S2014C4_nt[];
extern  VTBL_ENTRY _ZTV10S2014C4_nt[];
static Base_Class bases_S2014C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2014C3_nt[];
extern void _ZN10S2014C3_ntD1Ev();
extern void _ZN10S2014C3_ntD0Ev();
extern void _ZN10S2014C4_nt3v11Ev();
extern void _ZN10S2014C4_nt3v12Ev();
extern void _ZN10S2014C4_nt3v13Ev();
extern void _ZN10S2014C4_nt3v14Ev();
extern void _ZN10S2014C4_nt3v15Ev();
extern void _ZN10S2014C4_nt3v16Ev();
extern void _ZN10S2014C4_nt3v17Ev();
extern void _ZN10S2014C4_nt3v18Ev();
extern void _ZN10S2014C4_nt3v19Ev();
extern void _ZN10S2014C4_nt3v20Ev();
extern void _ZN10S2014C4_nt3v21Ev();
extern void _ZN10S2014C4_nt3v22Ev();
extern void _ZN10S2014C4_nt3v23Ev();
extern void _ZN10S2014C4_nt3v24Ev();
extern void _ZN10S2014C4_nt3v25Ev();
extern void _ZN10S2014C4_nt3v26Ev();
extern void _ZN10S2014C4_nt3v27Ev();
extern void _ZN10S2014C4_nt3v28Ev();
extern void _ZN10S2014C4_nt3v29Ev();
extern void _ZN10S2014C4_nt3v30Ev();
extern void _ZN10S2014C4_nt3v31Ev();
extern void _ZN10S2014C4_nt3v32Ev();
extern void _ZN10S2014C4_nt3v33Ev();
extern void _ZN10S2014C3_nt3v34Ev();
extern void _ZN10S2014C3_nt3v35Ev();
extern void _ZN10S2014C3_nt3v36Ev();
extern void _ZN10S2014C3_nt3v37Ev();
extern void _ZN10S2014C3_nt3v38Ev();
extern void _ZN10S2014C3_nt3v39Ev();
extern void _ZN10S2014C3_nt3v40Ev();
extern void _ZN10S2014C3_nt3v41Ev();
extern void _ZN10S2014C3_nt3v42Ev();
extern void _ZN10S2014C3_nt3v43Ev();
extern void _ZN10S2014C3_nt3v44Ev();
extern void _ZN10S2014C3_nt3v45Ev();
extern void _ZN10S2014C3_nt3v46Ev();
extern void _ZN10S2014C3_nt3v47Ev();
extern void _ZN10S2014C3_nt3v48Ev();
extern void _ZN10S2014C3_nt3v49Ev();
extern void _ZN10S2014C3_nt3v50Ev();
extern void _ZN10S2014C3_nt3v51Ev();
extern void _ZN10S2014C3_nt3v52Ev();
extern void _ZN10S2014C3_nt3v53Ev();
extern void _ZN10S2014C3_nt3v54Ev();
extern void _ZN10S2014C3_nt3v55Ev();
extern void _ZN10S2014C3_nt3v56Ev();
extern void _ZN10S2014C3_nt3v57Ev();
extern void _ZN10S2014C3_nt3v58Ev();
extern void _ZN10S2014C3_nt3v59Ev();
extern void _ZN10S2014C3_nt3v60Ev();
extern void _ZN10S2014C3_nt3v61Ev();
extern void _ZN10S2014C3_nt3v62Ev();
extern void _ZN10S2014C3_nt3v63Ev();
extern void _ZN10S2014C3_nt3v64Ev();
extern void _ZN10S2014C3_nt3v65Ev();
extern void _ZN10S2014C3_nt3v66Ev();
extern void _ZN10S2014C3_nt3v67Ev();
extern void _ZN10S2014C3_nt3v68Ev();
extern void _ZN10S2014C3_nt3v69Ev();
extern void _ZN10S2014C3_nt3v70Ev();
extern void _ZN10S2014C3_nt3v71Ev();
extern void _ZN10S2014C3_nt3v72Ev();
extern void _ZN10S2014C3_nt3v73Ev();
extern void _ZN10S2014C3_nt3v74Ev();
extern void _ZN10S2014C3_nt3v75Ev();
extern void _ZN10S2014C3_nt3v76Ev();
extern void _ZN10S2014C3_nt3v77Ev();
extern void _ZN10S2014C3_nt3v78Ev();
extern void _ZN10S2014C3_nt3v79Ev();
extern void _ZN10S2014C3_nt3v80Ev();
extern void _ZN10S2014C3_nt3v81Ev();
extern void _ZN10S2014C3_nt3v82Ev();
extern void _ZN10S2014C3_nt3v83Ev();
extern void _ZN10S2014C3_nt3v84Ev();
extern void _ZN10S2014C3_nt3v85Ev();
extern void _ZN10S2014C3_nt3v86Ev();
extern void _ZN10S2014C3_nt3v87Ev();
extern void _ZN10S2014C3_nt3v88Ev();
extern void _ZN10S2014C3_nt3v89Ev();
extern void _ZN10S2014C3_nt3v90Ev();
extern void _ZN10S2014C3_nt3v91Ev();
extern void _ZN10S2014C3_nt3v92Ev();
extern void _ZN10S2014C3_nt3v93Ev();
extern void _ZN10S2014C3_nt3v94Ev();
extern void _ZN10S2014C3_nt3v95Ev();
extern void _ZN10S2014C3_nt3v96Ev();
extern void _ZN10S2014C3_nt3v97Ev();
extern void _ZN10S2014C3_nt3v98Ev();
extern void _ZN10S2014C3_nt3v99Ev();
extern void _ZN10S2014C3_nt4v100Ev();
extern void _ZN10S2014C3_nt4v101Ev();
extern void _ZN10S2014C3_nt4v102Ev();
extern void _ZN10S2014C3_nt4v103Ev();
extern void _ZN10S2014C3_nt4v104Ev();
extern void _ZN10S2014C3_nt4v105Ev();
extern void _ZN10S2014C3_nt4v106Ev();
extern void _ZN10S2014C3_nt4v107Ev();
extern void _ZN10S2014C3_nt4v108Ev();
extern void _ZN10S2014C3_nt4v109Ev();
extern void _ZN10S2014C3_nt4v110Ev();
extern void _ZN10S2014C3_nt4v111Ev();
static  VTBL_ENTRY vtc_S2014C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2014C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2014C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v111Ev,
};
extern VTBL_ENTRY _ZTI10S2014C3_nt[];
VTBL_ENTRY *P__ZTI10S2014C3_nt = _ZTI10S2014C3_nt; 
extern  VTBL_ENTRY _ZTV10S2014C3_nt[];
Class_Descriptor cd_S2014C3_nt = {  "S2014C3_nt", // class name
  bases_S2014C3_nt, 1,
  &(vtc_S2014C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2014C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2014C3_nt),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C39  {
  int s2014c39f0[6];
  void  mf2014c39(); // _ZN8S2014C399mf2014c39Ev
};
//SIG(-1 S2014C39) C1{ m Fi[6]}


void  S2014C39 ::mf2014c39(){}

static void Test_S2014C39()
{
  {
    init_simple_test("S2014C39");
    S2014C39 lv;
    check2(sizeof(lv), 24, "sizeof(S2014C39)");
    check2(__alignof__(lv), 4, "__alignof__(S2014C39)");
    check_field_offset(lv, s2014c39f0, 0, "S2014C39.s2014c39f0");
  }
}
static Arrange_To_Call_Me vS2014C39(Test_S2014C39, "S2014C39", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C41_nt  {
  __tsi64 s2014c41f0;
  void  mf2014c41(); // _ZN11S2014C41_nt9mf2014c41Ev
};
//SIG(-1 S2014C41_nt) C1{ m FL}


void  S2014C41_nt ::mf2014c41(){}

//skip512 S2014C41_nt

#else // __cplusplus

Class_Descriptor cd_S2014C41_nt = {  "S2014C41_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S2014C40_nt  {
  ::S2014C41_nt s2014c40f0;
  void  mf2014c40(); // _ZN11S2014C40_nt9mf2014c40Ev
};
//SIG(-1 S2014C40_nt) C1{ m FC2{ m FL}}


void  S2014C40_nt ::mf2014c40(){}

//skip512 S2014C40_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2014C2  : S2014C3_nt {
  int s2014c2f0;
  ::S2014C39 s2014c2f1;
  ::S2014C40_nt s2014c2f2;
  ::S2014C40_nt s2014c2f3;
  int s2014c2f4:16;
  int s2014c2f5:16;
  int s2014c2f6:16;
  unsigned char s2014c2f7:1;
  unsigned char s2014c2f8:1;
  virtual  ~S2014C2(); // _ZN7S2014C2D1Ev
  virtual void  v112(); // _ZN7S2014C24v112Ev
  virtual void  v113(); // _ZN7S2014C24v113Ev
  virtual void  v114(); // _ZN7S2014C24v114Ev
  virtual void  v115(); // _ZN7S2014C24v115Ev
  virtual void  v116(); // _ZN7S2014C24v116Ev
  virtual void  v117(); // _ZN7S2014C24v117Ev
  virtual void  v118(); // _ZN7S2014C24v118Ev
  virtual void  v119(); // _ZN7S2014C24v119Ev
  virtual void  v120(); // _ZN7S2014C24v120Ev
  S2014C2(); // tgen
};
//SIG(-1 S2014C2) C1{ BC2{ BC3{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC4 Fi} vd v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 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 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} Fi Fp[7] FC14{ m Fp Fi FC13 FC15{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC15 FC18{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC18} Fp[2] Fi:16 Fi:16 FC16 FC19 FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi FC22{ m Fi[6]} FC23{ m FC24{ m FL}} FC23 Fi:16 Fi:16 Fi:16 Fc:1 Fc:1}


 S2014C2 ::~S2014C2(){ note_dtor("S2014C2", this);}
void  S2014C2 ::v112(){vfunc_called(this, "_ZN7S2014C24v112Ev");}
void  S2014C2 ::v113(){vfunc_called(this, "_ZN7S2014C24v113Ev");}
void  S2014C2 ::v114(){vfunc_called(this, "_ZN7S2014C24v114Ev");}
void  S2014C2 ::v115(){vfunc_called(this, "_ZN7S2014C24v115Ev");}
void  S2014C2 ::v116(){vfunc_called(this, "_ZN7S2014C24v116Ev");}
void  S2014C2 ::v117(){vfunc_called(this, "_ZN7S2014C24v117Ev");}
void  S2014C2 ::v118(){vfunc_called(this, "_ZN7S2014C24v118Ev");}
void  S2014C2 ::v119(){vfunc_called(this, "_ZN7S2014C24v119Ev");}
void  S2014C2 ::v120(){vfunc_called(this, "_ZN7S2014C24v120Ev");}
S2014C2 ::S2014C2(){ note_ctor("S2014C2", this);} // tgen

static void Test_S2014C2()
{
  extern Class_Descriptor cd_S2014C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(112,172)];
    init_test(&cd_S2014C2, buf);
    S2014C2 *dp, &lv = *(dp=new (buf) S2014C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(888,684), "sizeof(S2014C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2014C2)");
    check_base_class_offset(lv, (S2014C4_nt*)(S2014C3_nt*), 0, "S2014C2");
    check_base_class_offset(lv, (S2014C3_nt*), 0, "S2014C2");
    check_field_offset(lv, s2014c2f0, ABISELECT(832,632), "S2014C2.s2014c2f0");
    check_field_offset(lv, s2014c2f1, ABISELECT(836,636), "S2014C2.s2014c2f1");
    check_field_offset(lv, s2014c2f2, ABISELECT(864,660), "S2014C2.s2014c2f2");
    check_field_offset(lv, s2014c2f3, ABISELECT(872,668), "S2014C2.s2014c2f3");
    set_bf_and_test(lv, s2014c2f4, ABISELECT(880,676), 0, 16, 1, "S2014C2");
    set_bf_and_test(lv, s2014c2f4, ABISELECT(880,676), 0, 16, hide_sll(1LL<<15), "S2014C2");
    set_bf_and_test(lv, s2014c2f5, ABISELECT(882,678), 0, 16, 1, "S2014C2");
    set_bf_and_test(lv, s2014c2f5, ABISELECT(882,678), 0, 16, hide_sll(1LL<<15), "S2014C2");
    set_bf_and_test(lv, s2014c2f6, ABISELECT(884,680), 0, 16, 1, "S2014C2");
    set_bf_and_test(lv, s2014c2f6, ABISELECT(884,680), 0, 16, hide_sll(1LL<<15), "S2014C2");
    set_bf_and_test(lv, s2014c2f7, ABISELECT(886,682), 0, 1, 1, "S2014C2");
    set_bf_and_test(lv, s2014c2f8, ABISELECT(886,682), 1, 1, 1, "S2014C2");
    test_class_info(&lv, &cd_S2014C2);
    dp->~S2014C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2014C2(Test_S2014C2, "S2014C2", ABISELECT(888,684));

#else // __cplusplus

extern void _ZN7S2014C2C1Ev();
extern void _ZN7S2014C2D1Ev();
Name_Map name_map_S2014C2[] = {
  NSPAIR(_ZN7S2014C2C1Ev),
  NSPAIR(_ZN7S2014C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C4_nt;
extern VTBL_ENTRY _ZTI10S2014C4_nt[];
extern  VTBL_ENTRY _ZTV10S2014C4_nt[];
extern Class_Descriptor cd_S2014C3_nt;
extern VTBL_ENTRY _ZTI10S2014C3_nt[];
extern  VTBL_ENTRY _ZTV10S2014C3_nt[];
static Base_Class bases_S2014C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2014C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2014C2[];
extern void _ZN7S2014C2D1Ev();
extern void _ZN7S2014C2D0Ev();
extern void _ZN10S2014C4_nt3v11Ev();
extern void _ZN10S2014C4_nt3v12Ev();
extern void _ZN10S2014C4_nt3v13Ev();
extern void _ZN10S2014C4_nt3v14Ev();
extern void _ZN10S2014C4_nt3v15Ev();
extern void _ZN10S2014C4_nt3v16Ev();
extern void _ZN10S2014C4_nt3v17Ev();
extern void _ZN10S2014C4_nt3v18Ev();
extern void _ZN10S2014C4_nt3v19Ev();
extern void _ZN10S2014C4_nt3v20Ev();
extern void _ZN10S2014C4_nt3v21Ev();
extern void _ZN10S2014C4_nt3v22Ev();
extern void _ZN10S2014C4_nt3v23Ev();
extern void _ZN10S2014C4_nt3v24Ev();
extern void _ZN10S2014C4_nt3v25Ev();
extern void _ZN10S2014C4_nt3v26Ev();
extern void _ZN10S2014C4_nt3v27Ev();
extern void _ZN10S2014C4_nt3v28Ev();
extern void _ZN10S2014C4_nt3v29Ev();
extern void _ZN10S2014C4_nt3v30Ev();
extern void _ZN10S2014C4_nt3v31Ev();
extern void _ZN10S2014C4_nt3v32Ev();
extern void _ZN10S2014C4_nt3v33Ev();
extern void _ZN10S2014C3_nt3v34Ev();
extern void _ZN10S2014C3_nt3v35Ev();
extern void _ZN10S2014C3_nt3v36Ev();
extern void _ZN10S2014C3_nt3v37Ev();
extern void _ZN10S2014C3_nt3v38Ev();
extern void _ZN10S2014C3_nt3v39Ev();
extern void _ZN10S2014C3_nt3v40Ev();
extern void _ZN10S2014C3_nt3v41Ev();
extern void _ZN10S2014C3_nt3v42Ev();
extern void _ZN10S2014C3_nt3v43Ev();
extern void _ZN10S2014C3_nt3v44Ev();
extern void _ZN10S2014C3_nt3v45Ev();
extern void _ZN10S2014C3_nt3v46Ev();
extern void _ZN10S2014C3_nt3v47Ev();
extern void _ZN10S2014C3_nt3v48Ev();
extern void _ZN10S2014C3_nt3v49Ev();
extern void _ZN10S2014C3_nt3v50Ev();
extern void _ZN10S2014C3_nt3v51Ev();
extern void _ZN10S2014C3_nt3v52Ev();
extern void _ZN10S2014C3_nt3v53Ev();
extern void _ZN10S2014C3_nt3v54Ev();
extern void _ZN10S2014C3_nt3v55Ev();
extern void _ZN10S2014C3_nt3v56Ev();
extern void _ZN10S2014C3_nt3v57Ev();
extern void _ZN10S2014C3_nt3v58Ev();
extern void _ZN10S2014C3_nt3v59Ev();
extern void _ZN10S2014C3_nt3v60Ev();
extern void _ZN10S2014C3_nt3v61Ev();
extern void _ZN10S2014C3_nt3v62Ev();
extern void _ZN10S2014C3_nt3v63Ev();
extern void _ZN10S2014C3_nt3v64Ev();
extern void _ZN10S2014C3_nt3v65Ev();
extern void _ZN10S2014C3_nt3v66Ev();
extern void _ZN10S2014C3_nt3v67Ev();
extern void _ZN10S2014C3_nt3v68Ev();
extern void _ZN10S2014C3_nt3v69Ev();
extern void _ZN10S2014C3_nt3v70Ev();
extern void _ZN10S2014C3_nt3v71Ev();
extern void _ZN10S2014C3_nt3v72Ev();
extern void _ZN10S2014C3_nt3v73Ev();
extern void _ZN10S2014C3_nt3v74Ev();
extern void _ZN10S2014C3_nt3v75Ev();
extern void _ZN10S2014C3_nt3v76Ev();
extern void _ZN10S2014C3_nt3v77Ev();
extern void _ZN10S2014C3_nt3v78Ev();
extern void _ZN10S2014C3_nt3v79Ev();
extern void _ZN10S2014C3_nt3v80Ev();
extern void _ZN10S2014C3_nt3v81Ev();
extern void _ZN10S2014C3_nt3v82Ev();
extern void _ZN10S2014C3_nt3v83Ev();
extern void _ZN10S2014C3_nt3v84Ev();
extern void _ZN10S2014C3_nt3v85Ev();
extern void _ZN10S2014C3_nt3v86Ev();
extern void _ZN10S2014C3_nt3v87Ev();
extern void _ZN10S2014C3_nt3v88Ev();
extern void _ZN10S2014C3_nt3v89Ev();
extern void _ZN10S2014C3_nt3v90Ev();
extern void _ZN10S2014C3_nt3v91Ev();
extern void _ZN10S2014C3_nt3v92Ev();
extern void _ZN10S2014C3_nt3v93Ev();
extern void _ZN10S2014C3_nt3v94Ev();
extern void _ZN10S2014C3_nt3v95Ev();
extern void _ZN10S2014C3_nt3v96Ev();
extern void _ZN10S2014C3_nt3v97Ev();
extern void _ZN10S2014C3_nt3v98Ev();
extern void _ZN10S2014C3_nt3v99Ev();
extern void _ZN10S2014C3_nt4v100Ev();
extern void _ZN10S2014C3_nt4v101Ev();
extern void _ZN10S2014C3_nt4v102Ev();
extern void _ZN10S2014C3_nt4v103Ev();
extern void _ZN10S2014C3_nt4v104Ev();
extern void _ZN10S2014C3_nt4v105Ev();
extern void _ZN10S2014C3_nt4v106Ev();
extern void _ZN10S2014C3_nt4v107Ev();
extern void _ZN10S2014C3_nt4v108Ev();
extern void _ZN10S2014C3_nt4v109Ev();
extern void _ZN10S2014C3_nt4v110Ev();
extern void _ZN10S2014C3_nt4v111Ev();
extern void _ZN7S2014C24v112Ev();
extern void _ZN7S2014C24v113Ev();
extern void _ZN7S2014C24v114Ev();
extern void _ZN7S2014C24v115Ev();
extern void _ZN7S2014C24v116Ev();
extern void _ZN7S2014C24v117Ev();
extern void _ZN7S2014C24v118Ev();
extern void _ZN7S2014C24v119Ev();
extern void _ZN7S2014C24v120Ev();
static  VTBL_ENTRY vtc_S2014C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2014C2[0]),
  (VTBL_ENTRY)&_ZN7S2014C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2014C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v112Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v113Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v114Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v115Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v116Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v117Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v118Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v119Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v120Ev,
};
extern VTBL_ENTRY _ZTI7S2014C2[];
extern  VTBL_ENTRY _ZTV7S2014C2[];
Class_Descriptor cd_S2014C2 = {  "S2014C2", // class name
  bases_S2014C2, 2,
  &(vtc_S2014C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(888,684), // object size
  NSPAIRA(_ZTI7S2014C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2014C2),114, //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  S2014C1  : S2014C2 {
  int s2014c1f0[2];
  char s2014c1f1;
  ::S2014C40_nt s2014c1f2;
  ::S2014C40_nt s2014c1f3;
  ::S2014C40_nt s2014c1f4;
  ::S2014C40_nt s2014c1f5;
  ::S2014C40_nt s2014c1f6;
  ::S2014C40_nt s2014c1f7;
  void *s2014c1f8[2];
  virtual  ~S2014C1(); // _ZN7S2014C1D1Ev
  virtual void  v1(); // _ZN7S2014C12v1Ev
  virtual void  v2(); // _ZN7S2014C12v2Ev
  virtual void  v3(); // _ZN7S2014C12v3Ev
  virtual void  v4(); // _ZN7S2014C12v4Ev
  virtual void  v5(); // _ZN7S2014C12v5Ev
  virtual void  v6(); // _ZN7S2014C12v6Ev
  virtual void  v7(); // _ZN7S2014C12v7Ev
  virtual void  v8(); // _ZN7S2014C12v8Ev
  virtual void  v9(); // _ZN7S2014C12v9Ev
  virtual void  v10(); // _ZN7S2014C13v10Ev
  S2014C1(); // tgen
};
//SIG(1 S2014C1) C1{ BC2{ BC3{ BC4{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC5 Fi} vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC14{ m}} Fi} Fi Fp[7] FC15{ m Fp Fi FC14 FC16{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC17{ BC18{ m Fp Fi FC16 FC19{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC19} Fp[2] Fi:16 Fi:16 FC17 FC20 FC21{ m Fp Fi[2] FC22{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi FC23{ m Fi[6]} FC24{ m FC25{ m FL}} FC24 Fi:16 Fi:16 Fi:16 Fc:1 Fc:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] Fc FC24 FC24 FC24 FC24 FC24 FC24 Fp[2]}


 S2014C1 ::~S2014C1(){ note_dtor("S2014C1", this);}
void  S2014C1 ::v1(){vfunc_called(this, "_ZN7S2014C12v1Ev");}
void  S2014C1 ::v2(){vfunc_called(this, "_ZN7S2014C12v2Ev");}
void  S2014C1 ::v3(){vfunc_called(this, "_ZN7S2014C12v3Ev");}
void  S2014C1 ::v4(){vfunc_called(this, "_ZN7S2014C12v4Ev");}
void  S2014C1 ::v5(){vfunc_called(this, "_ZN7S2014C12v5Ev");}
void  S2014C1 ::v6(){vfunc_called(this, "_ZN7S2014C12v6Ev");}
void  S2014C1 ::v7(){vfunc_called(this, "_ZN7S2014C12v7Ev");}
void  S2014C1 ::v8(){vfunc_called(this, "_ZN7S2014C12v8Ev");}
void  S2014C1 ::v9(){vfunc_called(this, "_ZN7S2014C12v9Ev");}
void  S2014C1 ::v10(){vfunc_called(this, "_ZN7S2014C13v10Ev");}
S2014C1 ::S2014C1(){ note_ctor("S2014C1", this);} // tgen

static void Test_S2014C1()
{
  extern Class_Descriptor cd_S2014C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(122,189)];
    init_test(&cd_S2014C1, buf);
    S2014C1 *dp, &lv = *(dp=new (buf) S2014C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(968,752), "sizeof(S2014C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2014C1)");
    check_base_class_offset(lv, (S2014C4_nt*)(S2014C3_nt*)(S2014C2*), 0, "S2014C1");
    check_base_class_offset(lv, (S2014C3_nt*)(S2014C2*), 0, "S2014C1");
    check_base_class_offset(lv, (S2014C2*), 0, "S2014C1");
    check_field_offset(lv, s2014c1f0, ABISELECT(888,684), "S2014C1.s2014c1f0");
    check_field_offset(lv, s2014c1f1, ABISELECT(896,692), "S2014C1.s2014c1f1");
    check_field_offset(lv, s2014c1f2, ABISELECT(904,696), "S2014C1.s2014c1f2");
    check_field_offset(lv, s2014c1f3, ABISELECT(912,704), "S2014C1.s2014c1f3");
    check_field_offset(lv, s2014c1f4, ABISELECT(920,712), "S2014C1.s2014c1f4");
    check_field_offset(lv, s2014c1f5, ABISELECT(928,720), "S2014C1.s2014c1f5");
    check_field_offset(lv, s2014c1f6, ABISELECT(936,728), "S2014C1.s2014c1f6");
    check_field_offset(lv, s2014c1f7, ABISELECT(944,736), "S2014C1.s2014c1f7");
    check_field_offset(lv, s2014c1f8, ABISELECT(952,744), "S2014C1.s2014c1f8");
    test_class_info(&lv, &cd_S2014C1);
    dp->~S2014C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2014C1(Test_S2014C1, "S2014C1", ABISELECT(968,752));

#else // __cplusplus

extern void _ZN7S2014C1C1Ev();
extern void _ZN7S2014C1D1Ev();
Name_Map name_map_S2014C1[] = {
  NSPAIR(_ZN7S2014C1C1Ev),
  NSPAIR(_ZN7S2014C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C4_nt;
extern VTBL_ENTRY _ZTI10S2014C4_nt[];
extern  VTBL_ENTRY _ZTV10S2014C4_nt[];
extern Class_Descriptor cd_S2014C3_nt;
extern VTBL_ENTRY _ZTI10S2014C3_nt[];
extern  VTBL_ENTRY _ZTV10S2014C3_nt[];
extern Class_Descriptor cd_S2014C2;
extern VTBL_ENTRY _ZTI7S2014C2[];
extern  VTBL_ENTRY _ZTV7S2014C2[];
static Base_Class bases_S2014C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2014C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2014C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2014C1[];
extern void _ZN7S2014C1D1Ev();
extern void _ZN7S2014C1D0Ev();
extern void _ZN10S2014C4_nt3v11Ev();
extern void _ZN10S2014C4_nt3v12Ev();
extern void _ZN10S2014C4_nt3v13Ev();
extern void _ZN10S2014C4_nt3v14Ev();
extern void _ZN10S2014C4_nt3v15Ev();
extern void _ZN10S2014C4_nt3v16Ev();
extern void _ZN10S2014C4_nt3v17Ev();
extern void _ZN10S2014C4_nt3v18Ev();
extern void _ZN10S2014C4_nt3v19Ev();
extern void _ZN10S2014C4_nt3v20Ev();
extern void _ZN10S2014C4_nt3v21Ev();
extern void _ZN10S2014C4_nt3v22Ev();
extern void _ZN10S2014C4_nt3v23Ev();
extern void _ZN10S2014C4_nt3v24Ev();
extern void _ZN10S2014C4_nt3v25Ev();
extern void _ZN10S2014C4_nt3v26Ev();
extern void _ZN10S2014C4_nt3v27Ev();
extern void _ZN10S2014C4_nt3v28Ev();
extern void _ZN10S2014C4_nt3v29Ev();
extern void _ZN10S2014C4_nt3v30Ev();
extern void _ZN10S2014C4_nt3v31Ev();
extern void _ZN10S2014C4_nt3v32Ev();
extern void _ZN10S2014C4_nt3v33Ev();
extern void _ZN10S2014C3_nt3v34Ev();
extern void _ZN10S2014C3_nt3v35Ev();
extern void _ZN10S2014C3_nt3v36Ev();
extern void _ZN10S2014C3_nt3v37Ev();
extern void _ZN10S2014C3_nt3v38Ev();
extern void _ZN10S2014C3_nt3v39Ev();
extern void _ZN10S2014C3_nt3v40Ev();
extern void _ZN10S2014C3_nt3v41Ev();
extern void _ZN10S2014C3_nt3v42Ev();
extern void _ZN10S2014C3_nt3v43Ev();
extern void _ZN10S2014C3_nt3v44Ev();
extern void _ZN10S2014C3_nt3v45Ev();
extern void _ZN10S2014C3_nt3v46Ev();
extern void _ZN10S2014C3_nt3v47Ev();
extern void _ZN10S2014C3_nt3v48Ev();
extern void _ZN10S2014C3_nt3v49Ev();
extern void _ZN10S2014C3_nt3v50Ev();
extern void _ZN10S2014C3_nt3v51Ev();
extern void _ZN10S2014C3_nt3v52Ev();
extern void _ZN10S2014C3_nt3v53Ev();
extern void _ZN10S2014C3_nt3v54Ev();
extern void _ZN10S2014C3_nt3v55Ev();
extern void _ZN10S2014C3_nt3v56Ev();
extern void _ZN10S2014C3_nt3v57Ev();
extern void _ZN10S2014C3_nt3v58Ev();
extern void _ZN10S2014C3_nt3v59Ev();
extern void _ZN10S2014C3_nt3v60Ev();
extern void _ZN10S2014C3_nt3v61Ev();
extern void _ZN10S2014C3_nt3v62Ev();
extern void _ZN10S2014C3_nt3v63Ev();
extern void _ZN10S2014C3_nt3v64Ev();
extern void _ZN10S2014C3_nt3v65Ev();
extern void _ZN10S2014C3_nt3v66Ev();
extern void _ZN10S2014C3_nt3v67Ev();
extern void _ZN10S2014C3_nt3v68Ev();
extern void _ZN10S2014C3_nt3v69Ev();
extern void _ZN10S2014C3_nt3v70Ev();
extern void _ZN10S2014C3_nt3v71Ev();
extern void _ZN10S2014C3_nt3v72Ev();
extern void _ZN10S2014C3_nt3v73Ev();
extern void _ZN10S2014C3_nt3v74Ev();
extern void _ZN10S2014C3_nt3v75Ev();
extern void _ZN10S2014C3_nt3v76Ev();
extern void _ZN10S2014C3_nt3v77Ev();
extern void _ZN10S2014C3_nt3v78Ev();
extern void _ZN10S2014C3_nt3v79Ev();
extern void _ZN10S2014C3_nt3v80Ev();
extern void _ZN10S2014C3_nt3v81Ev();
extern void _ZN10S2014C3_nt3v82Ev();
extern void _ZN10S2014C3_nt3v83Ev();
extern void _ZN10S2014C3_nt3v84Ev();
extern void _ZN10S2014C3_nt3v85Ev();
extern void _ZN10S2014C3_nt3v86Ev();
extern void _ZN10S2014C3_nt3v87Ev();
extern void _ZN10S2014C3_nt3v88Ev();
extern void _ZN10S2014C3_nt3v89Ev();
extern void _ZN10S2014C3_nt3v90Ev();
extern void _ZN10S2014C3_nt3v91Ev();
extern void _ZN10S2014C3_nt3v92Ev();
extern void _ZN10S2014C3_nt3v93Ev();
extern void _ZN10S2014C3_nt3v94Ev();
extern void _ZN10S2014C3_nt3v95Ev();
extern void _ZN10S2014C3_nt3v96Ev();
extern void _ZN10S2014C3_nt3v97Ev();
extern void _ZN10S2014C3_nt3v98Ev();
extern void _ZN10S2014C3_nt3v99Ev();
extern void _ZN10S2014C3_nt4v100Ev();
extern void _ZN10S2014C3_nt4v101Ev();
extern void _ZN10S2014C3_nt4v102Ev();
extern void _ZN10S2014C3_nt4v103Ev();
extern void _ZN10S2014C3_nt4v104Ev();
extern void _ZN10S2014C3_nt4v105Ev();
extern void _ZN10S2014C3_nt4v106Ev();
extern void _ZN10S2014C3_nt4v107Ev();
extern void _ZN10S2014C3_nt4v108Ev();
extern void _ZN10S2014C3_nt4v109Ev();
extern void _ZN10S2014C3_nt4v110Ev();
extern void _ZN10S2014C3_nt4v111Ev();
extern void _ZN7S2014C24v112Ev();
extern void _ZN7S2014C24v113Ev();
extern void _ZN7S2014C24v114Ev();
extern void _ZN7S2014C24v115Ev();
extern void _ZN7S2014C24v116Ev();
extern void _ZN7S2014C24v117Ev();
extern void _ZN7S2014C24v118Ev();
extern void _ZN7S2014C24v119Ev();
extern void _ZN7S2014C24v120Ev();
extern void _ZN7S2014C12v1Ev();
extern void _ZN7S2014C12v2Ev();
extern void _ZN7S2014C12v3Ev();
extern void _ZN7S2014C12v4Ev();
extern void _ZN7S2014C12v5Ev();
extern void _ZN7S2014C12v6Ev();
extern void _ZN7S2014C12v7Ev();
extern void _ZN7S2014C12v8Ev();
extern void _ZN7S2014C12v9Ev();
extern void _ZN7S2014C13v10Ev();
static  VTBL_ENTRY vtc_S2014C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2014C1[0]),
  (VTBL_ENTRY)&_ZN7S2014C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2014C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2014C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2014C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v112Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v113Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v114Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v115Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v116Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v117Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v118Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v119Ev,
  (VTBL_ENTRY)&_ZN7S2014C24v120Ev,
  (VTBL_ENTRY)&_ZN7S2014C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2014C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2014C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2014C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2014C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2014C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2014C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2014C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2014C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2014C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S2014C1[];
extern  VTBL_ENTRY _ZTV7S2014C1[];
Class_Descriptor cd_S2014C1 = {  "S2014C1", // class name
  bases_S2014C1, 3,
  &(vtc_S2014C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(968,752), // object size
  NSPAIRA(_ZTI7S2014C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2014C1),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C5  {
  short s19762c5f0:6;
  long s19762c5f1;
  short s19762c5f2:4;
  __tsi64 s19762c5f3[13];
  void *s19762c5f4;
  virtual void  v3(); // _ZN8S19762C52v3Ev
  ~S19762C5(); // tgen
  S19762C5(); // tgen
};
//SIG(-1 S19762C5) C1{ v1 Fs:6 Fl Fs:4 FL[13] Fp}


void  S19762C5 ::v3(){vfunc_called(this, "_ZN8S19762C52v3Ev");}
S19762C5 ::~S19762C5(){ note_dtor("S19762C5", this);} // tgen
S19762C5 ::S19762C5(){ note_ctor("S19762C5", this);} // tgen

static void Test_S19762C5()
{
  extern Class_Descriptor cd_S19762C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,32)];
    init_test(&cd_S19762C5, buf);
    S19762C5 *dp, &lv = *(dp=new (buf) S19762C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,124), "sizeof(S19762C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19762C5)");
    set_bf_and_test(lv, s19762c5f0, ABISELECT(8,4), 0, 6, 1, "S19762C5");
    set_bf_and_test(lv, s19762c5f0, ABISELECT(8,4), 0, 6, hide_sll(1LL<<5), "S19762C5");
    check_field_offset(lv, s19762c5f1, ABISELECT(16,8), "S19762C5.s19762c5f1");
    set_bf_and_test(lv, s19762c5f2, ABISELECT(24,12), 0, 4, 1, "S19762C5");
    set_bf_and_test(lv, s19762c5f2, ABISELECT(24,12), 0, 4, hide_sll(1LL<<3), "S19762C5");
    check_field_offset(lv, s19762c5f3, ABISELECT(32,16), "S19762C5.s19762c5f3");
    check_field_offset(lv, s19762c5f4, ABISELECT(136,120), "S19762C5.s19762c5f4");
    test_class_info(&lv, &cd_S19762C5);
    dp->~S19762C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C5(Test_S19762C5, "S19762C5", ABISELECT(144,124));

#else // __cplusplus

extern void _ZN8S19762C5C1Ev();
extern void _ZN8S19762C5D1Ev();
Name_Map name_map_S19762C5[] = {
  NSPAIR(_ZN8S19762C5C1Ev),
  NSPAIR(_ZN8S19762C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19762C5[];
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY vtc_S19762C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C5[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
Class_Descriptor cd_S19762C5 = {  "S19762C5", // class name
  0,0,//no base classes
  &(vtc_S19762C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,124), // object size
  NSPAIRA(_ZTI8S19762C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19762C5),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  S19762C4  {
  int s19762c4f0[2];
  __tsi64 s19762c4f1[2];
  ::S19762C5 s19762c4f2[3];
  virtual void  v4(); // _ZN8S19762C42v4Ev
  virtual void  v5(); // _ZN8S19762C42v5Ev
  virtual void  v6(); // _ZN8S19762C42v6Ev
  ~S19762C4(); // tgen
  S19762C4(); // tgen
};
//SIG(-1 S19762C4) C1{ v1 v2 v3 Fi[2] FL[2] FC2{ v4 Fs:6 Fl Fs:4 FL[13] Fp}[3]}


void  S19762C4 ::v4(){vfunc_called(this, "_ZN8S19762C42v4Ev");}
void  S19762C4 ::v5(){vfunc_called(this, "_ZN8S19762C42v5Ev");}
void  S19762C4 ::v6(){vfunc_called(this, "_ZN8S19762C42v6Ev");}
S19762C4 ::~S19762C4(){ note_dtor("S19762C4", this);} // tgen
S19762C4 ::S19762C4(){ note_ctor("S19762C4", this);} // tgen

static void Test_S19762C4()
{
  extern Class_Descriptor cd_S19762C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(59,101)];
    init_test(&cd_S19762C4, buf);
    S19762C4 *dp, &lv = *(dp=new (buf) S19762C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,400), "sizeof(S19762C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19762C4)");
    check_field_offset(lv, s19762c4f0, ABISELECT(8,4), "S19762C4.s19762c4f0");
    check_field_offset(lv, s19762c4f1, ABISELECT(16,12), "S19762C4.s19762c4f1");
    check_field_offset(lv, s19762c4f2, ABISELECT(32,28), "S19762C4.s19762c4f2");
    test_class_info(&lv, &cd_S19762C4);
    dp->~S19762C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C4(Test_S19762C4, "S19762C4", ABISELECT(464,400));

#else // __cplusplus

extern void _ZN8S19762C4C1Ev();
extern void _ZN8S19762C4D1Ev();
Name_Map name_map_S19762C4[] = {
  NSPAIR(_ZN8S19762C4C1Ev),
  NSPAIR(_ZN8S19762C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19762C4[];
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY vtc_S19762C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C4[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
Class_Descriptor cd_S19762C4 = {  "S19762C4", // class name
  0,0,//no base classes
  &(vtc_S19762C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,400), // object size
  NSPAIRA(_ZTI8S19762C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19762C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C8  : virtual S19762C5 {
  void *s19762c8f0;
  ::S19762C5 s19762c8f1;
  int s19762c8f2:3;
  ~S19762C8(); // tgen
  S19762C8(); // tgen
};
//SIG(-1 S19762C8) C1{ VBC2{ v1 Fs:6 Fl Fs:4 FL[13] Fp} Fp FC2 Fi:3}


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

static void Test_S19762C8()
{
  extern Class_Descriptor cd_S19762C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,66)];
    init_test(&cd_S19762C8, buf);
    S19762C8 *dp, &lv = *(dp=new (buf) S19762C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,260), "sizeof(S19762C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19762C8)");
    check_base_class_offset(lv, (S19762C5*), ABISELECT(168,136), "S19762C8");
    check_field_offset(lv, s19762c8f0, ABISELECT(8,4), "S19762C8.s19762c8f0");
    check_field_offset(lv, s19762c8f1, ABISELECT(16,8), "S19762C8.s19762c8f1");
    set_bf_and_test(lv, s19762c8f2, ABISELECT(160,132), 0, 3, 1, "S19762C8");
    set_bf_and_test(lv, s19762c8f2, ABISELECT(160,132), 0, 3, hide_sll(1LL<<2), "S19762C8");
    test_class_info(&lv, &cd_S19762C8);
    dp->~S19762C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C8(Test_S19762C8, "S19762C8", ABISELECT(312,260));

#else // __cplusplus

extern void _ZN8S19762C8C1Ev();
extern void _ZN8S19762C8D1Ev();
Name_Map name_map_S19762C8[] = {
  NSPAIR(_ZN8S19762C8C1Ev),
  NSPAIR(_ZN8S19762C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
static Base_Class bases_S19762C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C5,    ABISELECT(168,136), //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 _ZTI8S19762C8[];
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY vtc_S19762C8[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S19762C8[];
static  VTT_ENTRY vtt_S19762C8[] = {
  {&(_ZTV8S19762C8[3]),  3,7},
  {&(_ZTV8S19762C8[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
Class_Descriptor cd_S19762C8 = {  "S19762C8", // class name
  bases_S19762C8, 1,
  &(vtc_S19762C8[0]), // expected_vtbl_contents
  &(vtt_S19762C8[0]), // expected_vtt_contents
  ABISELECT(312,260), // object size
  NSPAIRA(_ZTI8S19762C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19762C8),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19762C8),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  S19762C9  {
  __tsi64 s19762c9f0;
  long double s19762c9f1;
  void *s19762c9f2;
  char s19762c9f3;
  ::S19762C5 s19762c9f4;
  void *s19762c9f5[2];
  __tsi64 s19762c9f6[8];
  short s19762c9f7;
  void *s19762c9f8;
  __tsi64 s19762c9f9:64;
  virtual void  v7(); // _ZN8S19762C92v7Ev
  ~S19762C9(); // tgen
  S19762C9(); // tgen
};
//SIG(-1 S19762C9) C1{ v1 FL FD Fp Fc FC2{ v2 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64}


void  S19762C9 ::v7(){vfunc_called(this, "_ZN8S19762C92v7Ev");}
S19762C9 ::~S19762C9(){ note_dtor("S19762C9", this);} // tgen
S19762C9 ::S19762C9(){ note_ctor("S19762C9", this);} // tgen

static void Test_S19762C9()
{
  extern Class_Descriptor cd_S19762C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,62)];
    init_test(&cd_S19762C9, buf);
    S19762C9 *dp, &lv = *(dp=new (buf) S19762C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,244), "sizeof(S19762C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C9)");
    check_field_offset(lv, s19762c9f0, ABISELECT(8,4), "S19762C9.s19762c9f0");
    check_field_offset(lv, s19762c9f1, ABISELECT(16,12), "S19762C9.s19762c9f1");
    check_field_offset(lv, s19762c9f2, ABISELECT(32,24), "S19762C9.s19762c9f2");
    check_field_offset(lv, s19762c9f3, ABISELECT(40,28), "S19762C9.s19762c9f3");
    check_field_offset(lv, s19762c9f4, ABISELECT(48,32), "S19762C9.s19762c9f4");
    check_field_offset(lv, s19762c9f5, ABISELECT(192,156), "S19762C9.s19762c9f5");
    check_field_offset(lv, s19762c9f6, ABISELECT(208,164), "S19762C9.s19762c9f6");
    check_field_offset(lv, s19762c9f7, ABISELECT(272,228), "S19762C9.s19762c9f7");
    check_field_offset(lv, s19762c9f8, ABISELECT(280,232), "S19762C9.s19762c9f8");
    set_bf_and_test(lv, s19762c9f9, ABISELECT(288,236), 0, 64, 1, "S19762C9");
    set_bf_and_test(lv, s19762c9f9, ABISELECT(288,236), 0, 64, hide_sll(1LL<<63), "S19762C9");
    test_class_info(&lv, &cd_S19762C9);
    dp->~S19762C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C9(Test_S19762C9, "S19762C9", ABISELECT(304,244));

#else // __cplusplus

extern void _ZN8S19762C9C1Ev();
extern void _ZN8S19762C9D1Ev();
Name_Map name_map_S19762C9[] = {
  NSPAIR(_ZN8S19762C9C1Ev),
  NSPAIR(_ZN8S19762C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19762C9[];
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY vtc_S19762C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C9[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
Class_Descriptor cd_S19762C9 = {  "S19762C9", // class name
  0,0,//no base classes
  &(vtc_S19762C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,244), // object size
  NSPAIRA(_ZTI8S19762C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19762C9),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C7  : S19762C5 , virtual S19762C4 , virtual S19762C8 , virtual S19762C9 {
  ::S19762C9 s19762c7f0;
  short s19762c7f1;
  int s19762c7f2[2];
  ~S19762C7(); // tgen
  S19762C7(); // tgen
};
//SIG(-1 S19762C7) C1{ BC2{ v1 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ v2 v3 v4 Fi[2] FL[2] FC2[3]} VBC4{ VBC2 Fp FC2 Fi:3} VBC5{ v5 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} FC5 Fs Fi[2]}


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

static void Test_S19762C7()
{
  extern Class_Descriptor cd_S19762C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(98,322)];
    init_test(&cd_S19762C7, buf);
    S19762C7 *dp, &lv = *(dp=new (buf) S19762C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1552,1284), "sizeof(S19762C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C7)");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*), 0, "S19762C7");
    check_base_class_offset(lv, (S19762C4*), ABISELECT(464,380), "S19762C7");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(1096,916), "S19762C7");
    check_base_class_offset(lv, (S19762C8*), ABISELECT(928,780), "S19762C7");
    check_base_class_offset(lv, (S19762C9*), ABISELECT(1248,1040), "S19762C7");
    check_field_offset(lv, s19762c7f0, ABISELECT(144,124), "S19762C7.s19762c7f0");
    check_field_offset(lv, s19762c7f1, ABISELECT(448,368), "S19762C7.s19762c7f1");
    check_field_offset(lv, s19762c7f2, ABISELECT(452,372), "S19762C7.s19762c7f2");
    test_class_info(&lv, &cd_S19762C7);
    dp->~S19762C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C7(Test_S19762C7, "S19762C7", ABISELECT(1552,1284));

#else // __cplusplus

extern void _ZN8S19762C7C1Ev();
extern void _ZN8S19762C7D1Ev();
Name_Map name_map_S19762C7[] = {
  NSPAIR(_ZN8S19762C7C1Ev),
  NSPAIR(_ZN8S19762C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
static Base_Class bases_S19762C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C4,    ABISELECT(464,380), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(1096,916), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(928,780), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C9,    ABISELECT(1248,1040), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19762C7[];
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY vtc_S19762C7[] = {
  ABISELECT(1248,1040),
  ABISELECT(1096,916),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(168,136),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  0,
  ABISELECT(-1096,-916),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(-1248,-1040),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern VTBL_ENTRY _ZTV8S19762C7[];
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C7[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__8S19762C7[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTT_ENTRY vtt_S19762C7[] = {
  {&(_ZTV8S19762C7[6]),  6,26},
  {&(_ZTV8S19762C7[12]),  12,26},
  {&(_ZTV8S19762C7[18]),  18,26},
  {&(_ZTV8S19762C7[21]),  21,26},
  {&(_ZTV8S19762C7[25]),  25,26},
  {&(_tg__ZTV8S19762C8__8S19762C7[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__8S19762C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
Class_Descriptor cd_S19762C7 = {  "S19762C7", // class name
  bases_S19762C7, 5,
  &(vtc_S19762C7[0]), // expected_vtbl_contents
  &(vtt_S19762C7[0]), // expected_vtt_contents
  ABISELECT(1552,1284), // object size
  NSPAIRA(_ZTI8S19762C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19762C7),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19762C7),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C10  : S19762C9 , S19762C4 , S19762C5 {
  __tsi64 s19762c10f0[2];
  void *s19762c10f1[8];
  ::S19762C7 s19762c10f2;
  void *s19762c10f3;
  int s19762c10f4;
  ::S19762C7 s19762c10f5;
  int s19762c10f6;
  virtual  ~S19762C10(); // _ZN9S19762C10D1Ev
  virtual void  v8(); // _ZN9S19762C102v8Ev
  S19762C10(); // tgen
};
//SIG(-1 S19762C10) C1{ BC2{ v2 FL FD Fp Fc FC3{ v6 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC4{ v3 v4 v5 Fi[2] FL[2] FC3[3]} BC3 vd v1 FL[2] Fp[8] FC5{ BC3 VBC4 VBC6{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC5 Fi}


 S19762C10 ::~S19762C10(){ note_dtor("S19762C10", this);}
void  S19762C10 ::v8(){vfunc_called(this, "_ZN9S19762C102v8Ev");}
S19762C10 ::S19762C10(){ note_ctor("S19762C10", this);} // tgen

static void Test_S19762C10()
{
  extern Class_Descriptor cd_S19762C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(259,850)];
    init_test(&cd_S19762C10, buf);
    S19762C10 *dp, &lv = *(dp=new (buf) S19762C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4128,3396), "sizeof(S19762C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C10)");
    check_base_class_offset(lv, (S19762C9*), 0, "S19762C10");
    check_base_class_offset(lv, (S19762C4*), ABISELECT(296,244), "S19762C10");
    check_base_class_offset(lv, (S19762C5*), ABISELECT(760,644), "S19762C10");
    check_field_offset(lv, s19762c10f0, ABISELECT(904,768), "S19762C10.s19762c10f0");
    check_field_offset(lv, s19762c10f1, ABISELECT(920,784), "S19762C10.s19762c10f1");
    check_field_offset(lv, s19762c10f2, ABISELECT(992,816), "S19762C10.s19762c10f2");
    check_field_offset(lv, s19762c10f3, ABISELECT(2544,2100), "S19762C10.s19762c10f3");
    check_field_offset(lv, s19762c10f4, ABISELECT(2552,2104), "S19762C10.s19762c10f4");
    check_field_offset(lv, s19762c10f5, ABISELECT(2560,2108), "S19762C10.s19762c10f5");
    check_field_offset(lv, s19762c10f6, ABISELECT(4112,3392), "S19762C10.s19762c10f6");
    test_class_info(&lv, &cd_S19762C10);
    dp->~S19762C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C10(Test_S19762C10, "S19762C10", ABISELECT(4128,3396));

#else // __cplusplus

extern void _ZN9S19762C10C1Ev();
extern void _ZN9S19762C10D1Ev();
Name_Map name_map_S19762C10[] = {
  NSPAIR(_ZN9S19762C10C1Ev),
  NSPAIR(_ZN9S19762C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
static Base_Class bases_S19762C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19762C4,    ABISELECT(296,244), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C5,    ABISELECT(760,644), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C10[];
extern void _ZN8S19762C92v7Ev();
extern void _ZN9S19762C10D1Ev();
extern void _ZN9S19762C10D0Ev();
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY vtc_S19762C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C10[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN9S19762C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI9S19762C10[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI9S19762C10[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
Class_Descriptor cd_S19762C10 = {  "S19762C10", // class name
  bases_S19762C10, 3,
  &(vtc_S19762C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4128,3396), // object size
  NSPAIRA(_ZTI9S19762C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19762C10),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C13  : S19762C9 {
  ::S19762C8 s19762c13f0;
  int s19762c13f1;
  void *s19762c13f2;
  int s19762c13f3;
  virtual  ~S19762C13(); // _ZN9S19762C13D1Ev
  virtual void  v12(); // _ZN9S19762C133v12Ev
  S19762C13(); // tgen
};
//SIG(-1 S19762C13) C1{ BC2{ v2 FL FD Fp Fc FC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v1 FC4{ VBC3 Fp FC3 Fi:3} Fi Fp Fi}


 S19762C13 ::~S19762C13(){ note_dtor("S19762C13", this);}
void  S19762C13 ::v12(){vfunc_called(this, "_ZN9S19762C133v12Ev");}
S19762C13 ::S19762C13(){ note_ctor("S19762C13", this);} // tgen

static void Test_S19762C13()
{
  extern Class_Descriptor cd_S19762C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,130)];
    init_test(&cd_S19762C13, buf);
    S19762C13 *dp, &lv = *(dp=new (buf) S19762C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,516), "sizeof(S19762C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C13)");
    check_base_class_offset(lv, (S19762C9*), 0, "S19762C13");
    check_field_offset(lv, s19762c13f0, ABISELECT(296,244), "S19762C13.s19762c13f0");
    check_field_offset(lv, s19762c13f1, ABISELECT(608,504), "S19762C13.s19762c13f1");
    check_field_offset(lv, s19762c13f2, ABISELECT(616,508), "S19762C13.s19762c13f2");
    check_field_offset(lv, s19762c13f3, ABISELECT(624,512), "S19762C13.s19762c13f3");
    test_class_info(&lv, &cd_S19762C13);
    dp->~S19762C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C13(Test_S19762C13, "S19762C13", ABISELECT(640,516));

#else // __cplusplus

extern void _ZN9S19762C13C1Ev();
extern void _ZN9S19762C13D1Ev();
Name_Map name_map_S19762C13[] = {
  NSPAIR(_ZN9S19762C13C1Ev),
  NSPAIR(_ZN9S19762C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
static Base_Class bases_S19762C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C13[];
extern void _ZN8S19762C92v7Ev();
extern void _ZN9S19762C13D1Ev();
extern void _ZN9S19762C13D0Ev();
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY vtc_S19762C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C13[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN9S19762C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
Class_Descriptor cd_S19762C13 = {  "S19762C13", // class name
  bases_S19762C13, 1,
  &(vtc_S19762C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(640,516), // object size
  NSPAIRA(_ZTI9S19762C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19762C13),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  S19762C12  : virtual S19762C9 , virtual S19762C10 , virtual S19762C5 , virtual S19762C8 {
  __tsi64 s19762c12f0:44;
  void *s19762c12f1;
  int s19762c12f2;
  ::S19762C7 s19762c12f3;
  __tsi64 s19762c12f4[2];
  int s19762c12f5[3];
  ::S19762C10 s19762c12f6;
  char s19762c12f7:7;
  ::S19762C13 s19762c12f8;
  ~S19762C12(); // tgen
  S19762C12(); // tgen
};
//SIG(-1 S19762C12) C1{ VBC2{ v1 FL FD Fp Fc FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} VBC4{ BC2 BC5{ v2 v3 v4 Fi[2] FL[2] FC3[3]} BC3 vd v6 FL[2] Fp[8] FC6{ BC3 VBC5 VBC7{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC6 Fi} VBC3 VBC7 FL:44 Fp Fi FC6 FL[2] Fi[3] FC4 Fc:7 FC8{ BC2 vd v7 FC7 Fi Fp Fi}}


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

static void Test_S19762C12()
{
  extern Class_Descriptor cd_S19762C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(697,2288)];
    init_test(&cd_S19762C12, buf);
    S19762C12 *dp, &lv = *(dp=new (buf) S19762C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11136,9148), "sizeof(S19762C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C12)");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*), ABISELECT(6400,5248), "S19762C12");
    check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(6704,5492), "S19762C12");
    check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(7000,5736), "S19762C12");
    check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(7464,6136), "S19762C12");
    check_base_class_offset(lv, (S19762C10*), ABISELECT(6704,5492), "S19762C12");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*), ABISELECT(10824,8888), "S19762C12");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(10824,8888), "S19762C12");
    check_base_class_offset(lv, (S19762C8*), ABISELECT(10968,9012), "S19762C12");
    set_bf_and_test(lv, s19762c12f0, ABISELECT(8,4), 0, 44, 1, "S19762C12");
    set_bf_and_test(lv, s19762c12f0, ABISELECT(8,4), 0, 44, hide_sll(1LL<<43), "S19762C12");
    check_field_offset(lv, s19762c12f1, ABISELECT(16,12), "S19762C12.s19762c12f1");
    check_field_offset(lv, s19762c12f2, ABISELECT(24,16), "S19762C12.s19762c12f2");
    check_field_offset(lv, s19762c12f3, ABISELECT(32,20), "S19762C12.s19762c12f3");
    check_field_offset(lv, s19762c12f4, ABISELECT(1584,1304), "S19762C12.s19762c12f4");
    check_field_offset(lv, s19762c12f5, ABISELECT(1600,1320), "S19762C12.s19762c12f5");
    check_field_offset(lv, s19762c12f6, ABISELECT(1616,1332), "S19762C12.s19762c12f6");
    set_bf_and_test(lv, s19762c12f7, ABISELECT(5744,4728), 0, 7, 1, "S19762C12");
    set_bf_and_test(lv, s19762c12f7, ABISELECT(5744,4728), 0, 7, hide_sll(1LL<<6), "S19762C12");
    check_field_offset(lv, s19762c12f8, ABISELECT(5760,4732), "S19762C12.s19762c12f8");
    test_class_info(&lv, &cd_S19762C12);
    dp->~S19762C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C12(Test_S19762C12, "S19762C12", ABISELECT(11136,9148));

#else // __cplusplus

extern void _ZN9S19762C12C1Ev();
extern void _ZN9S19762C12D1Ev();
Name_Map name_map_S19762C12[] = {
  NSPAIR(_ZN9S19762C12C1Ev),
  NSPAIR(_ZN9S19762C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
static Base_Class bases_S19762C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C9,    ABISELECT(6400,5248), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C9,    ABISELECT(6704,5492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(7000,5736), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(7464,6136), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(6704,5492), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(10824,8888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C8,    ABISELECT(10968,9012), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C12[];
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn6704_N9S19762C12D1Ev,_ZThn5492_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn6704_N9S19762C12D0Ev,_ZThn5492_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY vtc_S19762C12[] = {
  ABISELECT(10968,9012),
  ABISELECT(10824,8888),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-144,-124),
  ABISELECT(-10968,-9012),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern VTBL_ENTRY _ZTV9S19762C12[];
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C12[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__9S19762C12[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTT_ENTRY vtt_S19762C12[] = {
  {&(_ZTV9S19762C12[6]),  6,40},
  {&(_ZTV9S19762C12[11]),  11,40},
  {&(_ZTV9S19762C12[21]),  21,40},
  {&(_ZTV9S19762C12[27]),  27,40},
  {&(_ZTV9S19762C12[32]),  32,40},
  {&(_ZTV9S19762C12[36]),  36,40},
  {&(_ZTV9S19762C12[40]),  40,40},
  {&(_tg__ZTV8S19762C8__9S19762C12[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__9S19762C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19762C12D0Ev,_ZThn5492_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19762C12D1Ev,_ZThn5492_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C12 = {  "S19762C12", // class name
  bases_S19762C12, 7,
  &(vtc_S19762C12[0]), // expected_vtbl_contents
  &(vtt_S19762C12[0]), // expected_vtt_contents
  ABISELECT(11136,9148), // object size
  NSPAIRA(_ZTI9S19762C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19762C12),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19762C12),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C11  : virtual S19762C10 , virtual S19762C5 , virtual S19762C8 , S19762C7 , S19762C12 {
  ::S19762C10 s19762c11f0;
  __tsi64 s19762c11f1;
  char s19762c11f2:7;
  virtual void  v9(); // _ZN9S19762C112v9Ev
  ~S19762C11(); // tgen
  S19762C11(); // tgen
};
//SIG(-1 S19762C11) C1{ VBC2{ BC3{ v2 FL FD Fp Fc FC4{ v6 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC5{ v3 v4 v5 Fi[2] FL[2] FC4[3]} BC4 vd v7 FL[2] Fp[8] FC6{ BC4 VBC5 VBC7{ VBC4 Fp FC4 Fi:3} VBC3 FC3 Fs Fi[2]} Fp Fi FC6 Fi} VBC4 VBC7 BC6 BC8{ VBC3 VBC2 VBC4 VBC7 FL:44 Fp Fi FC6 FL[2] Fi[3] FC2 Fc:7 FC9{ BC3 vd v8 FC7 Fi Fp Fi}} v1 FC2 FL Fc:7}


void  S19762C11 ::v9(){vfunc_called(this, "_ZN9S19762C112v9Ev");}
S19762C11 ::~S19762C11(){ note_dtor("S19762C11", this);} // tgen
S19762C11 ::S19762C11(){ note_ctor("S19762C11", this);} // tgen

static void Test_S19762C11()
{
  extern Class_Descriptor cd_S19762C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1014,3335)];
    init_test(&cd_S19762C11, buf);
    S19762C11 *dp, &lv = *(dp=new (buf) S19762C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16208,13336), "sizeof(S19762C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C11)");
    check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(11008,9036), "S19762C11");
    check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(11304,9280), "S19762C11");
    check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(11768,9680), "S19762C11");
    check_base_class_offset(lv, (S19762C10*), ABISELECT(11008,9036), "S19762C11");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*), ABISELECT(11008,9036), "S19762C11");
    /*is_ambiguous_... S19762C11::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*), ABISELECT(15128,12432), "S19762C11");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(15128,12432), "S19762C11");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*), ABISELECT(15128,12432), "S19762C11");
    check_base_class_offset(lv, (S19762C8*), ABISELECT(15272,12556), "S19762C11");
    check_base_class_offset(lv, (S19762C8*)(S19762C7*), ABISELECT(15272,12556), "S19762C11");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*), ABISELECT(15272,12556), "S19762C11");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*), 0, "S19762C11");
    check_base_class_offset(lv, (S19762C4*)(S19762C7*), ABISELECT(15440,12692), "S19762C11");
    check_base_class_offset(lv, (S19762C9*)(S19762C7*), ABISELECT(15904,13092), "S19762C11");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*), ABISELECT(15904,13092), "S19762C11");
    check_base_class_offset(lv, (S19762C7*), 0, "S19762C11");
    check_base_class_offset(lv, (S19762C12*), ABISELECT(464,380), "S19762C11");
    check_field_offset(lv, s19762c11f0, ABISELECT(6864,5628), "S19762C11.s19762c11f0");
    check_field_offset(lv, s19762c11f1, ABISELECT(10992,9024), "S19762C11.s19762c11f1");
    set_bf_and_test(lv, s19762c11f2, ABISELECT(11000,9032), 0, 7, 1, "S19762C11");
    set_bf_and_test(lv, s19762c11f2, ABISELECT(11000,9032), 0, 7, hide_sll(1LL<<6), "S19762C11");
    test_class_info(&lv, &cd_S19762C11);
    dp->~S19762C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C11(Test_S19762C11, "S19762C11", ABISELECT(16208,13336));

#else // __cplusplus

extern void _ZN9S19762C11C1Ev();
extern void _ZN9S19762C11D1Ev();
Name_Map name_map_S19762C11[] = {
  NSPAIR(_ZN9S19762C11C1Ev),
  NSPAIR(_ZN9S19762C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
static Base_Class bases_S19762C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C9,    ABISELECT(11008,9036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19762C4,    ABISELECT(11304,9280), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(11768,9680), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(11008,9036), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(15128,12432), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C8,    ABISELECT(15272,12556), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(15440,12692), //bcp->offset
    47, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19762C9,    ABISELECT(15904,13092), //bcp->offset
    55, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19762C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C12,    ABISELECT(464,380), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C11[];
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn11008_N9S19762C11D1Ev,_ZThn9036_N9S19762C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void ABISELECT(_ZThn11008_N9S19762C11D0Ev,_ZThn9036_N9S19762C11D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY vtc_S19762C11[] = {
  ABISELECT(11008,9036),
  ABISELECT(15904,13092),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(15440,12712),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  0,
  ABISELECT(-15904,-13092),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern VTBL_ENTRY _ZTV9S19762C11[];
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__9S19762C11[] = {
  ABISELECT(15904,13092),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C7__9S19762C11[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C7__9S19762C11[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C7__9S19762C11[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C7__9S19762C11[] = {
  0,
  ABISELECT(-15904,-13092),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C11[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(15440,12712),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C12__9S19762C11[] = {
  0,
  ABISELECT(-15440,-12712),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn10544_N9S19762C12D1Ev,_ZThn8656_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn10544_N9S19762C12D0Ev,_ZThn8656_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C12__9S19762C11[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C12__9S19762C11[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C12__9S19762C11[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C12__9S19762C11[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C12__9S19762C11[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C11[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__9S19762C11[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTT_ENTRY vtt_S19762C11[] = {
  {&(_ZTV9S19762C11[7]),  7,59},
  {&(_tg__ZTV8S19762C7__9S19762C11[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C7__9S19762C11[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C7__9S19762C11[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C7__9S19762C11[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C7__9S19762C11[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C11[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C12__9S19762C11[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C12__9S19762C11[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C12__9S19762C11[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C12__9S19762C11[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C12__9S19762C11[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C12__9S19762C11[3]),  3,3},
  {&(_ZTV9S19762C11[28]),  28,59},
  {&(_ZTV9S19762C11[34]),  34,59},
  {&(_ZTV9S19762C11[39]),  39,59},
  {&(_ZTV9S19762C11[43]),  43,59},
  {&(_ZTV9S19762C11[47]),  47,59},
  {&(_ZTV9S19762C11[52]),  52,59},
  {&(_ZTV9S19762C11[58]),  58,59},
  {&(_ZTV9S19762C11[17]),  17,59},
  {&(_tg__ZTV8S19762C8__9S19762C11[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__9S19762C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19762C12D0Ev,_ZThn8656_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19762C12D1Ev,_ZThn8656_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S19762C11D0Ev,_ZThn9036_N9S19762C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S19762C11D1Ev,_ZThn9036_N9S19762C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C11 = {  "S19762C11", // class name
  bases_S19762C11, 11,
  &(vtc_S19762C11[0]), // expected_vtbl_contents
  &(vtt_S19762C11[0]), // expected_vtt_contents
  ABISELECT(16208,13336), // object size
  NSPAIRA(_ZTI9S19762C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19762C11),59, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19762C11),23, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C6  : virtual S19762C5 , virtual S19762C7 , S19762C10 , S19762C11 {
  ::S19762C12 s19762c6f0;
  short s19762c6f1;
  int s19762c6f2:8;
  virtual void  v10(); // _ZN8S19762C63v10Ev
  virtual void  v11(); // _ZN8S19762C63v11Ev
  ~S19762C6(); // tgen
  S19762C6(); // tgen
};
//SIG(-1 S19762C6) C1{ VBC2{ v3 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ BC2 VBC4{ v4 v5 v6 Fi[2] FL[2] FC2[3]} VBC5{ VBC2 Fp FC2 Fi:3} VBC6{ v7 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} FC6 Fs Fi[2]} BC7{ BC6 BC4 BC2 vd v8 FL[2] Fp[8] FC3 Fp Fi FC3 Fi} BC8{ VBC7 VBC2 VBC5 BC3 BC9{ VBC6 VBC7 VBC2 VBC5 FL:44 Fp Fi FC3 FL[2] Fi[3] FC7 Fc:7 FC10{ BC6 vd v10 FC5 Fi Fp Fi}} v9 FC7 FL Fc:7} v1 v2 FC9 Fs Fi:8}


void  S19762C6 ::v10(){vfunc_called(this, "_ZN8S19762C63v10Ev");}
void  S19762C6 ::v11(){vfunc_called(this, "_ZN8S19762C63v11Ev");}
S19762C6 ::~S19762C6(){ note_dtor("S19762C6", this);} // tgen
S19762C6 ::S19762C6(){ note_ctor("S19762C6", this);} // tgen

static void Test_S19762C6()
{
  extern Class_Descriptor cd_S19762C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1999,6567)];
    init_test(&cd_S19762C6, buf);
    S19762C6 *dp, &lv = *(dp=new (buf) S19762C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31968,26264), "sizeof(S19762C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C6)");
    /*is_ambiguous_... S19762C6::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*), ABISELECT(26280,21584), "S19762C6");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(26280,21584), "S19762C6");
    /*is_ambiguous_... S19762C11::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*), ABISELECT(26280,21584), "S19762C6");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*), ABISELECT(26280,21584), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*), ABISELECT(26432,21708), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*), ABISELECT(26896,22088), "S19762C6");
    check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*), ABISELECT(26896,22088), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*), ABISELECT(27360,22488), "S19762C6");
    check_base_class_offset(lv, (S19762C8*)(S19762C11*), ABISELECT(27360,22488), "S19762C6");
    check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*), ABISELECT(27360,22488), "S19762C6");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*), ABISELECT(27360,22488), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*), ABISELECT(27536,22624), "S19762C6");
    check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*), ABISELECT(27536,22624), "S19762C6");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*), ABISELECT(27536,22624), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*), ABISELECT(26432,21708), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C10*), 0, "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(296,244), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(760,644), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C10*), 0, "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(27840,22868), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(28136,23112), "S19762C6");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(28600,23512), "S19762C6");
    check_base_class_offset(lv, (S19762C10*)(S19762C11*), ABISELECT(27840,22868), "S19762C6");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*), ABISELECT(27840,22868), "S19762C6");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*), ABISELECT(4128,3396), "S19762C6");
    check_base_class_offset(lv, (S19762C7*)(S19762C11*), ABISELECT(4128,3396), "S19762C6");
    check_base_class_offset(lv, (S19762C12*)(S19762C11*), ABISELECT(4592,3776), "S19762C6");
    check_base_class_offset(lv, (S19762C11*), ABISELECT(4128,3396), "S19762C6");
    check_field_offset(lv, s19762c6f0, ABISELECT(15136,12432), "S19762C6.s19762c6f0");
    check_field_offset(lv, s19762c6f1, ABISELECT(26272,21580), "S19762C6.s19762c6f1");
    set_bf_and_test(lv, s19762c6f2, ABISELECT(26274,21582), 0, 8, 1, "S19762C6");
    set_bf_and_test(lv, s19762c6f2, ABISELECT(26274,21582), 0, 8, hide_sll(1LL<<7), "S19762C6");
    test_class_info(&lv, &cd_S19762C6);
    dp->~S19762C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C6(Test_S19762C6, "S19762C6", ABISELECT(31968,26264));

#else // __cplusplus

extern void _ZN8S19762C6C1Ev();
extern void _ZN8S19762C6D1Ev();
Name_Map name_map_S19762C6[] = {
  NSPAIR(_ZN8S19762C6C1Ev),
  NSPAIR(_ZN8S19762C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
static Base_Class bases_S19762C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C5,    ABISELECT(26280,21584), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(26432,21708), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19762C4,    ABISELECT(26896,22088), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(27360,22488), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C9,    ABISELECT(27536,22624), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C7,    ABISELECT(26432,21708), //bcp->offset
    45, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(296,244), //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
    12, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(760,644), //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
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C9,    ABISELECT(27840,22868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(28136,23112), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(28600,23512), //bcp->offset
    86, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(27840,22868), //bcp->offset
    68, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(4592,3776), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(4128,3396), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19762C6[];
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C6D1Ev();
extern void _ZN8S19762C6D0Ev();
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C63v10Ev();
extern void _ZN8S19762C63v11Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZThn4128_N8S19762C6D1Ev,_ZThn3396_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn4128_N8S19762C6D0Ev,_ZThn3396_N8S19762C6D0Ev)();
extern void ABISELECT(_ZThn4592_N8S19762C6D1Ev,_ZThn3776_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn4592_N8S19762C6D0Ev,_ZThn3776_N8S19762C6D0Ev)();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn27840_N8S19762C6D1Ev,_ZThn22868_N8S19762C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev)();
extern void ABISELECT(_ZThn27840_N8S19762C6D0Ev,_ZThn22868_N8S19762C6D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY vtc_S19762C6[] = {
  ABISELECT(27840,22868),
  ABISELECT(27536,22624),
  ABISELECT(27360,22488),
  ABISELECT(26896,22088),
  ABISELECT(26432,21708),
  ABISELECT(26280,21584),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19762C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19762C6D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v11Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(23712,19472),
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C6D1Ev,_ZThn3396_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C6D0Ev,_ZThn3396_N8S19762C6D0Ev),
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C6D1Ev,_ZThn3776_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C6D0Ev,_ZThn3776_N8S19762C6D0Ev),
  0,
  ABISELECT(-26280,-21584),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-26432,-21708),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  0,
  0,
  ABISELECT(-26896,-22088),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-1080,-904),
  ABISELECT(-27360,-22488),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  0,
  ABISELECT(-27536,-22624),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-27840,-22868),
  0,
  ABISELECT(-27840,-22868),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-28136,-23112),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-28600,-23512),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S19762C6[];
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C11__8S19762C6[] = {
  ABISELECT(23712,19472),
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C11__A1__8S19762C6[] = {
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C11__A1__8S19762C6[] = {
  0,
  0,
  0,
  ABISELECT(-22768,-18692),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C11__A1__8S19762C6[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-23232,-19092),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A1__8S19762C6[] = {
  0,
  ABISELECT(-22152,-18188),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C11__A1__8S19762C6[] = {
  0,
  ABISELECT(-23408,-19228),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__8S19762C6[] = {
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C11__8S19762C6[] = {
  0,
  ABISELECT(-22944,-18848),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn23248_N9S19762C12D1Ev,_ZThn19092_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn23248_N9S19762C12D0Ev,_ZThn19092_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C11__8S19762C6[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-23248,-19092),
  0,
  ABISELECT(-23248,-19092),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__8S19762C6[] = {
  ABISELECT(-23544,-19336),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__8S19762C6[] = {
  ABISELECT(-24008,-19736),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C11__8S19762C6[] = {
  0,
  ABISELECT(-21688,-17808),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C11__8S19762C6[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-22768,-18712),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn23712_N9S19762C11D1Ev,_ZThn19472_N9S19762C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void ABISELECT(_ZThn23712_N9S19762C11D0Ev,_ZThn19472_N9S19762C11D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C11__8S19762C6[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-23712,-19472),
  0,
  ABISELECT(-23712,-19472),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C11__8S19762C6[] = {
  ABISELECT(-24008,-19716),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C11__8S19762C6[] = {
  ABISELECT(-24472,-20116),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C11__8S19762C6[] = {
  0,
  ABISELECT(-22152,-18188),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C11__8S19762C6[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-23232,-19092),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C11__8S19762C6[] = {
  0,
  0,
  0,
  ABISELECT(-22768,-18692),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C11__8S19762C6[] = {
  0,
  ABISELECT(-23408,-19228),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C11__8S19762C6[] = {
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__8S19762C6[] = {
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C7__8S19762C6[] = {
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C7__8S19762C6[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C7__8S19762C6[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C7__8S19762C6[] = {
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C6[] = {
  ABISELECT(-1080,-904),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__8S19762C6[] = {
  0,
  ABISELECT(1080,904),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTT_ENTRY vtt_S19762C6[] = {
  {&(_ZTV8S19762C6[8]),  8,89},
  {&(_tg__ZTV9S19762C11__8S19762C6[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C11__A1__8S19762C6[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C11__A1__8S19762C6[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C11__A1__8S19762C6[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A1__8S19762C6[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C11__A1__8S19762C6[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C11__8S19762C6[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C11__8S19762C6[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C11__8S19762C6[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__8S19762C6[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__8S19762C6[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C11__8S19762C6[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C11__8S19762C6[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C11__8S19762C6[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C11__8S19762C6[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C11__8S19762C6[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C11__8S19762C6[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C11__8S19762C6[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C11__8S19762C6[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C11__8S19762C6[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C11__8S19762C6[6]),  6,8},
  {&(_ZTV8S19762C6[44]),  44,89},
  {&(_ZTV8S19762C6[52]),  52,89},
  {&(_ZTV8S19762C6[58]),  58,89},
  {&(_ZTV8S19762C6[64]),  64,89},
  {&(_ZTV8S19762C6[67]),  67,89},
  {&(_ZTV8S19762C6[29]),  29,89},
  {&(_ZTV8S19762C6[77]),  77,89},
  {&(_ZTV8S19762C6[83]),  83,89},
  {&(_ZTV8S19762C6[88]),  88,89},
  {&(_ZTV8S19762C6[39]),  39,89},
  {&(_tg__ZTV8S19762C7__8S19762C6[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C7__8S19762C6[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C7__8S19762C6[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C7__8S19762C6[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C7__8S19762C6[3]),  3,4},
  {&(_tg__ZTV8S19762C8__8S19762C6[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__8S19762C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19762C6[];
extern  VTBL_ENTRY _ZTV8S19762C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C6[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23712_N9S19762C11D0Ev,_ZThn19472_N9S19762C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23712_N9S19762C11D1Ev,_ZThn19472_N9S19762C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23248_N9S19762C12D0Ev,_ZThn19092_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23248_N9S19762C12D1Ev,_ZThn19092_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27840_N8S19762C6D0Ev,_ZThn22868_N8S19762C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27840_N8S19762C6D1Ev,_ZThn22868_N8S19762C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C6 = {  "S19762C6", // class name
  bases_S19762C6, 18,
  &(vtc_S19762C6[0]), // expected_vtbl_contents
  &(vtt_S19762C6[0]), // expected_vtt_contents
  ABISELECT(31968,26264), // object size
  NSPAIRA(_ZTI8S19762C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19762C6),89, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19762C6),39, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C14  : virtual S19762C8 {
  ::S19762C12 s19762c14f0;
  int s19762c14f1:6;
  int s19762c14f2;
  __tsi64 s19762c14f3;
  ~S19762C14(); // tgen
  S19762C14(); // tgen
};
//SIG(-1 S19762C14) C1{ VBC2{ VBC3{ v1 Fs:6 Fl Fs:4 FL[13] Fp} Fp FC3 Fi:3} FC4{ VBC5{ v2 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} VBC6{ BC5 BC7{ v3 v4 v5 Fi[2] FL[2] FC3[3]} BC3 vd v6 FL[2] Fp[8] FC8{ BC3 VBC7 VBC2 VBC5 FC5 Fs Fi[2]} Fp Fi FC8 Fi} VBC3 VBC2 FL:44 Fp Fi FC8 FL[2] Fi[3] FC6 Fc:7 FC9{ BC5 vd v7 FC2 Fi Fp Fi}} Fi:6 Fi FL}


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

static void Test_S19762C14()
{
  extern Class_Descriptor cd_S19762C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(719,2358)];
    init_test(&cd_S19762C14, buf);
    S19762C14 *dp, &lv = *(dp=new (buf) S19762C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11488,9428), "sizeof(S19762C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C14)");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(11336,9304), "S19762C14");
    check_base_class_offset(lv, (S19762C8*), ABISELECT(11168,9168), "S19762C14");
    check_field_offset(lv, s19762c14f0, ABISELECT(16,4), "S19762C14.s19762c14f0");
    set_bf_and_test(lv, s19762c14f1, ABISELECT(11152,9152), 0, 6, 1, "S19762C14");
    set_bf_and_test(lv, s19762c14f1, ABISELECT(11152,9152), 0, 6, hide_sll(1LL<<5), "S19762C14");
    check_field_offset(lv, s19762c14f2, ABISELECT(11156,9156), "S19762C14.s19762c14f2");
    check_field_offset(lv, s19762c14f3, ABISELECT(11160,9160), "S19762C14.s19762c14f3");
    test_class_info(&lv, &cd_S19762C14);
    dp->~S19762C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C14(Test_S19762C14, "S19762C14", ABISELECT(11488,9428));

#else // __cplusplus

extern void _ZN9S19762C14C1Ev();
extern void _ZN9S19762C14D1Ev();
Name_Map name_map_S19762C14[] = {
  NSPAIR(_ZN9S19762C14C1Ev),
  NSPAIR(_ZN9S19762C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
static Base_Class bases_S19762C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C5,    ABISELECT(11336,9304), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(11168,9168), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C14[];
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY vtc_S19762C14[] = {
  ABISELECT(11336,9304),
  ABISELECT(11168,9168),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C14[0]),
  ABISELECT(168,136),
  ABISELECT(-11168,-9168),
  (VTBL_ENTRY)&(_ZTI9S19762C14[0]),
  0,
  ABISELECT(-11336,-9304),
  (VTBL_ENTRY)&(_ZTI9S19762C14[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern VTBL_ENTRY _ZTV9S19762C14[];
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C14[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__9S19762C14[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTT_ENTRY vtt_S19762C14[] = {
  {&(_ZTV9S19762C14[4]),  4,11},
  {&(_ZTV9S19762C14[7]),  7,11},
  {&(_ZTV9S19762C14[10]),  10,11},
  {&(_tg__ZTV8S19762C8__9S19762C14[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__9S19762C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19762C14[];
extern  VTBL_ENTRY _ZTV9S19762C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C14[];
Class_Descriptor cd_S19762C14 = {  "S19762C14", // class name
  bases_S19762C14, 2,
  &(vtc_S19762C14[0]), // expected_vtbl_contents
  &(vtt_S19762C14[0]), // expected_vtt_contents
  ABISELECT(11488,9428), // object size
  NSPAIRA(_ZTI9S19762C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19762C14),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19762C14),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  S19762C15  : virtual S19762C9 , S19762C4 , virtual S19762C11 {
  char s19762c15f0:8;
  int s19762c15f1;
  ~S19762C15(); // tgen
  S19762C15(); // tgen
};
//SIG(-1 S19762C15) C1{ VBC2{ v1 FL FD Fp Fc FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC4{ v2 v3 v4 Fi[2] FL[2] FC3[3]} VBC5{ VBC6{ BC2 BC4 BC3 vd v6 FL[2] Fp[8] FC7{ BC3 VBC4 VBC8{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC7 Fi} VBC3 VBC8 BC7 BC9{ VBC2 VBC6 VBC3 VBC8 FL:44 Fp Fi FC7 FL[2] Fi[3] FC6 Fc:7 FC10{ BC2 vd v8 FC8 Fi Fp Fi}} v7 FC6 FL Fc:7} Fc:8 Fi}


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

static void Test_S19762C15()
{
  extern Class_Descriptor cd_S19762C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1044,3437)];
    init_test(&cd_S19762C15, buf);
    S19762C15 *dp, &lv = *(dp=new (buf) S19762C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16688,13744), "sizeof(S19762C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C15)");
    /*is_ambiguous_... S19762C15::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*), ABISELECT(480,408), "S19762C15");
    check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*), ABISELECT(480,408), "S19762C15");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*), ABISELECT(480,408), "S19762C15");
    /*is_ambiguous_... S19762C15::S19762C4 */ AMB_check_base_class_offset(lv, (S19762C4*), 0, "S19762C15");
    check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(11792,9688), "S19762C15");
    check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(12088,9932), "S19762C15");
    check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(12552,10332), "S19762C15");
    check_base_class_offset(lv, (S19762C10*)(S19762C11*), ABISELECT(11792,9688), "S19762C15");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*), ABISELECT(11792,9688), "S19762C15");
    /*is_ambiguous_... S19762C11::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*), ABISELECT(15912,13084), "S19762C15");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(15912,13084), "S19762C15");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*), ABISELECT(15912,13084), "S19762C15");
    check_base_class_offset(lv, (S19762C8*)(S19762C11*), ABISELECT(16056,13208), "S19762C15");
    check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*), ABISELECT(16056,13208), "S19762C15");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*), ABISELECT(16056,13208), "S19762C15");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*), ABISELECT(784,652), "S19762C15");
    check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*), ABISELECT(16224,13344), "S19762C15");
    check_base_class_offset(lv, (S19762C7*)(S19762C11*), ABISELECT(784,652), "S19762C15");
    check_base_class_offset(lv, (S19762C12*)(S19762C11*), ABISELECT(1248,1032), "S19762C15");
    check_base_class_offset(lv, (S19762C11*), ABISELECT(784,652), "S19762C15");
    set_bf_and_test(lv, s19762c15f0, ABISELECT(464,400), 0, 8, 1, "S19762C15");
    set_bf_and_test(lv, s19762c15f0, ABISELECT(464,400), 0, 8, hide_sll(1LL<<7), "S19762C15");
    check_field_offset(lv, s19762c15f1, ABISELECT(468,404), "S19762C15.s19762c15f1");
    test_class_info(&lv, &cd_S19762C15);
    dp->~S19762C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C15(Test_S19762C15, "S19762C15", ABISELECT(16688,13744));

#else // __cplusplus

extern void _ZN9S19762C15C1Ev();
extern void _ZN9S19762C15D1Ev();
Name_Map name_map_S19762C15[] = {
  NSPAIR(_ZN9S19762C15C1Ev),
  NSPAIR(_ZN9S19762C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
static Base_Class bases_S19762C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C9,    ABISELECT(480,408), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19762C9,    ABISELECT(11792,9688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(12088,9932), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(12552,10332), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(11792,9688), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(15912,13084), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(16056,13208), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(784,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(16224,13344), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19762C7,    ABISELECT(784,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(1248,1032), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(784,652), //bcp->offset
    17, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C15[];
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN9S19762C15D1Ev();
extern void _ZN9S19762C15D0Ev();
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn784_N9S19762C15D1Ev,_ZThn652_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn784_N9S19762C15D0Ev,_ZThn652_N9S19762C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev)();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn11792_N9S19762C15D1Ev,_ZThn9688_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn11792_N9S19762C15D0Ev,_ZThn9688_N9S19762C15D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY vtc_S19762C15[] = {
  ABISELECT(16224,13344),
  ABISELECT(16056,13208),
  ABISELECT(15912,13084),
  ABISELECT(11792,9688),
  ABISELECT(784,652),
  ABISELECT(480,408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D0Ev,
  0,
  ABISELECT(-480,-408),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(-784,-652),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-784,-652),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev),
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-1248,-1032),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11792,-9688),
  0,
  ABISELECT(-11792,-9688),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-12088,-9932),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-12552,-10332),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(-15912,-13084),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-144,-124),
  ABISELECT(-16056,-13208),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  0,
  0,
  0,
  ABISELECT(-16224,-13344),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern VTBL_ENTRY _ZTV9S19762C15[];
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C15[] = {
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C11__9S19762C15[] = {
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C11__9S19762C15[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C11__9S19762C15[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C11__9S19762C15[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C11__9S19762C15[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C15[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C11__9S19762C15[] = {
  0,
  ABISELECT(768,624),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn10544_N9S19762C12D1Ev,_ZThn8656_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn10544_N9S19762C12D0Ev,_ZThn8656_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C11__9S19762C15[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__9S19762C15[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__9S19762C15[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C11__9S19762C15[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C11__9S19762C15[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn11008_N9S19762C11D1Ev,_ZThn9036_N9S19762C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void ABISELECT(_ZThn11008_N9S19762C11D0Ev,_ZThn9036_N9S19762C11D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C11__9S19762C15[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C11__9S19762C15[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C11__9S19762C15[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C11__9S19762C15[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C11__9S19762C15[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C11__9S19762C15[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C11__9S19762C15[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C11__9S19762C15[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C15[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__9S19762C15[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTT_ENTRY vtt_S19762C15[] = {
  {&(_ZTV9S19762C15[8]),  8,75},
  {&(_ZTV9S19762C15[16]),  16,75},
  {&(_ZTV9S19762C15[27]),  27,75},
  {&(_ZTV9S19762C15[48]),  48,75},
  {&(_ZTV9S19762C15[54]),  54,75},
  {&(_ZTV9S19762C15[59]),  59,75},
  {&(_ZTV9S19762C15[63]),  63,75},
  {&(_ZTV9S19762C15[67]),  67,75},
  {&(_ZTV9S19762C15[72]),  72,75},
  {&(_ZTV9S19762C15[37]),  37,75},
  {&(_tg__ZTV9S19762C11__9S19762C15[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C11__9S19762C15[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C11__9S19762C15[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C11__9S19762C15[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C11__9S19762C15[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C11__9S19762C15[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C15[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C11__9S19762C15[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C11__9S19762C15[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__9S19762C15[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__9S19762C15[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C11__9S19762C15[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C11__9S19762C15[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C11__9S19762C15[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C11__9S19762C15[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C11__9S19762C15[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C11__9S19762C15[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C11__9S19762C15[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C11__9S19762C15[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C11__9S19762C15[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C11__9S19762C15[6]),  6,8},
  {&(_tg__ZTV8S19762C8__9S19762C15[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__9S19762C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19762C15[];
extern  VTBL_ENTRY _ZTV9S19762C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C15[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S19762C11D0Ev,_ZThn9036_N9S19762C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S19762C11D1Ev,_ZThn9036_N9S19762C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19762C12D0Ev,_ZThn8656_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19762C12D1Ev,_ZThn8656_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N9S19762C15D0Ev,_ZThn9688_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N9S19762C15D1Ev,_ZThn9688_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19762C15D0Ev,_ZThn652_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19762C15D1Ev,_ZThn652_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C15 = {  "S19762C15", // class name
  bases_S19762C15, 13,
  &(vtc_S19762C15[0]), // expected_vtbl_contents
  &(vtt_S19762C15[0]), // expected_vtt_contents
  ABISELECT(16688,13744), // object size
  NSPAIRA(_ZTI9S19762C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19762C15),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19762C15),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  S19762C16  : S19762C5 , virtual S19762C9 , virtual S19762C15 , S19762C7 , S19762C13 {
  int s19762c16f0;
  ::S19762C7 s19762c16f1;
  int s19762c16f2;
  short s19762c16f3;
  __tsi64 s19762c16f4:8;
  int s19762c16f5;
  virtual  ~S19762C16(); // _ZN9S19762C16D2Ev
  virtual void  v13(); // _ZN9S19762C163v13Ev
  S19762C16(); // tgen
};
//SIG(-1 S19762C16) C1{ BC2{ v2 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ v3 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} VBC4{ VBC3 BC5{ v4 v5 v6 Fi[2] FL[2] FC2[3]} VBC6{ VBC7{ BC3 BC5 BC2 vd v7 FL[2] Fp[8] FC8{ BC2 VBC5 VBC9{ VBC2 Fp FC2 Fi:3} VBC3 FC3 Fs Fi[2]} Fp Fi FC8 Fi} VBC2 VBC9 BC8 BC10{ VBC3 VBC7 VBC2 VBC9 FL:44 Fp Fi FC8 FL[2] Fi[3] FC7 Fc:7 FC11{ BC3 vd v9 FC9 Fi Fp Fi}} v8 FC7 FL Fc:7} Fc:8 Fi} BC8 BC11 vd v1 Fi FC8 Fi Fs FL:8 Fi}


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

static void Test_S19762C16()
{
  extern Class_Descriptor cd_S19762C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1219,4017)];
    init_test(&cd_S19762C16, buf);
    S19762C16 *dp, &lv = *(dp=new (buf) S19762C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19488,16064), "sizeof(S19762C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C16)");
    /*is_ambiguous_... S19762C16::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*), 0, "S19762C16");
    /*is_ambiguous_... S19762C16::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*), ABISELECT(2816,2320), "S19762C16");
    /*is_ambiguous_... S19762C15::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C15*), ABISELECT(2816,2320), "S19762C16");
    check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*), ABISELECT(2816,2320), "S19762C16");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*), ABISELECT(2816,2320), "S19762C16");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*), ABISELECT(2816,2320), "S19762C16");
    /*is_ambiguous_... S19762C15::S19762C4 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C15*), ABISELECT(3112,2564), "S19762C16");
    check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(14592,12008), "S19762C16");
    check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(14888,12252), "S19762C16");
    check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(15352,12652), "S19762C16");
    check_base_class_offset(lv, (S19762C10*)(S19762C11*), ABISELECT(14592,12008), "S19762C16");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*), ABISELECT(14592,12008), "S19762C16");
    /*is_ambiguous_... S19762C11::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*), ABISELECT(18712,15404), "S19762C16");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(18712,15404), "S19762C16");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*), ABISELECT(18712,15404), "S19762C16");
    check_base_class_offset(lv, (S19762C8*)(S19762C11*), ABISELECT(18856,15528), "S19762C16");
    check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*), ABISELECT(18856,15528), "S19762C16");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*), ABISELECT(18856,15528), "S19762C16");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*), ABISELECT(18856,15528), "S19762C16");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*), ABISELECT(3584,2972), "S19762C16");
    check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*), ABISELECT(19024,15664), "S19762C16");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*), ABISELECT(19024,15664), "S19762C16");
    check_base_class_offset(lv, (S19762C7*)(S19762C11*), ABISELECT(3584,2972), "S19762C16");
    check_base_class_offset(lv, (S19762C12*)(S19762C11*), ABISELECT(4048,3352), "S19762C16");
    check_base_class_offset(lv, (S19762C11*)(S19762C15*), ABISELECT(3584,2972), "S19762C16");
    check_base_class_offset(lv, (S19762C15*), ABISELECT(3112,2564), "S19762C16");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*), ABISELECT(144,124), "S19762C16");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*), ABISELECT(144,124), "S19762C16");
    check_base_class_offset(lv, (S19762C9*)(S19762C13*), ABISELECT(608,504), "S19762C16");
    check_base_class_offset(lv, (S19762C13*), ABISELECT(608,504), "S19762C16");
    check_field_offset(lv, s19762c16f0, ABISELECT(1236,1020), "S19762C16.s19762c16f0");
    check_field_offset(lv, s19762c16f1, ABISELECT(1248,1024), "S19762C16.s19762c16f1");
    check_field_offset(lv, s19762c16f2, ABISELECT(2800,2308), "S19762C16.s19762c16f2");
    check_field_offset(lv, s19762c16f3, ABISELECT(2804,2312), "S19762C16.s19762c16f3");
    set_bf_and_test(lv, s19762c16f4, ABISELECT(2806,2314), 0, 8, 1, "S19762C16");
    set_bf_and_test(lv, s19762c16f4, ABISELECT(2806,2314), 0, 8, hide_sll(1LL<<7), "S19762C16");
    check_field_offset(lv, s19762c16f5, ABISELECT(2808,2316), "S19762C16.s19762c16f5");
    test_class_info(&lv, &cd_S19762C16);
    dp->~S19762C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C16(Test_S19762C16, "S19762C16", ABISELECT(19488,16064));

#else // __cplusplus

extern void _ZN9S19762C16C1Ev();
extern void _ZN9S19762C16D2Ev();
Name_Map name_map_S19762C16[] = {
  NSPAIR(_ZN9S19762C16C1Ev),
  NSPAIR(_ZN9S19762C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
extern Class_Descriptor cd_S19762C15;
extern VTBL_ENTRY _ZTI9S19762C15[];
extern  VTBL_ENTRY _ZTV9S19762C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C15[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
static Base_Class bases_S19762C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C9,    ABISELECT(2816,2320), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C4,    ABISELECT(3112,2564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(14592,12008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(14888,12252), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(15352,12652), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(14592,12008), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(18712,15404), //bcp->offset
    90, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(18856,15528), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(3584,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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(19024,15664), //bcp->offset
    97, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19762C7,    ABISELECT(3584,2972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(4048,3352), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(3584,2972), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19762C15,    ABISELECT(3112,2564), //bcp->offset
    30, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(144,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(144,124), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C9,    ABISELECT(608,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(608,504), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C16[];
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZThn608_N9S19762C16D1Ev,_ZThn504_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn608_N9S19762C16D0Ev,_ZThn504_N9S19762C16D0Ev)();
extern void _ZN9S19762C133v12Ev();
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn3112_N9S19762C16D1Ev,_ZThn2564_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn3112_N9S19762C16D0Ev,_ZThn2564_N9S19762C16D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn3584_N9S19762C16D1Ev,_ZThn2972_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn3584_N9S19762C16D0Ev,_ZThn2972_N9S19762C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn14592_N9S19762C16D1Ev,_ZThn12008_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn14592_N9S19762C16D0Ev,_ZThn12008_N9S19762C16D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY vtc_S19762C16[] = {
  ABISELECT(19024,15664),
  ABISELECT(18856,15528),
  ABISELECT(18712,15404),
  ABISELECT(14592,12008),
  ABISELECT(3584,2972),
  ABISELECT(3112,2564),
  ABISELECT(2816,2320),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  ABISELECT(2672,2196),
  ABISELECT(18568,15280),
  ABISELECT(18712,15404),
  ABISELECT(18880,15540),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-608,-504),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N9S19762C16D1Ev,_ZThn504_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N9S19762C16D0Ev,_ZThn504_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  0,
  ABISELECT(-2816,-2320),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(-3112,-2564),
  0,
  0,
  0,
  ABISELECT(15912,13100),
  ABISELECT(15744,12964),
  ABISELECT(15600,12840),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  ABISELECT(-3112,-2564),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
  ABISELECT(-3584,-2972),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-3584,-2972),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-4048,-3352),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-14592,-12008),
  0,
  ABISELECT(-14592,-12008),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-14888,-12252),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-15352,-12652),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(-18712,-15404),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-144,-124),
  ABISELECT(-18856,-15528),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  0,
  0,
  0,
  ABISELECT(-19024,-15664),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern VTBL_ENTRY _ZTV9S19762C16[];
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C16[] = {
  ABISELECT(2672,2196),
  ABISELECT(18568,15280),
  ABISELECT(18712,15404),
  ABISELECT(18880,15540),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C7__A1__9S19762C16[] = {
  0,
  0,
  0,
  ABISELECT(-18880,-15540),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C7__A1__9S19762C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-18712,-15404),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C7__A1__9S19762C16[] = {
  0,
  ABISELECT(-18568,-15280),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C7__A1__9S19762C16[] = {
  0,
  ABISELECT(-2672,-2196),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN9S19762C15D1Ev();
extern void _ZN9S19762C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C16[] = {
  ABISELECT(15912,13100),
  ABISELECT(15744,12964),
  ABISELECT(15600,12840),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C15__9S19762C16[] = {
  0,
  ABISELECT(296,244),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C15__9S19762C16[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn11480_N9S19762C15D1Ev,_ZThn9444_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn11480_N9S19762C15D0Ev,_ZThn9444_N9S19762C15D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C15__9S19762C16[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11480,-9444),
  0,
  ABISELECT(-11480,-9444),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C15__9S19762C16[] = {
  ABISELECT(-11776,-9688),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C15__9S19762C16[] = {
  ABISELECT(-12240,-10088),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C15__9S19762C16[] = {
  0,
  ABISELECT(-15600,-12840),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C15__9S19762C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15744,-12964),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C15__9S19762C16[] = {
  0,
  0,
  0,
  ABISELECT(-15912,-13100),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C15__9S19762C16[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C16[] = {
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C11__9S19762C16[] = {
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C11__9S19762C16[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C11__9S19762C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C11__9S19762C16[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C11__9S19762C16[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C16[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C11__9S19762C16[] = {
  0,
  ABISELECT(1232,1032),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn10544_N9S19762C12D1Ev,_ZThn8656_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn10544_N9S19762C12D0Ev,_ZThn8656_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C11__9S19762C16[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__9S19762C16[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__9S19762C16[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C11__9S19762C16[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C11__9S19762C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn11008_N9S19762C11D1Ev,_ZThn9036_N9S19762C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void ABISELECT(_ZThn11008_N9S19762C11D0Ev,_ZThn9036_N9S19762C11D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C11__9S19762C16[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C11__9S19762C16[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C11__9S19762C16[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C11__9S19762C16[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C11__9S19762C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C11__9S19762C16[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C11__9S19762C16[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C11__9S19762C16[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C16[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__9S19762C16[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTT_ENTRY vtt_S19762C16[] = {
  {&(_ZTV9S19762C16[9]),  9,105},
  {&(_tg__ZTV8S19762C7__A1__9S19762C16[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C7__A1__9S19762C16[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C7__A1__9S19762C16[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C7__A1__9S19762C16[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C7__A1__9S19762C16[3]),  3,4},
  {&(_ZTV9S19762C16[29]),  29,105},
  {&(_ZTV9S19762C16[42]),  42,105},
  {&(_ZTV9S19762C16[57]),  57,105},
  {&(_ZTV9S19762C16[78]),  78,105},
  {&(_ZTV9S19762C16[84]),  84,105},
  {&(_ZTV9S19762C16[89]),  89,105},
  {&(_ZTV9S19762C16[93]),  93,105},
  {&(_ZTV9S19762C16[97]),  97,105},
  {&(_ZTV9S19762C16[102]),  102,105},
  {&(_ZTV9S19762C16[67]),  67,105},
  {&(_ZTV9S19762C16[19]),  19,105},
  {&(_tg__ZTV9S19762C15__9S19762C16[8]),  8,13},
  {&(_tg__ZTV8S19762C9__9S19762C15__9S19762C16[3]),  3,4},
  {&(_tg__ZTV9S19762C11__9S19762C15__9S19762C16[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C15__9S19762C16[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C15__9S19762C16[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C15__9S19762C16[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C15__9S19762C16[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C15__9S19762C16[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C15__9S19762C16[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C15__9S19762C16[6]),  6,8},
  {&(_tg__ZTV9S19762C11__9S19762C16[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C11__9S19762C16[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C11__9S19762C16[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C11__9S19762C16[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C11__9S19762C16[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C11__9S19762C16[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C16[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C11__9S19762C16[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C11__9S19762C16[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__9S19762C16[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__9S19762C16[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C11__9S19762C16[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C11__9S19762C16[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C11__9S19762C16[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C11__9S19762C16[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C11__9S19762C16[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C11__9S19762C16[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C11__9S19762C16[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C11__9S19762C16[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C11__9S19762C16[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C11__9S19762C16[6]),  6,8},
  {&(_tg__ZTV8S19762C8__9S19762C16[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__9S19762C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S19762C11D0Ev,_ZThn9036_N9S19762C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S19762C11D1Ev,_ZThn9036_N9S19762C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19762C12D0Ev,_ZThn8656_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19762C12D1Ev,_ZThn8656_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N9S19762C15D0Ev,_ZThn9444_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N9S19762C15D1Ev,_ZThn9444_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14592_N9S19762C16D0Ev,_ZThn12008_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14592_N9S19762C16D1Ev,_ZThn12008_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N9S19762C16D0Ev,_ZThn2972_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N9S19762C16D1Ev,_ZThn2972_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3112_N9S19762C16D0Ev,_ZThn2564_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3112_N9S19762C16D1Ev,_ZThn2564_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C16 = {  "S19762C16", // class name
  bases_S19762C16, 19,
  &(vtc_S19762C16[0]), // expected_vtbl_contents
  &(vtt_S19762C16[0]), // expected_vtt_contents
  ABISELECT(19488,16064), // object size
  NSPAIRA(_ZTI9S19762C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19762C16),105, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19762C16),50, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C3  : virtual S19762C4 , S19762C6 , S19762C14 , virtual S19762C15 , virtual S19762C16 {
  ::S19762C15 s19762c3f0;
  ::S19762C6 s19762c3f1;
  virtual void  v19(); // _ZN8S19762C33v19Ev
  ~S19762C3(); // tgen
  S19762C3(); // tgen
};
//SIG(-1 S19762C3) C1{ VBC2{ v2 v3 v4 Fi[2] FL[2] FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp}[3]} BC4{ VBC3 VBC5{ BC3 VBC2 VBC6{ VBC3 Fp FC3 Fi:3} VBC7{ v6 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} FC7 Fs Fi[2]} BC8{ BC7 BC2 BC3 vd v7 FL[2] Fp[8] FC5 Fp Fi FC5 Fi} BC9{ VBC8 VBC3 VBC6 BC5 BC10{ VBC7 VBC8 VBC3 VBC6 FL:44 Fp Fi FC5 FL[2] Fi[3] FC8 Fc:7 FC11{ BC7 vd v11 FC6 Fi Fp Fi}} v8 FC8 FL Fc:7} v9 v10 FC10 Fs Fi:8} BC12{ VBC6 FC10 Fi:6 Fi FL} VBC13{ VBC7 BC2 VBC9 Fc:8 Fi} VBC14{ BC3 VBC7 VBC13 BC5 BC11 vd v12 Fi FC5 Fi Fs FL:8 Fi} v1 FC13 FC4}


void  S19762C3 ::v19(){vfunc_called(this, "_ZN8S19762C33v19Ev");}
S19762C3 ::~S19762C3(){ note_dtor("S19762C3", this);} // tgen
S19762C3 ::S19762C3(){ note_ctor("S19762C3", this);} // tgen

static void Test_S19762C3()
{
  extern Class_Descriptor cd_S19762C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6631,21802)];
    init_test(&cd_S19762C3, buf);
    S19762C3 *dp, &lv = *(dp=new (buf) S19762C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(106080,87204), "sizeof(S19762C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C3)");
    /*is_ambiguous_... S19762C3::S19762C4 */ AMB_check_base_class_offset(lv, (S19762C4*), ABISELECT(86112,70760), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*), ABISELECT(86112,70760), "S19762C3");
    check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(86112,70760), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*), ABISELECT(86112,70760), "S19762C3");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C16*), ABISELECT(86112,70760), "S19762C3");
    /*is_ambiguous_... S19762C6::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C6*), ABISELECT(86576,71160), "S19762C3");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(86576,71160), "S19762C3");
    /*is_ambiguous_... S19762C11::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*)(S19762C6*), ABISELECT(86576,71160), "S19762C3");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(86576,71160), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*), ABISELECT(86576,71160), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*), ABISELECT(86576,71160), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*), ABISELECT(86720,71284), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*), ABISELECT(87184,71664), "S19762C3");
    check_base_class_offset(lv, (S19762C8*)(S19762C11*)(S19762C6*), ABISELECT(87184,71664), "S19762C3");
    check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(87184,71664), "S19762C3");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(87184,71664), "S19762C3");
    check_base_class_offset(lv, (S19762C8*)(S19762C14*), ABISELECT(87184,71664), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C11*), ABISELECT(87184,71664), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*), ABISELECT(87184,71664), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*), ABISELECT(87184,71664), "S19762C3");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C16*), ABISELECT(87184,71664), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*), ABISELECT(87360,71800), "S19762C3");
    check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(87360,71800), "S19762C3");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(87360,71800), "S19762C3");
    /*is_ambiguous_... S19762C15::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C15*), ABISELECT(87360,71800), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*), ABISELECT(87360,71800), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*), ABISELECT(87360,71800), "S19762C3");
    /*is_ambiguous_... S19762C16::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C16*), ABISELECT(87360,71800), "S19762C3");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C16*), ABISELECT(87360,71800), "S19762C3");
    /*is_ambiguous_... S19762C6::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C6*), ABISELECT(86720,71284), "S19762C3");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C10*)(S19762C6*), 0, "S19762C3");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C10*)(S19762C6*), ABISELECT(296,244), "S19762C3");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C10*)(S19762C6*), ABISELECT(760,644), "S19762C3");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C6*), 0, "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(87664,72044), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(87960,72288), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(88424,72688), "S19762C3");
    check_base_class_offset(lv, (S19762C10*)(S19762C11*)(S19762C6*), ABISELECT(87664,72044), "S19762C3");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(87664,72044), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C11*), ABISELECT(87664,72044), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*), ABISELECT(87664,72044), "S19762C3");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(4128,3396), "S19762C3");
    check_base_class_offset(lv, (S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(4128,3396), "S19762C3");
    check_base_class_offset(lv, (S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(4592,3776), "S19762C3");
    check_base_class_offset(lv, (S19762C11*)(S19762C6*), ABISELECT(4128,3396), "S19762C3");
    check_base_class_offset(lv, (S19762C6*), 0, "S19762C3");
    check_base_class_offset(lv, (S19762C14*), ABISELECT(26288,21584), "S19762C3");
    /*is_ambiguous_... S19762C15::S19762C4 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C15*), ABISELECT(91784,75440), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*), ABISELECT(92256,75848), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C11*), ABISELECT(92256,75848), "S19762C3");
    /*is_ambiguous_... S19762C3::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C12*)(S19762C11*), ABISELECT(92720,76228), "S19762C3");
    check_base_class_offset(lv, (S19762C11*)(S19762C15*), ABISELECT(92256,75848), "S19762C3");
    check_base_class_offset(lv, (S19762C15*), ABISELECT(91784,75440), "S19762C3");
    check_base_class_offset(lv, (S19762C15*)(S19762C16*), ABISELECT(91784,75440), "S19762C3");
    /*is_ambiguous_... S19762C16::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C16*), ABISELECT(103264,84884), "S19762C3");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C16*), ABISELECT(103408,85008), "S19762C3");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C16*), ABISELECT(103408,85008), "S19762C3");
    check_base_class_offset(lv, (S19762C9*)(S19762C13*)(S19762C16*), ABISELECT(103872,85388), "S19762C3");
    check_base_class_offset(lv, (S19762C13*)(S19762C16*), ABISELECT(103872,85388), "S19762C3");
    check_base_class_offset(lv, (S19762C16*), ABISELECT(103264,84884), "S19762C3");
    check_field_offset(lv, s19762c3f0, ABISELECT(37456,30752), "S19762C3.s19762c3f0");
    check_field_offset(lv, s19762c3f1, ABISELECT(54144,44496), "S19762C3.s19762c3f1");
    test_class_info(&lv, &cd_S19762C3);
    dp->~S19762C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C3(Test_S19762C3, "S19762C3", ABISELECT(106080,87204));

#else // __cplusplus

extern void _ZN8S19762C3C1Ev();
extern void _ZN8S19762C3D1Ev();
Name_Map name_map_S19762C3[] = {
  NSPAIR(_ZN8S19762C3C1Ev),
  NSPAIR(_ZN8S19762C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
extern Class_Descriptor cd_S19762C6;
extern VTBL_ENTRY _ZTI8S19762C6[];
extern  VTBL_ENTRY _ZTV8S19762C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C6[];
extern Class_Descriptor cd_S19762C14;
extern VTBL_ENTRY _ZTI9S19762C14[];
extern  VTBL_ENTRY _ZTV9S19762C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C14[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
extern Class_Descriptor cd_S19762C15;
extern VTBL_ENTRY _ZTI9S19762C15[];
extern  VTBL_ENTRY _ZTV9S19762C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C15[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C16;
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
static Base_Class bases_S19762C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C4,    ABISELECT(86112,70760), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(86576,71160), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(86720,71284), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19762C8,    ABISELECT(87184,71664), //bcp->offset
    69, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C9,    ABISELECT(87360,71800), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C7,    ABISELECT(86720,71284), //bcp->offset
    61, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19762C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(296,244), //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
    24, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(760,644), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(87664,72044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(87960,72288), //bcp->offset
    89, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(88424,72688), //bcp->offset
    94, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(87664,72044), //bcp->offset
    76, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(4592,3776), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(4128,3396), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19762C6,    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
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C14,    ABISELECT(26288,21584), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C4,    ABISELECT(91784,75440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(92256,75848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(92256,75848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(92720,76228), //bcp->offset
    128, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(92256,75848), //bcp->offset
    114, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19762C15,    ABISELECT(91784,75440), //bcp->offset
    97, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(103264,84884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(103408,85008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(103408,85008), //bcp->offset
    154, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(103872,85388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(103872,85388), //bcp->offset
    161, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19762C16,    ABISELECT(103264,84884), //bcp->offset
    136, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19762C3[];
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C3D1Ev();
extern void _ZN8S19762C3D0Ev();
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C63v10Ev();
extern void _ZN8S19762C63v11Ev();
extern void _ZN8S19762C33v19Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZThn4128_N8S19762C3D1Ev,_ZThn3396_N8S19762C3D1Ev)();
extern void ABISELECT(_ZThn4128_N8S19762C3D0Ev,_ZThn3396_N8S19762C3D0Ev)();
extern void ABISELECT(_ZThn4592_N8S19762C3D1Ev,_ZThn3776_N8S19762C3D1Ev)();
extern void ABISELECT(_ZThn4592_N8S19762C3D0Ev,_ZThn3776_N8S19762C3D0Ev)();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S19762C3D1Ev,_ZTv0_n16_N8S19762C3D1Ev)();
extern void ABISELECT(_ZThn87664_N8S19762C3D1Ev,_ZThn72044_N8S19762C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19762C3D0Ev,_ZTv0_n16_N8S19762C3D0Ev)();
extern void ABISELECT(_ZThn87664_N8S19762C3D0Ev,_ZThn72044_N8S19762C3D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N8S19762C3D1Ev,_ZTv0_n48_N8S19762C3D1Ev)();
extern void ABISELECT(_ZThn91784_N8S19762C3D1Ev,_ZThn75440_N8S19762C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19762C3D0Ev,_ZTv0_n48_N8S19762C3D0Ev)();
extern void ABISELECT(_ZThn91784_N8S19762C3D0Ev,_ZThn75440_N8S19762C3D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N8S19762C3D1Ev,_ZTv0_n40_N8S19762C3D1Ev)();
extern void ABISELECT(_ZThn92256_N8S19762C3D1Ev,_ZThn75848_N8S19762C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19762C3D0Ev,_ZTv0_n40_N8S19762C3D0Ev)();
extern void ABISELECT(_ZThn92256_N8S19762C3D0Ev,_ZThn75848_N8S19762C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N8S19762C3D1Ev,_ZTvn380_n40_N8S19762C3D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S19762C3D0Ev,_ZTvn380_n40_N8S19762C3D0Ev)();
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTv0_n88_N8S19762C3D1Ev,_ZTv0_n44_N8S19762C3D1Ev)();
extern void ABISELECT(_ZThn103264_N8S19762C3D1Ev,_ZThn84884_N8S19762C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19762C3D0Ev,_ZTv0_n44_N8S19762C3D0Ev)();
extern void ABISELECT(_ZThn103264_N8S19762C3D0Ev,_ZThn84884_N8S19762C3D0Ev)() __attribute__((weak));
extern void _ZN9S19762C163v13Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn608_n88_N8S19762C3D1Ev,_ZTvn504_n44_N8S19762C3D1Ev)();
extern void ABISELECT(_ZTvn608_n88_N8S19762C3D0Ev,_ZTvn504_n44_N8S19762C3D0Ev)();
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY vtc_S19762C3[] = {
  ABISELECT(103264,84884),
  ABISELECT(92256,75848),
  ABISELECT(91784,75440),
  ABISELECT(87664,72044),
  ABISELECT(87360,71800),
  ABISELECT(87184,71664),
  ABISELECT(86112,70760),
  ABISELECT(86720,71284),
  ABISELECT(86576,71160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19762C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19762C3D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19762C33v19Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(83536,68648),
  ABISELECT(83232,68404),
  ABISELECT(82448,67764),
  ABISELECT(83056,68268),
  ABISELECT(81984,67364),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C3D1Ev,_ZThn3396_N8S19762C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C3D0Ev,_ZThn3396_N8S19762C3D0Ev),
  ABISELECT(82592,67888),
  ABISELECT(81984,67384),
  ABISELECT(83072,68268),
  ABISELECT(82768,68024),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C3D1Ev,_ZThn3776_N8S19762C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C3D0Ev,_ZThn3776_N8S19762C3D0Ev),
  ABISELECT(60288,49576),
  ABISELECT(60896,50080),
  ABISELECT(-26288,-21584),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  0,
  0,
  0,
  ABISELECT(-86112,-70760),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  0,
  ABISELECT(-86576,-71160),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(640,516),
  ABISELECT(-144,-124),
  ABISELECT(464,380),
  ABISELECT(-608,-524),
  ABISELECT(-86720,-71284),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-608,-504),
  ABISELECT(-87184,-71664),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  0,
  ABISELECT(-87360,-71800),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-87664,-72044),
  0,
  ABISELECT(-87664,-72044),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C3D1Ev,_ZTv0_n16_N8S19762C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C3D0Ev,_ZTv0_n16_N8S19762C3D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-87960,-72288),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-88424,-72688),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-91784,-75440),
  0,
  0,
  0,
  ABISELECT(-5672,-4680),
  ABISELECT(-4600,-3776),
  ABISELECT(-5208,-4280),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  ABISELECT(-91784,-75440),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19762C3D1Ev,_ZTv0_n48_N8S19762C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19762C3D0Ev,_ZTv0_n48_N8S19762C3D0Ev),
  ABISELECT(-92256,-75848),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  ABISELECT(-92256,-75848),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19762C3D1Ev,_ZTv0_n40_N8S19762C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19762C3D0Ev,_ZTv0_n40_N8S19762C3D0Ev),
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-92720,-76228),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19762C3D1Ev,_ZTvn380_n40_N8S19762C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19762C3D0Ev,_ZTvn380_n40_N8S19762C3D0Ev),
  ABISELECT(608,504),
  ABISELECT(608,504),
  0,
  ABISELECT(-103264,-84884),
  0,
  ABISELECT(-17152,-14124),
  ABISELECT(-16080,-13220),
  ABISELECT(-16688,-13724),
  ABISELECT(-15600,-12840),
  ABISELECT(-11008,-9036),
  ABISELECT(-11480,-9444),
  ABISELECT(-15904,-13084),
  ABISELECT(-103264,-84884),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19762C3D1Ev,_ZTv0_n44_N8S19762C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19762C3D0Ev,_ZTv0_n44_N8S19762C3D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  ABISELECT(-16048,-13208),
  ABISELECT(-16832,-13848),
  ABISELECT(-16224,-13344),
  ABISELECT(-17296,-14248),
  ABISELECT(-103408,-85008),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-103872,-85388),
  (VTBL_ENTRY)&(_ZTI8S19762C3[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n88_N8S19762C3D1Ev,_ZTvn504_n44_N8S19762C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n88_N8S19762C3D0Ev,_ZTvn504_n44_N8S19762C3D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern VTBL_ENTRY _ZTV8S19762C3[];
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C6D1Ev();
extern void _ZN8S19762C6D0Ev();
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C63v10Ev();
extern void _ZN8S19762C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C6__8S19762C3[] = {
  ABISELECT(87664,72044),
  ABISELECT(87360,71800),
  ABISELECT(87184,71664),
  ABISELECT(86112,70760),
  ABISELECT(86720,71284),
  ABISELECT(86576,71160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19762C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19762C6D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v11Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(83536,68648),
  ABISELECT(83232,68404),
  ABISELECT(82448,67764),
  ABISELECT(83056,68268),
  ABISELECT(81984,67364),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C118S19762C6__A1__8S19762C3[] = {
  ABISELECT(83232,68404),
  ABISELECT(82448,67764),
  ABISELECT(83056,68268),
  ABISELECT(81984,67364),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C118S19762C6__A1__8S19762C3[] = {
  0,
  0,
  0,
  ABISELECT(-81984,-67364),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C118S19762C6__A1__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(-83056,-68268),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C118S19762C6__A1__8S19762C3[] = {
  0,
  ABISELECT(-82448,-67764),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C118S19762C6__A1__8S19762C3[] = {
  0,
  ABISELECT(-83232,-68404),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(82592,67888),
  ABISELECT(81984,67384),
  ABISELECT(83072,68268),
  ABISELECT(82768,68024),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C118S19762C6__8S19762C3[] = {
  0,
  ABISELECT(-82768,-68024),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn83072_N9S19762C12D1Ev,_ZThn68268_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn83072_N9S19762C12D0Ev,_ZThn68268_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-83072,-68268),
  0,
  ABISELECT(-83072,-68268),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(-83368,-68512),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(-83832,-68912),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C118S19762C6__8S19762C3[] = {
  0,
  ABISELECT(-81984,-67384),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(-82592,-67888),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn83536_N9S19762C11D1Ev,_ZThn68648_N9S19762C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void ABISELECT(_ZThn83536_N9S19762C11D0Ev,_ZThn68648_N9S19762C11D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-83536,-68648),
  0,
  ABISELECT(-83536,-68648),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(-83832,-68892),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(-84296,-69292),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C118S19762C6__8S19762C3[] = {
  0,
  ABISELECT(-82448,-67764),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(-83056,-68268),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C118S19762C6__8S19762C3[] = {
  0,
  0,
  0,
  ABISELECT(-81984,-67364),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C118S19762C6__8S19762C3[] = {
  0,
  ABISELECT(-83232,-68404),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C118S19762C6__8S19762C3[] = {
  ABISELECT(82592,67888),
  ABISELECT(81984,67384),
  ABISELECT(83072,68268),
  ABISELECT(82768,68024),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C6__8S19762C3[] = {
  0,
  ABISELECT(-86576,-71160),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__8S19762C6__8S19762C3[] = {
  0,
  ABISELECT(640,516),
  ABISELECT(-144,-124),
  ABISELECT(464,380),
  ABISELECT(-608,-524),
  ABISELECT(-86720,-71284),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C6__8S19762C3[] = {
  0,
  0,
  0,
  ABISELECT(-86112,-70760),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C6__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(-87184,-71664),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C6__8S19762C3[] = {
  0,
  ABISELECT(-87360,-71800),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZThn4128_N8S19762C6D1Ev,_ZThn3396_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn4128_N8S19762C6D0Ev,_ZThn3396_N8S19762C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C11__8S19762C6__8S19762C3[] = {
  ABISELECT(83536,68648),
  ABISELECT(83232,68404),
  ABISELECT(82448,67764),
  ABISELECT(83056,68268),
  ABISELECT(81984,67364),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C6D1Ev,_ZThn3396_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C6D0Ev,_ZThn3396_N8S19762C6D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn87664_N8S19762C6D1Ev,_ZThn72044_N8S19762C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev)();
extern void ABISELECT(_ZThn87664_N8S19762C6D0Ev,_ZThn72044_N8S19762C6D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__A1__8S19762C6__8S19762C3[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-87664,-72044),
  0,
  ABISELECT(-87664,-72044),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A2__8S19762C6__8S19762C3[] = {
  ABISELECT(-87960,-72288),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A3__8S19762C6__8S19762C3[] = {
  ABISELECT(-88424,-72688),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZThn4592_N8S19762C6D1Ev,_ZThn3776_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn4592_N8S19762C6D0Ev,_ZThn3776_N8S19762C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__8S19762C6__8S19762C3[] = {
  ABISELECT(82592,67888),
  ABISELECT(81984,67384),
  ABISELECT(83072,68268),
  ABISELECT(82768,68024),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C6D1Ev,_ZThn3776_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C6D0Ev,_ZThn3776_N8S19762C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19762C14__8S19762C3[] = {
  ABISELECT(60288,49576),
  ABISELECT(60896,50080),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C14__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(-60896,-50080),
  (VTBL_ENTRY)&(_ZTI9S19762C14[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__9S19762C14__8S19762C3[] = {
  0,
  ABISELECT(-60288,-49576),
  (VTBL_ENTRY)&(_ZTI9S19762C14[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__8S19762C3[] = {
  ABISELECT(640,516),
  ABISELECT(-144,-124),
  ABISELECT(464,380),
  ABISELECT(-608,-524),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C7__8S19762C3[] = {
  0,
  0,
  0,
  ABISELECT(608,524),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C7__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C7__8S19762C3[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C7__8S19762C3[] = {
  0,
  ABISELECT(-640,-516),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C3[] = {
  ABISELECT(-608,-504),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__8S19762C3[] = {
  0,
  ABISELECT(608,504),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN9S19762C15D1Ev();
extern void _ZN9S19762C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C15__8S19762C3[] = {
  ABISELECT(-5672,-4680),
  ABISELECT(-4600,-3776),
  ABISELECT(-5208,-4280),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C15__8S19762C3[] = {
  0,
  ABISELECT(4424,3640),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C15__8S19762C3[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C15__8S19762C3[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4120,3396),
  0,
  ABISELECT(4120,3396),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C15__8S19762C3[] = {
  ABISELECT(3824,3152),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C15__8S19762C3[] = {
  ABISELECT(3360,2752),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C15__8S19762C3[] = {
  0,
  ABISELECT(5208,4280),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C15__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(4600,3776),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C15__8S19762C3[] = {
  0,
  0,
  0,
  ABISELECT(5672,4680),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C15__8S19762C3[] = {
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C11__A1__8S19762C3[] = {
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C11__A2__8S19762C3[] = {
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C11__A2__8S19762C3[] = {
  0,
  0,
  0,
  ABISELECT(6144,5088),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C11__A2__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(5072,4184),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A2__8S19762C3[] = {
  0,
  ABISELECT(5680,4688),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C11__A2__8S19762C3[] = {
  0,
  ABISELECT(4896,4048),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__A1__8S19762C3[] = {
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C11__A1__8S19762C3[] = {
  0,
  ABISELECT(5360,4428),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C11__A1__8S19762C3[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(5056,4184),
  0,
  ABISELECT(5056,4184),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__A1__8S19762C3[] = {
  ABISELECT(4760,3940),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__A1__8S19762C3[] = {
  ABISELECT(4296,3540),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C11__A1__8S19762C3[] = {
  0,
  ABISELECT(6144,5068),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C11__A1__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(5536,4564),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C11__A1__8S19762C3[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4592,3804),
  0,
  ABISELECT(4592,3804),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C11__A1__8S19762C3[] = {
  ABISELECT(4296,3560),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C11__A1__8S19762C3[] = {
  ABISELECT(3832,3160),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C11__A1__8S19762C3[] = {
  0,
  ABISELECT(5680,4688),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C11__A1__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(5072,4184),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C11__A1__8S19762C3[] = {
  0,
  0,
  0,
  ABISELECT(6144,5088),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C11__A1__8S19762C3[] = {
  0,
  ABISELECT(4896,4048),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C11__A1__8S19762C3[] = {
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C16__8S19762C3[] = {
  ABISELECT(-17152,-14124),
  ABISELECT(-16080,-13220),
  ABISELECT(-16688,-13724),
  ABISELECT(-15600,-12840),
  ABISELECT(-11008,-9036),
  ABISELECT(-11480,-9444),
  ABISELECT(-15904,-13084),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C16__A3__8S19762C3[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-16832,-13848),
  ABISELECT(-16224,-13344),
  ABISELECT(-17296,-14248),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C16__A3__8S19762C3[] = {
  0,
  0,
  0,
  ABISELECT(17296,14248),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C16__A3__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(16224,13344),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C16__A3__8S19762C3[] = {
  0,
  ABISELECT(16832,13848),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C16__A3__8S19762C3[] = {
  0,
  ABISELECT(16048,13208),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C16__8S19762C3[] = {
  0,
  ABISELECT(15904,13084),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C16__8S19762C3[] = {
  ABISELECT(11480,9444),
  0,
  0,
  0,
  ABISELECT(-5672,-4680),
  ABISELECT(-4600,-3776),
  ABISELECT(-5208,-4280),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  ABISELECT(11480,9444),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C16__8S19762C3[] = {
  ABISELECT(11008,9036),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  ABISELECT(11008,9036),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C16__8S19762C3[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(15600,12840),
  0,
  ABISELECT(15600,12840),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C16__8S19762C3[] = {
  ABISELECT(15304,12596),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C16__8S19762C3[] = {
  ABISELECT(14840,12196),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A2__9S19762C16__8S19762C3[] = {
  0,
  ABISELECT(16688,13724),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C16__8S19762C3[] = {
  ABISELECT(-608,-504),
  ABISELECT(16080,13220),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C16__8S19762C3[] = {
  0,
  0,
  0,
  ABISELECT(17152,14124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C16__8S19762C3[] = {
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(10544,8656),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C16__8S19762C3[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-16832,-13848),
  ABISELECT(-16224,-13344),
  ABISELECT(-17296,-14248),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTT_ENTRY vtt_S19762C3[] = {
  {&(_ZTV8S19762C3[11]),  11,167},
  {&(_tg__ZTV8S19762C6__8S19762C3[8]),  8,14},
  {&(_tg__ZTV9S19762C118S19762C6__8S19762C3[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C118S19762C6__A1__8S19762C3[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C118S19762C6__A1__8S19762C3[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C118S19762C6__A1__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C118S19762C6__A1__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C118S19762C6__A1__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C118S19762C6__8S19762C3[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C118S19762C6__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C118S19762C6__8S19762C3[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C118S19762C6__8S19762C3[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C118S19762C6__8S19762C3[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C118S19762C6__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C118S19762C6__8S19762C3[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C118S19762C6__8S19762C3[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C118S19762C6__8S19762C3[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C118S19762C6__8S19762C3[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C118S19762C6__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C118S19762C6__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C118S19762C6__8S19762C3[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C118S19762C6__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C118S19762C6__8S19762C3[6]),  6,8},
  {&(_tg__ZTV8S19762C5__8S19762C6__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C7__8S19762C6__8S19762C3[7]),  7,8},
  {&(_tg__ZTV8S19762C4__8S19762C6__8S19762C3[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C6__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C9__8S19762C6__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C11__8S19762C6__8S19762C3[7]),  7,11},
  {&(_tg__ZTV9S19762C10__A1__8S19762C6__8S19762C3[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A2__8S19762C6__8S19762C3[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A3__8S19762C6__8S19762C3[2]),  2,3},
  {&(_tg__ZTV9S19762C129S19762C11__8S19762C6__8S19762C3[6]),  6,8},
  {&(_tg__ZTV9S19762C14__8S19762C3[4]),  4,4},
  {&(_tg__ZTV8S19762C8__9S19762C14__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C5__9S19762C14__8S19762C3[3]),  3,4},
  {&(_ZTV8S19762C3[54]),  54,167},
  {&(_ZTV8S19762C3[60]),  60,167},
  {&(_ZTV8S19762C3[68]),  68,167},
  {&(_ZTV8S19762C3[72]),  72,167},
  {&(_ZTV8S19762C3[75]),  75,167},
  {&(_ZTV8S19762C3[33]),  33,167},
  {&(_ZTV8S19762C3[85]),  85,167},
  {&(_ZTV8S19762C3[91]),  91,167},
  {&(_ZTV8S19762C3[96]),  96,167},
  {&(_ZTV8S19762C3[43]),  43,167},
  {&(_ZTV8S19762C3[49]),  49,167},
  {&(_ZTV8S19762C3[109]),  109,167},
  {&(_ZTV8S19762C3[124]),  124,167},
  {&(_ZTV8S19762C3[134]),  134,167},
  {&(_ZTV8S19762C3[150]),  150,167},
  {&(_ZTV8S19762C3[160]),  160,167},
  {&(_ZTV8S19762C3[163]),  163,167},
  {&(_tg__ZTV8S19762C7__8S19762C3[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C7__8S19762C3[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C7__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C7__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C7__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C8__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C15__8S19762C3[8]),  8,13},
  {&(_tg__ZTV8S19762C9__9S19762C15__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C11__9S19762C15__8S19762C3[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C15__8S19762C3[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C15__8S19762C3[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C15__8S19762C3[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C15__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C15__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C15__8S19762C3[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C15__8S19762C3[6]),  6,8},
  {&(_tg__ZTV9S19762C11__A1__8S19762C3[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C11__A2__8S19762C3[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C11__A2__8S19762C3[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C11__A2__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A2__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C11__A2__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C11__A1__8S19762C3[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C11__A1__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C11__A1__8S19762C3[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__A1__8S19762C3[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__A1__8S19762C3[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C11__A1__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C11__A1__8S19762C3[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C11__A1__8S19762C3[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C11__A1__8S19762C3[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C11__A1__8S19762C3[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C11__A1__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C11__A1__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C11__A1__8S19762C3[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C11__A1__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C11__A1__8S19762C3[6]),  6,8},
  {&(_tg__ZTV9S19762C16__8S19762C3[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C16__A3__8S19762C3[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C16__A3__8S19762C3[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C16__A3__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C16__A3__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C16__A3__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C16__8S19762C3[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C16__8S19762C3[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C16__8S19762C3[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C16__8S19762C3[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C16__8S19762C3[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C16__8S19762C3[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A2__9S19762C16__8S19762C3[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C16__8S19762C3[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C16__8S19762C3[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C16__8S19762C3[6]),  6,8},
  {&(_tg__ZTV8S19762C7__A1__9S19762C16__8S19762C3[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S19762C3[];
extern  VTBL_ENTRY _ZTV8S19762C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C3[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87664_N8S19762C6D0Ev,_ZThn72044_N8S19762C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87664_N8S19762C6D1Ev,_ZThn72044_N8S19762C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83536_N9S19762C11D0Ev,_ZThn68648_N9S19762C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83536_N9S19762C11D1Ev,_ZThn68648_N9S19762C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83072_N9S19762C12D0Ev,_ZThn68268_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83072_N9S19762C12D1Ev,_ZThn68268_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19762C3D0Ev,_ZTv0_n44_N8S19762C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn103264_N8S19762C3D0Ev,_ZThn84884_N8S19762C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19762C3D1Ev,_ZTv0_n44_N8S19762C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn103264_N8S19762C3D1Ev,_ZThn84884_N8S19762C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19762C3D0Ev,_ZTv0_n40_N8S19762C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn92256_N8S19762C3D0Ev,_ZThn75848_N8S19762C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19762C3D1Ev,_ZTv0_n40_N8S19762C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn92256_N8S19762C3D1Ev,_ZThn75848_N8S19762C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19762C3D0Ev,_ZTv0_n48_N8S19762C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn91784_N8S19762C3D0Ev,_ZThn75440_N8S19762C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19762C3D1Ev,_ZTv0_n48_N8S19762C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn91784_N8S19762C3D1Ev,_ZThn75440_N8S19762C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C3D0Ev,_ZTv0_n16_N8S19762C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87664_N8S19762C3D0Ev,_ZThn72044_N8S19762C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C3D1Ev,_ZTv0_n16_N8S19762C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87664_N8S19762C3D1Ev,_ZThn72044_N8S19762C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C3 = {  "S19762C3", // class name
  bases_S19762C3, 32,
  &(vtc_S19762C3[0]), // expected_vtbl_contents
  &(vtt_S19762C3[0]), // expected_vtt_contents
  ABISELECT(106080,87204), // object size
  NSPAIRA(_ZTI8S19762C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19762C3),167, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19762C3),108, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C2  {
  void *s19762c2f0;
  int s19762c2f1[2];
  short s19762c2f2;
  char s19762c2f3;
  int s19762c2f4;
  ::S19762C3 s19762c2f5;
  int s19762c2f6;
  void  mf19762c2(); // _ZN8S19762C29mf19762c2Ev
};
//SIG(-1 S19762C2) C1{ m Fp Fi[2] Fs Fc Fi FC2{ VBC3{ v2 v3 v4 Fi[2] FL[2] FC4{ v5 Fs:6 Fl Fs:4 FL[13] Fp}[3]} BC5{ VBC4 VBC6{ BC4 VBC3 VBC7{ VBC4 Fp FC4 Fi:3} VBC8{ v6 FL FD Fp Fc FC4 Fp[2] FL[8] Fs Fp FL:64} FC8 Fs Fi[2]} BC9{ BC8 BC3 BC4 vd v7 FL[2] Fp[8] FC6 Fp Fi FC6 Fi} BC10{ VBC9 VBC4 VBC7 BC6 BC11{ VBC8 VBC9 VBC4 VBC7 FL:44 Fp Fi FC6 FL[2] Fi[3] FC9 Fc:7 FC12{ BC8 vd v11 FC7 Fi Fp Fi}} v8 FC9 FL Fc:7} v9 v10 FC11 Fs Fi:8} BC13{ VBC7 FC11 Fi:6 Fi FL} VBC14{ VBC8 BC3 VBC10 Fc:8 Fi} VBC15{ BC4 VBC8 VBC14 BC6 BC12 vd v12 Fi FC6 Fi Fs FL:8 Fi} v1 FC14 FC5} Fi}


void  S19762C2 ::mf19762c2(){}

static void Test_S19762C2()
{
  {
    init_simple_test("S19762C2");
    static S19762C2 lv;
    check2(sizeof(lv), ABISELECT(106128,87228), "sizeof(S19762C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C2)");
    check_field_offset(lv, s19762c2f0, 0, "S19762C2.s19762c2f0");
    check_field_offset(lv, s19762c2f1, ABISELECT(8,4), "S19762C2.s19762c2f1");
    check_field_offset(lv, s19762c2f2, ABISELECT(16,12), "S19762C2.s19762c2f2");
    check_field_offset(lv, s19762c2f3, ABISELECT(18,14), "S19762C2.s19762c2f3");
    check_field_offset(lv, s19762c2f4, ABISELECT(20,16), "S19762C2.s19762c2f4");
    check_field_offset(lv, s19762c2f5, ABISELECT(32,20), "S19762C2.s19762c2f5");
    check_field_offset(lv, s19762c2f6, ABISELECT(106112,87224), "S19762C2.s19762c2f6");
  }
}
static Arrange_To_Call_Me vS19762C2(Test_S19762C2, "S19762C2", ABISELECT(106128,87228));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19762C2[];
VTBL_ENTRY *P__ZTI8S19762C2 = _ZTI8S19762C2; 
Class_Descriptor cd_S19762C2 = {  "S19762C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(106128,87228), // object size
  NSPAIRA(_ZTI8S19762C2),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  S19762C18_nt  {
};
//SIG(-1 S19762C18_nt) C1{}



//skip512 S19762C18_nt

#else // __cplusplus

Class_Descriptor cd_S19762C18_nt = {  "S19762C18_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  S19762C19  : S19762C7 , virtual S19762C15 , S19762C16 {
  ::S19762C15 s19762c19f0;
  int s19762c19f1[2];
  char s19762c19f2;
  int s19762c19f3;
  __tsi64 s19762c19f4;
  int s19762c19f5[2];
  void *s19762c19f6[2];
  int s19762c19f7[2];
  virtual void  v14(); // _ZN9S19762C193v14Ev
  virtual void  v15(); // _ZN9S19762C193v15Ev
  ~S19762C19(); // tgen
  S19762C19(); // tgen
};
//SIG(-1 S19762C19) C1{ BC2{ BC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} VBC4{ v4 v5 v6 Fi[2] FL[2] FC3[3]} VBC5{ VBC3 Fp FC3 Fi:3} VBC6{ v7 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} FC6 Fs Fi[2]} VBC7{ VBC6 BC4 VBC8{ VBC9{ BC6 BC4 BC3 vd v8 FL[2] Fp[8] FC2 Fp Fi FC2 Fi} VBC3 VBC5 BC2 BC10{ VBC6 VBC9 VBC3 VBC5 FL:44 Fp Fi FC2 FL[2] Fi[3] FC9 Fc:7 FC11{ BC6 vd v10 FC5 Fi Fp Fi}} v9 FC9 FL Fc:7} Fc:8 Fi} BC12{ BC3 VBC6 VBC7 BC2 BC11 vd v11 Fi FC2 Fi Fs FL:8 Fi} v1 v2 FC7 Fi[2] Fc Fi FL Fi[2] Fp[2] Fi[2]}


void  S19762C19 ::v14(){vfunc_called(this, "_ZN9S19762C193v14Ev");}
void  S19762C19 ::v15(){vfunc_called(this, "_ZN9S19762C193v15Ev");}
S19762C19 ::~S19762C19(){ note_dtor("S19762C19", this);} // tgen
S19762C19 ::S19762C19(){ note_ctor("S19762C19", this);} // tgen

static void Test_S19762C19()
{
  extern Class_Descriptor cd_S19762C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2295,7560)];
    init_test(&cd_S19762C19, buf);
    S19762C19 *dp, &lv = *(dp=new (buf) S19762C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(36704,30236), "sizeof(S19762C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C19)");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*), 0, "S19762C19");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*), ABISELECT(20024,16492), "S19762C19");
    check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*), ABISELECT(20024,16492), "S19762C19");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C16*), ABISELECT(20024,16492), "S19762C19");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(20656,17028), "S19762C19");
    /*is_ambiguous_... S19762C11::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*), ABISELECT(20656,17028), "S19762C19");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*), ABISELECT(20656,17028), "S19762C19");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*), ABISELECT(20488,16892), "S19762C19");
    check_base_class_offset(lv, (S19762C8*)(S19762C11*), ABISELECT(20488,16892), "S19762C19");
    check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*), ABISELECT(20488,16892), "S19762C19");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*), ABISELECT(20488,16892), "S19762C19");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C16*), ABISELECT(20488,16892), "S19762C19");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*), ABISELECT(20800,17152), "S19762C19");
    /*is_ambiguous_... S19762C15::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C15*), ABISELECT(20800,17152), "S19762C19");
    check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*), ABISELECT(20800,17152), "S19762C19");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*), ABISELECT(20800,17152), "S19762C19");
    /*is_ambiguous_... S19762C16::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C16*), ABISELECT(20800,17152), "S19762C19");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C16*), ABISELECT(20800,17152), "S19762C19");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*), 0, "S19762C19");
    /*is_ambiguous_... S19762C15::S19762C4 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C15*), ABISELECT(21096,17396), "S19762C19");
    check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(32576,26840), "S19762C19");
    check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(32872,27084), "S19762C19");
    check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(33336,27484), "S19762C19");
    check_base_class_offset(lv, (S19762C10*)(S19762C11*), ABISELECT(32576,26840), "S19762C19");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*), ABISELECT(32576,26840), "S19762C19");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*), ABISELECT(21568,17804), "S19762C19");
    check_base_class_offset(lv, (S19762C7*)(S19762C11*), ABISELECT(21568,17804), "S19762C19");
    check_base_class_offset(lv, (S19762C12*)(S19762C11*), ABISELECT(22032,18184), "S19762C19");
    check_base_class_offset(lv, (S19762C11*)(S19762C15*), ABISELECT(21568,17804), "S19762C19");
    check_base_class_offset(lv, (S19762C15*), ABISELECT(21096,17396), "S19762C19");
    check_base_class_offset(lv, (S19762C15*)(S19762C16*), ABISELECT(21096,17396), "S19762C19");
    /*is_ambiguous_... S19762C16::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C16*), ABISELECT(464,380), "S19762C19");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C16*), ABISELECT(608,504), "S19762C19");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C16*), ABISELECT(608,504), "S19762C19");
    check_base_class_offset(lv, (S19762C9*)(S19762C13*)(S19762C16*), ABISELECT(1072,884), "S19762C19");
    check_base_class_offset(lv, (S19762C13*)(S19762C16*), ABISELECT(1072,884), "S19762C19");
    check_base_class_offset(lv, (S19762C16*), ABISELECT(464,380), "S19762C19");
    check_field_offset(lv, s19762c19f0, ABISELECT(3280,2700), "S19762C19.s19762c19f0");
    check_field_offset(lv, s19762c19f1, ABISELECT(19968,16444), "S19762C19.s19762c19f1");
    check_field_offset(lv, s19762c19f2, ABISELECT(19976,16452), "S19762C19.s19762c19f2");
    check_field_offset(lv, s19762c19f3, ABISELECT(19980,16456), "S19762C19.s19762c19f3");
    check_field_offset(lv, s19762c19f4, ABISELECT(19984,16460), "S19762C19.s19762c19f4");
    check_field_offset(lv, s19762c19f5, ABISELECT(19992,16468), "S19762C19.s19762c19f5");
    check_field_offset(lv, s19762c19f6, ABISELECT(20000,16476), "S19762C19.s19762c19f6");
    check_field_offset(lv, s19762c19f7, ABISELECT(20016,16484), "S19762C19.s19762c19f7");
    test_class_info(&lv, &cd_S19762C19);
    dp->~S19762C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C19(Test_S19762C19, "S19762C19", ABISELECT(36704,30236));

#else // __cplusplus

extern void _ZN9S19762C19C1Ev();
extern void _ZN9S19762C19D1Ev();
Name_Map name_map_S19762C19[] = {
  NSPAIR(_ZN9S19762C19C1Ev),
  NSPAIR(_ZN9S19762C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
extern Class_Descriptor cd_S19762C15;
extern VTBL_ENTRY _ZTI9S19762C15[];
extern  VTBL_ENTRY _ZTV9S19762C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C15[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C16;
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
static Base_Class bases_S19762C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(20024,16492), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(20656,17028), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(20488,16892), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C9,    ABISELECT(20800,17152), //bcp->offset
    55, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C4,    ABISELECT(21096,17396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(32576,26840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(32872,27084), //bcp->offset
    111, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(33336,27484), //bcp->offset
    116, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(32576,26840), //bcp->offset
    98, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(21568,17804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(21568,17804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(22032,18184), //bcp->offset
    90, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(21568,17804), //bcp->offset
    76, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19762C15,    ABISELECT(21096,17396), //bcp->offset
    59, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(464,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(608,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(608,504), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(1072,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
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(1072,884), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19762C16,    ABISELECT(464,380), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C19[];
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void _ZN9S19762C19D1Ev();
extern void _ZN9S19762C19D0Ev();
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZThn464_N9S19762C19D1Ev,_ZThn380_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C19D0Ev,_ZThn380_N9S19762C19D0Ev)();
extern void _ZN9S19762C163v13Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZThn1072_N9S19762C19D1Ev,_ZThn884_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn1072_N9S19762C19D0Ev,_ZThn884_N9S19762C19D0Ev)();
extern void _ZN9S19762C133v12Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn21096_N9S19762C19D1Ev,_ZThn17396_N9S19762C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev)();
extern void ABISELECT(_ZThn21096_N9S19762C19D0Ev,_ZThn17396_N9S19762C19D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn21568_N9S19762C19D1Ev,_ZThn17804_N9S19762C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev)();
extern void ABISELECT(_ZThn21568_N9S19762C19D0Ev,_ZThn17804_N9S19762C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N9S19762C19D1Ev,_ZTvn380_n40_N9S19762C19D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C19D0Ev,_ZTvn380_n40_N9S19762C19D0Ev)();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C19D1Ev,_ZTv0_n16_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn32576_N9S19762C19D1Ev,_ZThn26840_N9S19762C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C19D0Ev,_ZTv0_n16_N9S19762C19D0Ev)();
extern void ABISELECT(_ZThn32576_N9S19762C19D0Ev,_ZThn26840_N9S19762C19D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY vtc_S19762C19[] = {
  ABISELECT(32576,26840),
  ABISELECT(21568,17804),
  ABISELECT(21096,17396),
  ABISELECT(20800,17152),
  ABISELECT(20656,17028),
  ABISELECT(20488,16892),
  ABISELECT(20024,16492),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&_ZN9S19762C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C19D0Ev,
  ABISELECT(19560,16112),
  ABISELECT(20024,16512),
  ABISELECT(20192,16648),
  ABISELECT(32112,26460),
  ABISELECT(21104,17424),
  ABISELECT(20632,17016),
  ABISELECT(20336,16772),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C19D1Ev,_ZThn380_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C19D0Ev,_ZThn380_N9S19762C19D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  ABISELECT(20192,16648),
  ABISELECT(20048,16524),
  ABISELECT(19880,16388),
  ABISELECT(19416,15988),
  ABISELECT(-608,-504),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-1072,-884),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S19762C19D1Ev,_ZThn884_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N9S19762C19D0Ev,_ZThn884_N9S19762C19D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  0,
  0,
  0,
  ABISELECT(-20024,-16492),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(168,136),
  ABISELECT(-20488,-16892),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  0,
  ABISELECT(-20656,-17028),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(-20800,-17152),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(-21096,-17396),
  0,
  0,
  0,
  ABISELECT(-1072,-904),
  ABISELECT(-608,-504),
  ABISELECT(-440,-368),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  ABISELECT(-21096,-17396),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev),
  ABISELECT(-21568,-17804),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  ABISELECT(-21568,-17804),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev),
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-22032,-18184),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C19D1Ev,_ZTvn380_n40_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C19D0Ev,_ZTvn380_n40_N9S19762C19D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-32576,-26840),
  0,
  ABISELECT(-32576,-26840),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C19D1Ev,_ZTv0_n16_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C19D0Ev,_ZTv0_n16_N9S19762C19D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-32872,-27084),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-33336,-27484),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern VTBL_ENTRY _ZTV9S19762C19[];
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__9S19762C19[] = {
  ABISELECT(20800,17152),
  ABISELECT(20656,17028),
  ABISELECT(20488,16892),
  ABISELECT(20024,16492),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C7__9S19762C19[] = {
  0,
  0,
  0,
  ABISELECT(-20024,-16492),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C7__9S19762C19[] = {
  ABISELECT(168,136),
  ABISELECT(-20488,-16892),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C7__9S19762C19[] = {
  0,
  ABISELECT(-20656,-17028),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C7__9S19762C19[] = {
  0,
  ABISELECT(-20800,-17152),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C16__9S19762C19[] = {
  ABISELECT(19560,16112),
  ABISELECT(20024,16512),
  ABISELECT(20192,16648),
  ABISELECT(32112,26460),
  ABISELECT(21104,17424),
  ABISELECT(20632,17016),
  ABISELECT(20336,16772),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C16__A2__9S19762C19[] = {
  ABISELECT(20192,16648),
  ABISELECT(20048,16524),
  ABISELECT(19880,16388),
  ABISELECT(19416,15988),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C16__A2__9S19762C19[] = {
  0,
  0,
  0,
  ABISELECT(-19416,-15988),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C16__A2__9S19762C19[] = {
  ABISELECT(168,136),
  ABISELECT(-19880,-16388),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C16__A2__9S19762C19[] = {
  0,
  ABISELECT(-20048,-16524),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C16__A2__9S19762C19[] = {
  0,
  ABISELECT(-20192,-16648),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C16__9S19762C19[] = {
  0,
  ABISELECT(-20336,-16772),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn20632_N9S19762C16D1Ev,_ZThn17016_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn20632_N9S19762C16D0Ev,_ZThn17016_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C16__9S19762C19[] = {
  ABISELECT(-20632,-17016),
  0,
  0,
  0,
  ABISELECT(-1072,-904),
  ABISELECT(-608,-504),
  ABISELECT(-440,-368),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  ABISELECT(-20632,-17016),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn21104_N9S19762C16D1Ev,_ZThn17424_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn21104_N9S19762C16D0Ev,_ZThn17424_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C16__9S19762C19[] = {
  ABISELECT(-21104,-17424),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  ABISELECT(-21104,-17424),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn32112_N9S19762C16D1Ev,_ZThn26460_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn32112_N9S19762C16D0Ev,_ZThn26460_N9S19762C16D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C16__9S19762C19[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-32112,-26460),
  0,
  ABISELECT(-32112,-26460),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C16__9S19762C19[] = {
  ABISELECT(-32408,-26704),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C16__9S19762C19[] = {
  ABISELECT(-32872,-27104),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A2__9S19762C16__9S19762C19[] = {
  0,
  ABISELECT(-20192,-16648),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C16__9S19762C19[] = {
  ABISELECT(168,136),
  ABISELECT(-20024,-16512),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C16__9S19762C19[] = {
  0,
  0,
  0,
  ABISELECT(-19560,-16112),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C16__9S19762C19[] = {
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-21568,-17804),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C16__9S19762C19[] = {
  ABISELECT(20192,16648),
  ABISELECT(20048,16524),
  ABISELECT(19880,16388),
  ABISELECT(19416,15988),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C19[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__9S19762C19[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN9S19762C15D1Ev();
extern void _ZN9S19762C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C19[] = {
  ABISELECT(-1072,-904),
  ABISELECT(-608,-504),
  ABISELECT(-440,-368),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C15__9S19762C19[] = {
  0,
  ABISELECT(296,244),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C15__9S19762C19[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn11480_N9S19762C15D1Ev,_ZThn9444_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn11480_N9S19762C15D0Ev,_ZThn9444_N9S19762C15D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C15__9S19762C19[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11480,-9444),
  0,
  ABISELECT(-11480,-9444),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C15__9S19762C19[] = {
  ABISELECT(-11776,-9688),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C15__9S19762C19[] = {
  ABISELECT(-12240,-10088),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C15__9S19762C19[] = {
  0,
  ABISELECT(440,368),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C15__9S19762C19[] = {
  ABISELECT(168,136),
  ABISELECT(608,504),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C15__9S19762C19[] = {
  0,
  0,
  0,
  ABISELECT(1072,904),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C15__9S19762C19[] = {
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C19[] = {
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C11__A1__9S19762C19[] = {
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C11__A1__9S19762C19[] = {
  0,
  0,
  0,
  ABISELECT(1544,1312),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C11__A1__9S19762C19[] = {
  ABISELECT(168,136),
  ABISELECT(1080,912),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A1__9S19762C19[] = {
  0,
  ABISELECT(912,776),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C11__A1__9S19762C19[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C19[] = {
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C11__9S19762C19[] = {
  0,
  ABISELECT(1232,1032),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn10544_N9S19762C12D1Ev,_ZThn8656_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn10544_N9S19762C12D0Ev,_ZThn8656_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C11__9S19762C19[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__9S19762C19[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__9S19762C19[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C11__9S19762C19[] = {
  0,
  ABISELECT(1376,1156),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C11__9S19762C19[] = {
  ABISELECT(168,136),
  ABISELECT(1544,1292),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn11008_N9S19762C11D1Ev,_ZThn9036_N9S19762C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void ABISELECT(_ZThn11008_N9S19762C11D0Ev,_ZThn9036_N9S19762C11D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C11__9S19762C19[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C11__9S19762C19[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C11__9S19762C19[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C11__9S19762C19[] = {
  0,
  ABISELECT(912,776),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C11__9S19762C19[] = {
  ABISELECT(168,136),
  ABISELECT(1080,912),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C11__9S19762C19[] = {
  0,
  0,
  0,
  ABISELECT(1544,1312),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C11__9S19762C19[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C11__9S19762C19[] = {
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
static  VTT_ENTRY vtt_S19762C19[] = {
  {&(_ZTV9S19762C19[9]),  9,119},
  {&(_tg__ZTV8S19762C7__9S19762C19[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C7__9S19762C19[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C7__9S19762C19[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C7__9S19762C19[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C7__9S19762C19[3]),  3,4},
  {&(_tg__ZTV9S19762C16__9S19762C19[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C16__A2__9S19762C19[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C16__A2__9S19762C19[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C16__A2__9S19762C19[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C16__A2__9S19762C19[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C16__A2__9S19762C19[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C16__9S19762C19[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C16__9S19762C19[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C16__9S19762C19[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C16__9S19762C19[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C16__9S19762C19[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C16__9S19762C19[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A2__9S19762C16__9S19762C19[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C16__9S19762C19[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C16__9S19762C19[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C16__9S19762C19[6]),  6,8},
  {&(_tg__ZTV8S19762C7__A1__9S19762C16__9S19762C19[6]),  6,7},
  {&(_ZTV9S19762C19[45]),  45,119},
  {&(_ZTV9S19762C19[51]),  51,119},
  {&(_ZTV9S19762C19[54]),  54,119},
  {&(_ZTV9S19762C19[58]),  58,119},
  {&(_ZTV9S19762C19[71]),  71,119},
  {&(_ZTV9S19762C19[86]),  86,119},
  {&(_ZTV9S19762C19[107]),  107,119},
  {&(_ZTV9S19762C19[113]),  113,119},
  {&(_ZTV9S19762C19[118]),  118,119},
  {&(_ZTV9S19762C19[96]),  96,119},
  {&(_ZTV9S19762C19[23]),  23,119},
  {&(_ZTV9S19762C19[33]),  33,119},
  {&(_tg__ZTV8S19762C8__9S19762C19[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__9S19762C19[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C19[8]),  8,13},
  {&(_tg__ZTV8S19762C9__9S19762C15__9S19762C19[3]),  3,4},
  {&(_tg__ZTV9S19762C11__9S19762C15__9S19762C19[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C15__9S19762C19[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C15__9S19762C19[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C15__9S19762C19[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C15__9S19762C19[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C15__9S19762C19[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C15__9S19762C19[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C15__9S19762C19[6]),  6,8},
  {&(_tg__ZTV9S19762C11__9S19762C19[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C11__A1__9S19762C19[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C11__A1__9S19762C19[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C11__A1__9S19762C19[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A1__9S19762C19[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C11__A1__9S19762C19[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C19[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C11__9S19762C19[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C11__9S19762C19[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__9S19762C19[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__9S19762C19[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C11__9S19762C19[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C11__9S19762C19[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C11__9S19762C19[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C11__9S19762C19[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C11__9S19762C19[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C11__9S19762C19[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C11__9S19762C19[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C11__9S19762C19[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C11__9S19762C19[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C11__9S19762C19[6]),  6,8},
};
extern VTBL_ENTRY _ZTI9S19762C19[];
extern  VTBL_ENTRY _ZTV9S19762C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C19[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S19762C11D0Ev,_ZThn9036_N9S19762C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S19762C11D1Ev,_ZThn9036_N9S19762C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19762C12D0Ev,_ZThn8656_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19762C12D1Ev,_ZThn8656_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N9S19762C15D0Ev,_ZThn9444_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N9S19762C15D1Ev,_ZThn9444_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32112_N9S19762C16D0Ev,_ZThn26460_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32112_N9S19762C16D1Ev,_ZThn26460_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21104_N9S19762C16D0Ev,_ZThn17424_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21104_N9S19762C16D1Ev,_ZThn17424_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20632_N9S19762C16D0Ev,_ZThn17016_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20632_N9S19762C16D1Ev,_ZThn17016_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C19D0Ev,_ZTv0_n16_N9S19762C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32576_N9S19762C19D0Ev,_ZThn26840_N9S19762C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C19D1Ev,_ZTv0_n16_N9S19762C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32576_N9S19762C19D1Ev,_ZThn26840_N9S19762C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21568_N9S19762C19D0Ev,_ZThn17804_N9S19762C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21568_N9S19762C19D1Ev,_ZThn17804_N9S19762C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21096_N9S19762C19D0Ev,_ZThn17396_N9S19762C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21096_N9S19762C19D1Ev,_ZThn17396_N9S19762C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C19 = {  "S19762C19", // class name
  bases_S19762C19, 22,
  &(vtc_S19762C19[0]), // expected_vtbl_contents
  &(vtt_S19762C19[0]), // expected_vtt_contents
  ABISELECT(36704,30236), // object size
  NSPAIRA(_ZTI9S19762C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19762C19),119, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19762C19),68, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C17  {
  ::S19762C18_nt s19762c17f0;
  ::S19762C19 s19762c17f1;
  int s19762c17f2;
  char s19762c17f3:5;
  virtual void  v2(); // _ZN9S19762C172v2Ev
  ~S19762C17(); // tgen
  S19762C17(); // tgen
};
//SIG(-1 S19762C17) C1{ v1 FC2{} FC3{ BC4{ BC5{ v4 Fs:6 Fl Fs:4 FL[13] Fp} VBC6{ v5 v6 v7 Fi[2] FL[2] FC5[3]} VBC7{ VBC5 Fp FC5 Fi:3} VBC8{ v8 FL FD Fp Fc FC5 Fp[2] FL[8] Fs Fp FL:64} FC8 Fs Fi[2]} VBC9{ VBC8 BC6 VBC10{ VBC11{ BC8 BC6 BC5 vd v9 FL[2] Fp[8] FC4 Fp Fi FC4 Fi} VBC5 VBC7 BC4 BC12{ VBC8 VBC11 VBC5 VBC7 FL:44 Fp Fi FC4 FL[2] Fi[3] FC11 Fc:7 FC13{ BC8 vd v11 FC7 Fi Fp Fi}} v10 FC11 FL Fc:7} Fc:8 Fi} BC14{ BC5 VBC8 VBC9 BC4 BC13 vd v12 Fi FC4 Fi Fs FL:8 Fi} v2 v3 FC9 Fi[2] Fc Fi FL Fi[2] Fp[2] Fi[2]} Fi Fc:5}


void  S19762C17 ::v2(){vfunc_called(this, "_ZN9S19762C172v2Ev");}
S19762C17 ::~S19762C17(){ note_dtor("S19762C17", this);} // tgen
S19762C17 ::S19762C17(){ note_ctor("S19762C17", this);} // tgen

static void Test_S19762C17()
{
  extern Class_Descriptor cd_S19762C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2297,7564)];
    init_test(&cd_S19762C17, buf);
    S19762C17 *dp, &lv = *(dp=new (buf) S19762C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(36736,30252), "sizeof(S19762C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C17)");
    check_field_offset(lv, s19762c17f0, ABISELECT(8,4), "S19762C17.s19762c17f0");
    check_field_offset(lv, s19762c17f1, ABISELECT(16,8), "S19762C17.s19762c17f1");
    check_field_offset(lv, s19762c17f2, ABISELECT(36720,30244), "S19762C17.s19762c17f2");
    set_bf_and_test(lv, s19762c17f3, ABISELECT(36724,30248), 0, 5, 1, "S19762C17");
    set_bf_and_test(lv, s19762c17f3, ABISELECT(36724,30248), 0, 5, hide_sll(1LL<<4), "S19762C17");
    test_class_info(&lv, &cd_S19762C17);
    dp->~S19762C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C17(Test_S19762C17, "S19762C17", ABISELECT(36736,30252));

#else // __cplusplus

extern void _ZN9S19762C17C1Ev();
extern void _ZN9S19762C17D1Ev();
Name_Map name_map_S19762C17[] = {
  NSPAIR(_ZN9S19762C17C1Ev),
  NSPAIR(_ZN9S19762C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19762C17[];
extern void _ZN9S19762C172v2Ev();
static  VTBL_ENTRY vtc_S19762C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C17[0]),
  (VTBL_ENTRY)&_ZN9S19762C172v2Ev,
};
extern VTBL_ENTRY _ZTI9S19762C17[];
extern  VTBL_ENTRY _ZTV9S19762C17[];
Class_Descriptor cd_S19762C17 = {  "S19762C17", // class name
  0,0,//no base classes
  &(vtc_S19762C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(36736,30252), // object size
  NSPAIRA(_ZTI9S19762C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19762C17),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S19762C23_nt  {
  int s19762c23f0:8;
  int s19762c23f1;
  void *s19762c23f2;
  __tsi64 s19762c23f3;
  void *s19762c23f4;
  void *s19762c23f5;
  int s19762c23f6;
  void  mf19762c23(); // _ZN12S19762C23_nt10mf19762c23Ev
};
//SIG(1 S19762C23_nt) U1{ m Fi:8 Fi Fp FL Fp Fp Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19762C22  : virtual S19762C13 , virtual S19762C5 , virtual S19762C12 {
  int s19762c22f0;
  long double s19762c22f1;
  int s19762c22f2;
  void *s19762c22f3;
  long s19762c22f4;
  ::S19762C23_nt s19762c22f5;
  int s19762c22f6;
  __tsi64 s19762c22f7;
  virtual  ~S19762C22(); // _ZN9S19762C22D2Ev
  S19762C22(); // tgen
};
//SIG(-1 S19762C22) C1{ VBC2{ BC3{ v1 FL FD Fp Fc FC4{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v2 FC5{ VBC4 Fp FC4 Fi:3} Fi Fp Fi} VBC4 VBC6{ VBC3 VBC7{ BC3 BC8{ v4 v5 v6 Fi[2] FL[2] FC4[3]} BC4 vd v7 FL[2] Fp[8] FC9{ BC4 VBC8 VBC5 VBC3 FC3 Fs Fi[2]} Fp Fi FC9 Fi} VBC4 VBC5 FL:44 Fp Fi FC9 FL[2] Fi[3] FC7 Fc:7 FC2} vd Fi FD Fi Fp Fl FU10{ m Fi:8 Fi Fp FL Fp Fp Fi} Fi FL}


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

static void Test_S19762C22()
{
  extern Class_Descriptor cd_S19762C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(742,2430)];
    init_test(&cd_S19762C22, buf);
    S19762C22 *dp, &lv = *(dp=new (buf) S19762C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11856,9716), "sizeof(S19762C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C22)");
    check_base_class_offset(lv, (S19762C9*)(S19762C13*), ABISELECT(80,52), "S19762C22");
    check_base_class_offset(lv, (S19762C13*), ABISELECT(80,52), "S19762C22");
    /*is_ambiguous_... S19762C22::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*), ABISELECT(712,568), "S19762C22");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*), ABISELECT(712,568), "S19762C22");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(712,568), "S19762C22");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*), ABISELECT(7264,5940), "S19762C22");
    check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(7568,6184), "S19762C22");
    check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(7864,6428), "S19762C22");
    check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(8328,6828), "S19762C22");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*), ABISELECT(7568,6184), "S19762C22");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*), ABISELECT(11688,9580), "S19762C22");
    check_base_class_offset(lv, (S19762C12*), ABISELECT(864,692), "S19762C22");
    check_field_offset(lv, s19762c22f0, ABISELECT(8,4), "S19762C22.s19762c22f0");
    check_field_offset(lv, s19762c22f1, ABISELECT(16,8), "S19762C22.s19762c22f1");
    check_field_offset(lv, s19762c22f2, ABISELECT(32,20), "S19762C22.s19762c22f2");
    check_field_offset(lv, s19762c22f3, ABISELECT(40,24), "S19762C22.s19762c22f3");
    check_field_offset(lv, s19762c22f4, ABISELECT(48,28), "S19762C22.s19762c22f4");
    check_field_offset(lv, s19762c22f5, ABISELECT(56,32), "S19762C22.s19762c22f5");
    check_field_offset(lv, s19762c22f6, ABISELECT(64,40), "S19762C22.s19762c22f6");
    check_field_offset(lv, s19762c22f7, ABISELECT(72,44), "S19762C22.s19762c22f7");
    test_class_info(&lv, &cd_S19762C22);
    dp->~S19762C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C22(Test_S19762C22, "S19762C22", ABISELECT(11856,9716));

#else // __cplusplus

extern void _ZN9S19762C22C1Ev();
extern void _ZN9S19762C22D2Ev();
Name_Map name_map_S19762C22[] = {
  NSPAIR(_ZN9S19762C22C1Ev),
  NSPAIR(_ZN9S19762C22D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
static Base_Class bases_S19762C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C9,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(80,52), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(712,568), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C9,    ABISELECT(7264,5940), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19762C9,    ABISELECT(7568,6184), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(7864,6428), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(8328,6828), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(7568,6184), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(11688,9580), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19762C12,    ABISELECT(864,692), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C22[];
extern void _ZN9S19762C22D1Ev();
extern void _ZN9S19762C22D0Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn80_N9S19762C22D1Ev,_ZThn52_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn80_N9S19762C22D0Ev,_ZThn52_N9S19762C22D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn864_N9S19762C22D1Ev,_ZThn692_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn864_N9S19762C22D0Ev,_ZThn692_N9S19762C22D0Ev)() __attribute__((weak));
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn7568_N9S19762C22D1Ev,_ZThn6184_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn7568_N9S19762C22D0Ev,_ZThn6184_N9S19762C22D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY vtc_S19762C22[] = {
  ABISELECT(11688,9580),
  ABISELECT(7568,6184),
  ABISELECT(7264,5940),
  ABISELECT(864,692),
  ABISELECT(712,568),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN9S19762C22D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C22D0Ev,
  0,
  ABISELECT(-80,-52),
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  0,
  ABISELECT(-712,-568),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-864,-692),
  ABISELECT(10824,8888),
  ABISELECT(-152,-124),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  ABISELECT(-864,-692),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev),
  0,
  ABISELECT(-7264,-5940),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-7568,-6184),
  0,
  ABISELECT(-7568,-6184),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-7864,-6428),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-8328,-6828),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-10976,-9012),
  ABISELECT(-11688,-9580),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
};
extern VTBL_ENTRY _ZTV9S19762C22[];
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C22[] = {
  ABISELECT(10824,8888),
  ABISELECT(-152,-124),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C12__9S19762C22[] = {
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn6704_N9S19762C12D1Ev,_ZThn5492_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn6704_N9S19762C12D0Ev,_ZThn5492_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C12__9S19762C22[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C12__9S19762C22[] = {
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C12__9S19762C22[] = {
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C12__9S19762C22[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C12__9S19762C22[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C22[] = {
  ABISELECT(-10976,-9012),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__9S19762C22[] = {
  0,
  ABISELECT(10976,9012),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTT_ENTRY vtt_S19762C22[] = {
  {&(_ZTV9S19762C22[8]),  8,60},
  {&(_ZTV9S19762C22[15]),  15,60},
  {&(_ZTV9S19762C22[22]),  22,60},
  {&(_ZTV9S19762C22[30]),  30,60},
  {&(_ZTV9S19762C22[35]),  35,60},
  {&(_ZTV9S19762C22[45]),  45,60},
  {&(_ZTV9S19762C22[51]),  51,60},
  {&(_ZTV9S19762C22[56]),  56,60},
  {&(_ZTV9S19762C22[60]),  60,60},
  {&(_tg__ZTV9S19762C12__9S19762C22[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C12__9S19762C22[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C12__9S19762C22[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C12__9S19762C22[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C12__9S19762C22[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C12__9S19762C22[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C12__9S19762C22[3]),  3,3},
  {&(_tg__ZTV8S19762C8__9S19762C22[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__9S19762C22[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19762C22[];
extern  VTBL_ENTRY _ZTV9S19762C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C22[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19762C12D0Ev,_ZThn5492_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19762C12D1Ev,_ZThn5492_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N9S19762C22D0Ev,_ZThn692_N9S19762C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N9S19762C22D1Ev,_ZThn692_N9S19762C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7568_N9S19762C22D0Ev,_ZThn6184_N9S19762C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19762C22D0Ev,_ZThn52_N9S19762C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7568_N9S19762C22D1Ev,_ZThn6184_N9S19762C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19762C22D1Ev,_ZThn52_N9S19762C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C22 = {  "S19762C22", // class name
  bases_S19762C22, 10,
  &(vtc_S19762C22[0]), // expected_vtbl_contents
  &(vtt_S19762C22[0]), // expected_vtt_contents
  ABISELECT(11856,9716), // object size
  NSPAIRA(_ZTI9S19762C22),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19762C22),60, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19762C22),18, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C21  : virtual S19762C22 , virtual S19762C19 , S19762C16 {
  int s19762c21f0;
  __tsi64 s19762c21f1;
  int s19762c21f2[4];
  virtual void  v16(); // _ZN9S19762C213v16Ev
  ~S19762C21(); // tgen
  S19762C21(); // tgen
};
//SIG(-1 S19762C21) C1{ VBC2{ VBC3{ BC4{ v2 FL FD Fp Fc FC5{ v4 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v3 FC6{ VBC5 Fp FC5 Fi:3} Fi Fp Fi} VBC5 VBC7{ VBC4 VBC8{ BC4 BC9{ v5 v6 v7 Fi[2] FL[2] FC5[3]} BC5 vd v8 FL[2] Fp[8] FC10{ BC5 VBC9 VBC6 VBC4 FC4 Fs Fi[2]} Fp Fi FC10 Fi} VBC5 VBC6 FL:44 Fp Fi FC10 FL[2] Fi[3] FC8 Fc:7 FC3} vd Fi FD Fi Fp Fl FU11{ m Fi:8 Fi Fp FL Fp Fp Fi} Fi FL} VBC12{ BC10 VBC13{ VBC4 BC9 VBC14{ VBC8 VBC5 VBC6 BC10 BC7 v9 FC8 FL Fc:7} Fc:8 Fi} BC15{ BC5 VBC4 VBC13 BC10 BC3 vd v10 Fi FC10 Fi Fs FL:8 Fi} v11 v12 FC13 Fi[2] Fc Fi FL Fi[2] Fp[2] Fi[2]} BC15 v1 Fi FL Fi[4]}


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

static void Test_S19762C21()
{
  extern Class_Descriptor cd_S19762C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2918,9601)];
    init_test(&cd_S19762C21, buf);
    S19762C21 *dp, &lv = *(dp=new (buf) S19762C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46672,38400), "sizeof(S19762C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C21)");
    /*is_ambiguous_... S19762C21::S19762C13 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C13*), ABISELECT(2928,2400), "S19762C21");
    check_base_class_offset(lv, (S19762C13*)(S19762C22*), ABISELECT(2928,2400), "S19762C21");
    /*is_ambiguous_... S19762C22::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C22*), ABISELECT(3560,2916), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*), ABISELECT(3560,2916), "S19762C21");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(3560,2916), "S19762C21");
    /*is_ambiguous_... S19762C11::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*), ABISELECT(3560,2916), "S19762C21");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*), ABISELECT(3560,2916), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*), ABISELECT(10112,8288), "S19762C21");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C19*), ABISELECT(10112,8288), "S19762C21");
    /*is_ambiguous_... S19762C15::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C15*), ABISELECT(10112,8288), "S19762C21");
    check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*), ABISELECT(10112,8288), "S19762C21");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*), ABISELECT(10112,8288), "S19762C21");
    /*is_ambiguous_... S19762C16::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C16*)(S19762C19*), ABISELECT(10112,8288), "S19762C21");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(10112,8288), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C16*), ABISELECT(10112,8288), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C16*), ABISELECT(10112,8288), "S19762C21");
    check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(10416,8532), "S19762C21");
    check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(10712,8776), "S19762C21");
    check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(11176,9176), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C12*), ABISELECT(10416,8532), "S19762C21");
    check_base_class_offset(lv, (S19762C10*)(S19762C11*), ABISELECT(10416,8532), "S19762C21");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*), ABISELECT(10416,8532), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C12*), ABISELECT(14536,11928), "S19762C21");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C19*), ABISELECT(14536,11928), "S19762C21");
    check_base_class_offset(lv, (S19762C8*)(S19762C11*), ABISELECT(14536,11928), "S19762C21");
    check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*), ABISELECT(14536,11928), "S19762C21");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*), ABISELECT(14536,11928), "S19762C21");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(14536,11928), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C16*), ABISELECT(14536,11928), "S19762C21");
    check_base_class_offset(lv, (S19762C12*)(S19762C22*), ABISELECT(3712,3040), "S19762C21");
    check_base_class_offset(lv, (S19762C22*), ABISELECT(2848,2348), "S19762C21");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C19*), ABISELECT(14704,12064), "S19762C21");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C19*), ABISELECT(34728,28556), "S19762C21");
    check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*), ABISELECT(34728,28556), "S19762C21");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(34728,28556), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C16*), ABISELECT(34728,28556), "S19762C21");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C19*), ABISELECT(14704,12064), "S19762C21");
    /*is_ambiguous_... S19762C15::S19762C4 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C15*), ABISELECT(35192,28956), "S19762C21");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*), ABISELECT(35664,29364), "S19762C21");
    check_base_class_offset(lv, (S19762C7*)(S19762C11*), ABISELECT(35664,29364), "S19762C21");
    check_base_class_offset(lv, (S19762C12*)(S19762C11*), ABISELECT(36128,29744), "S19762C21");
    check_base_class_offset(lv, (S19762C11*)(S19762C15*), ABISELECT(35664,29364), "S19762C21");
    check_base_class_offset(lv, (S19762C15*)(S19762C19*), ABISELECT(35192,28956), "S19762C21");
    check_base_class_offset(lv, (S19762C15*)(S19762C16*)(S19762C19*), ABISELECT(35192,28956), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C15*)(S19762C16*), ABISELECT(35192,28956), "S19762C21");
    /*is_ambiguous_... S19762C16::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C16*)(S19762C19*), ABISELECT(15168,12444), "S19762C21");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(15312,12568), "S19762C21");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(15312,12568), "S19762C21");
    check_base_class_offset(lv, (S19762C9*)(S19762C13*)(S19762C16*)(S19762C19*), ABISELECT(15776,12948), "S19762C21");
    check_base_class_offset(lv, (S19762C13*)(S19762C16*)(S19762C19*), ABISELECT(15776,12948), "S19762C21");
    check_base_class_offset(lv, (S19762C16*)(S19762C19*), ABISELECT(15168,12444), "S19762C21");
    check_base_class_offset(lv, (S19762C19*), ABISELECT(14704,12064), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C16*), 0, "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C16*), ABISELECT(144,124), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C16*), ABISELECT(144,124), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C13*)(S19762C16*), ABISELECT(608,504), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C13*)(S19762C16*), ABISELECT(608,504), "S19762C21");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C16*), 0, "S19762C21");
    check_field_offset(lv, s19762c21f0, ABISELECT(2812,2320), "S19762C21.s19762c21f0");
    check_field_offset(lv, s19762c21f1, ABISELECT(2816,2324), "S19762C21.s19762c21f1");
    check_field_offset(lv, s19762c21f2, ABISELECT(2824,2332), "S19762C21.s19762c21f2");
    test_class_info(&lv, &cd_S19762C21);
    dp->~S19762C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C21(Test_S19762C21, "S19762C21", ABISELECT(46672,38400));

#else // __cplusplus

extern void _ZN9S19762C21C1Ev();
extern void _ZN9S19762C21D1Ev();
Name_Map name_map_S19762C21[] = {
  NSPAIR(_ZN9S19762C21C1Ev),
  NSPAIR(_ZN9S19762C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C22;
extern VTBL_ENTRY _ZTI9S19762C22[];
extern  VTBL_ENTRY _ZTV9S19762C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C22[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
extern Class_Descriptor cd_S19762C15;
extern VTBL_ENTRY _ZTI9S19762C15[];
extern  VTBL_ENTRY _ZTV9S19762C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C15[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C16;
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
extern Class_Descriptor cd_S19762C19;
extern VTBL_ENTRY _ZTI9S19762C19[];
extern  VTBL_ENTRY _ZTV9S19762C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C19[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C16;
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
static Base_Class bases_S19762C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C9,    ABISELECT(2928,2400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(2928,2400), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(3560,2916), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19762C9,    ABISELECT(10112,8288), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19762C9,    ABISELECT(10416,8532), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(10712,8776), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(11176,9176), //bcp->offset
    86, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(10416,8532), //bcp->offset
    68, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(14536,11928), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19762C12,    ABISELECT(3712,3040), //bcp->offset
    55, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19762C22,    ABISELECT(2848,2348), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(14704,12064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(34728,28556), //bcp->offset
    139, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19762C7,    ABISELECT(14704,12064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(35192,28956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(35664,29364), //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(35664,29364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(36128,29744), //bcp->offset
    178, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(35664,29364), //bcp->offset
    164, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19762C15,    ABISELECT(35192,28956), //bcp->offset
    147, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(15168,12444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(15312,12568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(15312,12568), //bcp->offset
    126, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(15776,12948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(15776,12948), //bcp->offset
    133, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19762C16,    ABISELECT(15168,12444), //bcp->offset
    113, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19762C19,    ABISELECT(14704,12064), //bcp->offset
    92, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(144,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(144,124), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(608,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(608,504), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19762C16,    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
    33, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C21[];
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C21D1Ev();
extern void _ZN9S19762C21D0Ev();
extern void _ZN9S19762C163v13Ev();
extern void _ZN9S19762C213v16Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZThn608_N9S19762C21D1Ev,_ZThn504_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn608_N9S19762C21D0Ev,_ZThn504_N9S19762C21D0Ev)();
extern void _ZN9S19762C133v12Ev();
extern void ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn2848_N9S19762C21D1Ev,_ZThn2348_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn2848_N9S19762C21D0Ev,_ZThn2348_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn2928_N9S19762C21D1Ev,_ZThn2400_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn2928_N9S19762C21D0Ev,_ZThn2400_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn3712_N9S19762C21D1Ev,_ZThn3040_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn3712_N9S19762C21D0Ev,_ZThn3040_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn10416_N9S19762C21D1Ev,_ZThn8532_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn10416_N9S19762C21D0Ev,_ZThn8532_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn14704_N9S19762C21D1Ev,_ZThn12064_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn14704_N9S19762C21D0Ev,_ZThn12064_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTvn464_n104_N9S19762C21D1Ev,_ZTvn380_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn464_n104_N9S19762C21D0Ev,_ZTvn380_n52_N9S19762C21D0Ev)();
extern void _ZN9S19762C163v13Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C21D1Ev,_ZTvn884_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C21D0Ev,_ZTvn884_n52_N9S19762C21D0Ev)();
extern void _ZN9S19762C133v12Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn35192_N9S19762C21D1Ev,_ZThn28956_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn35192_N9S19762C21D0Ev,_ZThn28956_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn35664_N9S19762C21D1Ev,_ZThn29364_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn35664_N9S19762C21D0Ev,_ZThn29364_N9S19762C21D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N9S19762C21D1Ev,_ZTvn380_n40_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C21D0Ev,_ZTvn380_n40_N9S19762C21D0Ev)();
static  VTBL_ENTRY vtc_S19762C21[] = {
  ABISELECT(14704,12064),
  ABISELECT(3712,3040),
  ABISELECT(2928,2400),
  ABISELECT(2848,2348),
  ABISELECT(34728,28556),
  ABISELECT(14536,11928),
  ABISELECT(3560,2916),
  ABISELECT(10416,8532),
  ABISELECT(35664,29364),
  ABISELECT(35192,28956),
  ABISELECT(10112,8288),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C21D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  (VTBL_ENTRY)&_ZN9S19762C213v16Ev,
  ABISELECT(9968,8164),
  ABISELECT(3416,2792),
  ABISELECT(14392,11804),
  ABISELECT(34584,28432),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-608,-504),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N9S19762C21D1Ev,_ZThn504_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N9S19762C21D0Ev,_ZThn504_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  ABISELECT(-2848,-2348),
  ABISELECT(11688,9580),
  ABISELECT(7568,6184),
  ABISELECT(7264,5940),
  ABISELECT(864,692),
  ABISELECT(712,568),
  ABISELECT(80,52),
  ABISELECT(-2848,-2348),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev),
  0,
  ABISELECT(-2928,-2400),
  0,
  ABISELECT(-2928,-2400),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  0,
  ABISELECT(-3560,-2916),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-3712,-3040),
  ABISELECT(10824,8888),
  ABISELECT(-152,-124),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  ABISELECT(-3712,-3040),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev),
  0,
  ABISELECT(-10112,-8288),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10416,-8532),
  0,
  ABISELECT(-10416,-8532),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-10712,-8776),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-11176,-9176),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-10976,-9012),
  ABISELECT(-14536,-11928),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  ABISELECT(1072,884),
  ABISELECT(1072,884),
  ABISELECT(464,380),
  ABISELECT(-14704,-12064),
  0,
  0,
  0,
  ABISELECT(-4288,-3532),
  ABISELECT(20960,17300),
  ABISELECT(20488,16892),
  ABISELECT(-4592,-3776),
  ABISELECT(-11144,-9148),
  ABISELECT(-168,-136),
  ABISELECT(20024,16492),
  ABISELECT(-14704,-12064),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev),
  ABISELECT(19560,16112),
  ABISELECT(-632,-516),
  ABISELECT(-11608,-9528),
  ABISELECT(-4752,-3912),
  ABISELECT(20496,16920),
  ABISELECT(20024,16512),
  ABISELECT(-5056,-4156),
  ABISELECT(-15168,-12444),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C21D1Ev,_ZTvn380_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C21D0Ev,_ZTvn380_n52_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  ABISELECT(-5200,-4280),
  ABISELECT(-11752,-9652),
  ABISELECT(-776,-640),
  ABISELECT(19416,15988),
  ABISELECT(-15312,-12568),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-15776,-12948),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C21D1Ev,_ZTvn884_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C21D0Ev,_ZTvn884_n52_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  0,
  0,
  0,
  ABISELECT(-34728,-28556),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-35192,-28956),
  0,
  0,
  0,
  ABISELECT(-464,-400),
  ABISELECT(-20656,-17028),
  ABISELECT(-31632,-26040),
  ABISELECT(-24776,-20424),
  ABISELECT(472,408),
  ABISELECT(-25080,-20668),
  ABISELECT(-35192,-28956),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev),
  ABISELECT(-35664,-29364),
  0,
  0,
  ABISELECT(-25248,-20832),
  ABISELECT(-25552,-21076),
  ABISELECT(-32104,-26448),
  ABISELECT(-21128,-17436),
  ABISELECT(-936,-808),
  ABISELECT(-35664,-29364),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev),
  ABISELECT(-21592,-17816),
  ABISELECT(-32568,-26828),
  ABISELECT(-25712,-21212),
  ABISELECT(-26016,-21456),
  ABISELECT(-36128,-29744),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C21D1Ev,_ZTvn380_n40_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C21D0Ev,_ZTvn380_n40_N9S19762C21D0Ev),
};
extern VTBL_ENTRY _ZTV9S19762C21[];
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C16__A1__9S19762C21[] = {
  ABISELECT(34728,28556),
  ABISELECT(14536,11928),
  ABISELECT(3560,2916),
  ABISELECT(10416,8532),
  ABISELECT(35664,29364),
  ABISELECT(35192,28956),
  ABISELECT(10112,8288),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C16__A3__9S19762C21[] = {
  ABISELECT(9968,8164),
  ABISELECT(3416,2792),
  ABISELECT(14392,11804),
  ABISELECT(34584,28432),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C16__A3__9S19762C21[] = {
  0,
  0,
  0,
  ABISELECT(-34584,-28432),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C16__A3__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(-14392,-11804),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C16__A3__9S19762C21[] = {
  0,
  ABISELECT(-3416,-2792),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C16__A3__9S19762C21[] = {
  0,
  ABISELECT(-9968,-8164),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C16__A1__9S19762C21[] = {
  0,
  ABISELECT(-10112,-8288),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn35192_N9S19762C16D1Ev,_ZThn28956_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn35192_N9S19762C16D0Ev,_ZThn28956_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C16__A1__9S19762C21[] = {
  ABISELECT(-35192,-28956),
  0,
  0,
  0,
  ABISELECT(-464,-400),
  ABISELECT(-20656,-17028),
  ABISELECT(-31632,-26040),
  ABISELECT(-24776,-20424),
  ABISELECT(472,408),
  ABISELECT(-25080,-20668),
  ABISELECT(-35192,-28956),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn35664_N9S19762C16D1Ev,_ZThn29364_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn35664_N9S19762C16D0Ev,_ZThn29364_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C16__A1__9S19762C21[] = {
  ABISELECT(-35664,-29364),
  0,
  0,
  ABISELECT(-25248,-20832),
  ABISELECT(-25552,-21076),
  ABISELECT(-32104,-26448),
  ABISELECT(-21128,-17436),
  ABISELECT(-936,-808),
  ABISELECT(-35664,-29364),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn10416_N9S19762C16D1Ev,_ZThn8532_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn10416_N9S19762C16D0Ev,_ZThn8532_N9S19762C16D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C16__A1__9S19762C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10416,-8532),
  0,
  ABISELECT(-10416,-8532),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C16__A1__9S19762C21[] = {
  ABISELECT(-10712,-8776),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C16__A1__9S19762C21[] = {
  ABISELECT(-11176,-9176),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A2__9S19762C16__A1__9S19762C21[] = {
  0,
  ABISELECT(-3560,-2916),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C16__A1__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(-14536,-11928),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C16__A1__9S19762C21[] = {
  0,
  0,
  0,
  ABISELECT(-34728,-28556),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C16__A1__9S19762C21[] = {
  ABISELECT(-21592,-17816),
  ABISELECT(-32568,-26828),
  ABISELECT(-25712,-21212),
  ABISELECT(-26016,-21456),
  ABISELECT(-36128,-29744),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C16__A1__9S19762C21[] = {
  ABISELECT(9968,8164),
  ABISELECT(3416,2792),
  ABISELECT(14392,11804),
  ABISELECT(34584,28432),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN9S19762C22D1Ev();
extern void _ZN9S19762C22D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C22__9S19762C21[] = {
  ABISELECT(11688,9580),
  ABISELECT(7568,6184),
  ABISELECT(7264,5940),
  ABISELECT(864,692),
  ABISELECT(712,568),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN9S19762C22D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C22D0Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn80_N9S19762C22D1Ev,_ZThn52_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn80_N9S19762C22D0Ev,_ZThn52_N9S19762C22D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C13__9S19762C22__9S19762C21[] = {
  0,
  ABISELECT(-80,-52),
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__9S19762C22__9S19762C21[] = {
  0,
  ABISELECT(-712,-568),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn864_N9S19762C22D1Ev,_ZThn692_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn864_N9S19762C22D0Ev,_ZThn692_N9S19762C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C22__9S19762C21[] = {
  ABISELECT(-864,-692),
  ABISELECT(10824,8888),
  ABISELECT(-152,-124),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  ABISELECT(-864,-692),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C22__9S19762C21[] = {
  0,
  ABISELECT(-7264,-5940),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn7568_N9S19762C22D1Ev,_ZThn6184_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn7568_N9S19762C22D0Ev,_ZThn6184_N9S19762C22D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C22__9S19762C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-7568,-6184),
  0,
  ABISELECT(-7568,-6184),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C22__9S19762C21[] = {
  ABISELECT(-7864,-6428),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C22__9S19762C21[] = {
  ABISELECT(-8328,-6828),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C22__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(-11688,-9580),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C21[] = {
  ABISELECT(10824,8888),
  ABISELECT(-152,-124),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C12__9S19762C21[] = {
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn6704_N9S19762C12D1Ev,_ZThn5492_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn6704_N9S19762C12D0Ev,_ZThn5492_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C12__9S19762C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C12__9S19762C21[] = {
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C12__9S19762C21[] = {
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C12__9S19762C21[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C12__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__9S19762C21[] = {
  0,
  ABISELECT(10976,9012),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void _ZN9S19762C19D1Ev();
extern void _ZN9S19762C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C19__9S19762C21[] = {
  ABISELECT(-4288,-3532),
  ABISELECT(20960,17300),
  ABISELECT(20488,16892),
  ABISELECT(-4592,-3776),
  ABISELECT(-11144,-9148),
  ABISELECT(-168,-136),
  ABISELECT(20024,16492),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&_ZN9S19762C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C19D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C19__9S19762C21[] = {
  ABISELECT(-4592,-3776),
  ABISELECT(-11144,-9148),
  ABISELECT(-168,-136),
  ABISELECT(20024,16492),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C19__9S19762C21[] = {
  0,
  0,
  0,
  ABISELECT(-20024,-16492),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C19__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(168,136),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C19__9S19762C21[] = {
  0,
  ABISELECT(11144,9148),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C19__9S19762C21[] = {
  0,
  ABISELECT(4592,3776),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C19__9S19762C21[] = {
  ABISELECT(19560,16112),
  ABISELECT(-632,-516),
  ABISELECT(-11608,-9528),
  ABISELECT(-4752,-3912),
  ABISELECT(20496,16920),
  ABISELECT(20024,16512),
  ABISELECT(-5056,-4156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C19__A2__9S19762C21[] = {
  ABISELECT(-5200,-4280),
  ABISELECT(-11752,-9652),
  ABISELECT(-776,-640),
  ABISELECT(19416,15988),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C169S19762C19__A2__9S19762C21[] = {
  0,
  0,
  0,
  ABISELECT(-19416,-15988),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C169S19762C19__A2__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(776,640),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C19__A2__9S19762C21[] = {
  0,
  ABISELECT(11752,9652),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C169S19762C19__A2__9S19762C21[] = {
  0,
  ABISELECT(5200,4280),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C169S19762C19__9S19762C21[] = {
  0,
  ABISELECT(5056,4156),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn20024_N9S19762C16D1Ev,_ZThn16512_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn20024_N9S19762C16D0Ev,_ZThn16512_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C169S19762C19__9S19762C21[] = {
  ABISELECT(-20024,-16512),
  0,
  0,
  0,
  ABISELECT(-464,-400),
  ABISELECT(-20656,-17028),
  ABISELECT(-31632,-26040),
  ABISELECT(-24776,-20424),
  ABISELECT(472,408),
  ABISELECT(-25080,-20668),
  ABISELECT(-20024,-16512),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn20496_N9S19762C16D1Ev,_ZThn16920_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn20496_N9S19762C16D0Ev,_ZThn16920_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C169S19762C19__9S19762C21[] = {
  ABISELECT(-20496,-16920),
  0,
  0,
  ABISELECT(-25248,-20832),
  ABISELECT(-25552,-21076),
  ABISELECT(-32104,-26448),
  ABISELECT(-21128,-17436),
  ABISELECT(-936,-808),
  ABISELECT(-20496,-16920),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C169S19762C19__9S19762C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4752,3912),
  0,
  ABISELECT(4752,3912),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C19__9S19762C21[] = {
  ABISELECT(4456,3668),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C19__9S19762C21[] = {
  ABISELECT(3992,3268),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A2__9S19762C169S19762C19__9S19762C21[] = {
  0,
  ABISELECT(11608,9528),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C169S19762C19__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(632,516),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C169S19762C19__9S19762C21[] = {
  0,
  0,
  0,
  ABISELECT(-19560,-16112),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C169S19762C19__9S19762C21[] = {
  ABISELECT(-21592,-17816),
  ABISELECT(-32568,-26828),
  ABISELECT(-25712,-21212),
  ABISELECT(-26016,-21456),
  ABISELECT(-20960,-17300),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C169S19762C19__9S19762C21[] = {
  ABISELECT(-5200,-4280),
  ABISELECT(-11752,-9652),
  ABISELECT(-776,-640),
  ABISELECT(19416,15988),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__9S19762C19__9S19762C21[] = {
  0,
  0,
  0,
  ABISELECT(-20024,-16492),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C19__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(168,136),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C19__9S19762C21[] = {
  0,
  ABISELECT(11144,9148),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C19__9S19762C21[] = {
  0,
  ABISELECT(4592,3776),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn20488_N9S19762C19D1Ev,_ZThn16892_N9S19762C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev)();
extern void ABISELECT(_ZThn20488_N9S19762C19D0Ev,_ZThn16892_N9S19762C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C19__9S19762C21[] = {
  ABISELECT(-20488,-16892),
  0,
  0,
  0,
  ABISELECT(-464,-400),
  ABISELECT(-20656,-17028),
  ABISELECT(-31632,-26040),
  ABISELECT(-24776,-20424),
  ABISELECT(472,408),
  ABISELECT(-25080,-20668),
  ABISELECT(-20488,-16892),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn20960_N9S19762C19D1Ev,_ZThn17300_N9S19762C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev)();
extern void ABISELECT(_ZThn20960_N9S19762C19D0Ev,_ZThn17300_N9S19762C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C19__9S19762C21[] = {
  ABISELECT(-20960,-17300),
  0,
  0,
  ABISELECT(-25248,-20832),
  ABISELECT(-25552,-21076),
  ABISELECT(-32104,-26448),
  ABISELECT(-21128,-17436),
  ABISELECT(-936,-808),
  ABISELECT(-20960,-17300),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C19D1Ev,_ZTv0_n16_N9S19762C19D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C19D0Ev,_ZTv0_n16_N9S19762C19D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C19__9S19762C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4288,3532),
  0,
  ABISELECT(4288,3532),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C19D1Ev,_ZTv0_n16_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C19D0Ev,_ZTv0_n16_N9S19762C19D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A2__9S19762C19__9S19762C21[] = {
  ABISELECT(3992,3288),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A2__9S19762C19__9S19762C21[] = {
  ABISELECT(3528,2888),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C19D1Ev,_ZTvn380_n40_N9S19762C19D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C19D0Ev,_ZTvn380_n40_N9S19762C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C19__9S19762C21[] = {
  ABISELECT(-21592,-17816),
  ABISELECT(-32568,-26828),
  ABISELECT(-25712,-21212),
  ABISELECT(-26016,-21456),
  ABISELECT(-21424,-17680),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C19D1Ev,_ZTvn380_n40_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C19D0Ev,_ZTvn380_n40_N9S19762C19D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZThn464_N9S19762C19D1Ev,_ZThn380_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C19D0Ev,_ZThn380_N9S19762C19D0Ev)();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C16__9S19762C19__9S19762C21[] = {
  ABISELECT(19560,16112),
  ABISELECT(-632,-516),
  ABISELECT(-11608,-9528),
  ABISELECT(-4752,-3912),
  ABISELECT(20496,16920),
  ABISELECT(20024,16512),
  ABISELECT(-5056,-4156),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C19D1Ev,_ZThn380_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C19D0Ev,_ZThn380_N9S19762C19D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C16__A2__9S19762C19__9S19762C21[] = {
  ABISELECT(-5200,-4280),
  ABISELECT(-11752,-9652),
  ABISELECT(-776,-640),
  ABISELECT(19416,15988),
  ABISELECT(-608,-504),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN9S19762C15D1Ev();
extern void _ZN9S19762C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C21[] = {
  ABISELECT(-464,-400),
  ABISELECT(-20656,-17028),
  ABISELECT(-31632,-26040),
  ABISELECT(-24776,-20424),
  ABISELECT(472,408),
  ABISELECT(-25080,-20668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C15__9S19762C21[] = {
  0,
  ABISELECT(25080,20668),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C15__9S19762C21[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(-25248,-20832),
  ABISELECT(-25552,-21076),
  ABISELECT(-32104,-26448),
  ABISELECT(-21128,-17436),
  ABISELECT(-936,-808),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C15__9S19762C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(24776,20424),
  0,
  ABISELECT(24776,20424),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C15__9S19762C21[] = {
  ABISELECT(24480,20180),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C15__9S19762C21[] = {
  ABISELECT(24016,19780),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C15__9S19762C21[] = {
  0,
  ABISELECT(31632,26040),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C15__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(20656,17028),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C15__9S19762C21[] = {
  0,
  0,
  0,
  ABISELECT(464,400),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C15__9S19762C21[] = {
  ABISELECT(-21592,-17816),
  ABISELECT(-32568,-26828),
  ABISELECT(-25712,-21212),
  ABISELECT(-26016,-21456),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C21[] = {
  ABISELECT(-25248,-20832),
  ABISELECT(-25552,-21076),
  ABISELECT(-32104,-26448),
  ABISELECT(-21128,-17436),
  ABISELECT(-936,-808),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C11__A1__9S19762C21[] = {
  ABISELECT(-25552,-21076),
  ABISELECT(-32104,-26448),
  ABISELECT(-21128,-17436),
  ABISELECT(-936,-808),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C11__A1__9S19762C21[] = {
  0,
  0,
  0,
  ABISELECT(936,808),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C11__A1__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(21128,17436),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A1__9S19762C21[] = {
  0,
  ABISELECT(32104,26448),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C11__A1__9S19762C21[] = {
  0,
  ABISELECT(25552,21076),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__A1__9S19762C21[] = {
  ABISELECT(-21592,-17816),
  ABISELECT(-32568,-26828),
  ABISELECT(-25712,-21212),
  ABISELECT(-26016,-21456),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C11__A1__9S19762C21[] = {
  0,
  ABISELECT(26016,21456),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C11__A1__9S19762C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(25712,21212),
  0,
  ABISELECT(25712,21212),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__A1__9S19762C21[] = {
  ABISELECT(25416,20968),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__A1__9S19762C21[] = {
  ABISELECT(24952,20568),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C11__A1__9S19762C21[] = {
  0,
  ABISELECT(32568,26828),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C11__A1__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(21592,17816),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C11__9S19762C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(25248,20832),
  0,
  ABISELECT(25248,20832),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C11__9S19762C21[] = {
  ABISELECT(24952,20588),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C11__9S19762C21[] = {
  ABISELECT(24488,20188),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C11__9S19762C21[] = {
  0,
  ABISELECT(32104,26448),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C11__9S19762C21[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(21128,17436),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C11__9S19762C21[] = {
  0,
  0,
  0,
  ABISELECT(936,808),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C11__9S19762C21[] = {
  0,
  ABISELECT(25552,21076),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C11__9S19762C21[] = {
  ABISELECT(-21592,-17816),
  ABISELECT(-32568,-26828),
  ABISELECT(-25712,-21212),
  ABISELECT(-26016,-21456),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
static  VTT_ENTRY vtt_S19762C21[] = {
  {&(_ZTV9S19762C21[13]),  13,186},
  {&(_tg__ZTV9S19762C16__A1__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C16__A3__9S19762C21[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C16__A3__9S19762C21[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C16__A3__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C16__A3__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C16__A3__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C16__A1__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C16__A1__9S19762C21[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C16__A1__9S19762C21[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C16__A1__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C16__A1__9S19762C21[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C16__A1__9S19762C21[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A2__9S19762C16__A1__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C16__A1__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C16__A1__9S19762C21[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C16__A1__9S19762C21[6]),  6,8},
  {&(_tg__ZTV8S19762C7__A1__9S19762C16__A1__9S19762C21[6]),  6,7},
  {&(_ZTV9S19762C21[40]),  40,186},
  {&(_ZTV9S19762C21[47]),  47,186},
  {&(_ZTV9S19762C21[54]),  54,186},
  {&(_ZTV9S19762C21[62]),  62,186},
  {&(_ZTV9S19762C21[67]),  67,186},
  {&(_ZTV9S19762C21[77]),  77,186},
  {&(_ZTV9S19762C21[83]),  83,186},
  {&(_ZTV9S19762C21[88]),  88,186},
  {&(_ZTV9S19762C21[92]),  92,186},
  {&(_ZTV9S19762C21[108]),  108,186},
  {&(_ZTV9S19762C21[144]),  144,186},
  {&(_ZTV9S19762C21[159]),  159,186},
  {&(_ZTV9S19762C21[174]),  174,186},
  {&(_ZTV9S19762C21[184]),  184,186},
  {&(_ZTV9S19762C21[122]),  122,186},
  {&(_ZTV9S19762C21[132]),  132,186},
  {&(_ZTV9S19762C21[135]),  135,186},
  {&(_ZTV9S19762C21[24]),  24,186},
  {&(_tg__ZTV9S19762C22__9S19762C21[8]),  8,10},
  {&(_tg__ZTV9S19762C13__9S19762C22__9S19762C21[5]),  5,9},
  {&(_tg__ZTV8S19762C5__9S19762C22__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C22__9S19762C21[7]),  7,9},
  {&(_tg__ZTV8S19762C9__A1__9S19762C22__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C22__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C22__9S19762C21[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C22__9S19762C21[2]),  2,3},
  {&(_tg__ZTV8S19762C8__9S19762C22__9S19762C21[3]),  3,3},
  {&(_tg__ZTV9S19762C12__9S19762C21[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C12__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C12__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C12__9S19762C21[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C12__9S19762C21[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C12__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C12__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C8__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C19__9S19762C21[9]),  9,14},
  {&(_tg__ZTV8S19762C79S19762C19__9S19762C21[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C19__9S19762C21[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C19__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C19__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C19__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C169S19762C19__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C19__A2__9S19762C21[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C169S19762C19__A2__9S19762C21[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C169S19762C19__A2__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C19__A2__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C169S19762C19__A2__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C169S19762C19__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C169S19762C19__9S19762C21[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C169S19762C19__9S19762C21[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C169S19762C19__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C19__9S19762C21[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C19__9S19762C21[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A2__9S19762C169S19762C19__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C169S19762C19__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C169S19762C19__9S19762C21[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C169S19762C19__9S19762C21[6]),  6,8},
  {&(_tg__ZTV8S19762C7__A1__9S19762C169S19762C19__9S19762C21[6]),  6,7},
  {&(_tg__ZTV8S19762C4__9S19762C19__9S19762C21[5]),  5,8},
  {&(_tg__ZTV8S19762C8__9S19762C19__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C19__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C19__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C19__9S19762C21[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C19__9S19762C21[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C19__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A2__9S19762C19__9S19762C21[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A2__9S19762C19__9S19762C21[2]),  2,3},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C19__9S19762C21[6]),  6,8},
  {&(_tg__ZTV9S19762C16__9S19762C19__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C16__A2__9S19762C19__9S19762C21[6]),  6,7},
  {&(_tg__ZTV9S19762C15__9S19762C21[8]),  8,13},
  {&(_tg__ZTV8S19762C9__9S19762C15__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C11__9S19762C15__9S19762C21[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C15__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C15__9S19762C21[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C15__9S19762C21[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C15__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C15__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C15__9S19762C21[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C15__9S19762C21[6]),  6,8},
  {&(_tg__ZTV9S19762C11__9S19762C21[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C11__A1__9S19762C21[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C11__A1__9S19762C21[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C11__A1__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A1__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C11__A1__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C11__A1__9S19762C21[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C11__A1__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C11__A1__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__A1__9S19762C21[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__A1__9S19762C21[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C11__A1__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C11__A1__9S19762C21[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C11__9S19762C21[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C11__9S19762C21[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C11__9S19762C21[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C11__9S19762C21[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C11__9S19762C21[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C11__9S19762C21[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C11__9S19762C21[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C11__9S19762C21[6]),  6,8},
};
extern VTBL_ENTRY _ZTI9S19762C21[];
extern  VTBL_ENTRY _ZTV9S19762C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C21[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20960_N9S19762C19D0Ev,_ZThn17300_N9S19762C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20960_N9S19762C19D1Ev,_ZThn17300_N9S19762C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20488_N9S19762C19D0Ev,_ZThn16892_N9S19762C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20488_N9S19762C19D1Ev,_ZThn16892_N9S19762C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19762C12D0Ev,_ZThn5492_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19762C12D1Ev,_ZThn5492_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N9S19762C22D0Ev,_ZThn692_N9S19762C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N9S19762C22D1Ev,_ZThn692_N9S19762C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7568_N9S19762C22D0Ev,_ZThn6184_N9S19762C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19762C22D0Ev,_ZThn52_N9S19762C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7568_N9S19762C22D1Ev,_ZThn6184_N9S19762C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19762C22D1Ev,_ZThn52_N9S19762C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10416_N9S19762C16D0Ev,_ZThn8532_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10416_N9S19762C16D1Ev,_ZThn8532_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20496_N9S19762C16D0Ev,_ZThn16920_N9S19762C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn35664_N9S19762C16D0Ev,_ZThn29364_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20496_N9S19762C16D1Ev,_ZThn16920_N9S19762C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn35664_N9S19762C16D1Ev,_ZThn29364_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20024_N9S19762C16D0Ev,_ZThn16512_N9S19762C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn35192_N9S19762C16D0Ev,_ZThn28956_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20024_N9S19762C16D1Ev,_ZThn16512_N9S19762C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn35192_N9S19762C16D1Ev,_ZThn28956_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35664_N9S19762C21D0Ev,_ZThn29364_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35664_N9S19762C21D1Ev,_ZThn29364_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35192_N9S19762C21D0Ev,_ZThn28956_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35192_N9S19762C21D1Ev,_ZThn28956_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14704_N9S19762C21D0Ev,_ZThn12064_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14704_N9S19762C21D1Ev,_ZThn12064_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3712_N9S19762C21D0Ev,_ZThn3040_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3712_N9S19762C21D1Ev,_ZThn3040_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10416_N9S19762C21D0Ev,_ZThn8532_N9S19762C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N9S19762C21D0Ev,_ZThn2400_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10416_N9S19762C21D1Ev,_ZThn8532_N9S19762C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N9S19762C21D1Ev,_ZThn2400_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S19762C21D0Ev,_ZThn2348_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S19762C21D1Ev,_ZThn2348_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C21 = {  "S19762C21", // class name
  bases_S19762C21, 33,
  &(vtc_S19762C21[0]), // expected_vtbl_contents
  &(vtt_S19762C21[0]), // expected_vtt_contents
  ABISELECT(46672,38400), // object size
  NSPAIRA(_ZTI9S19762C21),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19762C21),186, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19762C21),120, //virtual table table var
  33, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C24_nt  {
  void *s19762c24f0;
  long s19762c24f1;
  int s19762c24f2;
  __tsi64 s19762c24f3;
  void *s19762c24f4;
  int s19762c24f5;
  int s19762c24f6;
  int s19762c24f7;
  int s19762c24f8;
  virtual void  v17(); // _ZN12S19762C24_nt3v17Ev
  virtual void  v18(); // _ZN12S19762C24_nt3v18Ev
  ~S19762C24_nt(); // tgen
  S19762C24_nt(); // tgen
};
//SIG(-1 S19762C24_nt) C1{ v1 v2 Fp Fl Fi FL Fp Fi[4]}


void  S19762C24_nt ::v17(){vfunc_called(this, "_ZN12S19762C24_nt3v17Ev");}
void  S19762C24_nt ::v18(){vfunc_called(this, "_ZN12S19762C24_nt3v18Ev");}
S19762C24_nt ::~S19762C24_nt(){ note_dtor("S19762C24_nt", this);} // tgen
S19762C24_nt ::S19762C24_nt(){ note_ctor("S19762C24_nt", this);} // tgen

//skip512 S19762C24_nt

#else // __cplusplus

extern void _ZN12S19762C24_ntC1Ev();
extern void _ZN12S19762C24_ntD1Ev();
Name_Map name_map_S19762C24_nt[] = {
  NSPAIR(_ZN12S19762C24_ntC1Ev),
  NSPAIR(_ZN12S19762C24_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S19762C24_nt[];
extern void _ZN12S19762C24_nt3v17Ev();
extern void _ZN12S19762C24_nt3v18Ev();
static  VTBL_ENTRY vtc_S19762C24_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S19762C24_nt[0]),
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI12S19762C24_nt[];
VTBL_ENTRY *P__ZTI12S19762C24_nt = _ZTI12S19762C24_nt; 
extern  VTBL_ENTRY _ZTV12S19762C24_nt[];
Class_Descriptor cd_S19762C24_nt = {  "S19762C24_nt", // class name
  0,0,//no base classes
  &(vtc_S19762C24_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI12S19762C24_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S19762C24_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  S19762C20  : S19762C6 , virtual S19762C21 , virtual S19762C24_nt {
  int s19762c20f0;
  int s19762c20f1[6];
  __tsi64 s19762c20f2[3];
  __tsi64 s19762c20f3;
  int s19762c20f4;
  int s19762c20f5;
  int s19762c20f6;
  int s19762c20f7;
  char s19762c20f8:7;
  void *s19762c20f9;
  char s19762c20f10;
  ::S19762C7 s19762c20f11;
  int s19762c20f12;
  ~S19762C20(); // tgen
  S19762C20(); // tgen
};
//SIG(-1 S19762C20) C1{ BC2{ VBC3{ v1 Fs:6 Fl Fs:4 FL[13] Fp} VBC4{ BC3 VBC5{ v2 v3 v4 Fi[2] FL[2] FC3[3]} VBC6{ VBC3 Fp FC3 Fi:3} VBC7{ v5 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} FC7 Fs Fi[2]} BC8{ BC7 BC5 BC3 vd v6 FL[2] Fp[8] FC4 Fp Fi FC4 Fi} BC9{ VBC8 VBC3 VBC6 BC4 BC10{ VBC7 VBC8 VBC3 VBC6 FL:44 Fp Fi FC4 FL[2] Fi[3] FC8 Fc:7 FC11{ BC7 vd v10 FC6 Fi Fp Fi}} v7 FC8 FL Fc:7} v8 v9 FC10 Fs Fi:8} VBC12{ VBC13{ VBC11 VBC3 VBC10 vd Fi FD Fi Fp Fl FU14{ m Fi:8 Fi Fp FL Fp Fp Fi} Fi FL} VBC15{ BC4 VBC16{ VBC7 BC5 VBC9 Fc:8 Fi} BC17{ BC3 VBC7 VBC16 BC4 BC11 vd v11 Fi FC4 Fi Fs FL:8 Fi} v12 v13 FC16 Fi[2] Fc Fi FL Fi[2] Fp[2] Fi[2]} BC17 v14 Fi FL Fi[4]} VBC18{ v15 v16 Fp Fl Fi FL Fp Fi Fi Fi Fi} Fi Fi[6] FL[3] FL Fi Fi Fi Fi Fc:7 Fp Fc FC4 Fi}


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

static void Test_S19762C20()
{
  extern Class_Descriptor cd_S19762C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4699,15447)];
    init_test(&cd_S19762C20, buf);
    S19762C20 *dp, &lv = *(dp=new (buf) S19762C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(75168,61784), "sizeof(S19762C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C20)");
    /*is_ambiguous_... S19762C6::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C6*), ABISELECT(27944,22960), "S19762C20");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(27944,22960), "S19762C20");
    /*is_ambiguous_... S19762C11::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*)(S19762C6*), ABISELECT(27944,22960), "S19762C20");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(27944,22960), "S19762C20");
    /*is_ambiguous_... S19762C22::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C22*), ABISELECT(27944,22960), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*), ABISELECT(27944,22960), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*), ABISELECT(27944,22960), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*), ABISELECT(27944,22960), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*), ABISELECT(28096,23084), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*), ABISELECT(28560,23464), "S19762C20");
    check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(28560,23464), "S19762C20");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C19*), ABISELECT(28560,23464), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*), ABISELECT(28560,23464), "S19762C20");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(28560,23464), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(28560,23464), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*), ABISELECT(29024,23864), "S19762C20");
    check_base_class_offset(lv, (S19762C8*)(S19762C11*)(S19762C6*), ABISELECT(29024,23864), "S19762C20");
    check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(29024,23864), "S19762C20");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(29024,23864), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C12*), ABISELECT(29024,23864), "S19762C20");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C19*), ABISELECT(29024,23864), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C11*), ABISELECT(29024,23864), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*), ABISELECT(29024,23864), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*), ABISELECT(29024,23864), "S19762C20");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(29024,23864), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(29024,23864), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*), ABISELECT(29200,24000), "S19762C20");
    check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C19*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C15::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C15*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C16::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C16*)(S19762C19*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C16*)(S19762C21*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(29200,24000), "S19762C20");
    /*is_ambiguous_... S19762C6::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C6*), ABISELECT(28096,23084), "S19762C20");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C10*)(S19762C6*), 0, "S19762C20");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C10*)(S19762C6*), ABISELECT(296,244), "S19762C20");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C10*)(S19762C6*), ABISELECT(760,644), "S19762C20");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C6*), 0, "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(29504,24244), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(29800,24488), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(30264,24888), "S19762C20");
    check_base_class_offset(lv, (S19762C10*)(S19762C11*)(S19762C6*), ABISELECT(29504,24244), "S19762C20");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(29504,24244), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C12*), ABISELECT(29504,24244), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C11*), ABISELECT(29504,24244), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*), ABISELECT(29504,24244), "S19762C20");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(4128,3396), "S19762C20");
    check_base_class_offset(lv, (S19762C7*)(S19762C11*)(S19762C6*), ABISELECT(4128,3396), "S19762C20");
    check_base_class_offset(lv, (S19762C12*)(S19762C11*)(S19762C6*), ABISELECT(4592,3776), "S19762C20");
    check_base_class_offset(lv, (S19762C11*)(S19762C6*), ABISELECT(4128,3396), "S19762C20");
    check_base_class_offset(lv, (S19762C6*), 0, "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C13 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C13*), ABISELECT(36560,30040), "S19762C20");
    check_base_class_offset(lv, (S19762C13*)(S19762C22*), ABISELECT(36560,30040), "S19762C20");
    check_base_class_offset(lv, (S19762C12*)(S19762C22*), ABISELECT(37200,30556), "S19762C20");
    check_base_class_offset(lv, (S19762C22*)(S19762C21*), ABISELECT(36480,29988), "S19762C20");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C19*), ABISELECT(43600,35804), "S19762C20");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C19*), ABISELECT(43600,35804), "S19762C20");
    /*is_ambiguous_... S19762C15::S19762C4 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C15*), ABISELECT(63624,52296), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*), ABISELECT(64096,52704), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C11*), ABISELECT(64096,52704), "S19762C20");
    /*is_ambiguous_... S19762C20::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C12*)(S19762C11*), ABISELECT(64560,53084), "S19762C20");
    check_base_class_offset(lv, (S19762C11*)(S19762C15*), ABISELECT(64096,52704), "S19762C20");
    check_base_class_offset(lv, (S19762C15*)(S19762C19*), ABISELECT(63624,52296), "S19762C20");
    check_base_class_offset(lv, (S19762C15*)(S19762C16*)(S19762C19*), ABISELECT(63624,52296), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C15*)(S19762C16*)(S19762C21*), ABISELECT(63624,52296), "S19762C20");
    /*is_ambiguous_... S19762C16::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C16*)(S19762C19*), ABISELECT(44064,36184), "S19762C20");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(44208,36308), "S19762C20");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(44208,36308), "S19762C20");
    check_base_class_offset(lv, (S19762C9*)(S19762C13*)(S19762C16*)(S19762C19*), ABISELECT(44672,36688), "S19762C20");
    check_base_class_offset(lv, (S19762C13*)(S19762C16*)(S19762C19*), ABISELECT(44672,36688), "S19762C20");
    check_base_class_offset(lv, (S19762C16*)(S19762C19*), ABISELECT(44064,36184), "S19762C20");
    check_base_class_offset(lv, (S19762C19*)(S19762C21*), ABISELECT(43600,35804), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C16*)(S19762C21*), ABISELECT(33632,27640), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(33776,27764), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(33776,27764), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C13*)(S19762C16*)(S19762C21*), ABISELECT(34240,28144), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C13*)(S19762C16*)(S19762C21*), ABISELECT(34240,28144), "S19762C20");
    /*is_ambiguous_... S19762C21::S19762C16 */ AMB_check_base_class_offset(lv, (S19762C16*)(S19762C21*), ABISELECT(33632,27640), "S19762C20");
    check_base_class_offset(lv, (S19762C21*), ABISELECT(33632,27640), "S19762C20");
    check_base_class_offset(lv, (S19762C24_nt*), ABISELECT(75104,61740), "S19762C20");
    check_field_offset(lv, s19762c20f0, ABISELECT(26276,21584), "S19762C20.s19762c20f0");
    check_field_offset(lv, s19762c20f1, ABISELECT(26280,21588), "S19762C20.s19762c20f1");
    check_field_offset(lv, s19762c20f2, ABISELECT(26304,21612), "S19762C20.s19762c20f2");
    check_field_offset(lv, s19762c20f3, ABISELECT(26328,21636), "S19762C20.s19762c20f3");
    check_field_offset(lv, s19762c20f4, ABISELECT(26336,21644), "S19762C20.s19762c20f4");
    check_field_offset(lv, s19762c20f5, ABISELECT(26340,21648), "S19762C20.s19762c20f5");
    check_field_offset(lv, s19762c20f6, ABISELECT(26344,21652), "S19762C20.s19762c20f6");
    check_field_offset(lv, s19762c20f7, ABISELECT(26348,21656), "S19762C20.s19762c20f7");
    set_bf_and_test(lv, s19762c20f8, ABISELECT(26352,21660), 0, 7, 1, "S19762C20");
    set_bf_and_test(lv, s19762c20f8, ABISELECT(26352,21660), 0, 7, hide_sll(1LL<<6), "S19762C20");
    check_field_offset(lv, s19762c20f9, ABISELECT(26360,21664), "S19762C20.s19762c20f9");
    check_field_offset(lv, s19762c20f10, ABISELECT(26368,21668), "S19762C20.s19762c20f10");
    check_field_offset(lv, s19762c20f11, ABISELECT(26384,21672), "S19762C20.s19762c20f11");
    check_field_offset(lv, s19762c20f12, ABISELECT(27936,22956), "S19762C20.s19762c20f12");
    test_class_info(&lv, &cd_S19762C20);
    dp->~S19762C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C20(Test_S19762C20, "S19762C20", ABISELECT(75168,61784));

#else // __cplusplus

extern void _ZN9S19762C20C1Ev();
extern void _ZN9S19762C20D1Ev();
Name_Map name_map_S19762C20[] = {
  NSPAIR(_ZN9S19762C20C1Ev),
  NSPAIR(_ZN9S19762C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
extern Class_Descriptor cd_S19762C6;
extern VTBL_ENTRY _ZTI8S19762C6[];
extern  VTBL_ENTRY _ZTV8S19762C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C6[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C22;
extern VTBL_ENTRY _ZTI9S19762C22[];
extern  VTBL_ENTRY _ZTV9S19762C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C22[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
extern Class_Descriptor cd_S19762C15;
extern VTBL_ENTRY _ZTI9S19762C15[];
extern  VTBL_ENTRY _ZTV9S19762C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C15[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C16;
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
extern Class_Descriptor cd_S19762C19;
extern VTBL_ENTRY _ZTI9S19762C19[];
extern  VTBL_ENTRY _ZTV9S19762C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C19[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C16;
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
extern Class_Descriptor cd_S19762C21;
extern VTBL_ENTRY _ZTI9S19762C21[];
extern  VTBL_ENTRY _ZTV9S19762C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C21[];
extern Class_Descriptor cd_S19762C24_nt;
extern VTBL_ENTRY _ZTI12S19762C24_nt[];
extern  VTBL_ENTRY _ZTV12S19762C24_nt[];
static Base_Class bases_S19762C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C5,    ABISELECT(27944,22960), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(28096,23084), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19762C4,    ABISELECT(28560,23464), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(29024,23864), //bcp->offset
    69, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C9,    ABISELECT(29200,24000), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C7,    ABISELECT(28096,23084), //bcp->offset
    53, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19762C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(296,244), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(760,644), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19762C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(29504,24244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(29800,24488), //bcp->offset
    89, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(30264,24888), //bcp->offset
    94, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(29504,24244), //bcp->offset
    76, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(4592,3776), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(4128,3396), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19762C6,    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
    46, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C9,    ABISELECT(36560,30040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(36560,30040), //bcp->offset
    145, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19762C12,    ABISELECT(37200,30556), //bcp->offset
    154, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19762C22,    ABISELECT(36480,29988), //bcp->offset
    134, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(43600,35804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(43600,35804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    118, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(63624,52296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(64096,52704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(64096,52704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    163, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(64560,53084), //bcp->offset
    241, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    168, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(64096,52704), //bcp->offset
    227, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    162, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S19762C15,    ABISELECT(63624,52296), //bcp->offset
    210, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    152, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(44064,36184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(44208,36308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(44208,36308), //bcp->offset
    197, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(44672,36688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(44672,36688), //bcp->offset
    204, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19762C16,    ABISELECT(44064,36184), //bcp->offset
    184, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19762C19,    ABISELECT(43600,35804), //bcp->offset
    163, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    117, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(33632,27640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(33776,27764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(33776,27764), //bcp->offset
    121, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(34240,28144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(34240,28144), //bcp->offset
    128, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19762C16,    ABISELECT(33632,27640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19762C21,    ABISELECT(33632,27640), //bcp->offset
    97, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C24_nt,    ABISELECT(75104,61740), //bcp->offset
    249, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19762C20[];
extern void _ZN8S19762C92v7Ev();
extern void _ZN9S19762C20D1Ev();
extern void _ZN9S19762C20D0Ev();
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C63v10Ev();
extern void _ZN8S19762C63v11Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZThn4128_N9S19762C20D1Ev,_ZThn3396_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn4128_N9S19762C20D0Ev,_ZThn3396_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn4592_N9S19762C20D1Ev,_ZThn3776_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn4592_N9S19762C20D0Ev,_ZThn3776_N9S19762C20D0Ev)();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn29504_N9S19762C20D1Ev,_ZThn24244_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn29504_N9S19762C20D0Ev,_ZThn24244_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTv0_n120_N9S19762C20D1Ev,_ZTv0_n60_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn33632_N9S19762C20D1Ev,_ZThn27640_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N9S19762C20D0Ev,_ZTv0_n60_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn33632_N9S19762C20D0Ev,_ZThn27640_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN9S19762C163v13Ev();
extern void _ZN9S19762C213v16Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn608_n120_N9S19762C20D1Ev,_ZTvn504_n60_N9S19762C20D1Ev)();
extern void ABISELECT(_ZTvn608_n120_N9S19762C20D0Ev,_ZTvn504_n60_N9S19762C20D0Ev)();
extern void _ZN9S19762C133v12Ev();
extern void ABISELECT(_ZTv0_n72_N9S19762C20D1Ev,_ZTv0_n36_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn36480_N9S19762C20D1Ev,_ZThn29988_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19762C20D0Ev,_ZTv0_n36_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn36480_N9S19762C20D0Ev,_ZThn29988_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn36560_N9S19762C20D1Ev,_ZThn30040_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn36560_N9S19762C20D0Ev,_ZThn30040_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
extern void ABISELECT(_ZTv0_n56_N9S19762C20D1Ev,_ZTv0_n28_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn37200_N9S19762C20D1Ev,_ZThn30556_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C20D0Ev,_ZTv0_n28_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn37200_N9S19762C20D0Ev,_ZThn30556_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void ABISELECT(_ZTv0_n104_N9S19762C20D1Ev,_ZTv0_n52_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn43600_N9S19762C20D1Ev,_ZThn35804_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19762C20D0Ev,_ZTv0_n52_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn43600_N9S19762C20D0Ev,_ZThn35804_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTvn464_n104_N9S19762C20D1Ev,_ZTvn380_n52_N9S19762C20D1Ev)();
extern void ABISELECT(_ZTvn464_n104_N9S19762C20D0Ev,_ZTvn380_n52_N9S19762C20D0Ev)();
extern void _ZN9S19762C163v13Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C20D1Ev,_ZTvn884_n52_N9S19762C20D1Ev)();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C20D0Ev,_ZTvn884_n52_N9S19762C20D0Ev)();
extern void _ZN9S19762C133v12Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C20D1Ev,_ZTv0_n48_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn63624_N9S19762C20D1Ev,_ZThn52296_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C20D0Ev,_ZTv0_n48_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn63624_N9S19762C20D0Ev,_ZThn52296_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C20D1Ev,_ZTv0_n40_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn64096_N9S19762C20D1Ev,_ZThn52704_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C20D0Ev,_ZTv0_n40_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn64096_N9S19762C20D0Ev,_ZThn52704_N9S19762C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N9S19762C20D1Ev,_ZTvn380_n40_N9S19762C20D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C20D0Ev,_ZTvn380_n40_N9S19762C20D0Ev)();
extern void _ZN12S19762C24_nt3v17Ev();
extern void _ZN12S19762C24_nt3v18Ev();
static  VTBL_ENTRY vtc_S19762C20[] = {
  ABISELECT(75104,61740),
  ABISELECT(64096,52704),
  ABISELECT(63624,52296),
  ABISELECT(43600,35804),
  ABISELECT(37200,30556),
  ABISELECT(36560,30040),
  ABISELECT(36480,29988),
  ABISELECT(33632,27640),
  ABISELECT(29504,24244),
  ABISELECT(29200,24000),
  ABISELECT(29024,23864),
  ABISELECT(28560,23464),
  ABISELECT(28096,23084),
  ABISELECT(27944,22960),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN9S19762C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v11Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(25376,20848),
  ABISELECT(25072,20604),
  ABISELECT(23816,19564),
  ABISELECT(24896,20468),
  ABISELECT(24432,20068),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N9S19762C20D1Ev,_ZThn3396_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N9S19762C20D0Ev,_ZThn3396_N9S19762C20D0Ev),
  ABISELECT(24432,20088),
  ABISELECT(23352,19184),
  ABISELECT(24912,20468),
  ABISELECT(24608,20224),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N9S19762C20D1Ev,_ZThn3776_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N9S19762C20D0Ev,_ZThn3776_N9S19762C20D0Ev),
  0,
  ABISELECT(-27944,-22960),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-28096,-23084),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  0,
  0,
  ABISELECT(-28560,-23464),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-1080,-904),
  ABISELECT(-29024,-23864),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  0,
  ABISELECT(-29200,-24000),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-29504,-24244),
  0,
  ABISELECT(-29504,-24244),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-29800,-24488),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-30264,-24888),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(608,504),
  ABISELECT(608,504),
  0,
  ABISELECT(-33632,-27640),
  0,
  ABISELECT(9968,8164),
  ABISELECT(3568,2916),
  ABISELECT(2928,2400),
  ABISELECT(2848,2348),
  ABISELECT(-5072,-4176),
  ABISELECT(-4608,-3776),
  ABISELECT(-5688,-4680),
  ABISELECT(-4128,-3396),
  ABISELECT(30464,25064),
  ABISELECT(29992,24656),
  ABISELECT(-4432,-3640),
  ABISELECT(-33632,-27640),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N9S19762C20D1Ev,_ZTv0_n60_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N9S19762C20D0Ev,_ZTv0_n60_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  (VTBL_ENTRY)&_ZN9S19762C213v16Ev,
  ABISELECT(-4576,-3764),
  ABISELECT(-5832,-4804),
  ABISELECT(-4752,-3900),
  ABISELECT(-5216,-4300),
  ABISELECT(-33776,-27764),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-34240,-28144),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n120_N9S19762C20D1Ev,_ZTvn504_n60_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n120_N9S19762C20D0Ev,_ZTvn504_n60_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  ABISELECT(-36480,-29988),
  ABISELECT(-7456,-6124),
  ABISELECT(-6976,-5744),
  ABISELECT(-7280,-5988),
  ABISELECT(720,568),
  ABISELECT(-8536,-7028),
  ABISELECT(80,52),
  ABISELECT(-36480,-29988),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C20D1Ev,_ZTv0_n36_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C20D0Ev,_ZTv0_n36_N9S19762C20D0Ev),
  0,
  ABISELECT(-36560,-30040),
  0,
  ABISELECT(-36560,-30040),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  ABISELECT(-37200,-30556),
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  ABISELECT(-37200,-30556),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C20D1Ev,_ZTv0_n28_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C20D0Ev,_ZTv0_n28_N9S19762C20D0Ev),
  ABISELECT(1072,884),
  ABISELECT(1072,884),
  ABISELECT(464,380),
  ABISELECT(-43600,-35804),
  0,
  0,
  0,
  ABISELECT(-14096,-11560),
  ABISELECT(20496,16900),
  ABISELECT(20024,16492),
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  ABISELECT(-43600,-35804),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C20D1Ev,_ZTv0_n52_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C20D0Ev,_ZTv0_n52_N9S19762C20D0Ev),
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  ABISELECT(-44064,-36184),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C20D1Ev,_ZTvn380_n52_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C20D0Ev,_ZTvn380_n52_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-44208,-36308),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-44672,-36688),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C20D1Ev,_ZTvn884_n52_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C20D0Ev,_ZTvn884_n52_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  ABISELECT(-63624,-52296),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-63624,-52296),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C20D1Ev,_ZTv0_n48_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C20D0Ev,_ZTv0_n48_N9S19762C20D0Ev),
  ABISELECT(-64096,-52704),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-64096,-52704),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C20D1Ev,_ZTv0_n40_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C20D0Ev,_ZTv0_n40_N9S19762C20D0Ev),
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-64560,-53084),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C20D1Ev,_ZTvn380_n40_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C20D0Ev,_ZTvn380_n40_N9S19762C20D0Ev),
  0,
  0,
  ABISELECT(-75104,-61740),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v18Ev,
};
extern VTBL_ENTRY _ZTV9S19762C20[];
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C6D1Ev();
extern void _ZN8S19762C6D0Ev();
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C63v10Ev();
extern void _ZN8S19762C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C6__9S19762C20[] = {
  ABISELECT(29504,24244),
  ABISELECT(29200,24000),
  ABISELECT(29024,23864),
  ABISELECT(28560,23464),
  ABISELECT(28096,23084),
  ABISELECT(27944,22960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19762C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19762C6D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v11Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(25376,20848),
  ABISELECT(25072,20604),
  ABISELECT(23816,19564),
  ABISELECT(24896,20468),
  ABISELECT(24432,20068),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C118S19762C6__A1__9S19762C20[] = {
  ABISELECT(25072,20604),
  ABISELECT(23816,19564),
  ABISELECT(24896,20468),
  ABISELECT(24432,20068),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C118S19762C6__A1__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(-24432,-20068),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C118S19762C6__A1__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-24896,-20468),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C118S19762C6__A1__9S19762C20[] = {
  0,
  ABISELECT(-23816,-19564),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C118S19762C6__A1__9S19762C20[] = {
  0,
  ABISELECT(-25072,-20604),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(24432,20088),
  ABISELECT(23352,19184),
  ABISELECT(24912,20468),
  ABISELECT(24608,20224),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C118S19762C6__9S19762C20[] = {
  0,
  ABISELECT(-24608,-20224),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn24912_N9S19762C12D1Ev,_ZThn20468_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn24912_N9S19762C12D0Ev,_ZThn20468_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-24912,-20468),
  0,
  ABISELECT(-24912,-20468),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(-25208,-20712),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(-25672,-21112),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C118S19762C6__9S19762C20[] = {
  0,
  ABISELECT(-23352,-19184),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-24432,-20088),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn25376_N9S19762C11D1Ev,_ZThn20848_N9S19762C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void ABISELECT(_ZThn25376_N9S19762C11D0Ev,_ZThn20848_N9S19762C11D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-25376,-20848),
  0,
  ABISELECT(-25376,-20848),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(-25672,-21092),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(-26136,-21492),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C118S19762C6__9S19762C20[] = {
  0,
  ABISELECT(-23816,-19564),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-24896,-20468),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C118S19762C6__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(-24432,-20068),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C118S19762C6__9S19762C20[] = {
  0,
  ABISELECT(-25072,-20604),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C118S19762C6__9S19762C20[] = {
  ABISELECT(24432,20088),
  ABISELECT(23352,19184),
  ABISELECT(24912,20468),
  ABISELECT(24608,20224),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C6__9S19762C20[] = {
  0,
  ABISELECT(-27944,-22960),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__8S19762C6__9S19762C20[] = {
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-28096,-23084),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C6__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(-28560,-23464),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C6__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-29024,-23864),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C6__9S19762C20[] = {
  0,
  ABISELECT(-29200,-24000),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZThn4128_N8S19762C6D1Ev,_ZThn3396_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn4128_N8S19762C6D0Ev,_ZThn3396_N8S19762C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C11__8S19762C6__9S19762C20[] = {
  ABISELECT(25376,20848),
  ABISELECT(25072,20604),
  ABISELECT(23816,19564),
  ABISELECT(24896,20468),
  ABISELECT(24432,20068),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C6D1Ev,_ZThn3396_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C6D0Ev,_ZThn3396_N8S19762C6D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn29504_N8S19762C6D1Ev,_ZThn24244_N8S19762C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev)();
extern void ABISELECT(_ZThn29504_N8S19762C6D0Ev,_ZThn24244_N8S19762C6D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__A1__8S19762C6__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-29504,-24244),
  0,
  ABISELECT(-29504,-24244),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A2__8S19762C6__9S19762C20[] = {
  ABISELECT(-29800,-24488),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A3__8S19762C6__9S19762C20[] = {
  ABISELECT(-30264,-24888),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZThn4592_N8S19762C6D1Ev,_ZThn3776_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn4592_N8S19762C6D0Ev,_ZThn3776_N8S19762C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__8S19762C6__9S19762C20[] = {
  ABISELECT(24432,20088),
  ABISELECT(23352,19184),
  ABISELECT(24912,20468),
  ABISELECT(24608,20224),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C6D1Ev,_ZThn3776_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C6D0Ev,_ZThn3776_N8S19762C6D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__9S19762C20[] = {
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C7__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C7__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C7__9S19762C20[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C7__9S19762C20[] = {
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C20[] = {
  ABISELECT(-1080,-904),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__9S19762C20[] = {
  0,
  ABISELECT(1080,904),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C21D1Ev();
extern void _ZN9S19762C21D0Ev();
extern void _ZN9S19762C163v13Ev();
extern void _ZN9S19762C213v16Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C21__9S19762C20[] = {
  ABISELECT(9968,8164),
  ABISELECT(3568,2916),
  ABISELECT(2928,2400),
  ABISELECT(2848,2348),
  ABISELECT(-5072,-4176),
  ABISELECT(-4608,-3776),
  ABISELECT(-5688,-4680),
  ABISELECT(-4128,-3396),
  ABISELECT(30464,25064),
  ABISELECT(29992,24656),
  ABISELECT(-4432,-3640),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C21D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  (VTBL_ENTRY)&_ZN9S19762C213v16Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C21__A1__9S19762C20[] = {
  ABISELECT(-5072,-4176),
  ABISELECT(-4608,-3776),
  ABISELECT(-5688,-4680),
  ABISELECT(-4128,-3396),
  ABISELECT(30464,25064),
  ABISELECT(29992,24656),
  ABISELECT(-4432,-3640),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C21__A5__9S19762C20[] = {
  ABISELECT(-4576,-3764),
  ABISELECT(-5832,-4804),
  ABISELECT(-4752,-3900),
  ABISELECT(-5216,-4300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C169S19762C21__A5__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(5216,4300),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C169S19762C21__A5__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(4752,3900),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C21__A5__9S19762C20[] = {
  0,
  ABISELECT(5832,4804),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C169S19762C21__A5__9S19762C20[] = {
  0,
  ABISELECT(4576,3764),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C169S19762C21__A1__9S19762C20[] = {
  0,
  ABISELECT(4432,3640),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn29992_N9S19762C16D1Ev,_ZThn24656_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn29992_N9S19762C16D0Ev,_ZThn24656_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C169S19762C21__A1__9S19762C20[] = {
  ABISELECT(-29992,-24656),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-29992,-24656),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn30464_N9S19762C16D1Ev,_ZThn25064_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn30464_N9S19762C16D0Ev,_ZThn25064_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C169S19762C21__A1__9S19762C20[] = {
  ABISELECT(-30464,-25064),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-30464,-25064),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C169S19762C21__A1__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4128,3396),
  0,
  ABISELECT(4128,3396),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C21__A1__9S19762C20[] = {
  ABISELECT(3832,3152),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C21__A1__9S19762C20[] = {
  ABISELECT(3368,2752),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A2__9S19762C169S19762C21__A1__9S19762C20[] = {
  0,
  ABISELECT(5688,4680),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C169S19762C21__A1__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(4608,3776),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C169S19762C21__A1__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(5072,4176),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C169S19762C21__A1__9S19762C20[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-30928,-25444),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C169S19762C21__A1__9S19762C20[] = {
  ABISELECT(-4576,-3764),
  ABISELECT(-5832,-4804),
  ABISELECT(-4752,-3900),
  ABISELECT(-5216,-4300),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn2848_N9S19762C21D1Ev,_ZThn2348_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn2848_N9S19762C21D0Ev,_ZThn2348_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C22__9S19762C21__9S19762C20[] = {
  ABISELECT(-2848,-2348),
  ABISELECT(-7456,-6124),
  ABISELECT(-6976,-5744),
  ABISELECT(-7280,-5988),
  ABISELECT(720,568),
  ABISELECT(-8536,-7028),
  ABISELECT(80,52),
  ABISELECT(-2848,-2348),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn2928_N9S19762C21D1Ev,_ZThn2400_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn2928_N9S19762C21D0Ev,_ZThn2400_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C13__9S19762C21__9S19762C20[] = {
  0,
  ABISELECT(-2928,-2400),
  0,
  ABISELECT(-2928,-2400),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__9S19762C21__9S19762C20[] = {
  0,
  ABISELECT(5688,4680),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn3568_N9S19762C21D1Ev,_ZThn2916_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn3568_N9S19762C21D0Ev,_ZThn2916_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C21__9S19762C20[] = {
  ABISELECT(-3568,-2916),
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  ABISELECT(-3568,-2916),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C21__9S19762C20[] = {
  0,
  ABISELECT(4432,3640),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C21__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4128,3396),
  0,
  ABISELECT(4128,3396),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C21__9S19762C20[] = {
  ABISELECT(3832,3152),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C21__9S19762C20[] = {
  ABISELECT(3368,2752),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C21__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(4608,3776),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn9968_N9S19762C21D1Ev,_ZThn8164_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn9968_N9S19762C21D0Ev,_ZThn8164_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C19__9S19762C21__9S19762C20[] = {
  ABISELECT(1072,884),
  ABISELECT(1072,884),
  ABISELECT(464,380),
  ABISELECT(-9968,-8164),
  0,
  0,
  0,
  ABISELECT(-14096,-11560),
  ABISELECT(20496,16900),
  ABISELECT(20024,16492),
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  ABISELECT(-9968,-8164),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C21__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(5072,4176),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn29992_N9S19762C21D1Ev,_ZThn24656_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn29992_N9S19762C21D0Ev,_ZThn24656_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C21__9S19762C20[] = {
  ABISELECT(-29992,-24656),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-29992,-24656),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn30464_N9S19762C21D1Ev,_ZThn25064_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn30464_N9S19762C21D0Ev,_ZThn25064_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C21__9S19762C20[] = {
  ABISELECT(-30464,-25064),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-30464,-25064),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev),
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C21D1Ev,_ZTvn380_n40_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C21D0Ev,_ZTvn380_n40_N9S19762C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__A1__9S19762C21__9S19762C20[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-30928,-25444),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C21D1Ev,_ZTvn380_n40_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C21D0Ev,_ZTvn380_n40_N9S19762C21D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTvn464_n104_N9S19762C21D1Ev,_ZTvn380_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn464_n104_N9S19762C21D0Ev,_ZTvn380_n52_N9S19762C21D0Ev)();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C19__9S19762C21__9S19762C20[] = {
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  ABISELECT(-10432,-8544),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C21D1Ev,_ZTvn380_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C21D0Ev,_ZTvn380_n52_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C19__A2__9S19762C21__9S19762C20[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-10576,-8668),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C21D1Ev,_ZTvn884_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C21D0Ev,_ZTvn884_n52_N9S19762C21D0Ev)();
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C139S19762C169S19762C19__A1__9S19762C21__9S19762C20[] = {
  ABISELECT(-11040,-9048),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C21D1Ev,_ZTvn884_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C21D0Ev,_ZTvn884_n52_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C16__A3__9S19762C21__9S19762C20[] = {
  ABISELECT(-4576,-3764),
  ABISELECT(-5832,-4804),
  ABISELECT(-4752,-3900),
  ABISELECT(-5216,-4300),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN9S19762C22D1Ev();
extern void _ZN9S19762C22D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C22__9S19762C20[] = {
  ABISELECT(-7456,-6124),
  ABISELECT(-6976,-5744),
  ABISELECT(-7280,-5988),
  ABISELECT(720,568),
  ABISELECT(-8536,-7028),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN9S19762C22D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C22D0Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn80_N9S19762C22D1Ev,_ZThn52_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn80_N9S19762C22D0Ev,_ZThn52_N9S19762C22D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C13__9S19762C22__9S19762C20[] = {
  0,
  ABISELECT(-80,-52),
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__9S19762C22__9S19762C20[] = {
  0,
  ABISELECT(8536,7028),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn720_N9S19762C22D1Ev,_ZThn568_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn720_N9S19762C22D0Ev,_ZThn568_N9S19762C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C22__9S19762C20[] = {
  ABISELECT(-720,-568),
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  ABISELECT(-720,-568),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C22__9S19762C20[] = {
  0,
  ABISELECT(7280,5988),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C22__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(6976,5744),
  0,
  ABISELECT(6976,5744),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C22__9S19762C20[] = {
  ABISELECT(6680,5500),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C22__9S19762C20[] = {
  ABISELECT(6216,5100),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C22__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(7456,6124),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C12__A1__9S19762C20[] = {
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C12__A1__9S19762C20[] = {
  0,
  ABISELECT(8000,6556),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C12__A1__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(7696,6312),
  0,
  ABISELECT(7696,6312),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C12__A1__9S19762C20[] = {
  ABISELECT(7400,6068),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C12__A1__9S19762C20[] = {
  ABISELECT(6936,5668),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C12__A1__9S19762C20[] = {
  0,
  ABISELECT(9256,7596),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C12__A1__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(8176,6692),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void _ZN9S19762C19D1Ev();
extern void _ZN9S19762C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C19__9S19762C20[] = {
  ABISELECT(-14096,-11560),
  ABISELECT(20496,16900),
  ABISELECT(20024,16492),
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&_ZN9S19762C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C19D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C19__A2__9S19762C20[] = {
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C19__A2__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(15040,12340),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C19__A2__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(14576,11940),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C19__A2__9S19762C20[] = {
  0,
  ABISELECT(15656,12844),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C19__A2__9S19762C20[] = {
  0,
  ABISELECT(14400,11804),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C19__9S19762C20[] = {
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C19__A4__9S19762C20[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C169S19762C19__A4__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(15648,12844),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C169S19762C19__A4__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(15184,12444),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C19__A4__9S19762C20[] = {
  0,
  ABISELECT(16264,13348),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C169S19762C19__A4__9S19762C20[] = {
  0,
  ABISELECT(15008,12308),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C169S19762C19__9S19762C20[] = {
  0,
  ABISELECT(14864,12184),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn19560_N9S19762C16D1Ev,_ZThn16112_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn19560_N9S19762C16D0Ev,_ZThn16112_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C169S19762C19__9S19762C20[] = {
  ABISELECT(-19560,-16112),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-19560,-16112),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn20032_N9S19762C16D1Ev,_ZThn16520_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn20032_N9S19762C16D0Ev,_ZThn16520_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C169S19762C19__9S19762C20[] = {
  ABISELECT(-20032,-16520),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-20032,-16520),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C169S19762C19__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(14560,11940),
  0,
  ABISELECT(14560,11940),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C19__9S19762C20[] = {
  ABISELECT(14264,11696),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C19__9S19762C20[] = {
  ABISELECT(13800,11296),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A2__9S19762C169S19762C19__9S19762C20[] = {
  0,
  ABISELECT(16120,13224),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C169S19762C19__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(15040,12320),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C169S19762C19__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(15504,12720),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C169S19762C19__9S19762C20[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-20496,-16900),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C169S19762C19__9S19762C20[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__9S19762C19__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(15040,12340),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C19__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(14576,11940),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C19__9S19762C20[] = {
  0,
  ABISELECT(15656,12844),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C19__9S19762C20[] = {
  0,
  ABISELECT(14400,11804),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn20024_N9S19762C19D1Ev,_ZThn16492_N9S19762C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev)();
extern void ABISELECT(_ZThn20024_N9S19762C19D0Ev,_ZThn16492_N9S19762C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C19__9S19762C20[] = {
  ABISELECT(-20024,-16492),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-20024,-16492),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn20496_N9S19762C19D1Ev,_ZThn16900_N9S19762C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev)();
extern void ABISELECT(_ZThn20496_N9S19762C19D0Ev,_ZThn16900_N9S19762C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C19__9S19762C20[] = {
  ABISELECT(-20496,-16900),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-20496,-16900),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C19D1Ev,_ZTv0_n16_N9S19762C19D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C19D0Ev,_ZTv0_n16_N9S19762C19D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C19__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(14096,11560),
  0,
  ABISELECT(14096,11560),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C19D1Ev,_ZTv0_n16_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C19D0Ev,_ZTv0_n16_N9S19762C19D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A2__9S19762C19__9S19762C20[] = {
  ABISELECT(13800,11316),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A2__9S19762C19__9S19762C20[] = {
  ABISELECT(13336,10916),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C19D1Ev,_ZTvn380_n40_N9S19762C19D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C19D0Ev,_ZTvn380_n40_N9S19762C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C19__9S19762C20[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-20960,-17280),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C19D1Ev,_ZTvn380_n40_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C19D0Ev,_ZTvn380_n40_N9S19762C19D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZThn464_N9S19762C19D1Ev,_ZThn380_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C19D0Ev,_ZThn380_N9S19762C19D0Ev)();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C16__9S19762C19__9S19762C20[] = {
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C19D1Ev,_ZThn380_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C19D0Ev,_ZThn380_N9S19762C19D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C16__A2__9S19762C19__9S19762C20[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-608,-504),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN9S19762C15D1Ev();
extern void _ZN9S19762C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C20[] = {
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C15__9S19762C20[] = {
  0,
  ABISELECT(34424,28296),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C15__9S19762C20[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C15__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(34120,28052),
  0,
  ABISELECT(34120,28052),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C15__9S19762C20[] = {
  ABISELECT(33824,27808),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C15__9S19762C20[] = {
  ABISELECT(33360,27408),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C15__9S19762C20[] = {
  0,
  ABISELECT(35680,29336),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C15__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(34600,28432),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C15__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(35064,28832),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C15__9S19762C20[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C11__A1__9S19762C20[] = {
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C11__A3__9S19762C20[] = {
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C11__A3__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(35536,29240),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C11__A3__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(35072,28840),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A3__9S19762C20[] = {
  0,
  ABISELECT(36152,29744),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C11__A3__9S19762C20[] = {
  0,
  ABISELECT(34896,28704),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__A2__9S19762C20[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C11__A2__9S19762C20[] = {
  0,
  ABISELECT(35360,29084),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C11__A2__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(35056,28840),
  0,
  ABISELECT(35056,28840),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__A2__9S19762C20[] = {
  ABISELECT(34760,28596),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__A2__9S19762C20[] = {
  ABISELECT(34296,28196),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C11__A2__9S19762C20[] = {
  0,
  ABISELECT(36616,30124),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C11__A2__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(35536,29220),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C11__A1__9S19762C20[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(34592,28460),
  0,
  ABISELECT(34592,28460),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C11__A1__9S19762C20[] = {
  ABISELECT(34296,28216),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C11__A1__9S19762C20[] = {
  ABISELECT(33832,27816),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C11__A1__9S19762C20[] = {
  0,
  ABISELECT(36152,29744),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C11__A1__9S19762C20[] = {
  ABISELECT(-1080,-904),
  ABISELECT(35072,28840),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C11__A1__9S19762C20[] = {
  0,
  0,
  0,
  ABISELECT(35536,29240),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C11__A1__9S19762C20[] = {
  0,
  ABISELECT(34896,28704),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C11__A1__9S19762C20[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
static  VTT_ENTRY vtt_S19762C20[] = {
  {&(_ZTV9S19762C20[16]),  16,255},
  {&(_tg__ZTV8S19762C6__9S19762C20[8]),  8,14},
  {&(_tg__ZTV9S19762C118S19762C6__9S19762C20[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C118S19762C6__A1__9S19762C20[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C118S19762C6__A1__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C118S19762C6__A1__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C118S19762C6__A1__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C118S19762C6__A1__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C118S19762C6__9S19762C20[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C118S19762C6__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C118S19762C6__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C118S19762C6__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C118S19762C6__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C118S19762C6__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C118S19762C6__9S19762C20[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C118S19762C6__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C118S19762C6__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C118S19762C6__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C118S19762C6__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C118S19762C6__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C118S19762C6__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C118S19762C6__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C118S19762C6__9S19762C20[6]),  6,8},
  {&(_tg__ZTV8S19762C5__8S19762C6__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C7__8S19762C6__9S19762C20[7]),  7,8},
  {&(_tg__ZTV8S19762C4__8S19762C6__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C6__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C9__8S19762C6__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C11__8S19762C6__9S19762C20[7]),  7,11},
  {&(_tg__ZTV9S19762C10__A1__8S19762C6__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A2__8S19762C6__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A3__8S19762C6__9S19762C20[2]),  2,3},
  {&(_tg__ZTV9S19762C129S19762C11__8S19762C6__9S19762C20[6]),  6,8},
  {&(_ZTV9S19762C20[52]),  52,255},
  {&(_ZTV9S19762C20[60]),  60,255},
  {&(_ZTV9S19762C20[66]),  66,255},
  {&(_ZTV9S19762C20[72]),  72,255},
  {&(_ZTV9S19762C20[75]),  75,255},
  {&(_ZTV9S19762C20[37]),  37,255},
  {&(_ZTV9S19762C20[85]),  85,255},
  {&(_ZTV9S19762C20[91]),  91,255},
  {&(_ZTV9S19762C20[96]),  96,255},
  {&(_ZTV9S19762C20[47]),  47,255},
  {&(_ZTV9S19762C20[116]),  116,255},
  {&(_ZTV9S19762C20[143]),  143,255},
  {&(_ZTV9S19762C20[150]),  150,255},
  {&(_ZTV9S19762C20[161]),  161,255},
  {&(_ZTV9S19762C20[179]),  179,255},
  {&(_ZTV9S19762C20[222]),  222,255},
  {&(_ZTV9S19762C20[237]),  237,255},
  {&(_ZTV9S19762C20[247]),  247,255},
  {&(_ZTV9S19762C20[193]),  193,255},
  {&(_ZTV9S19762C20[203]),  203,255},
  {&(_ZTV9S19762C20[206]),  206,255},
  {&(_ZTV9S19762C20[127]),  127,255},
  {&(_ZTV9S19762C20[130]),  130,255},
  {&(_ZTV9S19762C20[253]),  253,255},
  {&(_tg__ZTV8S19762C7__9S19762C20[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C7__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C7__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C7__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C7__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C21__9S19762C20[13]),  13,18},
  {&(_tg__ZTV9S19762C169S19762C21__A1__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C21__A5__9S19762C20[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C169S19762C21__A5__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C169S19762C21__A5__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C21__A5__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C169S19762C21__A5__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C169S19762C21__A1__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C169S19762C21__A1__9S19762C20[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C169S19762C21__A1__9S19762C20[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C169S19762C21__A1__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C21__A1__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C21__A1__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A2__9S19762C169S19762C21__A1__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C169S19762C21__A1__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C169S19762C21__A1__9S19762C20[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C169S19762C21__A1__9S19762C20[6]),  6,8},
  {&(_tg__ZTV8S19762C7__A1__9S19762C169S19762C21__A1__9S19762C20[6]),  6,7},
  {&(_tg__ZTV9S19762C22__9S19762C21__9S19762C20[9]),  9,11},
  {&(_tg__ZTV9S19762C13__9S19762C21__9S19762C20[5]),  5,9},
  {&(_tg__ZTV8S19762C5__9S19762C21__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C21__9S19762C20[7]),  7,9},
  {&(_tg__ZTV8S19762C9__A1__9S19762C21__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C21__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C21__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C21__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C8__9S19762C21__9S19762C20[3]),  3,3},
  {&(_tg__ZTV9S19762C19__9S19762C21__9S19762C20[16]),  16,21},
  {&(_tg__ZTV8S19762C4__A1__9S19762C21__9S19762C20[5]),  5,8},
  {&(_tg__ZTV9S19762C15__9S19762C21__9S19762C20[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C21__9S19762C20[10]),  10,14},
  {&(_tg__ZTV9S19762C129S19762C11__A1__9S19762C21__9S19762C20[6]),  6,8},
  {&(_tg__ZTV9S19762C169S19762C19__9S19762C21__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C19__A2__9S19762C21__9S19762C20[6]),  6,7},
  {&(_tg__ZTV9S19762C139S19762C169S19762C19__A1__9S19762C21__9S19762C20[2]),  2,6},
  {&(_tg__ZTV8S19762C79S19762C16__A3__9S19762C21__9S19762C20[6]),  6,7},
  {&(_tg__ZTV9S19762C22__9S19762C20[8]),  8,10},
  {&(_tg__ZTV9S19762C13__9S19762C22__9S19762C20[5]),  5,9},
  {&(_tg__ZTV8S19762C5__9S19762C22__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C22__9S19762C20[7]),  7,9},
  {&(_tg__ZTV8S19762C9__A1__9S19762C22__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C22__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C22__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C22__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C8__9S19762C22__9S19762C20[3]),  3,3},
  {&(_tg__ZTV9S19762C12__A1__9S19762C20[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C12__A1__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C12__A1__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C12__A1__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C12__A1__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C12__A1__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C12__A1__9S19762C20[3]),  3,3},
  {&(_tg__ZTV9S19762C19__9S19762C20[9]),  9,14},
  {&(_tg__ZTV8S19762C79S19762C19__A2__9S19762C20[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C19__A2__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C19__A2__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C19__A2__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C19__A2__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C169S19762C19__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C19__A4__9S19762C20[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C169S19762C19__A4__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C169S19762C19__A4__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C19__A4__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C169S19762C19__A4__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C169S19762C19__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C169S19762C19__9S19762C20[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C169S19762C19__9S19762C20[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C169S19762C19__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C19__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C19__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A2__9S19762C169S19762C19__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C169S19762C19__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C169S19762C19__9S19762C20[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C169S19762C19__9S19762C20[6]),  6,8},
  {&(_tg__ZTV8S19762C7__A1__9S19762C169S19762C19__9S19762C20[6]),  6,7},
  {&(_tg__ZTV8S19762C4__9S19762C19__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C8__9S19762C19__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C19__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C19__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C19__9S19762C20[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C19__9S19762C20[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C19__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A2__9S19762C19__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A2__9S19762C19__9S19762C20[2]),  2,3},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C19__9S19762C20[6]),  6,8},
  {&(_tg__ZTV9S19762C16__9S19762C19__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C16__A2__9S19762C19__9S19762C20[6]),  6,7},
  {&(_tg__ZTV9S19762C15__9S19762C20[8]),  8,13},
  {&(_tg__ZTV8S19762C9__9S19762C15__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C11__9S19762C15__9S19762C20[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C15__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C15__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C15__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C15__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C15__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C15__9S19762C20[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C15__9S19762C20[6]),  6,8},
  {&(_tg__ZTV9S19762C11__A1__9S19762C20[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C11__A3__9S19762C20[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C11__A3__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C11__A3__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A3__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C11__A3__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C11__A2__9S19762C20[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C11__A2__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C11__A2__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__A2__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__A2__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C11__A2__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C11__A2__9S19762C20[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C11__A1__9S19762C20[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C11__A1__9S19762C20[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C11__A1__9S19762C20[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C11__A1__9S19762C20[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C11__A1__9S19762C20[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C11__A1__9S19762C20[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C11__A1__9S19762C20[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C11__A1__9S19762C20[6]),  6,8},
};
extern VTBL_ENTRY _ZTI9S19762C20[];
extern  VTBL_ENTRY _ZTV9S19762C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C20[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20496_N9S19762C19D0Ev,_ZThn16900_N9S19762C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20496_N9S19762C19D1Ev,_ZThn16900_N9S19762C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20024_N9S19762C19D0Ev,_ZThn16492_N9S19762C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20024_N9S19762C19D1Ev,_ZThn16492_N9S19762C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19762C22D0Ev,_ZThn568_N9S19762C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19762C22D1Ev,_ZThn568_N9S19762C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19762C22D0Ev,_ZThn52_N9S19762C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19762C22D1Ev,_ZThn52_N9S19762C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N9S19762C21D0Ev,_ZThn25064_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N9S19762C21D1Ev,_ZThn25064_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn29992_N9S19762C21D0Ev,_ZThn24656_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn29992_N9S19762C21D1Ev,_ZThn24656_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N9S19762C21D0Ev,_ZThn8164_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N9S19762C21D1Ev,_ZThn8164_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3568_N9S19762C21D0Ev,_ZThn2916_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3568_N9S19762C21D1Ev,_ZThn2916_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N9S19762C21D0Ev,_ZThn2400_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N9S19762C21D1Ev,_ZThn2400_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S19762C21D0Ev,_ZThn2348_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S19762C21D1Ev,_ZThn2348_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20032_N9S19762C16D0Ev,_ZThn16520_N9S19762C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N9S19762C16D0Ev,_ZThn25064_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20032_N9S19762C16D1Ev,_ZThn16520_N9S19762C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N9S19762C16D1Ev,_ZThn25064_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19560_N9S19762C16D0Ev,_ZThn16112_N9S19762C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn29992_N9S19762C16D0Ev,_ZThn24656_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19560_N9S19762C16D1Ev,_ZThn16112_N9S19762C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn29992_N9S19762C16D1Ev,_ZThn24656_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn29504_N8S19762C6D0Ev,_ZThn24244_N8S19762C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn29504_N8S19762C6D1Ev,_ZThn24244_N8S19762C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25376_N9S19762C11D0Ev,_ZThn20848_N9S19762C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25376_N9S19762C11D1Ev,_ZThn20848_N9S19762C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24912_N9S19762C12D0Ev,_ZThn20468_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24912_N9S19762C12D1Ev,_ZThn20468_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C20D0Ev,_ZTv0_n40_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64096_N9S19762C20D0Ev,_ZThn52704_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C20D1Ev,_ZTv0_n40_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64096_N9S19762C20D1Ev,_ZThn52704_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C20D0Ev,_ZTv0_n48_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn63624_N9S19762C20D0Ev,_ZThn52296_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C20D1Ev,_ZTv0_n48_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn63624_N9S19762C20D1Ev,_ZThn52296_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C20D0Ev,_ZTv0_n52_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43600_N9S19762C20D0Ev,_ZThn35804_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C20D1Ev,_ZTv0_n52_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43600_N9S19762C20D1Ev,_ZThn35804_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C20D0Ev,_ZTv0_n28_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37200_N9S19762C20D0Ev,_ZThn30556_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C20D1Ev,_ZTv0_n28_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37200_N9S19762C20D1Ev,_ZThn30556_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C20D0Ev,_ZTv0_n36_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36480_N9S19762C20D0Ev,_ZThn29988_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C20D1Ev,_ZTv0_n36_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36480_N9S19762C20D1Ev,_ZThn29988_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N9S19762C20D0Ev,_ZTv0_n60_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33632_N9S19762C20D0Ev,_ZThn27640_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N9S19762C20D1Ev,_ZTv0_n60_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33632_N9S19762C20D1Ev,_ZThn27640_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36560_N9S19762C20D0Ev,_ZThn30040_N9S19762C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn29504_N9S19762C20D0Ev,_ZThn24244_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36560_N9S19762C20D1Ev,_ZThn30040_N9S19762C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn29504_N9S19762C20D1Ev,_ZThn24244_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C20 = {  "S19762C20", // class name
  bases_S19762C20, 46,
  &(vtc_S19762C20[0]), // expected_vtbl_contents
  &(vtt_S19762C20[0]), // expected_vtt_contents
  ABISELECT(75168,61784), // object size
  NSPAIRA(_ZTI9S19762C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19762C20),255, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19762C20),182, //virtual table table var
  46, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19762C1  : virtual S19762C2 , virtual S19762C17 , S19762C20 , S19762C24_nt , S19762C21 {
  int s19762c1f0;
  int s19762c1f1;
  int s19762c1f2;
  int s19762c1f3;
  int s19762c1f4;
  ::S19762C5 s19762c1f5[2];
  int s19762c1f6;
  int s19762c1f7;
  int s19762c1f8;
  __tsi64 s19762c1f9;
  char s19762c1f10:8;
  virtual void  v1(); // _ZN8S19762C12v1Ev
  ~S19762C1(); // tgen
  S19762C1(); // tgen
};
//SIG(1 S19762C1) C1{ VBC2{ m Fp Fi[2] Fs Fc Fi FC3{ VBC4{ v4 v5 v6 Fi[2] FL[2] FC5{ v3 Fs:6 Fl Fs:4 FL[13] Fp}[3]} BC6{ VBC5 VBC7{ BC5 VBC4 VBC8{ VBC5 Fp FC5 Fi:3} VBC9{ v7 FL FD Fp Fc FC5 Fp[2] FL[8] Fs Fp FL:64} FC9 Fs Fi[2]} BC10{ BC9 BC4 BC5 vd v8 FL[2] Fp[8] FC7 Fp Fi FC7 Fi} BC11{ VBC10 VBC5 VBC8 BC7 BC12{ VBC9 VBC10 VBC5 VBC8 FL:44 Fp Fi FC7 FL[2] Fi[3] FC10 Fc:7 FC13{ BC9 vd v12 FC8 Fi Fp Fi}} v9 FC10 FL Fc:7} v10 v11 FC12 Fs Fi:8} BC14{ VBC8 FC12 Fi:6 Fi FL} VBC15{ VBC9 BC4 VBC11 Fc:8 Fi} VBC16{ BC5 VBC9 VBC15 BC7 BC13 vd v13 Fi FC7 Fi Fs FL:8 Fi} v19 FC15 FC6} Fi} VBC17{ v2 FC18{} FC19{ BC7 VBC15 BC16 v14 v15 FC15 Fi[2] Fc Fi FL Fi[2] Fp[2] Fi[2]} Fi Fc:5} BC20{ BC6 VBC21{ VBC22{ VBC13 VBC5 VBC12 vd Fi FD Fi Fp Fl FU23{ m Fi:8 Fi Fp FL Fp Fp Fi} Fi FL} VBC19 BC16 v16 Fi FL Fi[4]} VBC24{ v17 v18 Fp Fl Fi FL Fp Fi Fi Fi Fi} Fi Fi[6] FL[3] FL Fi Fi Fi Fi Fc:7 Fp Fc FC7 Fi} BC24 BC21 v1 Fi Fi Fi Fi Fi FC5[2] Fi Fi Fi FL Fc:8}


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

static void Test_S19762C1()
{
  extern Class_Descriptor cd_S19762C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13831,45488)];
    init_test(&cd_S19762C1, buf);
    S19762C1 *dp, &lv = *(dp=new (buf) S19762C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(221280,181948), "sizeof(S19762C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19762C1)");
    check_base_class_offset(lv, (S19762C2*), ABISELECT(31200,25644), "S19762C1");
    check_base_class_offset(lv, (S19762C17*), ABISELECT(137328,112872), "S19762C1");
    /*is_ambiguous_... S19762C6::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C6*)(S19762C20*), ABISELECT(174056,143124), "S19762C1");
    check_base_class_offset(lv, (S19762C5*)(S19762C8*), ABISELECT(174056,143124), "S19762C1");
    /*is_ambiguous_... S19762C11::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(174056,143124), "S19762C1");
    /*is_ambiguous_... S19762C12::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(174056,143124), "S19762C1");
    /*is_ambiguous_... S19762C22::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C22*), ABISELECT(174056,143124), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*), ABISELECT(174056,143124), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C11*), ABISELECT(174056,143124), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C12*)(S19762C11*), ABISELECT(174056,143124), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*), ABISELECT(174208,143248), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*), ABISELECT(174672,143628), "S19762C1");
    check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(174672,143628), "S19762C1");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C19*), ABISELECT(174672,143628), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C11*), ABISELECT(174672,143628), "S19762C1");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(174672,143628), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(174672,143628), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(174672,143628), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*), ABISELECT(175136,144028), "S19762C1");
    check_base_class_offset(lv, (S19762C8*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(175136,144028), "S19762C1");
    check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(175136,144028), "S19762C1");
    check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(175136,144028), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C12*), ABISELECT(175136,144028), "S19762C1");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C19*), ABISELECT(175136,144028), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C11*), ABISELECT(175136,144028), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C11*), ABISELECT(175136,144028), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C12*)(S19762C11*), ABISELECT(175136,144028), "S19762C1");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(175136,144028), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(175136,144028), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C8*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(175136,144028), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*), ABISELECT(175312,144164), "S19762C1");
    check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C12::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C19*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C15::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C15*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C11*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C12*)(S19762C11*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C16::S19762C9 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C16*)(S19762C19*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C16*)(S19762C21*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C16*)(S19762C21*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(175312,144164), "S19762C1");
    /*is_ambiguous_... S19762C6::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C6*)(S19762C20*), ABISELECT(174208,143248), "S19762C1");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C10*)(S19762C6*)(S19762C20*), 0, "S19762C1");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C10*)(S19762C6*)(S19762C20*), ABISELECT(296,244), "S19762C1");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C10*)(S19762C6*)(S19762C20*), ABISELECT(760,644), "S19762C1");
    /*is_ambiguous_... S19762C6::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C6*)(S19762C20*), 0, "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C10*), ABISELECT(175616,144408), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C10*), ABISELECT(175912,144652), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C10 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C10*), ABISELECT(176376,145052), "S19762C1");
    check_base_class_offset(lv, (S19762C10*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(175616,144408), "S19762C1");
    check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(175616,144408), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C12 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C12*), ABISELECT(175616,144408), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C11*), ABISELECT(175616,144408), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C10*)(S19762C12*)(S19762C11*), ABISELECT(175616,144408), "S19762C1");
    /*is_ambiguous_... S19762C7::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(4128,3396), "S19762C1");
    check_base_class_offset(lv, (S19762C7*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(4128,3396), "S19762C1");
    check_base_class_offset(lv, (S19762C12*)(S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(4592,3776), "S19762C1");
    check_base_class_offset(lv, (S19762C11*)(S19762C6*)(S19762C20*), ABISELECT(4128,3396), "S19762C1");
    check_base_class_offset(lv, (S19762C6*)(S19762C20*), 0, "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C13 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C13*), ABISELECT(182672,150204), "S19762C1");
    check_base_class_offset(lv, (S19762C13*)(S19762C22*), ABISELECT(182672,150204), "S19762C1");
    check_base_class_offset(lv, (S19762C12*)(S19762C22*), ABISELECT(183312,150720), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C22*)(S19762C21*), ABISELECT(182592,150152), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C22*)(S19762C21*), ABISELECT(182592,150152), "S19762C1");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C19*), ABISELECT(189712,155968), "S19762C1");
    /*is_ambiguous_... S19762C19::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C19*), ABISELECT(189712,155968), "S19762C1");
    /*is_ambiguous_... S19762C15::S19762C4 */ AMB_check_base_class_offset(lv, (S19762C4*)(S19762C15*), ABISELECT(209736,172460), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C11*), ABISELECT(210208,172868), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C11*), ABISELECT(210208,172868), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C11 */ AMB_check_base_class_offset(lv, (S19762C12*)(S19762C11*), ABISELECT(210672,173248), "S19762C1");
    check_base_class_offset(lv, (S19762C11*)(S19762C15*), ABISELECT(210208,172868), "S19762C1");
    check_base_class_offset(lv, (S19762C15*)(S19762C19*), ABISELECT(209736,172460), "S19762C1");
    check_base_class_offset(lv, (S19762C15*)(S19762C16*)(S19762C19*), ABISELECT(209736,172460), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C15*)(S19762C16*)(S19762C21*), ABISELECT(209736,172460), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C15*)(S19762C16*)(S19762C21*), ABISELECT(209736,172460), "S19762C1");
    /*is_ambiguous_... S19762C16::S19762C5 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C16*)(S19762C19*), ABISELECT(190176,156348), "S19762C1");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(190320,156472), "S19762C1");
    /*is_ambiguous_... S19762C16::S19762C7 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C16*)(S19762C19*), ABISELECT(190320,156472), "S19762C1");
    check_base_class_offset(lv, (S19762C9*)(S19762C13*)(S19762C16*)(S19762C19*), ABISELECT(190784,156852), "S19762C1");
    check_base_class_offset(lv, (S19762C13*)(S19762C16*)(S19762C19*), ABISELECT(190784,156852), "S19762C1");
    check_base_class_offset(lv, (S19762C16*)(S19762C19*), ABISELECT(190176,156348), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C19*)(S19762C21*), ABISELECT(189712,155968), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C19*)(S19762C21*), ABISELECT(189712,155968), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C16*)(S19762C21*), ABISELECT(179744,147804), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(179888,147928), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(179888,147928), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C13*)(S19762C16*)(S19762C21*), ABISELECT(180352,148308), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C13*)(S19762C16*)(S19762C21*), ABISELECT(180352,148308), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C16*)(S19762C21*), ABISELECT(179744,147804), "S19762C1");
    check_base_class_offset(lv, (S19762C21*)(S19762C20*), ABISELECT(179744,147804), "S19762C1");
    check_base_class_offset(lv, (S19762C24_nt*)(S19762C20*), ABISELECT(221216,181904), "S19762C1");
    check_base_class_offset(lv, (S19762C20*), 0, "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C24_nt */ AMB_check_base_class_offset(lv, (S19762C24_nt*), ABISELECT(27944,22960), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C16*)(S19762C21*), ABISELECT(28016,23004), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C5*)(S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(28160,23128), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C7*)(S19762C16*)(S19762C21*), ABISELECT(28160,23128), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C9*)(S19762C13*)(S19762C16*)(S19762C21*), ABISELECT(28624,23508), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C13*)(S19762C16*)(S19762C21*), ABISELECT(28624,23508), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C16*)(S19762C21*), ABISELECT(28016,23004), "S19762C1");
    /*is_ambiguous_... S19762C1::S19762C21 */ AMB_check_base_class_offset(lv, (S19762C21*), ABISELECT(28016,23004), "S19762C1");
    check_field_offset(lv, s19762c1f0, ABISELECT(30856,25352), "S19762C1.s19762c1f0");
    check_field_offset(lv, s19762c1f1, ABISELECT(30860,25356), "S19762C1.s19762c1f1");
    check_field_offset(lv, s19762c1f2, ABISELECT(30864,25360), "S19762C1.s19762c1f2");
    check_field_offset(lv, s19762c1f3, ABISELECT(30868,25364), "S19762C1.s19762c1f3");
    check_field_offset(lv, s19762c1f4, ABISELECT(30872,25368), "S19762C1.s19762c1f4");
    check_field_offset(lv, s19762c1f5, ABISELECT(30880,25372), "S19762C1.s19762c1f5");
    check_field_offset(lv, s19762c1f6, ABISELECT(31168,25620), "S19762C1.s19762c1f6");
    check_field_offset(lv, s19762c1f7, ABISELECT(31172,25624), "S19762C1.s19762c1f7");
    check_field_offset(lv, s19762c1f8, ABISELECT(31176,25628), "S19762C1.s19762c1f8");
    check_field_offset(lv, s19762c1f9, ABISELECT(31184,25632), "S19762C1.s19762c1f9");
    set_bf_and_test(lv, s19762c1f10, ABISELECT(31192,25640), 0, 8, 1, "S19762C1");
    set_bf_and_test(lv, s19762c1f10, ABISELECT(31192,25640), 0, 8, hide_sll(1LL<<7), "S19762C1");
    test_class_info(&lv, &cd_S19762C1);
    dp->~S19762C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19762C1(Test_S19762C1, "S19762C1", ABISELECT(221280,181948));

#else // __cplusplus

extern void _ZN8S19762C1C1Ev();
extern void _ZN8S19762C1D1Ev();
Name_Map name_map_S19762C1[] = {
  NSPAIR(_ZN8S19762C1C1Ev),
  NSPAIR(_ZN8S19762C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C2;
extern VTBL_ENTRY _ZTI8S19762C2[];
extern Class_Descriptor cd_S19762C17;
extern VTBL_ENTRY _ZTI9S19762C17[];
extern  VTBL_ENTRY _ZTV9S19762C17[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C8;
extern VTBL_ENTRY _ZTI8S19762C8[];
extern  VTBL_ENTRY _ZTV8S19762C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C8[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C10;
extern VTBL_ENTRY _ZTI9S19762C10[];
extern  VTBL_ENTRY _ZTV9S19762C10[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
extern Class_Descriptor cd_S19762C6;
extern VTBL_ENTRY _ZTI8S19762C6[];
extern  VTBL_ENTRY _ZTV8S19762C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C6[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C22;
extern VTBL_ENTRY _ZTI9S19762C22[];
extern  VTBL_ENTRY _ZTV9S19762C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C22[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C4;
extern VTBL_ENTRY _ZTI8S19762C4[];
extern  VTBL_ENTRY _ZTV8S19762C4[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C12;
extern VTBL_ENTRY _ZTI9S19762C12[];
extern  VTBL_ENTRY _ZTV9S19762C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C12[];
extern Class_Descriptor cd_S19762C11;
extern VTBL_ENTRY _ZTI9S19762C11[];
extern  VTBL_ENTRY _ZTV9S19762C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C11[];
extern Class_Descriptor cd_S19762C15;
extern VTBL_ENTRY _ZTI9S19762C15[];
extern  VTBL_ENTRY _ZTV9S19762C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C15[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C16;
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
extern Class_Descriptor cd_S19762C19;
extern VTBL_ENTRY _ZTI9S19762C19[];
extern  VTBL_ENTRY _ZTV9S19762C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C19[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C16;
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
extern Class_Descriptor cd_S19762C21;
extern VTBL_ENTRY _ZTI9S19762C21[];
extern  VTBL_ENTRY _ZTV9S19762C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C21[];
extern Class_Descriptor cd_S19762C24_nt;
extern VTBL_ENTRY _ZTI12S19762C24_nt[];
extern  VTBL_ENTRY _ZTV12S19762C24_nt[];
extern Class_Descriptor cd_S19762C20;
extern VTBL_ENTRY _ZTI9S19762C20[];
extern  VTBL_ENTRY _ZTV9S19762C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C20[];
extern Class_Descriptor cd_S19762C24_nt;
extern VTBL_ENTRY _ZTI12S19762C24_nt[];
extern  VTBL_ENTRY _ZTV12S19762C24_nt[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C5;
extern VTBL_ENTRY _ZTI8S19762C5[];
extern  VTBL_ENTRY _ZTV8S19762C5[];
extern Class_Descriptor cd_S19762C7;
extern VTBL_ENTRY _ZTI8S19762C7[];
extern  VTBL_ENTRY _ZTV8S19762C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C7[];
extern Class_Descriptor cd_S19762C9;
extern VTBL_ENTRY _ZTI8S19762C9[];
extern  VTBL_ENTRY _ZTV8S19762C9[];
extern Class_Descriptor cd_S19762C13;
extern VTBL_ENTRY _ZTI9S19762C13[];
extern  VTBL_ENTRY _ZTV9S19762C13[];
extern Class_Descriptor cd_S19762C16;
extern VTBL_ENTRY _ZTI9S19762C16[];
extern  VTBL_ENTRY _ZTV9S19762C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C16[];
extern Class_Descriptor cd_S19762C21;
extern VTBL_ENTRY _ZTI9S19762C21[];
extern  VTBL_ENTRY _ZTV9S19762C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19762C21[];
static Base_Class bases_S19762C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C2,    ABISELECT(31200,25644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19762C17,    ABISELECT(137328,112872), //bcp->offset
    87, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    95, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19762C5,    ABISELECT(174056,143124), //bcp->offset
    91, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    96, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(174208,143248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(174672,143628), //bcp->offset
    103, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    98, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19762C8,    ABISELECT(175136,144028), //bcp->offset
    111, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    99, //bcp->index_in_construction_vtbl_array
    127, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19762C9,    ABISELECT(175312,144164), //bcp->offset
    114, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    100, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19762C7,    ABISELECT(174208,143248), //bcp->offset
    95, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    97, //bcp->index_in_construction_vtbl_array
    122, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19762C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(296,244), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(760,644), //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
    41, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19762C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(175616,144408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(175912,144652), //bcp->offset
    131, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    103, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(176376,145052), //bcp->offset
    136, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    104, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19762C10,    ABISELECT(175616,144408), //bcp->offset
    118, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    102, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(4592,3776), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    105, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(4128,3396), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    101, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19762C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(182672,150204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(182672,150204), //bcp->offset
    187, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    108, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19762C12,    ABISELECT(183312,150720), //bcp->offset
    196, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    109, //bcp->index_in_construction_vtbl_array
    174, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19762C22,    ABISELECT(182592,150152), //bcp->offset
    176, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    107, //bcp->index_in_construction_vtbl_array
    165, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    46, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(189712,155968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(189712,155968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    182, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19762C4,    ABISELECT(209736,172460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(210208,172868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(210208,172868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    227, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19762C12,    ABISELECT(210672,173248), //bcp->offset
    283, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    113, //bcp->index_in_construction_vtbl_array
    232, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19762C11,    ABISELECT(210208,172868), //bcp->offset
    269, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    112, //bcp->index_in_construction_vtbl_array
    226, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S19762C15,    ABISELECT(209736,172460), //bcp->offset
    252, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    111, //bcp->index_in_construction_vtbl_array
    216, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(190176,156348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(190320,156472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(190320,156472), //bcp->offset
    239, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    115, //bcp->index_in_construction_vtbl_array
    188, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(190784,156852), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(190784,156852), //bcp->offset
    246, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    116, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19762C16,    ABISELECT(190176,156348), //bcp->offset
    226, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    114, //bcp->index_in_construction_vtbl_array
    187, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19762C19,    ABISELECT(189712,155968), //bcp->offset
    205, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    110, //bcp->index_in_construction_vtbl_array
    181, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    46, //immediately_derived
  0, 1},
  {&cd_S19762C5,    ABISELECT(179744,147804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(179888,147928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(179888,147928), //bcp->offset
    163, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    117, //bcp->index_in_construction_vtbl_array
    131, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(180352,148308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(180352,148308), //bcp->offset
    170, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    118, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19762C16,    ABISELECT(179744,147804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    130, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19762C21,    ABISELECT(179744,147804), //bcp->offset
    139, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    106, //bcp->index_in_construction_vtbl_array
    129, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    48, //immediately_derived
  0, 1},
  {&cd_S19762C24_nt,    ABISELECT(221216,181904), //bcp->offset
    291, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    119, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    48, //immediately_derived
  0, 1},
  {&cd_S19762C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C24_nt,    ABISELECT(27944,22960), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19762C5,    ABISELECT(28016,23004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S19762C5,    ABISELECT(28160,23128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    51, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S19762C7,    ABISELECT(28160,23128), //bcp->offset
    74, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    121, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    52, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S19762C9,    ABISELECT(28624,23508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    53, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S19762C13,    ABISELECT(28624,23508), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    54, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S19762C16,    ABISELECT(28016,23004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    55, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S19762C21,    ABISELECT(28016,23004), //bcp->offset
    56, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    120, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    56, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19762C1[];
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C1D1Ev();
extern void _ZN8S19762C1D0Ev();
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C63v10Ev();
extern void _ZN8S19762C63v11Ev();
extern void _ZN8S19762C12v1Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZThn4128_N8S19762C1D1Ev,_ZThn3396_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn4128_N8S19762C1D0Ev,_ZThn3396_N8S19762C1D0Ev)();
extern void ABISELECT(_ZThn4592_N8S19762C1D1Ev,_ZThn3776_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn4592_N8S19762C1D0Ev,_ZThn3776_N8S19762C1D0Ev)();
extern void _ZN12S19762C24_nt3v17Ev();
extern void _ZN12S19762C24_nt3v18Ev();
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZThn28016_N8S19762C1D1Ev,_ZThn23004_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn28016_N8S19762C1D0Ev,_ZThn23004_N8S19762C1D0Ev)();
extern void _ZN9S19762C163v13Ev();
extern void _ZN9S19762C213v16Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZThn28624_N8S19762C1D1Ev,_ZThn23508_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn28624_N8S19762C1D0Ev,_ZThn23508_N8S19762C1D0Ev)();
extern void _ZN9S19762C133v12Ev();
extern void _ZN9S19762C172v2Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S19762C1D1Ev,_ZTv0_n16_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn175616_N8S19762C1D1Ev,_ZThn144408_N8S19762C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19762C1D0Ev,_ZTv0_n16_N8S19762C1D0Ev)();
extern void ABISELECT(_ZThn175616_N8S19762C1D0Ev,_ZThn144408_N8S19762C1D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTv0_n120_N8S19762C1D1Ev,_ZTv0_n60_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn179744_N8S19762C1D1Ev,_ZThn147804_N8S19762C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19762C1D0Ev,_ZTv0_n60_N8S19762C1D0Ev)();
extern void ABISELECT(_ZThn179744_N8S19762C1D0Ev,_ZThn147804_N8S19762C1D0Ev)() __attribute__((weak));
extern void _ZN9S19762C163v13Ev();
extern void _ZN9S19762C213v16Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn608_n120_N8S19762C1D1Ev,_ZTvn504_n60_N8S19762C1D1Ev)();
extern void ABISELECT(_ZTvn608_n120_N8S19762C1D0Ev,_ZTvn504_n60_N8S19762C1D0Ev)();
extern void _ZN9S19762C133v12Ev();
extern void ABISELECT(_ZTv0_n72_N8S19762C1D1Ev,_ZTv0_n36_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn182592_N8S19762C1D1Ev,_ZThn150152_N8S19762C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19762C1D0Ev,_ZTv0_n36_N8S19762C1D0Ev)();
extern void ABISELECT(_ZThn182592_N8S19762C1D0Ev,_ZThn150152_N8S19762C1D0Ev)() __attribute__((weak));
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S19762C1D1Ev,_ZTv0_n16_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn182672_N8S19762C1D1Ev,_ZThn150204_N8S19762C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19762C1D0Ev,_ZTv0_n16_N8S19762C1D0Ev)();
extern void ABISELECT(_ZThn182672_N8S19762C1D0Ev,_ZThn150204_N8S19762C1D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
extern void ABISELECT(_ZTv0_n56_N8S19762C1D1Ev,_ZTv0_n28_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn183312_N8S19762C1D1Ev,_ZThn150720_N8S19762C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19762C1D0Ev,_ZTv0_n28_N8S19762C1D0Ev)();
extern void ABISELECT(_ZThn183312_N8S19762C1D0Ev,_ZThn150720_N8S19762C1D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void ABISELECT(_ZTv0_n104_N8S19762C1D1Ev,_ZTv0_n52_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn189712_N8S19762C1D1Ev,_ZThn155968_N8S19762C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19762C1D0Ev,_ZTv0_n52_N8S19762C1D0Ev)();
extern void ABISELECT(_ZThn189712_N8S19762C1D0Ev,_ZThn155968_N8S19762C1D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTvn464_n104_N8S19762C1D1Ev,_ZTvn380_n52_N8S19762C1D1Ev)();
extern void ABISELECT(_ZTvn464_n104_N8S19762C1D0Ev,_ZTvn380_n52_N8S19762C1D0Ev)();
extern void _ZN9S19762C163v13Ev();
extern void _ZN8S19762C52v3Ev();
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn1072_n104_N8S19762C1D1Ev,_ZTvn884_n52_N8S19762C1D1Ev)();
extern void ABISELECT(_ZTvn1072_n104_N8S19762C1D0Ev,_ZTvn884_n52_N8S19762C1D0Ev)();
extern void _ZN9S19762C133v12Ev();
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N8S19762C1D1Ev,_ZTv0_n48_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn209736_N8S19762C1D1Ev,_ZThn172460_N8S19762C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19762C1D0Ev,_ZTv0_n48_N8S19762C1D0Ev)();
extern void ABISELECT(_ZThn209736_N8S19762C1D0Ev,_ZThn172460_N8S19762C1D0Ev)() __attribute__((weak));
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N8S19762C1D1Ev,_ZTv0_n40_N8S19762C1D1Ev)();
extern void ABISELECT(_ZThn210208_N8S19762C1D1Ev,_ZThn172868_N8S19762C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19762C1D0Ev,_ZTv0_n40_N8S19762C1D0Ev)();
extern void ABISELECT(_ZThn210208_N8S19762C1D0Ev,_ZThn172868_N8S19762C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N8S19762C1D1Ev,_ZTvn380_n40_N8S19762C1D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S19762C1D0Ev,_ZTvn380_n40_N8S19762C1D0Ev)();
extern void _ZN12S19762C24_nt3v17Ev();
extern void _ZN12S19762C24_nt3v18Ev();
static  VTBL_ENTRY vtc_S19762C1[] = {
  ABISELECT(137328,112872),
  ABISELECT(31200,25644),
  ABISELECT(221216,181904),
  ABISELECT(210208,172868),
  ABISELECT(209736,172460),
  ABISELECT(189712,155968),
  ABISELECT(183312,150720),
  ABISELECT(182672,150204),
  ABISELECT(182592,150152),
  ABISELECT(179744,147804),
  ABISELECT(175616,144408),
  ABISELECT(175312,144164),
  ABISELECT(175136,144028),
  ABISELECT(174672,143628),
  ABISELECT(174208,143248),
  ABISELECT(174056,143124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19762C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19762C1D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19762C12v1Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(171488,141012),
  ABISELECT(171184,140768),
  ABISELECT(169928,139728),
  ABISELECT(171008,140632),
  ABISELECT(170544,140232),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C1D1Ev,_ZThn3396_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C1D0Ev,_ZThn3396_N8S19762C1D0Ev),
  ABISELECT(170544,140252),
  ABISELECT(169464,139348),
  ABISELECT(171024,140632),
  ABISELECT(170720,140388),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C1D1Ev,_ZThn3776_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C1D0Ev,_ZThn3776_N8S19762C1D0Ev),
  ABISELECT(-27944,-22960),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v18Ev,
  ABISELECT(161696,132964),
  ABISELECT(155296,127716),
  ABISELECT(154656,127200),
  ABISELECT(154576,127148),
  ABISELECT(146656,120624),
  ABISELECT(147120,121024),
  ABISELECT(146040,120120),
  ABISELECT(147600,121404),
  ABISELECT(182192,149864),
  ABISELECT(181720,149456),
  ABISELECT(147296,121160),
  ABISELECT(-28016,-23004),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn28016_N8S19762C1D1Ev,_ZThn23004_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn28016_N8S19762C1D0Ev,_ZThn23004_N8S19762C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  (VTBL_ENTRY)&_ZN9S19762C213v16Ev,
  ABISELECT(147152,121036),
  ABISELECT(145896,119996),
  ABISELECT(146976,120900),
  ABISELECT(146512,120500),
  ABISELECT(-28160,-23128),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-28624,-23508),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn28624_N8S19762C1D1Ev,_ZThn23508_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn28624_N8S19762C1D0Ev,_ZThn23508_N8S19762C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  0,
  ABISELECT(-137328,-112872),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN9S19762C172v2Ev,
  0,
  ABISELECT(-174056,-143124),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-174208,-143248),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  0,
  0,
  ABISELECT(-174672,-143628),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-1080,-904),
  ABISELECT(-175136,-144028),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  0,
  ABISELECT(-175312,-144164),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-175616,-144408),
  0,
  ABISELECT(-175616,-144408),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C1D1Ev,_ZTv0_n16_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C1D0Ev,_ZTv0_n16_N8S19762C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  ABISELECT(-175912,-144652),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  ABISELECT(-176376,-145052),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  0,
  ABISELECT(608,504),
  ABISELECT(608,504),
  0,
  ABISELECT(-179744,-147804),
  0,
  ABISELECT(9968,8164),
  ABISELECT(3568,2916),
  ABISELECT(2928,2400),
  ABISELECT(2848,2348),
  ABISELECT(-5072,-4176),
  ABISELECT(-4608,-3776),
  ABISELECT(-5688,-4680),
  ABISELECT(-4128,-3396),
  ABISELECT(30464,25064),
  ABISELECT(29992,24656),
  ABISELECT(-4432,-3640),
  ABISELECT(-179744,-147804),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19762C1D1Ev,_ZTv0_n60_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19762C1D0Ev,_ZTv0_n60_N8S19762C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  (VTBL_ENTRY)&_ZN9S19762C213v16Ev,
  ABISELECT(-4576,-3764),
  ABISELECT(-5832,-4804),
  ABISELECT(-4752,-3900),
  ABISELECT(-5216,-4300),
  ABISELECT(-179888,-147928),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-180352,-148308),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n120_N8S19762C1D1Ev,_ZTvn504_n60_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n120_N8S19762C1D0Ev,_ZTvn504_n60_N8S19762C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  ABISELECT(-182592,-150152),
  ABISELECT(-7456,-6124),
  ABISELECT(-6976,-5744),
  ABISELECT(-7280,-5988),
  ABISELECT(720,568),
  ABISELECT(-8536,-7028),
  ABISELECT(80,52),
  ABISELECT(-182592,-150152),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19762C1D1Ev,_ZTv0_n36_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19762C1D0Ev,_ZTv0_n36_N8S19762C1D0Ev),
  0,
  ABISELECT(-182672,-150204),
  0,
  ABISELECT(-182672,-150204),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C1D1Ev,_ZTv0_n16_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C1D0Ev,_ZTv0_n16_N8S19762C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  ABISELECT(-183312,-150720),
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  ABISELECT(-183312,-150720),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19762C1D1Ev,_ZTv0_n28_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19762C1D0Ev,_ZTv0_n28_N8S19762C1D0Ev),
  ABISELECT(1072,884),
  ABISELECT(1072,884),
  ABISELECT(464,380),
  ABISELECT(-189712,-155968),
  0,
  0,
  0,
  ABISELECT(-14096,-11560),
  ABISELECT(20496,16900),
  ABISELECT(20024,16492),
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  ABISELECT(-189712,-155968),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19762C1D1Ev,_ZTv0_n52_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19762C1D0Ev,_ZTv0_n52_N8S19762C1D0Ev),
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  ABISELECT(-190176,-156348),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N8S19762C1D1Ev,_ZTvn380_n52_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N8S19762C1D0Ev,_ZTvn380_n52_N8S19762C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-190320,-156472),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  ABISELECT(-190784,-156852),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N8S19762C1D1Ev,_ZTvn884_n52_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N8S19762C1D0Ev,_ZTvn884_n52_N8S19762C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
  ABISELECT(-209736,-172460),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-209736,-172460),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19762C1D1Ev,_ZTv0_n48_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19762C1D0Ev,_ZTv0_n48_N8S19762C1D0Ev),
  ABISELECT(-210208,-172868),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-210208,-172868),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19762C1D1Ev,_ZTv0_n40_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19762C1D0Ev,_ZTv0_n40_N8S19762C1D0Ev),
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-210672,-173248),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19762C1D1Ev,_ZTvn380_n40_N8S19762C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19762C1D0Ev,_ZTvn380_n40_N8S19762C1D0Ev),
  0,
  0,
  ABISELECT(-221216,-181904),
  (VTBL_ENTRY)&(_ZTI8S19762C1[0]),
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v18Ev,
};
extern VTBL_ENTRY _ZTV8S19762C1[];
extern void _ZN8S19762C92v7Ev();
extern void _ZN9S19762C20D1Ev();
extern void _ZN9S19762C20D0Ev();
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C63v10Ev();
extern void _ZN8S19762C63v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C20__8S19762C1[] = {
  ABISELECT(221216,181904),
  ABISELECT(210208,172868),
  ABISELECT(209736,172460),
  ABISELECT(189712,155968),
  ABISELECT(183312,150720),
  ABISELECT(182672,150204),
  ABISELECT(182592,150152),
  ABISELECT(179744,147804),
  ABISELECT(175616,144408),
  ABISELECT(175312,144164),
  ABISELECT(175136,144028),
  ABISELECT(174672,143628),
  ABISELECT(174208,143248),
  ABISELECT(174056,143124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN9S19762C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v11Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void _ZN8S19762C6D1Ev();
extern void _ZN8S19762C6D0Ev();
extern void _ZN9S19762C102v8Ev();
extern void _ZN8S19762C63v10Ev();
extern void _ZN8S19762C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(175616,144408),
  ABISELECT(175312,144164),
  ABISELECT(175136,144028),
  ABISELECT(174672,143628),
  ABISELECT(174208,143248),
  ABISELECT(174056,143124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&_ZN8S19762C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19762C6D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19762C63v11Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(171488,141012),
  ABISELECT(171184,140768),
  ABISELECT(169928,139728),
  ABISELECT(171008,140632),
  ABISELECT(170544,140232),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[] = {
  ABISELECT(171184,140768),
  ABISELECT(169928,139728),
  ABISELECT(171008,140632),
  ABISELECT(170544,140232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(-170544,-140232),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-171008,-140632),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[] = {
  0,
  ABISELECT(-169928,-139728),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[] = {
  0,
  ABISELECT(-171184,-140768),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(170544,140252),
  ABISELECT(169464,139348),
  ABISELECT(171024,140632),
  ABISELECT(170720,140388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[] = {
  0,
  ABISELECT(-170720,-140388),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZThn171024_N9S19762C12D1Ev,_ZThn140632_N9S19762C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void ABISELECT(_ZThn171024_N9S19762C12D0Ev,_ZThn140632_N9S19762C12D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-171024,-140632),
  0,
  ABISELECT(-171024,-140632),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(-171320,-140876),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(-171784,-141276),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[] = {
  0,
  ABISELECT(-169464,-139348),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-170544,-140252),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn171488_N9S19762C11D1Ev,_ZThn141012_N9S19762C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void ABISELECT(_ZThn171488_N9S19762C11D0Ev,_ZThn141012_N9S19762C11D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-171488,-141012),
  0,
  ABISELECT(-171488,-141012),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(-171784,-141256),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(-172248,-141656),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C118S19762C69S19762C20__8S19762C1[] = {
  0,
  ABISELECT(-169928,-139728),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-171008,-140632),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C118S19762C69S19762C20__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(-170544,-140232),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C118S19762C69S19762C20__8S19762C1[] = {
  0,
  ABISELECT(-171184,-140768),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C118S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(170544,140252),
  ABISELECT(169464,139348),
  ABISELECT(171024,140632),
  ABISELECT(170720,140388),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C69S19762C20__8S19762C1[] = {
  0,
  ABISELECT(-174056,-143124),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__8S19762C69S19762C20__8S19762C1[] = {
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-174208,-143248),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C69S19762C20__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(-174672,-143628),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-175136,-144028),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C69S19762C20__8S19762C1[] = {
  0,
  ABISELECT(-175312,-144164),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZThn4128_N8S19762C6D1Ev,_ZThn3396_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn4128_N8S19762C6D0Ev,_ZThn3396_N8S19762C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C11__8S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(171488,141012),
  ABISELECT(171184,140768),
  ABISELECT(169928,139728),
  ABISELECT(171008,140632),
  ABISELECT(170544,140232),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C6D1Ev,_ZThn3396_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S19762C6D0Ev,_ZThn3396_N8S19762C6D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn175616_N8S19762C6D1Ev,_ZThn144408_N8S19762C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev)();
extern void ABISELECT(_ZThn175616_N8S19762C6D0Ev,_ZThn144408_N8S19762C6D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__A1__8S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-175616,-144408),
  0,
  ABISELECT(-175616,-144408),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A2__8S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(-175912,-144652),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A3__8S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(-176376,-145052),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZThn4592_N8S19762C6D1Ev,_ZThn3776_N8S19762C6D1Ev)();
extern void ABISELECT(_ZThn4592_N8S19762C6D0Ev,_ZThn3776_N8S19762C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__8S19762C69S19762C20__8S19762C1[] = {
  ABISELECT(170544,140252),
  ABISELECT(169464,139348),
  ABISELECT(171024,140632),
  ABISELECT(170720,140388),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S19762C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C6D1Ev,_ZThn3776_N8S19762C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S19762C6D0Ev,_ZThn3776_N8S19762C6D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__9S19762C20__8S19762C1[] = {
  0,
  ABISELECT(-174056,-143124),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__9S19762C20__8S19762C1[] = {
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-174208,-143248),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__9S19762C20__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(-174672,-143628),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C20__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-175136,-144028),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C20__8S19762C1[] = {
  0,
  ABISELECT(-175312,-144164),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZThn4128_N9S19762C20D1Ev,_ZThn3396_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn4128_N9S19762C20D0Ev,_ZThn3396_N9S19762C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C118S19762C6__9S19762C20__8S19762C1[] = {
  ABISELECT(171488,141012),
  ABISELECT(171184,140768),
  ABISELECT(169928,139728),
  ABISELECT(171008,140632),
  ABISELECT(170544,140232),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N9S19762C20D1Ev,_ZThn3396_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N9S19762C20D0Ev,_ZThn3396_N9S19762C20D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn175616_N9S19762C20D1Ev,_ZThn144408_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn175616_N9S19762C20D0Ev,_ZThn144408_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__A1__9S19762C20__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-175616,-144408),
  0,
  ABISELECT(-175616,-144408),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A2__9S19762C20__8S19762C1[] = {
  ABISELECT(-175912,-144652),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A3__9S19762C20__8S19762C1[] = {
  ABISELECT(-176376,-145052),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZThn4592_N9S19762C20D1Ev,_ZThn3776_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn4592_N9S19762C20D0Ev,_ZThn3776_N9S19762C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C118S19762C6__9S19762C20__8S19762C1[] = {
  ABISELECT(170544,140252),
  ABISELECT(169464,139348),
  ABISELECT(171024,140632),
  ABISELECT(170720,140388),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N9S19762C20D1Ev,_ZThn3776_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N9S19762C20D0Ev,_ZThn3776_N9S19762C20D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTv0_n120_N9S19762C20D1Ev,_ZTv0_n60_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn179744_N9S19762C20D1Ev,_ZThn147804_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N9S19762C20D0Ev,_ZTv0_n60_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn179744_N9S19762C20D0Ev,_ZThn147804_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN9S19762C163v13Ev();
extern void _ZN9S19762C213v16Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C21__9S19762C20__8S19762C1[] = {
  0,
  ABISELECT(608,504),
  ABISELECT(608,504),
  0,
  ABISELECT(-179744,-147804),
  0,
  ABISELECT(9968,8164),
  ABISELECT(3568,2916),
  ABISELECT(2928,2400),
  ABISELECT(2848,2348),
  ABISELECT(-5072,-4176),
  ABISELECT(-4608,-3776),
  ABISELECT(-5688,-4680),
  ABISELECT(-4128,-3396),
  ABISELECT(30464,25064),
  ABISELECT(29992,24656),
  ABISELECT(-4432,-3640),
  ABISELECT(-179744,-147804),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N9S19762C20D1Ev,_ZTv0_n60_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N9S19762C20D0Ev,_ZTv0_n60_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  (VTBL_ENTRY)&_ZN9S19762C213v16Ev,
};
extern void ABISELECT(_ZTv0_n72_N9S19762C20D1Ev,_ZTv0_n36_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn182592_N9S19762C20D1Ev,_ZThn150152_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19762C20D0Ev,_ZTv0_n36_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn182592_N9S19762C20D0Ev,_ZThn150152_N9S19762C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C22__9S19762C20__8S19762C1[] = {
  ABISELECT(-182592,-150152),
  ABISELECT(-7456,-6124),
  ABISELECT(-6976,-5744),
  ABISELECT(-7280,-5988),
  ABISELECT(720,568),
  ABISELECT(-8536,-7028),
  ABISELECT(80,52),
  ABISELECT(-182592,-150152),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C20D1Ev,_ZTv0_n36_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C20D0Ev,_ZTv0_n36_N9S19762C20D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn182672_N9S19762C20D1Ev,_ZThn150204_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn182672_N9S19762C20D0Ev,_ZThn150204_N9S19762C20D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C13__9S19762C20__8S19762C1[] = {
  0,
  ABISELECT(-182672,-150204),
  0,
  ABISELECT(-182672,-150204),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19762C20D1Ev,_ZTv0_n28_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn183312_N9S19762C20D1Ev,_ZThn150720_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C20D0Ev,_ZTv0_n28_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn183312_N9S19762C20D0Ev,_ZThn150720_N9S19762C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C12__A1__9S19762C20__8S19762C1[] = {
  ABISELECT(-183312,-150720),
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  ABISELECT(-183312,-150720),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C20D1Ev,_ZTv0_n28_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C20D0Ev,_ZTv0_n28_N9S19762C20D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void ABISELECT(_ZTv0_n104_N9S19762C20D1Ev,_ZTv0_n52_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn189712_N9S19762C20D1Ev,_ZThn155968_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19762C20D0Ev,_ZTv0_n52_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn189712_N9S19762C20D0Ev,_ZThn155968_N9S19762C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C19__9S19762C20__8S19762C1[] = {
  ABISELECT(1072,884),
  ABISELECT(1072,884),
  ABISELECT(464,380),
  ABISELECT(-189712,-155968),
  0,
  0,
  0,
  ABISELECT(-14096,-11560),
  ABISELECT(20496,16900),
  ABISELECT(20024,16492),
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  ABISELECT(-189712,-155968),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C20D1Ev,_ZTv0_n52_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C20D0Ev,_ZTv0_n52_N9S19762C20D0Ev),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C20D1Ev,_ZTv0_n48_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn209736_N9S19762C20D1Ev,_ZThn172460_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C20D0Ev,_ZTv0_n48_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn209736_N9S19762C20D0Ev,_ZThn172460_N9S19762C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C20__8S19762C1[] = {
  ABISELECT(-209736,-172460),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-209736,-172460),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C20D1Ev,_ZTv0_n48_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C20D0Ev,_ZTv0_n48_N9S19762C20D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C20D1Ev,_ZTv0_n40_N9S19762C20D1Ev)();
extern void ABISELECT(_ZThn210208_N9S19762C20D1Ev,_ZThn172868_N9S19762C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C20D0Ev,_ZTv0_n40_N9S19762C20D0Ev)();
extern void ABISELECT(_ZThn210208_N9S19762C20D0Ev,_ZThn172868_N9S19762C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__A1__9S19762C20__8S19762C1[] = {
  ABISELECT(-210208,-172868),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-210208,-172868),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C20D1Ev,_ZTv0_n40_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C20D0Ev,_ZTv0_n40_N9S19762C20D0Ev),
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C20D1Ev,_ZTvn380_n40_N9S19762C20D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C20D0Ev,_ZTvn380_n40_N9S19762C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__A2__9S19762C20__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-210672,-173248),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C20D1Ev,_ZTvn380_n40_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C20D0Ev,_ZTvn380_n40_N9S19762C20D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTvn464_n104_N9S19762C20D1Ev,_ZTvn380_n52_N9S19762C20D1Ev)();
extern void ABISELECT(_ZTvn464_n104_N9S19762C20D0Ev,_ZTvn380_n52_N9S19762C20D0Ev)();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C19__9S19762C20__8S19762C1[] = {
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  ABISELECT(-190176,-156348),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C20D1Ev,_ZTvn380_n52_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C20D0Ev,_ZTvn380_n52_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C19__A4__9S19762C20__8S19762C1[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-190320,-156472),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C20D1Ev,_ZTvn884_n52_N9S19762C20D1Ev)();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C20D0Ev,_ZTvn884_n52_N9S19762C20D0Ev)();
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C139S19762C169S19762C19__A1__9S19762C20__8S19762C1[] = {
  ABISELECT(-190784,-156852),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C20D1Ev,_ZTvn884_n52_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C20D0Ev,_ZTvn884_n52_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C21__A5__9S19762C20__8S19762C1[] = {
  ABISELECT(-4576,-3764),
  ABISELECT(-5832,-4804),
  ABISELECT(-4752,-3900),
  ABISELECT(-5216,-4300),
  ABISELECT(-179888,-147928),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn608_n120_N9S19762C20D1Ev,_ZTvn504_n60_N9S19762C20D1Ev)();
extern void ABISELECT(_ZTvn608_n120_N9S19762C20D0Ev,_ZTvn504_n60_N9S19762C20D0Ev)();
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C139S19762C169S19762C21__A2__9S19762C20__8S19762C1[] = {
  ABISELECT(-180352,-148308),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n120_N9S19762C20D1Ev,_ZTvn504_n60_N9S19762C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n120_N9S19762C20D0Ev,_ZTvn504_n60_N9S19762C20D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN12S19762C24_nt3v17Ev();
extern void _ZN12S19762C24_nt3v18Ev();
static  VTBL_ENTRY _tg__ZTV12S19762C24_nt__9S19762C20__8S19762C1[] = {
  0,
  0,
  ABISELECT(-221216,-181904),
  (VTBL_ENTRY)&(_ZTI9S19762C20[0]),
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S19762C24_nt3v18Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C21D1Ev();
extern void _ZN9S19762C21D0Ev();
extern void _ZN9S19762C163v13Ev();
extern void _ZN9S19762C213v16Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C21__A__8S19762C1[] = {
  ABISELECT(161696,132964),
  ABISELECT(155296,127716),
  ABISELECT(154656,127200),
  ABISELECT(154576,127148),
  ABISELECT(146656,120624),
  ABISELECT(147120,121024),
  ABISELECT(146040,120120),
  ABISELECT(147600,121404),
  ABISELECT(182192,149864),
  ABISELECT(181720,149456),
  ABISELECT(147296,121160),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C21D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  (VTBL_ENTRY)&_ZN9S19762C213v16Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C21__A2__8S19762C1[] = {
  ABISELECT(146656,120624),
  ABISELECT(147120,121024),
  ABISELECT(146040,120120),
  ABISELECT(147600,121404),
  ABISELECT(182192,149864),
  ABISELECT(181720,149456),
  ABISELECT(147296,121160),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C21__A6__8S19762C1[] = {
  ABISELECT(147152,121036),
  ABISELECT(145896,119996),
  ABISELECT(146976,120900),
  ABISELECT(146512,120500),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C169S19762C21__A6__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(-146512,-120500),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C169S19762C21__A6__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-146976,-120900),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C21__A6__8S19762C1[] = {
  0,
  ABISELECT(-145896,-119996),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C169S19762C21__A6__8S19762C1[] = {
  0,
  ABISELECT(-147152,-121036),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C169S19762C21__A2__8S19762C1[] = {
  0,
  ABISELECT(-147296,-121160),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn181720_N9S19762C16D1Ev,_ZThn149456_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn181720_N9S19762C16D0Ev,_ZThn149456_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C169S19762C21__A2__8S19762C1[] = {
  ABISELECT(-181720,-149456),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-181720,-149456),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn182192_N9S19762C16D1Ev,_ZThn149864_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn182192_N9S19762C16D0Ev,_ZThn149864_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C169S19762C21__A2__8S19762C1[] = {
  ABISELECT(-182192,-149864),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-182192,-149864),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn147600_N9S19762C16D1Ev,_ZThn121404_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn147600_N9S19762C16D0Ev,_ZThn121404_N9S19762C16D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C169S19762C21__A2__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-147600,-121404),
  0,
  ABISELECT(-147600,-121404),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C21__A2__8S19762C1[] = {
  ABISELECT(-147896,-121648),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C21__A2__8S19762C1[] = {
  ABISELECT(-148360,-122048),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A2__9S19762C169S19762C21__A2__8S19762C1[] = {
  0,
  ABISELECT(-146040,-120120),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C169S19762C21__A2__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-147120,-121024),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C169S19762C21__A2__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(-146656,-120624),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C169S19762C21__A2__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-182656,-150244),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C169S19762C21__A2__8S19762C1[] = {
  ABISELECT(147152,121036),
  ABISELECT(145896,119996),
  ABISELECT(146976,120900),
  ABISELECT(146512,120500),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn154576_N9S19762C21D1Ev,_ZThn127148_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn154576_N9S19762C21D0Ev,_ZThn127148_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C22__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-154576,-127148),
  ABISELECT(-7456,-6124),
  ABISELECT(-6976,-5744),
  ABISELECT(-7280,-5988),
  ABISELECT(720,568),
  ABISELECT(-8536,-7028),
  ABISELECT(80,52),
  ABISELECT(-154576,-127148),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn154656_N9S19762C21D1Ev,_ZThn127200_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn154656_N9S19762C21D0Ev,_ZThn127200_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C13__9S19762C21__A__8S19762C1[] = {
  0,
  ABISELECT(-154656,-127200),
  0,
  ABISELECT(-154656,-127200),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__9S19762C21__A__8S19762C1[] = {
  0,
  ABISELECT(-146040,-120120),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn155296_N9S19762C21D1Ev,_ZThn127716_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn155296_N9S19762C21D0Ev,_ZThn127716_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-155296,-127716),
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  ABISELECT(-155296,-127716),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C21__A__8S19762C1[] = {
  0,
  ABISELECT(-147296,-121160),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn147600_N9S19762C21D1Ev,_ZThn121404_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn147600_N9S19762C21D0Ev,_ZThn121404_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C21__A__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-147600,-121404),
  0,
  ABISELECT(-147600,-121404),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-147896,-121648),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-148360,-122048),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-147120,-121024),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn161696_N9S19762C21D1Ev,_ZThn132964_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn161696_N9S19762C21D0Ev,_ZThn132964_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C19__9S19762C21__A__8S19762C1[] = {
  ABISELECT(1072,884),
  ABISELECT(1072,884),
  ABISELECT(464,380),
  ABISELECT(-161696,-132964),
  0,
  0,
  0,
  ABISELECT(-14096,-11560),
  ABISELECT(20496,16900),
  ABISELECT(20024,16492),
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  ABISELECT(-161696,-132964),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C21__A__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(-146656,-120624),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn181720_N9S19762C21D1Ev,_ZThn149456_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn181720_N9S19762C21D0Ev,_ZThn149456_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-181720,-149456),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-181720,-149456),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn182192_N9S19762C21D1Ev,_ZThn149864_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn182192_N9S19762C21D0Ev,_ZThn149864_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-182192,-149864),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-182192,-149864),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev),
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C21D1Ev,_ZTvn380_n40_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C21D0Ev,_ZTvn380_n40_N9S19762C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__A1__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-182656,-150244),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C21D1Ev,_ZTvn380_n40_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C21D0Ev,_ZTvn380_n40_N9S19762C21D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTvn464_n104_N9S19762C21D1Ev,_ZTvn380_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn464_n104_N9S19762C21D0Ev,_ZTvn380_n52_N9S19762C21D0Ev)();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C19__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  ABISELECT(-162160,-133344),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C21D1Ev,_ZTvn380_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C21D0Ev,_ZTvn380_n52_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C19__A2__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-162304,-133468),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C21D1Ev,_ZTvn884_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C21D0Ev,_ZTvn884_n52_N9S19762C21D0Ev)();
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C139S19762C169S19762C19__A1__9S19762C21__A__8S19762C1[] = {
  ABISELECT(-162768,-133848),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C21D1Ev,_ZTvn884_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C21D0Ev,_ZTvn884_n52_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C16__A3__9S19762C21__A__8S19762C1[] = {
  ABISELECT(147152,121036),
  ABISELECT(145896,119996),
  ABISELECT(146976,120900),
  ABISELECT(146512,120500),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__8S19762C1[] = {
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C7__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C7__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C7__8S19762C1[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C7__8S19762C1[] = {
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C1[] = {
  ABISELECT(-1080,-904),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__8S19762C8__8S19762C1[] = {
  0,
  ABISELECT(1080,904),
  (VTBL_ENTRY)&(_ZTI8S19762C8[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C21D1Ev();
extern void _ZN9S19762C21D0Ev();
extern void _ZN9S19762C163v13Ev();
extern void _ZN9S19762C213v16Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C21__8S19762C1[] = {
  ABISELECT(9968,8164),
  ABISELECT(3568,2916),
  ABISELECT(2928,2400),
  ABISELECT(2848,2348),
  ABISELECT(-5072,-4176),
  ABISELECT(-4608,-3776),
  ABISELECT(-5688,-4680),
  ABISELECT(-4128,-3396),
  ABISELECT(30464,25064),
  ABISELECT(29992,24656),
  ABISELECT(-4432,-3640),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C21D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
  (VTBL_ENTRY)&_ZN9S19762C213v16Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C21__A1__8S19762C1[] = {
  ABISELECT(-5072,-4176),
  ABISELECT(-4608,-3776),
  ABISELECT(-5688,-4680),
  ABISELECT(-4128,-3396),
  ABISELECT(30464,25064),
  ABISELECT(29992,24656),
  ABISELECT(-4432,-3640),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C21__A5__8S19762C1[] = {
  ABISELECT(-4576,-3764),
  ABISELECT(-5832,-4804),
  ABISELECT(-4752,-3900),
  ABISELECT(-5216,-4300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C169S19762C21__A5__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(5216,4300),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C169S19762C21__A5__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(4752,3900),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C21__A5__8S19762C1[] = {
  0,
  ABISELECT(5832,4804),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C169S19762C21__A5__8S19762C1[] = {
  0,
  ABISELECT(4576,3764),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C169S19762C21__A1__8S19762C1[] = {
  0,
  ABISELECT(4432,3640),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn29992_N9S19762C16D1Ev,_ZThn24656_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn29992_N9S19762C16D0Ev,_ZThn24656_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C169S19762C21__A1__8S19762C1[] = {
  ABISELECT(-29992,-24656),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-29992,-24656),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn30464_N9S19762C16D1Ev,_ZThn25064_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn30464_N9S19762C16D0Ev,_ZThn25064_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C169S19762C21__A1__8S19762C1[] = {
  ABISELECT(-30464,-25064),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-30464,-25064),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C169S19762C21__A1__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4128,3396),
  0,
  ABISELECT(4128,3396),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C21__A1__8S19762C1[] = {
  ABISELECT(3832,3152),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C21__A1__8S19762C1[] = {
  ABISELECT(3368,2752),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A2__9S19762C169S19762C21__A1__8S19762C1[] = {
  0,
  ABISELECT(5688,4680),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C169S19762C21__A1__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(4608,3776),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C169S19762C21__A1__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(5072,4176),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C169S19762C21__A1__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-30928,-25444),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C169S19762C21__A1__8S19762C1[] = {
  ABISELECT(-4576,-3764),
  ABISELECT(-5832,-4804),
  ABISELECT(-4752,-3900),
  ABISELECT(-5216,-4300),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn2848_N9S19762C21D1Ev,_ZThn2348_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn2848_N9S19762C21D0Ev,_ZThn2348_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C22__9S19762C21__8S19762C1[] = {
  ABISELECT(-2848,-2348),
  ABISELECT(-7456,-6124),
  ABISELECT(-6976,-5744),
  ABISELECT(-7280,-5988),
  ABISELECT(720,568),
  ABISELECT(-8536,-7028),
  ABISELECT(80,52),
  ABISELECT(-2848,-2348),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn2928_N9S19762C21D1Ev,_ZThn2400_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn2928_N9S19762C21D0Ev,_ZThn2400_N9S19762C21D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C13__9S19762C21__8S19762C1[] = {
  0,
  ABISELECT(-2928,-2400),
  0,
  ABISELECT(-2928,-2400),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__9S19762C21__8S19762C1[] = {
  0,
  ABISELECT(5688,4680),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn3568_N9S19762C21D1Ev,_ZThn2916_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn3568_N9S19762C21D0Ev,_ZThn2916_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C21__8S19762C1[] = {
  ABISELECT(-3568,-2916),
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  ABISELECT(-3568,-2916),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C21__8S19762C1[] = {
  0,
  ABISELECT(4432,3640),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C21__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4128,3396),
  0,
  ABISELECT(4128,3396),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C21__8S19762C1[] = {
  ABISELECT(3832,3152),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C21__8S19762C1[] = {
  ABISELECT(3368,2752),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C21__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(4608,3776),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn9968_N9S19762C21D1Ev,_ZThn8164_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn9968_N9S19762C21D0Ev,_ZThn8164_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C19__9S19762C21__8S19762C1[] = {
  ABISELECT(1072,884),
  ABISELECT(1072,884),
  ABISELECT(464,380),
  ABISELECT(-9968,-8164),
  0,
  0,
  0,
  ABISELECT(-14096,-11560),
  ABISELECT(20496,16900),
  ABISELECT(20024,16492),
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  ABISELECT(-9968,-8164),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C21__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(5072,4176),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn29992_N9S19762C21D1Ev,_ZThn24656_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn29992_N9S19762C21D0Ev,_ZThn24656_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C21__8S19762C1[] = {
  ABISELECT(-29992,-24656),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-29992,-24656),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev)();
extern void ABISELECT(_ZThn30464_N9S19762C21D1Ev,_ZThn25064_N9S19762C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev)();
extern void ABISELECT(_ZThn30464_N9S19762C21D0Ev,_ZThn25064_N9S19762C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C21__8S19762C1[] = {
  ABISELECT(-30464,-25064),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-30464,-25064),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev),
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C21D1Ev,_ZTvn380_n40_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C21D0Ev,_ZTvn380_n40_N9S19762C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__A1__9S19762C21__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-30928,-25444),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C21D1Ev,_ZTvn380_n40_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C21D0Ev,_ZTvn380_n40_N9S19762C21D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZTvn464_n104_N9S19762C21D1Ev,_ZTvn380_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn464_n104_N9S19762C21D0Ev,_ZTvn380_n52_N9S19762C21D0Ev)();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C19__9S19762C21__8S19762C1[] = {
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  ABISELECT(-10432,-8544),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C21D1Ev,_ZTvn380_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n104_N9S19762C21D0Ev,_ZTvn380_n52_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C19__A2__9S19762C21__8S19762C1[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-10576,-8668),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C21D1Ev,_ZTvn884_n52_N9S19762C21D1Ev)();
extern void ABISELECT(_ZTvn1072_n104_N9S19762C21D0Ev,_ZTvn884_n52_N9S19762C21D0Ev)();
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C139S19762C169S19762C19__A1__9S19762C21__8S19762C1[] = {
  ABISELECT(-11040,-9048),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C21D1Ev,_ZTvn884_n52_N9S19762C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1072_n104_N9S19762C21D0Ev,_ZTvn884_n52_N9S19762C21D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C16__A3__9S19762C21__8S19762C1[] = {
  ABISELECT(-4576,-3764),
  ABISELECT(-5832,-4804),
  ABISELECT(-4752,-3900),
  ABISELECT(-5216,-4300),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C21[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN9S19762C22D1Ev();
extern void _ZN9S19762C22D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C22__8S19762C1[] = {
  ABISELECT(-7456,-6124),
  ABISELECT(-6976,-5744),
  ABISELECT(-7280,-5988),
  ABISELECT(720,568),
  ABISELECT(-8536,-7028),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN9S19762C22D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C22D0Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn80_N9S19762C22D1Ev,_ZThn52_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn80_N9S19762C22D0Ev,_ZThn52_N9S19762C22D0Ev)() __attribute__((weak));
extern void _ZN9S19762C133v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C13__9S19762C22__8S19762C1[] = {
  0,
  ABISELECT(-80,-52),
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C133v12Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__9S19762C22__8S19762C1[] = {
  0,
  ABISELECT(8536,7028),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev)();
extern void ABISELECT(_ZThn720_N9S19762C22D1Ev,_ZThn568_N9S19762C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev)();
extern void ABISELECT(_ZThn720_N9S19762C22D0Ev,_ZThn568_N9S19762C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C22__8S19762C1[] = {
  ABISELECT(-720,-568),
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  ABISELECT(-720,-568),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev),
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C22__8S19762C1[] = {
  0,
  ABISELECT(7280,5988),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C22__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(6976,5744),
  0,
  ABISELECT(6976,5744),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C22__8S19762C1[] = {
  ABISELECT(6680,5500),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C22__8S19762C1[] = {
  ABISELECT(6216,5100),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C22__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(7456,6124),
  (VTBL_ENTRY)&(_ZTI9S19762C22[0]),
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C12__A1__8S19762C1[] = {
  ABISELECT(-8176,-6692),
  ABISELECT(-9256,-7596),
  ABISELECT(-7696,-6312),
  ABISELECT(-8000,-6556),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C12__A1__8S19762C1[] = {
  0,
  ABISELECT(8000,6556),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C12__A1__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(7696,6312),
  0,
  ABISELECT(7696,6312),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C12__A1__8S19762C1[] = {
  ABISELECT(7400,6068),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C12__A1__8S19762C1[] = {
  ABISELECT(6936,5668),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C12__A1__8S19762C1[] = {
  0,
  ABISELECT(9256,7596),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C12__A1__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(8176,6692),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C193v14Ev();
extern void _ZN9S19762C193v15Ev();
extern void _ZN9S19762C19D1Ev();
extern void _ZN9S19762C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C19__8S19762C1[] = {
  ABISELECT(-14096,-11560),
  ABISELECT(20496,16900),
  ABISELECT(20024,16492),
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v14Ev,
  (VTBL_ENTRY)&_ZN9S19762C193v15Ev,
  (VTBL_ENTRY)&_ZN9S19762C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C19D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C19__A2__8S19762C1[] = {
  ABISELECT(-14400,-11804),
  ABISELECT(-15656,-12844),
  ABISELECT(-14576,-11940),
  ABISELECT(-15040,-12340),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C19__A2__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(15040,12340),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C19__A2__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(14576,11940),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C19__A2__8S19762C1[] = {
  0,
  ABISELECT(15656,12844),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C19__A2__8S19762C1[] = {
  0,
  ABISELECT(14400,11804),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C16D1Ev();
extern void _ZN9S19762C16D0Ev();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C169S19762C19__8S19762C1[] = {
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C169S19762C19__A4__8S19762C1[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C169S19762C19__A4__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(15648,12844),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C169S19762C19__A4__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(15184,12444),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C19__A4__8S19762C1[] = {
  0,
  ABISELECT(16264,13348),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C169S19762C19__A4__8S19762C1[] = {
  0,
  ABISELECT(15008,12308),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C169S19762C19__8S19762C1[] = {
  0,
  ABISELECT(14864,12184),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn19560_N9S19762C16D1Ev,_ZThn16112_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn19560_N9S19762C16D0Ev,_ZThn16112_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C169S19762C19__8S19762C1[] = {
  ABISELECT(-19560,-16112),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-19560,-16112),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZThn20032_N9S19762C16D1Ev,_ZThn16520_N9S19762C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev)();
extern void ABISELECT(_ZThn20032_N9S19762C16D0Ev,_ZThn16520_N9S19762C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C169S19762C19__8S19762C1[] = {
  ABISELECT(-20032,-16520),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-20032,-16520),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C169S19762C19__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(14560,11940),
  0,
  ABISELECT(14560,11940),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C19__8S19762C1[] = {
  ABISELECT(14264,11696),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C19__8S19762C1[] = {
  ABISELECT(13800,11296),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A2__9S19762C169S19762C19__8S19762C1[] = {
  0,
  ABISELECT(16120,13224),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C169S19762C19__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(15040,12320),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C169S19762C19__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(15504,12720),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C169S19762C19__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-20496,-16900),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D1Ev,_ZTvn380_n40_N9S19762C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C16D0Ev,_ZTvn380_n40_N9S19762C16D0Ev),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C7__A1__9S19762C169S19762C19__8S19762C1[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S19762C16[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__9S19762C19__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(15040,12340),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C19__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(14576,11940),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C19__8S19762C1[] = {
  0,
  ABISELECT(15656,12844),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C19__8S19762C1[] = {
  0,
  ABISELECT(14400,11804),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn20024_N9S19762C19D1Ev,_ZThn16492_N9S19762C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev)();
extern void ABISELECT(_ZThn20024_N9S19762C19D0Ev,_ZThn16492_N9S19762C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C15__9S19762C19__8S19762C1[] = {
  ABISELECT(-20024,-16492),
  0,
  0,
  0,
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  ABISELECT(-20024,-16492),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn20496_N9S19762C19D1Ev,_ZThn16900_N9S19762C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev)();
extern void ABISELECT(_ZThn20496_N9S19762C19D0Ev,_ZThn16900_N9S19762C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C19__8S19762C1[] = {
  ABISELECT(-20496,-16900),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-20496,-16900),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C19D1Ev,_ZTv0_n16_N9S19762C19D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C19D0Ev,_ZTv0_n16_N9S19762C19D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C19__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(14096,11560),
  0,
  ABISELECT(14096,11560),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C19D1Ev,_ZTv0_n16_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C19D0Ev,_ZTv0_n16_N9S19762C19D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A2__9S19762C19__8S19762C1[] = {
  ABISELECT(13800,11316),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__A2__9S19762C19__8S19762C1[] = {
  ABISELECT(13336,10916),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C19D1Ev,_ZTvn380_n40_N9S19762C19D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C19D0Ev,_ZTvn380_n40_N9S19762C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C19__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-20960,-17280),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C19D1Ev,_ZTvn380_n40_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C19D0Ev,_ZTvn380_n40_N9S19762C19D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void ABISELECT(_ZThn464_N9S19762C19D1Ev,_ZThn380_N9S19762C19D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C19D0Ev,_ZThn380_N9S19762C19D0Ev)();
extern void _ZN9S19762C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C16__9S19762C19__8S19762C1[] = {
  ABISELECT(-15504,-12720),
  ABISELECT(-15040,-12320),
  ABISELECT(-16120,-13224),
  ABISELECT(-14560,-11940),
  ABISELECT(20032,16520),
  ABISELECT(19560,16112),
  ABISELECT(-14864,-12184),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C19D1Ev,_ZThn380_N9S19762C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C19D0Ev,_ZThn380_N9S19762C19D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C163v13Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C16__A2__9S19762C19__8S19762C1[] = {
  ABISELECT(-15008,-12308),
  ABISELECT(-16264,-13348),
  ABISELECT(-15184,-12444),
  ABISELECT(-15648,-12844),
  ABISELECT(-608,-504),
  (VTBL_ENTRY)&(_ZTI9S19762C19[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
extern void _ZN9S19762C15D1Ev();
extern void _ZN9S19762C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C15__8S19762C1[] = {
  ABISELECT(-35064,-28832),
  ABISELECT(-34600,-28432),
  ABISELECT(-35680,-29336),
  ABISELECT(-34120,-28052),
  ABISELECT(472,408),
  ABISELECT(-34424,-28296),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C15D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C15__8S19762C1[] = {
  0,
  ABISELECT(34424,28296),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19762C11__9S19762C15__8S19762C1[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C15__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(34120,28052),
  0,
  ABISELECT(34120,28052),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D1Ev,_ZTv0_n16_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C15D0Ev,_ZTv0_n16_N9S19762C15D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__A1__9S19762C15__8S19762C1[] = {
  ABISELECT(33824,27808),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C15__8S19762C1[] = {
  ABISELECT(33360,27408),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C15__8S19762C1[] = {
  0,
  ABISELECT(35680,29336),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C15__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(34600,28432),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A2__9S19762C15__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(35064,28832),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__9S19762C15__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI9S19762C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D1Ev,_ZTvn380_n40_N9S19762C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S19762C15D0Ev,_ZTvn380_n40_N9S19762C15D0Ev),
};
extern void _ZN8S19762C52v3Ev();
extern void _ZN9S19762C112v9Ev();
extern void _ZN9S19762C11D1Ev();
extern void _ZN9S19762C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C11__A1__8S19762C1[] = {
  ABISELECT(-34592,-28460),
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
  (VTBL_ENTRY)&_ZN9S19762C112v9Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C11D0Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C79S19762C11__A3__8S19762C1[] = {
  ABISELECT(-34896,-28704),
  ABISELECT(-36152,-29744),
  ABISELECT(-35072,-28840),
  ABISELECT(-35536,-29240),
  0,
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__8S19762C79S19762C11__A3__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(35536,29240),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__8S19762C79S19762C11__A3__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(35072,28840),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A3__8S19762C1[] = {
  0,
  ABISELECT(36152,29744),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__8S19762C79S19762C11__A3__8S19762C1[] = {
  0,
  ABISELECT(34896,28704),
  (VTBL_ENTRY)&(_ZTI8S19762C7[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN9S19762C12D1Ev();
extern void _ZN9S19762C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C129S19762C11__A2__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  0,
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN9S19762C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19762C12D0Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__9S19762C129S19762C11__A2__8S19762C1[] = {
  0,
  ABISELECT(35360,29084),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C129S19762C11__A2__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(35056,28840),
  0,
  ABISELECT(35056,28840),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__A2__8S19762C1[] = {
  ABISELECT(34760,28596),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__A2__8S19762C1[] = {
  ABISELECT(34296,28196),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C129S19762C11__A2__8S19762C1[] = {
  0,
  ABISELECT(36616,30124),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C129S19762C11__A2__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(35536,29220),
  (VTBL_ENTRY)&(_ZTI9S19762C12[0]),
};
extern void _ZN8S19762C92v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev)();
extern void _ZN9S19762C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19762C10__9S19762C11__A1__8S19762C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(34592,28460),
  0,
  ABISELECT(34592,28460),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev),
  (VTBL_ENTRY)&_ZN9S19762C102v8Ev,
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C49S19762C10__9S19762C11__A1__8S19762C1[] = {
  ABISELECT(34296,28216),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C59S19762C10__9S19762C11__A1__8S19762C1[] = {
  ABISELECT(33832,27816),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
extern void _ZN8S19762C52v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C5__A1__9S19762C11__A1__8S19762C1[] = {
  0,
  ABISELECT(36152,29744),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19762C8__9S19762C11__A1__8S19762C1[] = {
  ABISELECT(-1080,-904),
  ABISELECT(35072,28840),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
};
extern void _ZN8S19762C42v4Ev();
extern void _ZN8S19762C42v5Ev();
extern void _ZN8S19762C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C4__A1__9S19762C11__A1__8S19762C1[] = {
  0,
  0,
  0,
  ABISELECT(35536,29240),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19762C42v6Ev,
};
extern void _ZN8S19762C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19762C9__A1__9S19762C11__A1__8S19762C1[] = {
  0,
  ABISELECT(34896,28704),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&_ZN8S19762C92v7Ev,
};
extern void ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev)();
extern void ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19762C12__9S19762C11__A1__8S19762C1[] = {
  ABISELECT(-35536,-29220),
  ABISELECT(-36616,-30124),
  ABISELECT(-35056,-28840),
  ABISELECT(-35360,-29084),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19762C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D1Ev,_ZThn380_N9S19762C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S19762C11D0Ev,_ZThn380_N9S19762C11D0Ev),
};
static  VTT_ENTRY vtt_S19762C1[] = {
  {&(_ZTV8S19762C1[18]),  18,297},
  {&(_tg__ZTV9S19762C20__8S19762C1[16]),  16,22},
  {&(_tg__ZTV8S19762C69S19762C20__8S19762C1[8]),  8,14},
  {&(_tg__ZTV9S19762C118S19762C69S19762C20__8S19762C1[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C118S19762C69S19762C20__A1__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C118S19762C69S19762C20__8S19762C1[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C118S19762C69S19762C20__8S19762C1[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C118S19762C69S19762C20__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C118S19762C69S19762C20__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C118S19762C69S19762C20__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C118S19762C69S19762C20__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C118S19762C69S19762C20__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C118S19762C69S19762C20__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C118S19762C69S19762C20__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C118S19762C69S19762C20__8S19762C1[6]),  6,8},
  {&(_tg__ZTV8S19762C5__8S19762C69S19762C20__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C7__8S19762C69S19762C20__8S19762C1[7]),  7,8},
  {&(_tg__ZTV8S19762C4__8S19762C69S19762C20__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C69S19762C20__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C9__8S19762C69S19762C20__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C11__8S19762C69S19762C20__8S19762C1[7]),  7,11},
  {&(_tg__ZTV9S19762C10__A1__8S19762C69S19762C20__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A2__8S19762C69S19762C20__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A3__8S19762C69S19762C20__8S19762C1[2]),  2,3},
  {&(_tg__ZTV9S19762C129S19762C11__8S19762C69S19762C20__8S19762C1[6]),  6,8},
  {&(_tg__ZTV8S19762C5__9S19762C20__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C7__9S19762C20__8S19762C1[7]),  7,8},
  {&(_tg__ZTV8S19762C4__9S19762C20__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__9S19762C20__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C9__9S19762C20__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C118S19762C6__9S19762C20__8S19762C1[7]),  7,11},
  {&(_tg__ZTV9S19762C10__A1__9S19762C20__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A2__9S19762C20__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A3__9S19762C20__8S19762C1[2]),  2,3},
  {&(_tg__ZTV9S19762C129S19762C118S19762C6__9S19762C20__8S19762C1[6]),  6,8},
  {&(_tg__ZTV9S19762C21__9S19762C20__8S19762C1[19]),  19,24},
  {&(_tg__ZTV9S19762C22__9S19762C20__8S19762C1[9]),  9,11},
  {&(_tg__ZTV9S19762C13__9S19762C20__8S19762C1[5]),  5,9},
  {&(_tg__ZTV9S19762C12__A1__9S19762C20__8S19762C1[7]),  7,9},
  {&(_tg__ZTV9S19762C19__9S19762C20__8S19762C1[16]),  16,21},
  {&(_tg__ZTV9S19762C15__9S19762C20__8S19762C1[12]),  12,17},
  {&(_tg__ZTV9S19762C11__A1__9S19762C20__8S19762C1[10]),  10,14},
  {&(_tg__ZTV9S19762C129S19762C11__A2__9S19762C20__8S19762C1[6]),  6,8},
  {&(_tg__ZTV9S19762C169S19762C19__9S19762C20__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C19__A4__9S19762C20__8S19762C1[6]),  6,7},
  {&(_tg__ZTV9S19762C139S19762C169S19762C19__A1__9S19762C20__8S19762C1[2]),  2,6},
  {&(_tg__ZTV8S19762C79S19762C169S19762C21__A5__9S19762C20__8S19762C1[6]),  6,7},
  {&(_tg__ZTV9S19762C139S19762C169S19762C21__A2__9S19762C20__8S19762C1[2]),  2,6},
  {&(_tg__ZTV12S19762C24_nt__9S19762C20__8S19762C1[4]),  4,6},
  {&(_tg__ZTV9S19762C21__A__8S19762C1[13]),  13,18},
  {&(_tg__ZTV9S19762C169S19762C21__A2__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C21__A6__8S19762C1[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C169S19762C21__A6__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C169S19762C21__A6__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C21__A6__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C169S19762C21__A6__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C169S19762C21__A2__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C169S19762C21__A2__8S19762C1[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C169S19762C21__A2__8S19762C1[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C169S19762C21__A2__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C21__A2__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C21__A2__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A2__9S19762C169S19762C21__A2__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C169S19762C21__A2__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C169S19762C21__A2__8S19762C1[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C169S19762C21__A2__8S19762C1[6]),  6,8},
  {&(_tg__ZTV8S19762C7__A1__9S19762C169S19762C21__A2__8S19762C1[6]),  6,7},
  {&(_tg__ZTV9S19762C22__9S19762C21__A__8S19762C1[9]),  9,11},
  {&(_tg__ZTV9S19762C13__9S19762C21__A__8S19762C1[5]),  5,9},
  {&(_tg__ZTV8S19762C5__9S19762C21__A__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C21__A__8S19762C1[7]),  7,9},
  {&(_tg__ZTV8S19762C9__A1__9S19762C21__A__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C21__A__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C21__A__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C21__A__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C8__9S19762C21__A__8S19762C1[3]),  3,3},
  {&(_tg__ZTV9S19762C19__9S19762C21__A__8S19762C1[16]),  16,21},
  {&(_tg__ZTV8S19762C4__A1__9S19762C21__A__8S19762C1[5]),  5,8},
  {&(_tg__ZTV9S19762C15__9S19762C21__A__8S19762C1[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C21__A__8S19762C1[10]),  10,14},
  {&(_tg__ZTV9S19762C129S19762C11__A1__9S19762C21__A__8S19762C1[6]),  6,8},
  {&(_tg__ZTV9S19762C169S19762C19__9S19762C21__A__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C19__A2__9S19762C21__A__8S19762C1[6]),  6,7},
  {&(_tg__ZTV9S19762C139S19762C169S19762C19__A1__9S19762C21__A__8S19762C1[2]),  2,6},
  {&(_tg__ZTV8S19762C79S19762C16__A3__9S19762C21__A__8S19762C1[6]),  6,7},
  {&(_ZTV8S19762C1[90]),  90,297},
  {&(_ZTV8S19762C1[94]),  94,297},
  {&(_ZTV8S19762C1[102]),  102,297},
  {&(_ZTV8S19762C1[108]),  108,297},
  {&(_ZTV8S19762C1[114]),  114,297},
  {&(_ZTV8S19762C1[117]),  117,297},
  {&(_ZTV8S19762C1[40]),  40,297},
  {&(_ZTV8S19762C1[127]),  127,297},
  {&(_ZTV8S19762C1[133]),  133,297},
  {&(_ZTV8S19762C1[138]),  138,297},
  {&(_ZTV8S19762C1[50]),  50,297},
  {&(_ZTV8S19762C1[158]),  158,297},
  {&(_ZTV8S19762C1[185]),  185,297},
  {&(_ZTV8S19762C1[192]),  192,297},
  {&(_ZTV8S19762C1[203]),  203,297},
  {&(_ZTV8S19762C1[221]),  221,297},
  {&(_ZTV8S19762C1[264]),  264,297},
  {&(_ZTV8S19762C1[279]),  279,297},
  {&(_ZTV8S19762C1[289]),  289,297},
  {&(_ZTV8S19762C1[235]),  235,297},
  {&(_ZTV8S19762C1[245]),  245,297},
  {&(_ZTV8S19762C1[248]),  248,297},
  {&(_ZTV8S19762C1[169]),  169,297},
  {&(_ZTV8S19762C1[172]),  172,297},
  {&(_ZTV8S19762C1[295]),  295,297},
  {&(_ZTV8S19762C1[69]),  69,297},
  {&(_ZTV8S19762C1[80]),  80,297},
  {&(_tg__ZTV8S19762C7__8S19762C1[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C7__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C7__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C7__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C7__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C5__8S19762C8__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C21__8S19762C1[13]),  13,18},
  {&(_tg__ZTV9S19762C169S19762C21__A1__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C21__A5__8S19762C1[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C169S19762C21__A5__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C169S19762C21__A5__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C21__A5__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C169S19762C21__A5__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C169S19762C21__A1__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C169S19762C21__A1__8S19762C1[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C169S19762C21__A1__8S19762C1[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C169S19762C21__A1__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C21__A1__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C21__A1__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A2__9S19762C169S19762C21__A1__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C169S19762C21__A1__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C169S19762C21__A1__8S19762C1[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C169S19762C21__A1__8S19762C1[6]),  6,8},
  {&(_tg__ZTV8S19762C7__A1__9S19762C169S19762C21__A1__8S19762C1[6]),  6,7},
  {&(_tg__ZTV9S19762C22__9S19762C21__8S19762C1[9]),  9,11},
  {&(_tg__ZTV9S19762C13__9S19762C21__8S19762C1[5]),  5,9},
  {&(_tg__ZTV8S19762C5__9S19762C21__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C21__8S19762C1[7]),  7,9},
  {&(_tg__ZTV8S19762C9__A1__9S19762C21__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C21__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C21__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C21__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C8__9S19762C21__8S19762C1[3]),  3,3},
  {&(_tg__ZTV9S19762C19__9S19762C21__8S19762C1[16]),  16,21},
  {&(_tg__ZTV8S19762C4__A1__9S19762C21__8S19762C1[5]),  5,8},
  {&(_tg__ZTV9S19762C15__9S19762C21__8S19762C1[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C21__8S19762C1[10]),  10,14},
  {&(_tg__ZTV9S19762C129S19762C11__A1__9S19762C21__8S19762C1[6]),  6,8},
  {&(_tg__ZTV9S19762C169S19762C19__9S19762C21__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C19__A2__9S19762C21__8S19762C1[6]),  6,7},
  {&(_tg__ZTV9S19762C139S19762C169S19762C19__A1__9S19762C21__8S19762C1[2]),  2,6},
  {&(_tg__ZTV8S19762C79S19762C16__A3__9S19762C21__8S19762C1[6]),  6,7},
  {&(_tg__ZTV9S19762C22__8S19762C1[8]),  8,10},
  {&(_tg__ZTV9S19762C13__9S19762C22__8S19762C1[5]),  5,9},
  {&(_tg__ZTV8S19762C5__9S19762C22__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C22__8S19762C1[7]),  7,9},
  {&(_tg__ZTV8S19762C9__A1__9S19762C22__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C22__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C22__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C22__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C8__9S19762C22__8S19762C1[3]),  3,3},
  {&(_tg__ZTV9S19762C12__A1__8S19762C1[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C12__A1__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C12__A1__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C12__A1__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C12__A1__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C12__A1__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C12__A1__8S19762C1[3]),  3,3},
  {&(_tg__ZTV9S19762C19__8S19762C1[9]),  9,14},
  {&(_tg__ZTV8S19762C79S19762C19__A2__8S19762C1[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C19__A2__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C19__A2__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C19__A2__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C19__A2__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C169S19762C19__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C169S19762C19__A4__8S19762C1[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C169S19762C19__A4__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C169S19762C19__A4__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C169S19762C19__A4__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C169S19762C19__A4__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C169S19762C19__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C169S19762C19__8S19762C1[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C169S19762C19__8S19762C1[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C169S19762C19__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C169S19762C19__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A1__9S19762C169S19762C19__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A2__9S19762C169S19762C19__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C169S19762C19__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C169S19762C19__8S19762C1[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C169S19762C19__8S19762C1[6]),  6,8},
  {&(_tg__ZTV8S19762C7__A1__9S19762C169S19762C19__8S19762C1[6]),  6,7},
  {&(_tg__ZTV8S19762C4__9S19762C19__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__9S19762C19__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C19__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__9S19762C19__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C15__9S19762C19__8S19762C1[12]),  12,17},
  {&(_tg__ZTV9S19762C11__9S19762C19__8S19762C1[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C19__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A2__9S19762C19__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__A2__9S19762C19__8S19762C1[2]),  2,3},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C19__8S19762C1[6]),  6,8},
  {&(_tg__ZTV9S19762C16__9S19762C19__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C79S19762C16__A2__9S19762C19__8S19762C1[6]),  6,7},
  {&(_tg__ZTV9S19762C15__8S19762C1[8]),  8,13},
  {&(_tg__ZTV8S19762C9__9S19762C15__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C11__9S19762C15__8S19762C1[10]),  10,14},
  {&(_tg__ZTV9S19762C10__9S19762C15__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__A1__9S19762C15__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C15__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C15__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C15__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A2__9S19762C15__8S19762C1[5]),  5,8},
  {&(_tg__ZTV9S19762C129S19762C11__9S19762C15__8S19762C1[6]),  6,8},
  {&(_tg__ZTV9S19762C11__A1__8S19762C1[7]),  7,11},
  {&(_tg__ZTV8S19762C79S19762C11__A3__8S19762C1[6]),  6,7},
  {&(_tg__ZTV8S19762C4__8S19762C79S19762C11__A3__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C8__8S19762C79S19762C11__A3__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C5__A1__8S19762C79S19762C11__A3__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C9__8S19762C79S19762C11__A3__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C129S19762C11__A2__8S19762C1[6]),  6,8},
  {&(_tg__ZTV8S19762C9__9S19762C129S19762C11__A2__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C10__9S19762C129S19762C11__A2__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C129S19762C11__A2__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C129S19762C11__A2__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C129S19762C11__A2__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C129S19762C11__A2__8S19762C1[3]),  3,3},
  {&(_tg__ZTV9S19762C10__9S19762C11__A1__8S19762C1[9]),  9,13},
  {&(_tg__ZTV8S19762C49S19762C10__9S19762C11__A1__8S19762C1[2]),  2,5},
  {&(_tg__ZTV8S19762C59S19762C10__9S19762C11__A1__8S19762C1[2]),  2,3},
  {&(_tg__ZTV8S19762C5__A1__9S19762C11__A1__8S19762C1[3]),  3,4},
  {&(_tg__ZTV8S19762C8__9S19762C11__A1__8S19762C1[3]),  3,3},
  {&(_tg__ZTV8S19762C4__A1__9S19762C11__A1__8S19762C1[5]),  5,8},
  {&(_tg__ZTV8S19762C9__A1__9S19762C11__A1__8S19762C1[3]),  3,4},
  {&(_tg__ZTV9S19762C12__9S19762C11__A1__8S19762C1[6]),  6,8},
};
extern VTBL_ENTRY _ZTI8S19762C1[];
extern  VTBL_ENTRY _ZTV8S19762C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19762C1[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D0Ev,_ZTv0_n40_N9S19762C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D0Ev,_ZThn408_N9S19762C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C15D1Ev,_ZTv0_n40_N9S19762C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19762C15D1Ev,_ZThn408_N9S19762C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C19D0Ev,_ZTv0_n40_N9S19762C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20496_N9S19762C19D0Ev,_ZThn16900_N9S19762C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C19D1Ev,_ZTv0_n40_N9S19762C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20496_N9S19762C19D1Ev,_ZThn16900_N9S19762C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C19D0Ev,_ZTv0_n48_N9S19762C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20024_N9S19762C19D0Ev,_ZThn16492_N9S19762C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C19D1Ev,_ZTv0_n48_N9S19762C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20024_N9S19762C19D1Ev,_ZThn16492_N9S19762C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C22D0Ev,_ZTv0_n28_N9S19762C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19762C22D0Ev,_ZThn568_N9S19762C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C22D1Ev,_ZTv0_n28_N9S19762C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19762C22D1Ev,_ZThn568_N9S19762C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C22D0Ev,_ZTv0_n16_N9S19762C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19762C22D0Ev,_ZThn52_N9S19762C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C22D1Ev,_ZTv0_n16_N9S19762C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19762C22D1Ev,_ZThn52_N9S19762C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C21D0Ev,_ZTv0_n40_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N9S19762C21D0Ev,_ZThn25064_N9S19762C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn182192_N9S19762C21D0Ev,_ZThn149864_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C21D1Ev,_ZTv0_n40_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N9S19762C21D1Ev,_ZThn25064_N9S19762C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn182192_N9S19762C21D1Ev,_ZThn149864_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C21D0Ev,_ZTv0_n48_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn29992_N9S19762C21D0Ev,_ZThn24656_N9S19762C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn181720_N9S19762C21D0Ev,_ZThn149456_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C21D1Ev,_ZTv0_n48_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn29992_N9S19762C21D1Ev,_ZThn24656_N9S19762C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn181720_N9S19762C21D1Ev,_ZThn149456_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C21D0Ev,_ZTv0_n52_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N9S19762C21D0Ev,_ZThn8164_N9S19762C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn161696_N9S19762C21D0Ev,_ZThn132964_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C21D1Ev,_ZTv0_n52_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N9S19762C21D1Ev,_ZThn8164_N9S19762C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn161696_N9S19762C21D1Ev,_ZThn132964_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C21D0Ev,_ZTv0_n28_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3568_N9S19762C21D0Ev,_ZThn2916_N9S19762C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn155296_N9S19762C21D0Ev,_ZThn127716_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C21D1Ev,_ZTv0_n28_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3568_N9S19762C21D1Ev,_ZThn2916_N9S19762C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn155296_N9S19762C21D1Ev,_ZThn127716_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C21D0Ev,_ZTv0_n16_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N9S19762C21D0Ev,_ZThn2400_N9S19762C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn147600_N9S19762C21D0Ev,_ZThn121404_N9S19762C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn154656_N9S19762C21D0Ev,_ZThn127200_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C21D1Ev,_ZTv0_n16_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N9S19762C21D1Ev,_ZThn2400_N9S19762C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn147600_N9S19762C21D1Ev,_ZThn121404_N9S19762C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn154656_N9S19762C21D1Ev,_ZThn127200_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C21D0Ev,_ZTv0_n36_N9S19762C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S19762C21D0Ev,_ZThn2348_N9S19762C21D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn154576_N9S19762C21D0Ev,_ZThn127148_N9S19762C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C21D1Ev,_ZTv0_n36_N9S19762C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S19762C21D1Ev,_ZThn2348_N9S19762C21D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn154576_N9S19762C21D1Ev,_ZThn127148_N9S19762C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C16D0Ev,_ZTv0_n16_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn147600_N9S19762C16D0Ev,_ZThn121404_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C16D1Ev,_ZTv0_n16_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn147600_N9S19762C16D1Ev,_ZThn121404_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D0Ev,_ZTv0_n40_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20032_N9S19762C16D0Ev,_ZThn16520_N9S19762C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N9S19762C16D0Ev,_ZThn25064_N9S19762C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn182192_N9S19762C16D0Ev,_ZThn149864_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C16D1Ev,_ZTv0_n40_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20032_N9S19762C16D1Ev,_ZThn16520_N9S19762C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30464_N9S19762C16D1Ev,_ZThn25064_N9S19762C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn182192_N9S19762C16D1Ev,_ZThn149864_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D0Ev,_ZTv0_n48_N9S19762C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19560_N9S19762C16D0Ev,_ZThn16112_N9S19762C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn29992_N9S19762C16D0Ev,_ZThn24656_N9S19762C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn181720_N9S19762C16D0Ev,_ZThn149456_N9S19762C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C16D1Ev,_ZTv0_n48_N9S19762C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19560_N9S19762C16D1Ev,_ZThn16112_N9S19762C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn29992_N9S19762C16D1Ev,_ZThn24656_N9S19762C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn181720_N9S19762C16D1Ev,_ZThn149456_N9S19762C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C20D0Ev,_ZTv0_n40_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn210208_N9S19762C20D0Ev,_ZThn172868_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S19762C20D1Ev,_ZTv0_n40_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn210208_N9S19762C20D1Ev,_ZThn172868_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C20D0Ev,_ZTv0_n48_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn209736_N9S19762C20D0Ev,_ZThn172460_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19762C20D1Ev,_ZTv0_n48_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn209736_N9S19762C20D1Ev,_ZThn172460_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C20D0Ev,_ZTv0_n52_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn189712_N9S19762C20D0Ev,_ZThn155968_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19762C20D1Ev,_ZTv0_n52_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn189712_N9S19762C20D1Ev,_ZThn155968_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C20D0Ev,_ZTv0_n28_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn183312_N9S19762C20D0Ev,_ZThn150720_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19762C20D1Ev,_ZTv0_n28_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn183312_N9S19762C20D1Ev,_ZThn150720_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C20D0Ev,_ZTv0_n36_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn182592_N9S19762C20D0Ev,_ZThn150152_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19762C20D1Ev,_ZTv0_n36_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn182592_N9S19762C20D1Ev,_ZThn150152_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N9S19762C20D0Ev,_ZTv0_n60_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn179744_N9S19762C20D0Ev,_ZThn147804_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N9S19762C20D1Ev,_ZTv0_n60_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn179744_N9S19762C20D1Ev,_ZThn147804_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C20D0Ev,_ZTv0_n16_N9S19762C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn182672_N9S19762C20D0Ev,_ZThn150204_N9S19762C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn175616_N9S19762C20D0Ev,_ZThn144408_N9S19762C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C20D1Ev,_ZTv0_n16_N9S19762C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn182672_N9S19762C20D1Ev,_ZThn150204_N9S19762C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn175616_N9S19762C20D1Ev,_ZThn144408_N9S19762C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C6D0Ev,_ZTv0_n16_N8S19762C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn175616_N8S19762C6D0Ev,_ZThn144408_N8S19762C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C6D1Ev,_ZTv0_n16_N8S19762C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn175616_N8S19762C6D1Ev,_ZThn144408_N8S19762C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D0Ev,_ZTv0_n16_N9S19762C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn171488_N9S19762C11D0Ev,_ZThn141012_N9S19762C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C11D1Ev,_ZTv0_n16_N9S19762C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn171488_N9S19762C11D1Ev,_ZThn141012_N9S19762C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D0Ev,_ZTv0_n16_N9S19762C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn171024_N9S19762C12D0Ev,_ZThn140632_N9S19762C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19762C12D1Ev,_ZTv0_n16_N9S19762C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn171024_N9S19762C12D1Ev,_ZThn140632_N9S19762C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19762C1D0Ev,_ZTv0_n40_N8S19762C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn210208_N8S19762C1D0Ev,_ZThn172868_N8S19762C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19762C1D1Ev,_ZTv0_n40_N8S19762C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn210208_N8S19762C1D1Ev,_ZThn172868_N8S19762C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19762C1D0Ev,_ZTv0_n48_N8S19762C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn209736_N8S19762C1D0Ev,_ZThn172460_N8S19762C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19762C1D1Ev,_ZTv0_n48_N8S19762C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn209736_N8S19762C1D1Ev,_ZThn172460_N8S19762C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19762C1D0Ev,_ZTv0_n52_N8S19762C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn189712_N8S19762C1D0Ev,_ZThn155968_N8S19762C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19762C1D1Ev,_ZTv0_n52_N8S19762C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn189712_N8S19762C1D1Ev,_ZThn155968_N8S19762C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19762C1D0Ev,_ZTv0_n28_N8S19762C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn183312_N8S19762C1D0Ev,_ZThn150720_N8S19762C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19762C1D1Ev,_ZTv0_n28_N8S19762C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn183312_N8S19762C1D1Ev,_ZThn150720_N8S19762C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19762C1D0Ev,_ZTv0_n36_N8S19762C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn182592_N8S19762C1D0Ev,_ZThn150152_N8S19762C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19762C1D1Ev,_ZTv0_n36_N8S19762C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn182592_N8S19762C1D1Ev,_ZThn150152_N8S19762C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19762C1D0Ev,_ZTv0_n60_N8S19762C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn179744_N8S19762C1D0Ev,_ZThn147804_N8S19762C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19762C1D1Ev,_ZTv0_n60_N8S19762C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn179744_N8S19762C1D1Ev,_ZThn147804_N8S19762C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C1D0Ev,_ZTv0_n16_N8S19762C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn182672_N8S19762C1D0Ev,_ZThn150204_N8S19762C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn175616_N8S19762C1D0Ev,_ZThn144408_N8S19762C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19762C1D1Ev,_ZTv0_n16_N8S19762C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn182672_N8S19762C1D1Ev,_ZThn150204_N8S19762C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn175616_N8S19762C1D1Ev,_ZThn144408_N8S19762C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19762C1 = {  "S19762C1", // class name
  bases_S19762C1, 57,
  &(vtc_S19762C1[0]), // expected_vtbl_contents
  &(vtt_S19762C1[0]), // expected_vtt_contents
  ABISELECT(221280,181948), // object size
  NSPAIRA(_ZTI8S19762C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19762C1),297, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19762C1),246, //virtual table table var
  56, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S245C6  {
  int s245c6f0;
  __tsi64 s245c6f1;
  void *s245c6f2[4];
  int s245c6f3[2];
  void *s245c6f4;
  ::S3222C4_nt s245c6f5;
  void *s245c6f6[2];
  virtual  ~S245C6(); // _ZN6S245C6D1Ev
  virtual void  v5(); // _ZN6S245C62v5Ev
  virtual void  v6(); // _ZN6S245C62v6Ev
  virtual void  v7(); // _ZN6S245C62v7Ev
  virtual void  v8(); // _ZN6S245C62v8Ev
  virtual void  v9(); // _ZN6S245C62v9Ev
  virtual void  v10(); // _ZN6S245C63v10Ev
  virtual void  v11(); // _ZN6S245C63v11Ev
  virtual void  v12(); // _ZN6S245C63v12Ev
  virtual void  v13(); // _ZN6S245C63v13Ev
  virtual void  v14(); // _ZN6S245C63v14Ev
  virtual void  v15(); // _ZN6S245C63v15Ev
  virtual void  v16(); // _ZN6S245C63v16Ev
  virtual void  v17(); // _ZN6S245C63v17Ev
  virtual void  v18(); // _ZN6S245C63v18Ev
  virtual void  v19(); // _ZN6S245C63v19Ev
  virtual void  v20(); // _ZN6S245C63v20Ev
  virtual void  v21(); // _ZN6S245C63v21Ev
  virtual void  v22(); // _ZN6S245C63v22Ev
  virtual void  v23(); // _ZN6S245C63v23Ev
  virtual void  v24(); // _ZN6S245C63v24Ev
  virtual void  v25(); // _ZN6S245C63v25Ev
  virtual void  v26(); // _ZN6S245C63v26Ev
  virtual void  v27(); // _ZN6S245C63v27Ev
  virtual void  v28(); // _ZN6S245C63v28Ev
  virtual void  v29(); // _ZN6S245C63v29Ev
  virtual void  v30(); // _ZN6S245C63v30Ev
  virtual void  v31(); // _ZN6S245C63v31Ev
  virtual void  v32(); // _ZN6S245C63v32Ev
  virtual void  v33(); // _ZN6S245C63v33Ev
  virtual void  v34(); // _ZN6S245C63v34Ev
  virtual void  v35(); // _ZN6S245C63v35Ev
  virtual void  v36(); // _ZN6S245C63v36Ev
  virtual void  v37(); // _ZN6S245C63v37Ev
  virtual void  v38(); // _ZN6S245C63v38Ev
  virtual void  v39(); // _ZN6S245C63v39Ev
  virtual void  v40(); // _ZN6S245C63v40Ev
  virtual void  v41(); // _ZN6S245C63v41Ev
  virtual void  v42(); // _ZN6S245C63v42Ev
  virtual void  v43(); // _ZN6S245C63v43Ev
  virtual void  v44(); // _ZN6S245C63v44Ev
  virtual void  v45(); // _ZN6S245C63v45Ev
  virtual void  v46(); // _ZN6S245C63v46Ev
  virtual void  v47(); // _ZN6S245C63v47Ev
  virtual void  v48(); // _ZN6S245C63v48Ev
  virtual void  v49(); // _ZN6S245C63v49Ev
  virtual void  v50(); // _ZN6S245C63v50Ev
  virtual void  v51(); // _ZN6S245C63v51Ev
  virtual void  v52(); // _ZN6S245C63v52Ev
  virtual void  v53(); // _ZN6S245C63v53Ev
  virtual void  v54(); // _ZN6S245C63v54Ev
  virtual void  v55(); // _ZN6S245C63v55Ev
  virtual void  v56(); // _ZN6S245C63v56Ev
  virtual void  v57(); // _ZN6S245C63v57Ev
  virtual void  v58(); // _ZN6S245C63v58Ev
  virtual void  v59(); // _ZN6S245C63v59Ev
  virtual void  v60(); // _ZN6S245C63v60Ev
  virtual void  v61(); // _ZN6S245C63v61Ev
  virtual void  v62(); // _ZN6S245C63v62Ev
  virtual void  v63(); // _ZN6S245C63v63Ev
  virtual void  v64(); // _ZN6S245C63v64Ev
  virtual void  v65(); // _ZN6S245C63v65Ev
  virtual void  v66(); // _ZN6S245C63v66Ev
  virtual void  v67(); // _ZN6S245C63v67Ev
  virtual void  v68(); // _ZN6S245C63v68Ev
  S245C6(); // tgen
};
//SIG(-1 S245C6) 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]}


 S245C6 ::~S245C6(){ note_dtor("S245C6", this);}
void  S245C6 ::v5(){vfunc_called(this, "_ZN6S245C62v5Ev");}
void  S245C6 ::v6(){vfunc_called(this, "_ZN6S245C62v6Ev");}
void  S245C6 ::v7(){vfunc_called(this, "_ZN6S245C62v7Ev");}
void  S245C6 ::v8(){vfunc_called(this, "_ZN6S245C62v8Ev");}
void  S245C6 ::v9(){vfunc_called(this, "_ZN6S245C62v9Ev");}
void  S245C6 ::v10(){vfunc_called(this, "_ZN6S245C63v10Ev");}
void  S245C6 ::v11(){vfunc_called(this, "_ZN6S245C63v11Ev");}
void  S245C6 ::v12(){vfunc_called(this, "_ZN6S245C63v12Ev");}
void  S245C6 ::v13(){vfunc_called(this, "_ZN6S245C63v13Ev");}
void  S245C6 ::v14(){vfunc_called(this, "_ZN6S245C63v14Ev");}
void  S245C6 ::v15(){vfunc_called(this, "_ZN6S245C63v15Ev");}
void  S245C6 ::v16(){vfunc_called(this, "_ZN6S245C63v16Ev");}
void  S245C6 ::v17(){vfunc_called(this, "_ZN6S245C63v17Ev");}
void  S245C6 ::v18(){vfunc_called(this, "_ZN6S245C63v18Ev");}
void  S245C6 ::v19(){vfunc_called(this, "_ZN6S245C63v19Ev");}
void  S245C6 ::v20(){vfunc_called(this, "_ZN6S245C63v20Ev");}
void  S245C6 ::v21(){vfunc_called(this, "_ZN6S245C63v21Ev");}
void  S245C6 ::v22(){vfunc_called(this, "_ZN6S245C63v22Ev");}
void  S245C6 ::v23(){vfunc_called(this, "_ZN6S245C63v23Ev");}
void  S245C6 ::v24(){vfunc_called(this, "_ZN6S245C63v24Ev");}
void  S245C6 ::v25(){vfunc_called(this, "_ZN6S245C63v25Ev");}
void  S245C6 ::v26(){vfunc_called(this, "_ZN6S245C63v26Ev");}
void  S245C6 ::v27(){vfunc_called(this, "_ZN6S245C63v27Ev");}
void  S245C6 ::v28(){vfunc_called(this, "_ZN6S245C63v28Ev");}
void  S245C6 ::v29(){vfunc_called(this, "_ZN6S245C63v29Ev");}
void  S245C6 ::v30(){vfunc_called(this, "_ZN6S245C63v30Ev");}
void  S245C6 ::v31(){vfunc_called(this, "_ZN6S245C63v31Ev");}
void  S245C6 ::v32(){vfunc_called(this, "_ZN6S245C63v32Ev");}
void  S245C6 ::v33(){vfunc_called(this, "_ZN6S245C63v33Ev");}
void  S245C6 ::v34(){vfunc_called(this, "_ZN6S245C63v34Ev");}
void  S245C6 ::v35(){vfunc_called(this, "_ZN6S245C63v35Ev");}
void  S245C6 ::v36(){vfunc_called(this, "_ZN6S245C63v36Ev");}
void  S245C6 ::v37(){vfunc_called(this, "_ZN6S245C63v37Ev");}
void  S245C6 ::v38(){vfunc_called(this, "_ZN6S245C63v38Ev");}
void  S245C6 ::v39(){vfunc_called(this, "_ZN6S245C63v39Ev");}
void  S245C6 ::v40(){vfunc_called(this, "_ZN6S245C63v40Ev");}
void  S245C6 ::v41(){vfunc_called(this, "_ZN6S245C63v41Ev");}
void  S245C6 ::v42(){vfunc_called(this, "_ZN6S245C63v42Ev");}
void  S245C6 ::v43(){vfunc_called(this, "_ZN6S245C63v43Ev");}
void  S245C6 ::v44(){vfunc_called(this, "_ZN6S245C63v44Ev");}
void  S245C6 ::v45(){vfunc_called(this, "_ZN6S245C63v45Ev");}
void  S245C6 ::v46(){vfunc_called(this, "_ZN6S245C63v46Ev");}
void  S245C6 ::v47(){vfunc_called(this, "_ZN6S245C63v47Ev");}
void  S245C6 ::v48(){vfunc_called(this, "_ZN6S245C63v48Ev");}
void  S245C6 ::v49(){vfunc_called(this, "_ZN6S245C63v49Ev");}
void  S245C6 ::v50(){vfunc_called(this, "_ZN6S245C63v50Ev");}
void  S245C6 ::v51(){vfunc_called(this, "_ZN6S245C63v51Ev");}
void  S245C6 ::v52(){vfunc_called(this, "_ZN6S245C63v52Ev");}
void  S245C6 ::v53(){vfunc_called(this, "_ZN6S245C63v53Ev");}
void  S245C6 ::v54(){vfunc_called(this, "_ZN6S245C63v54Ev");}
void  S245C6 ::v55(){vfunc_called(this, "_ZN6S245C63v55Ev");}
void  S245C6 ::v56(){vfunc_called(this, "_ZN6S245C63v56Ev");}
void  S245C6 ::v57(){vfunc_called(this, "_ZN6S245C63v57Ev");}
void  S245C6 ::v58(){vfunc_called(this, "_ZN6S245C63v58Ev");}
void  S245C6 ::v59(){vfunc_called(this, "_ZN6S245C63v59Ev");}
void  S245C6 ::v60(){vfunc_called(this, "_ZN6S245C63v60Ev");}
void  S245C6 ::v61(){vfunc_called(this, "_ZN6S245C63v61Ev");}
void  S245C6 ::v62(){vfunc_called(this, "_ZN6S245C63v62Ev");}
void  S245C6 ::v63(){vfunc_called(this, "_ZN6S245C63v63Ev");}
void  S245C6 ::v64(){vfunc_called(this, "_ZN6S245C63v64Ev");}
void  S245C6 ::v65(){vfunc_called(this, "_ZN6S245C63v65Ev");}
void  S245C6 ::v66(){vfunc_called(this, "_ZN6S245C63v66Ev");}
void  S245C6 ::v67(){vfunc_called(this, "_ZN6S245C63v67Ev");}
void  S245C6 ::v68(){vfunc_called(this, "_ZN6S245C63v68Ev");}
S245C6 ::S245C6(){ note_ctor("S245C6", this);} // tgen

static void Test_S245C6()
{
  extern Class_Descriptor cd_S245C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S245C6, buf);
    S245C6 *dp, &lv = *(dp=new (buf) S245C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S245C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S245C6)");
    check_field_offset(lv, s245c6f0, ABISELECT(8,4), "S245C6.s245c6f0");
    check_field_offset(lv, s245c6f1, ABISELECT(16,8), "S245C6.s245c6f1");
    check_field_offset(lv, s245c6f2, ABISELECT(24,16), "S245C6.s245c6f2");
    check_field_offset(lv, s245c6f3, ABISELECT(56,32), "S245C6.s245c6f3");
    check_field_offset(lv, s245c6f4, ABISELECT(64,40), "S245C6.s245c6f4");
    check_field_offset(lv, s245c6f5, ABISELECT(72,44), "S245C6.s245c6f5");
    check_field_offset(lv, s245c6f6, ABISELECT(80,52), "S245C6.s245c6f6");
    test_class_info(&lv, &cd_S245C6);
    dp->~S245C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS245C6(Test_S245C6, "S245C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S245C6C1Ev();
extern void _ZN6S245C6D1Ev();
Name_Map name_map_S245C6[] = {
  NSPAIR(_ZN6S245C6C1Ev),
  NSPAIR(_ZN6S245C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S245C6[];
extern void _ZN6S245C6D1Ev();
extern void _ZN6S245C6D0Ev();
extern void _ZN6S245C62v5Ev();
extern void _ZN6S245C62v6Ev();
extern void _ZN6S245C62v7Ev();
extern void _ZN6S245C62v8Ev();
extern void _ZN6S245C62v9Ev();
extern void _ZN6S245C63v10Ev();
extern void _ZN6S245C63v11Ev();
extern void _ZN6S245C63v12Ev();
extern void _ZN6S245C63v13Ev();
extern void _ZN6S245C63v14Ev();
extern void _ZN6S245C63v15Ev();
extern void _ZN6S245C63v16Ev();
extern void _ZN6S245C63v17Ev();
extern void _ZN6S245C63v18Ev();
extern void _ZN6S245C63v19Ev();
extern void _ZN6S245C63v20Ev();
extern void _ZN6S245C63v21Ev();
extern void _ZN6S245C63v22Ev();
extern void _ZN6S245C63v23Ev();
extern void _ZN6S245C63v24Ev();
extern void _ZN6S245C63v25Ev();
extern void _ZN6S245C63v26Ev();
extern void _ZN6S245C63v27Ev();
extern void _ZN6S245C63v28Ev();
extern void _ZN6S245C63v29Ev();
extern void _ZN6S245C63v30Ev();
extern void _ZN6S245C63v31Ev();
extern void _ZN6S245C63v32Ev();
extern void _ZN6S245C63v33Ev();
extern void _ZN6S245C63v34Ev();
extern void _ZN6S245C63v35Ev();
extern void _ZN6S245C63v36Ev();
extern void _ZN6S245C63v37Ev();
extern void _ZN6S245C63v38Ev();
extern void _ZN6S245C63v39Ev();
extern void _ZN6S245C63v40Ev();
extern void _ZN6S245C63v41Ev();
extern void _ZN6S245C63v42Ev();
extern void _ZN6S245C63v43Ev();
extern void _ZN6S245C63v44Ev();
extern void _ZN6S245C63v45Ev();
extern void _ZN6S245C63v46Ev();
extern void _ZN6S245C63v47Ev();
extern void _ZN6S245C63v48Ev();
extern void _ZN6S245C63v49Ev();
extern void _ZN6S245C63v50Ev();
extern void _ZN6S245C63v51Ev();
extern void _ZN6S245C63v52Ev();
extern void _ZN6S245C63v53Ev();
extern void _ZN6S245C63v54Ev();
extern void _ZN6S245C63v55Ev();
extern void _ZN6S245C63v56Ev();
extern void _ZN6S245C63v57Ev();
extern void _ZN6S245C63v58Ev();
extern void _ZN6S245C63v59Ev();
extern void _ZN6S245C63v60Ev();
extern void _ZN6S245C63v61Ev();
extern void _ZN6S245C63v62Ev();
extern void _ZN6S245C63v63Ev();
extern void _ZN6S245C63v64Ev();
extern void _ZN6S245C63v65Ev();
extern void _ZN6S245C63v66Ev();
extern void _ZN6S245C63v67Ev();
extern void _ZN6S245C63v68Ev();
static  VTBL_ENTRY vtc_S245C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S245C6[0]),
  (VTBL_ENTRY)&_ZN6S245C6D1Ev,
  (VTBL_ENTRY)&_ZN6S245C6D0Ev,
  (VTBL_ENTRY)&_ZN6S245C62v5Ev,
  (VTBL_ENTRY)&_ZN6S245C62v6Ev,
  (VTBL_ENTRY)&_ZN6S245C62v7Ev,
  (VTBL_ENTRY)&_ZN6S245C62v8Ev,
  (VTBL_ENTRY)&_ZN6S245C62v9Ev,
  (VTBL_ENTRY)&_ZN6S245C63v10Ev,
  (VTBL_ENTRY)&_ZN6S245C63v11Ev,
  (VTBL_ENTRY)&_ZN6S245C63v12Ev,
  (VTBL_ENTRY)&_ZN6S245C63v13Ev,
  (VTBL_ENTRY)&_ZN6S245C63v14Ev,
  (VTBL_ENTRY)&_ZN6S245C63v15Ev,
  (VTBL_ENTRY)&_ZN6S245C63v16Ev,
  (VTBL_ENTRY)&_ZN6S245C63v17Ev,
  (VTBL_ENTRY)&_ZN6S245C63v18Ev,
  (VTBL_ENTRY)&_ZN6S245C63v19Ev,
  (VTBL_ENTRY)&_ZN6S245C63v20Ev,
  (VTBL_ENTRY)&_ZN6S245C63v21Ev,
  (VTBL_ENTRY)&_ZN6S245C63v22Ev,
  (VTBL_ENTRY)&_ZN6S245C63v23Ev,
  (VTBL_ENTRY)&_ZN6S245C63v24Ev,
  (VTBL_ENTRY)&_ZN6S245C63v25Ev,
  (VTBL_ENTRY)&_ZN6S245C63v26Ev,
  (VTBL_ENTRY)&_ZN6S245C63v27Ev,
  (VTBL_ENTRY)&_ZN6S245C63v28Ev,
  (VTBL_ENTRY)&_ZN6S245C63v29Ev,
  (VTBL_ENTRY)&_ZN6S245C63v30Ev,
  (VTBL_ENTRY)&_ZN6S245C63v31Ev,
  (VTBL_ENTRY)&_ZN6S245C63v32Ev,
  (VTBL_ENTRY)&_ZN6S245C63v33Ev,
  (VTBL_ENTRY)&_ZN6S245C63v34Ev,
  (VTBL_ENTRY)&_ZN6S245C63v35Ev,
  (VTBL_ENTRY)&_ZN6S245C63v36Ev,
  (VTBL_ENTRY)&_ZN6S245C63v37Ev,
  (VTBL_ENTRY)&_ZN6S245C63v38Ev,
  (VTBL_ENTRY)&_ZN6S245C63v39Ev,
  (VTBL_ENTRY)&_ZN6S245C63v40Ev,
  (VTBL_ENTRY)&_ZN6S245C63v41Ev,
  (VTBL_ENTRY)&_ZN6S245C63v42Ev,
  (VTBL_ENTRY)&_ZN6S245C63v43Ev,
  (VTBL_ENTRY)&_ZN6S245C63v44Ev,
  (VTBL_ENTRY)&_ZN6S245C63v45Ev,
  (VTBL_ENTRY)&_ZN6S245C63v46Ev,
  (VTBL_ENTRY)&_ZN6S245C63v47Ev,
  (VTBL_ENTRY)&_ZN6S245C63v48Ev,
  (VTBL_ENTRY)&_ZN6S245C63v49Ev,
  (VTBL_ENTRY)&_ZN6S245C63v50Ev,
  (VTBL_ENTRY)&_ZN6S245C63v51Ev,
  (VTBL_ENTRY)&_ZN6S245C63v52Ev,
  (VTBL_ENTRY)&_ZN6S245C63v53Ev,
  (VTBL_ENTRY)&_ZN6S245C63v54Ev,
  (VTBL_ENTRY)&_ZN6S245C63v55Ev,
  (VTBL_ENTRY)&_ZN6S245C63v56Ev,
  (VTBL_ENTRY)&_ZN6S245C63v57Ev,
  (VTBL_ENTRY)&_ZN6S245C63v58Ev,
  (VTBL_ENTRY)&_ZN6S245C63v59Ev,
  (VTBL_ENTRY)&_ZN6S245C63v60Ev,
  (VTBL_ENTRY)&_ZN6S245C63v61Ev,
  (VTBL_ENTRY)&_ZN6S245C63v62Ev,
  (VTBL_ENTRY)&_ZN6S245C63v63Ev,
  (VTBL_ENTRY)&_ZN6S245C63v64Ev,
  (VTBL_ENTRY)&_ZN6S245C63v65Ev,
  (VTBL_ENTRY)&_ZN6S245C63v66Ev,
  (VTBL_ENTRY)&_ZN6S245C63v67Ev,
  (VTBL_ENTRY)&_ZN6S245C63v68Ev,
};
extern VTBL_ENTRY _ZTI6S245C6[];
extern  VTBL_ENTRY _ZTV6S245C6[];
Class_Descriptor cd_S245C6 = {  "S245C6", // class name
  0,0,//no base classes
  &(vtc_S245C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S245C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S245C6),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  S245C10  : S3222C7_nt {
};
//SIG(-1 S245C10) C1{ BC2{ m Fp Fi[2]}}



static void Test_S245C10()
{
  extern Class_Descriptor cd_S245C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S245C10, buf);
    S245C10 &lv = *(new (buf) S245C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S245C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S245C10)");
    check_base_class_offset(lv, (S3222C7_nt*), 0, "S245C10");
    test_class_info(&lv, &cd_S245C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS245C10(Test_S245C10, "S245C10", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S245C9()
{
  extern Class_Descriptor cd_S245C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S245C9, buf);
    S245C9 &lv = *(new (buf) S245C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S245C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S245C9)");
    check_base_class_offset(lv, (S3222C7_nt*)(S245C10*), 0, "S245C9");
    check_base_class_offset(lv, (S245C10*), 0, "S245C9");
    test_class_info(&lv, &cd_S245C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS245C9(Test_S245C9, "S245C9", ABISELECT(16,12));

#else // __cplusplus

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



//skip512 S245C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S3222C7_nt;
extern Class_Descriptor cd_S245C10;
extern Class_Descriptor cd_S245C9;
static Base_Class bases_S245C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3222C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S245C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S245C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S245C5_nt  : S245C6 {
  int s245c5f0[2];
  void *s245c5f1;
  int s245c5f2[2];
  ::S245C8_nt s245c5f3;
  ::S245C8_nt s245c5f4;
  ::S2014C38 s245c5f5;
  ::S245C8_nt s245c5f6;
  unsigned int s245c5f7:1;
  unsigned int s245c5f8:1;
  unsigned int s245c5f9:1;
  unsigned int s245c5f10:1;
  unsigned int s245c5f11:1;
  int s245c5f12[2];
  virtual  ~S245C5_nt(); // _ZN9S245C5_ntD1Ev
  virtual void  v69(); // _ZN9S245C5_nt3v69Ev
  virtual void  v70(); // _ZN9S245C5_nt3v70Ev
  virtual void  v71(); // _ZN9S245C5_nt3v71Ev
  virtual void  v72(); // _ZN9S245C5_nt3v72Ev
  virtual void  v73(); // _ZN9S245C5_nt3v73Ev
  virtual void  v74(); // _ZN9S245C5_nt3v74Ev
  virtual void  v75(); // _ZN9S245C5_nt3v75Ev
  virtual void  v76(); // _ZN9S245C5_nt3v76Ev
  virtual void  v77(); // _ZN9S245C5_nt3v77Ev
  virtual void  v78(); // _ZN9S245C5_nt3v78Ev
  virtual void  v79(); // _ZN9S245C5_nt3v79Ev
  virtual void  v80(); // _ZN9S245C5_nt3v80Ev
  virtual void  v81(); // _ZN9S245C5_nt3v81Ev
  virtual void  v82(); // _ZN9S245C5_nt3v82Ev
  virtual void  v83(); // _ZN9S245C5_nt3v83Ev
  virtual void  v84(); // _ZN9S245C5_nt3v84Ev
  virtual void  v85(); // _ZN9S245C5_nt3v85Ev
  virtual void  v86(); // _ZN9S245C5_nt3v86Ev
  virtual void  v87(); // _ZN9S245C5_nt3v87Ev
  virtual void  v88(); // _ZN9S245C5_nt3v88Ev
  virtual void  v89(); // _ZN9S245C5_nt3v89Ev
  virtual void  v90(); // _ZN9S245C5_nt3v90Ev
  S245C5_nt(); // tgen
};
//SIG(-1 S245C5_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]}


 S245C5_nt ::~S245C5_nt(){ note_dtor("S245C5_nt", this);}
void  S245C5_nt ::v69(){vfunc_called(this, "_ZN9S245C5_nt3v69Ev");}
void  S245C5_nt ::v70(){vfunc_called(this, "_ZN9S245C5_nt3v70Ev");}
void  S245C5_nt ::v71(){vfunc_called(this, "_ZN9S245C5_nt3v71Ev");}
void  S245C5_nt ::v72(){vfunc_called(this, "_ZN9S245C5_nt3v72Ev");}
void  S245C5_nt ::v73(){vfunc_called(this, "_ZN9S245C5_nt3v73Ev");}
void  S245C5_nt ::v74(){vfunc_called(this, "_ZN9S245C5_nt3v74Ev");}
void  S245C5_nt ::v75(){vfunc_called(this, "_ZN9S245C5_nt3v75Ev");}
void  S245C5_nt ::v76(){vfunc_called(this, "_ZN9S245C5_nt3v76Ev");}
void  S245C5_nt ::v77(){vfunc_called(this, "_ZN9S245C5_nt3v77Ev");}
void  S245C5_nt ::v78(){vfunc_called(this, "_ZN9S245C5_nt3v78Ev");}
void  S245C5_nt ::v79(){vfunc_called(this, "_ZN9S245C5_nt3v79Ev");}
void  S245C5_nt ::v80(){vfunc_called(this, "_ZN9S245C5_nt3v80Ev");}
void  S245C5_nt ::v81(){vfunc_called(this, "_ZN9S245C5_nt3v81Ev");}
void  S245C5_nt ::v82(){vfunc_called(this, "_ZN9S245C5_nt3v82Ev");}
void  S245C5_nt ::v83(){vfunc_called(this, "_ZN9S245C5_nt3v83Ev");}
void  S245C5_nt ::v84(){vfunc_called(this, "_ZN9S245C5_nt3v84Ev");}
void  S245C5_nt ::v85(){vfunc_called(this, "_ZN9S245C5_nt3v85Ev");}
void  S245C5_nt ::v86(){vfunc_called(this, "_ZN9S245C5_nt3v86Ev");}
void  S245C5_nt ::v87(){vfunc_called(this, "_ZN9S245C5_nt3v87Ev");}
void  S245C5_nt ::v88(){vfunc_called(this, "_ZN9S245C5_nt3v88Ev");}
void  S245C5_nt ::v89(){vfunc_called(this, "_ZN9S245C5_nt3v89Ev");}
void  S245C5_nt ::v90(){vfunc_called(this, "_ZN9S245C5_nt3v90Ev");}
S245C5_nt ::S245C5_nt(){ note_ctor("S245C5_nt", this);} // tgen

//skip512 S245C5_nt

#else // __cplusplus

extern void _ZN9S245C5_ntC1Ev();
extern void _ZN9S245C5_ntD1Ev();
Name_Map name_map_S245C5_nt[] = {
  NSPAIR(_ZN9S245C5_ntC1Ev),
  NSPAIR(_ZN9S245C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S245C6;
extern VTBL_ENTRY _ZTI6S245C6[];
extern  VTBL_ENTRY _ZTV6S245C6[];
static Base_Class bases_S245C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S245C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S245C5_nt[];
extern void _ZN9S245C5_ntD1Ev();
extern void _ZN9S245C5_ntD0Ev();
extern void _ZN6S245C62v5Ev();
extern void _ZN6S245C62v6Ev();
extern void _ZN6S245C62v7Ev();
extern void _ZN6S245C62v8Ev();
extern void _ZN6S245C62v9Ev();
extern void _ZN6S245C63v10Ev();
extern void _ZN6S245C63v11Ev();
extern void _ZN6S245C63v12Ev();
extern void _ZN6S245C63v13Ev();
extern void _ZN6S245C63v14Ev();
extern void _ZN6S245C63v15Ev();
extern void _ZN6S245C63v16Ev();
extern void _ZN6S245C63v17Ev();
extern void _ZN6S245C63v18Ev();
extern void _ZN6S245C63v19Ev();
extern void _ZN6S245C63v20Ev();
extern void _ZN6S245C63v21Ev();
extern void _ZN6S245C63v22Ev();
extern void _ZN6S245C63v23Ev();
extern void _ZN6S245C63v24Ev();
extern void _ZN6S245C63v25Ev();
extern void _ZN6S245C63v26Ev();
extern void _ZN6S245C63v27Ev();
extern void _ZN6S245C63v28Ev();
extern void _ZN6S245C63v29Ev();
extern void _ZN6S245C63v30Ev();
extern void _ZN6S245C63v31Ev();
extern void _ZN6S245C63v32Ev();
extern void _ZN6S245C63v33Ev();
extern void _ZN6S245C63v34Ev();
extern void _ZN6S245C63v35Ev();
extern void _ZN6S245C63v36Ev();
extern void _ZN6S245C63v37Ev();
extern void _ZN6S245C63v38Ev();
extern void _ZN6S245C63v39Ev();
extern void _ZN6S245C63v40Ev();
extern void _ZN6S245C63v41Ev();
extern void _ZN6S245C63v42Ev();
extern void _ZN6S245C63v43Ev();
extern void _ZN6S245C63v44Ev();
extern void _ZN6S245C63v45Ev();
extern void _ZN6S245C63v46Ev();
extern void _ZN6S245C63v47Ev();
extern void _ZN6S245C63v48Ev();
extern void _ZN6S245C63v49Ev();
extern void _ZN6S245C63v50Ev();
extern void _ZN6S245C63v51Ev();
extern void _ZN6S245C63v52Ev();
extern void _ZN6S245C63v53Ev();
extern void _ZN6S245C63v54Ev();
extern void _ZN6S245C63v55Ev();
extern void _ZN6S245C63v56Ev();
extern void _ZN6S245C63v57Ev();
extern void _ZN6S245C63v58Ev();
extern void _ZN6S245C63v59Ev();
extern void _ZN6S245C63v60Ev();
extern void _ZN6S245C63v61Ev();
extern void _ZN6S245C63v62Ev();
extern void _ZN6S245C63v63Ev();
extern void _ZN6S245C63v64Ev();
extern void _ZN6S245C63v65Ev();
extern void _ZN6S245C63v66Ev();
extern void _ZN6S245C63v67Ev();
extern void _ZN6S245C63v68Ev();
extern void _ZN9S245C5_nt3v69Ev();
extern void _ZN9S245C5_nt3v70Ev();
extern void _ZN9S245C5_nt3v71Ev();
extern void _ZN9S245C5_nt3v72Ev();
extern void _ZN9S245C5_nt3v73Ev();
extern void _ZN9S245C5_nt3v74Ev();
extern void _ZN9S245C5_nt3v75Ev();
extern void _ZN9S245C5_nt3v76Ev();
extern void _ZN9S245C5_nt3v77Ev();
extern void _ZN9S245C5_nt3v78Ev();
extern void _ZN9S245C5_nt3v79Ev();
extern void _ZN9S245C5_nt3v80Ev();
extern void _ZN9S245C5_nt3v81Ev();
extern void _ZN9S245C5_nt3v82Ev();
extern void _ZN9S245C5_nt3v83Ev();
extern void _ZN9S245C5_nt3v84Ev();
extern void _ZN9S245C5_nt3v85Ev();
extern void _ZN9S245C5_nt3v86Ev();
extern void _ZN9S245C5_nt3v87Ev();
extern void _ZN9S245C5_nt3v88Ev();
extern void _ZN9S245C5_nt3v89Ev();
extern void _ZN9S245C5_nt3v90Ev();
static  VTBL_ENTRY vtc_S245C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S245C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S245C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S245C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S245C62v5Ev,
  (VTBL_ENTRY)&_ZN6S245C62v6Ev,
  (VTBL_ENTRY)&_ZN6S245C62v7Ev,
  (VTBL_ENTRY)&_ZN6S245C62v8Ev,
  (VTBL_ENTRY)&_ZN6S245C62v9Ev,
  (VTBL_ENTRY)&_ZN6S245C63v10Ev,
  (VTBL_ENTRY)&_ZN6S245C63v11Ev,
  (VTBL_ENTRY)&_ZN6S245C63v12Ev,
  (VTBL_ENTRY)&_ZN6S245C63v13Ev,
  (VTBL_ENTRY)&_ZN6S245C63v14Ev,
  (VTBL_ENTRY)&_ZN6S245C63v15Ev,
  (VTBL_ENTRY)&_ZN6S245C63v16Ev,
  (VTBL_ENTRY)&_ZN6S245C63v17Ev,
  (VTBL_ENTRY)&_ZN6S245C63v18Ev,
  (VTBL_ENTRY)&_ZN6S245C63v19Ev,
  (VTBL_ENTRY)&_ZN6S245C63v20Ev,
  (VTBL_ENTRY)&_ZN6S245C63v21Ev,
  (VTBL_ENTRY)&_ZN6S245C63v22Ev,
  (VTBL_ENTRY)&_ZN6S245C63v23Ev,
  (VTBL_ENTRY)&_ZN6S245C63v24Ev,
  (VTBL_ENTRY)&_ZN6S245C63v25Ev,
  (VTBL_ENTRY)&_ZN6S245C63v26Ev,
  (VTBL_ENTRY)&_ZN6S245C63v27Ev,
  (VTBL_ENTRY)&_ZN6S245C63v28Ev,
  (VTBL_ENTRY)&_ZN6S245C63v29Ev,
  (VTBL_ENTRY)&_ZN6S245C63v30Ev,
  (VTBL_ENTRY)&_ZN6S245C63v31Ev,
  (VTBL_ENTRY)&_ZN6S245C63v32Ev,
  (VTBL_ENTRY)&_ZN6S245C63v33Ev,
  (VTBL_ENTRY)&_ZN6S245C63v34Ev,
  (VTBL_ENTRY)&_ZN6S245C63v35Ev,
  (VTBL_ENTRY)&_ZN6S245C63v36Ev,
  (VTBL_ENTRY)&_ZN6S245C63v37Ev,
  (VTBL_ENTRY)&_ZN6S245C63v38Ev,
  (VTBL_ENTRY)&_ZN6S245C63v39Ev,
  (VTBL_ENTRY)&_ZN6S245C63v40Ev,
  (VTBL_ENTRY)&_ZN6S245C63v41Ev,
  (VTBL_ENTRY)&_ZN6S245C63v42Ev,
  (VTBL_ENTRY)&_ZN6S245C63v43Ev,
  (VTBL_ENTRY)&_ZN6S245C63v44Ev,
  (VTBL_ENTRY)&_ZN6S245C63v45Ev,
  (VTBL_ENTRY)&_ZN6S245C63v46Ev,
  (VTBL_ENTRY)&_ZN6S245C63v47Ev,
  (VTBL_ENTRY)&_ZN6S245C63v48Ev,
  (VTBL_ENTRY)&_ZN6S245C63v49Ev,
  (VTBL_ENTRY)&_ZN6S245C63v50Ev,
  (VTBL_ENTRY)&_ZN6S245C63v51Ev,
  (VTBL_ENTRY)&_ZN6S245C63v52Ev,
  (VTBL_ENTRY)&_ZN6S245C63v53Ev,
  (VTBL_ENTRY)&_ZN6S245C63v54Ev,
  (VTBL_ENTRY)&_ZN6S245C63v55Ev,
  (VTBL_ENTRY)&_ZN6S245C63v56Ev,
  (VTBL_ENTRY)&_ZN6S245C63v57Ev,
  (VTBL_ENTRY)&_ZN6S245C63v58Ev,
  (VTBL_ENTRY)&_ZN6S245C63v59Ev,
  (VTBL_ENTRY)&_ZN6S245C63v60Ev,
  (VTBL_ENTRY)&_ZN6S245C63v61Ev,
  (VTBL_ENTRY)&_ZN6S245C63v62Ev,
  (VTBL_ENTRY)&_ZN6S245C63v63Ev,
  (VTBL_ENTRY)&_ZN6S245C63v64Ev,
  (VTBL_ENTRY)&_ZN6S245C63v65Ev,
  (VTBL_ENTRY)&_ZN6S245C63v66Ev,
  (VTBL_ENTRY)&_ZN6S245C63v67Ev,
  (VTBL_ENTRY)&_ZN6S245C63v68Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v90Ev,
};
extern VTBL_ENTRY _ZTI9S245C5_nt[];
VTBL_ENTRY *P__ZTI9S245C5_nt = _ZTI9S245C5_nt; 
extern  VTBL_ENTRY _ZTV9S245C5_nt[];
Class_Descriptor cd_S245C5_nt = {  "S245C5_nt", // class name
  bases_S245C5_nt, 1,
  &(vtc_S245C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S245C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S245C5_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  S245C20  : S3222C7_nt {
};
//SIG(-1 S245C20) C1{ BC2{ m Fp Fi[2]}}



static void Test_S245C20()
{
  extern Class_Descriptor cd_S245C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S245C20, buf);
    S245C20 &lv = *(new (buf) S245C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S245C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S245C20)");
    check_base_class_offset(lv, (S3222C7_nt*), 0, "S245C20");
    test_class_info(&lv, &cd_S245C20);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS245C20(Test_S245C20, "S245C20", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S245C19()
{
  extern Class_Descriptor cd_S245C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S245C19, buf);
    S245C19 &lv = *(new (buf) S245C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S245C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S245C19)");
    check_base_class_offset(lv, (S3222C7_nt*)(S245C20*), 0, "S245C19");
    check_base_class_offset(lv, (S245C20*), 0, "S245C19");
    test_class_info(&lv, &cd_S245C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS245C19(Test_S245C19, "S245C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3222C7_nt;
extern Class_Descriptor cd_S245C20;
static Base_Class bases_S245C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3222C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S245C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S245C19 = {  "S245C19", // class name
  bases_S245C19, 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  S245C4_nt  : S245C5_nt {
  unsigned int s245c4f0:1;
  unsigned int s245c4f1:1;
  unsigned int s245c4f2:1;
  ::S3222C17 s245c4f3;
  ::S3222C11 s245c4f4;
  ::S3222C5_nt s245c4f5;
  ::S245C19 s245c4f6;
  int s245c4f7[3];
  virtual  ~S245C4_nt(); // _ZN9S245C4_ntD1Ev
  virtual void  v91(); // _ZN9S245C4_nt3v91Ev
  virtual void  v92(); // _ZN9S245C4_nt3v92Ev
  virtual void  v93(); // _ZN9S245C4_nt3v93Ev
  virtual void  v94(); // _ZN9S245C4_nt3v94Ev
  virtual void  v95(); // _ZN9S245C4_nt3v95Ev
  virtual void  v96(); // _ZN9S245C4_nt3v96Ev
  virtual void  v97(); // _ZN9S245C4_nt3v97Ev
  virtual void  v98(); // _ZN9S245C4_nt3v98Ev
  virtual void  v99(); // _ZN9S245C4_nt3v99Ev
  virtual void  v100(); // _ZN9S245C4_nt4v100Ev
  virtual void  v101(); // _ZN9S245C4_nt4v101Ev
  virtual void  v102(); // _ZN9S245C4_nt4v102Ev
  virtual void  v103(); // _ZN9S245C4_nt4v103Ev
  virtual void  v104(); // _ZN9S245C4_nt4v104Ev
  virtual void  v105(); // _ZN9S245C4_nt4v105Ev
  virtual void  v106(); // _ZN9S245C4_nt4v106Ev
  virtual void  v107(); // _ZN9S245C4_nt4v107Ev
  virtual void  v108(); // _ZN9S245C4_nt4v108Ev
  virtual void  v109(); // _ZN9S245C4_nt4v109Ev
  virtual void  v110(); // _ZN9S245C4_nt4v110Ev
  S245C4_nt(); // tgen
};
//SIG(-1 S245C4_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]}


 S245C4_nt ::~S245C4_nt(){ note_dtor("S245C4_nt", this);}
void  S245C4_nt ::v91(){vfunc_called(this, "_ZN9S245C4_nt3v91Ev");}
void  S245C4_nt ::v92(){vfunc_called(this, "_ZN9S245C4_nt3v92Ev");}
void  S245C4_nt ::v93(){vfunc_called(this, "_ZN9S245C4_nt3v93Ev");}
void  S245C4_nt ::v94(){vfunc_called(this, "_ZN9S245C4_nt3v94Ev");}
void  S245C4_nt ::v95(){vfunc_called(this, "_ZN9S245C4_nt3v95Ev");}
void  S245C4_nt ::v96(){vfunc_called(this, "_ZN9S245C4_nt3v96Ev");}
void  S245C4_nt ::v97(){vfunc_called(this, "_ZN9S245C4_nt3v97Ev");}
void  S245C4_nt ::v98(){vfunc_called(this, "_ZN9S245C4_nt3v98Ev");}
void  S245C4_nt ::v99(){vfunc_called(this, "_ZN9S245C4_nt3v99Ev");}
void  S245C4_nt ::v100(){vfunc_called(this, "_ZN9S245C4_nt4v100Ev");}
void  S245C4_nt ::v101(){vfunc_called(this, "_ZN9S245C4_nt4v101Ev");}
void  S245C4_nt ::v102(){vfunc_called(this, "_ZN9S245C4_nt4v102Ev");}
void  S245C4_nt ::v103(){vfunc_called(this, "_ZN9S245C4_nt4v103Ev");}
void  S245C4_nt ::v104(){vfunc_called(this, "_ZN9S245C4_nt4v104Ev");}
void  S245C4_nt ::v105(){vfunc_called(this, "_ZN9S245C4_nt4v105Ev");}
void  S245C4_nt ::v106(){vfunc_called(this, "_ZN9S245C4_nt4v106Ev");}
void  S245C4_nt ::v107(){vfunc_called(this, "_ZN9S245C4_nt4v107Ev");}
void  S245C4_nt ::v108(){vfunc_called(this, "_ZN9S245C4_nt4v108Ev");}
void  S245C4_nt ::v109(){vfunc_called(this, "_ZN9S245C4_nt4v109Ev");}
void  S245C4_nt ::v110(){vfunc_called(this, "_ZN9S245C4_nt4v110Ev");}
S245C4_nt ::S245C4_nt(){ note_ctor("S245C4_nt", this);} // tgen

//skip512 S245C4_nt

#else // __cplusplus

extern void _ZN9S245C4_ntC1Ev();
extern void _ZN9S245C4_ntD1Ev();
Name_Map name_map_S245C4_nt[] = {
  NSPAIR(_ZN9S245C4_ntC1Ev),
  NSPAIR(_ZN9S245C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S245C6;
extern VTBL_ENTRY _ZTI6S245C6[];
extern  VTBL_ENTRY _ZTV6S245C6[];
extern Class_Descriptor cd_S245C5_nt;
extern VTBL_ENTRY _ZTI9S245C5_nt[];
extern  VTBL_ENTRY _ZTV9S245C5_nt[];
static Base_Class bases_S245C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S245C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S245C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S245C4_nt[];
extern void _ZN9S245C4_ntD1Ev();
extern void _ZN9S245C4_ntD0Ev();
extern void _ZN6S245C62v5Ev();
extern void _ZN6S245C62v6Ev();
extern void _ZN6S245C62v7Ev();
extern void _ZN6S245C62v8Ev();
extern void _ZN6S245C62v9Ev();
extern void _ZN6S245C63v10Ev();
extern void _ZN6S245C63v11Ev();
extern void _ZN6S245C63v12Ev();
extern void _ZN6S245C63v13Ev();
extern void _ZN6S245C63v14Ev();
extern void _ZN6S245C63v15Ev();
extern void _ZN6S245C63v16Ev();
extern void _ZN6S245C63v17Ev();
extern void _ZN6S245C63v18Ev();
extern void _ZN6S245C63v19Ev();
extern void _ZN6S245C63v20Ev();
extern void _ZN6S245C63v21Ev();
extern void _ZN6S245C63v22Ev();
extern void _ZN6S245C63v23Ev();
extern void _ZN6S245C63v24Ev();
extern void _ZN6S245C63v25Ev();
extern void _ZN6S245C63v26Ev();
extern void _ZN6S245C63v27Ev();
extern void _ZN6S245C63v28Ev();
extern void _ZN6S245C63v29Ev();
extern void _ZN6S245C63v30Ev();
extern void _ZN6S245C63v31Ev();
extern void _ZN6S245C63v32Ev();
extern void _ZN6S245C63v33Ev();
extern void _ZN6S245C63v34Ev();
extern void _ZN6S245C63v35Ev();
extern void _ZN6S245C63v36Ev();
extern void _ZN6S245C63v37Ev();
extern void _ZN6S245C63v38Ev();
extern void _ZN6S245C63v39Ev();
extern void _ZN6S245C63v40Ev();
extern void _ZN6S245C63v41Ev();
extern void _ZN6S245C63v42Ev();
extern void _ZN6S245C63v43Ev();
extern void _ZN6S245C63v44Ev();
extern void _ZN6S245C63v45Ev();
extern void _ZN6S245C63v46Ev();
extern void _ZN6S245C63v47Ev();
extern void _ZN6S245C63v48Ev();
extern void _ZN6S245C63v49Ev();
extern void _ZN6S245C63v50Ev();
extern void _ZN6S245C63v51Ev();
extern void _ZN6S245C63v52Ev();
extern void _ZN6S245C63v53Ev();
extern void _ZN6S245C63v54Ev();
extern void _ZN6S245C63v55Ev();
extern void _ZN6S245C63v56Ev();
extern void _ZN6S245C63v57Ev();
extern void _ZN6S245C63v58Ev();
extern void _ZN6S245C63v59Ev();
extern void _ZN6S245C63v60Ev();
extern void _ZN6S245C63v61Ev();
extern void _ZN6S245C63v62Ev();
extern void _ZN6S245C63v63Ev();
extern void _ZN6S245C63v64Ev();
extern void _ZN6S245C63v65Ev();
extern void _ZN6S245C63v66Ev();
extern void _ZN6S245C63v67Ev();
extern void _ZN6S245C63v68Ev();
extern void _ZN9S245C5_nt3v69Ev();
extern void _ZN9S245C5_nt3v70Ev();
extern void _ZN9S245C5_nt3v71Ev();
extern void _ZN9S245C5_nt3v72Ev();
extern void _ZN9S245C5_nt3v73Ev();
extern void _ZN9S245C5_nt3v74Ev();
extern void _ZN9S245C5_nt3v75Ev();
extern void _ZN9S245C5_nt3v76Ev();
extern void _ZN9S245C5_nt3v77Ev();
extern void _ZN9S245C5_nt3v78Ev();
extern void _ZN9S245C5_nt3v79Ev();
extern void _ZN9S245C5_nt3v80Ev();
extern void _ZN9S245C5_nt3v81Ev();
extern void _ZN9S245C5_nt3v82Ev();
extern void _ZN9S245C5_nt3v83Ev();
extern void _ZN9S245C5_nt3v84Ev();
extern void _ZN9S245C5_nt3v85Ev();
extern void _ZN9S245C5_nt3v86Ev();
extern void _ZN9S245C5_nt3v87Ev();
extern void _ZN9S245C5_nt3v88Ev();
extern void _ZN9S245C5_nt3v89Ev();
extern void _ZN9S245C5_nt3v90Ev();
extern void _ZN9S245C4_nt3v91Ev();
extern void _ZN9S245C4_nt3v92Ev();
extern void _ZN9S245C4_nt3v93Ev();
extern void _ZN9S245C4_nt3v94Ev();
extern void _ZN9S245C4_nt3v95Ev();
extern void _ZN9S245C4_nt3v96Ev();
extern void _ZN9S245C4_nt3v97Ev();
extern void _ZN9S245C4_nt3v98Ev();
extern void _ZN9S245C4_nt3v99Ev();
extern void _ZN9S245C4_nt4v100Ev();
extern void _ZN9S245C4_nt4v101Ev();
extern void _ZN9S245C4_nt4v102Ev();
extern void _ZN9S245C4_nt4v103Ev();
extern void _ZN9S245C4_nt4v104Ev();
extern void _ZN9S245C4_nt4v105Ev();
extern void _ZN9S245C4_nt4v106Ev();
extern void _ZN9S245C4_nt4v107Ev();
extern void _ZN9S245C4_nt4v108Ev();
extern void _ZN9S245C4_nt4v109Ev();
extern void _ZN9S245C4_nt4v110Ev();
static  VTBL_ENTRY vtc_S245C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S245C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S245C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S245C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S245C62v5Ev,
  (VTBL_ENTRY)&_ZN6S245C62v6Ev,
  (VTBL_ENTRY)&_ZN6S245C62v7Ev,
  (VTBL_ENTRY)&_ZN6S245C62v8Ev,
  (VTBL_ENTRY)&_ZN6S245C62v9Ev,
  (VTBL_ENTRY)&_ZN6S245C63v10Ev,
  (VTBL_ENTRY)&_ZN6S245C63v11Ev,
  (VTBL_ENTRY)&_ZN6S245C63v12Ev,
  (VTBL_ENTRY)&_ZN6S245C63v13Ev,
  (VTBL_ENTRY)&_ZN6S245C63v14Ev,
  (VTBL_ENTRY)&_ZN6S245C63v15Ev,
  (VTBL_ENTRY)&_ZN6S245C63v16Ev,
  (VTBL_ENTRY)&_ZN6S245C63v17Ev,
  (VTBL_ENTRY)&_ZN6S245C63v18Ev,
  (VTBL_ENTRY)&_ZN6S245C63v19Ev,
  (VTBL_ENTRY)&_ZN6S245C63v20Ev,
  (VTBL_ENTRY)&_ZN6S245C63v21Ev,
  (VTBL_ENTRY)&_ZN6S245C63v22Ev,
  (VTBL_ENTRY)&_ZN6S245C63v23Ev,
  (VTBL_ENTRY)&_ZN6S245C63v24Ev,
  (VTBL_ENTRY)&_ZN6S245C63v25Ev,
  (VTBL_ENTRY)&_ZN6S245C63v26Ev,
  (VTBL_ENTRY)&_ZN6S245C63v27Ev,
  (VTBL_ENTRY)&_ZN6S245C63v28Ev,
  (VTBL_ENTRY)&_ZN6S245C63v29Ev,
  (VTBL_ENTRY)&_ZN6S245C63v30Ev,
  (VTBL_ENTRY)&_ZN6S245C63v31Ev,
  (VTBL_ENTRY)&_ZN6S245C63v32Ev,
  (VTBL_ENTRY)&_ZN6S245C63v33Ev,
  (VTBL_ENTRY)&_ZN6S245C63v34Ev,
  (VTBL_ENTRY)&_ZN6S245C63v35Ev,
  (VTBL_ENTRY)&_ZN6S245C63v36Ev,
  (VTBL_ENTRY)&_ZN6S245C63v37Ev,
  (VTBL_ENTRY)&_ZN6S245C63v38Ev,
  (VTBL_ENTRY)&_ZN6S245C63v39Ev,
  (VTBL_ENTRY)&_ZN6S245C63v40Ev,
  (VTBL_ENTRY)&_ZN6S245C63v41Ev,
  (VTBL_ENTRY)&_ZN6S245C63v42Ev,
  (VTBL_ENTRY)&_ZN6S245C63v43Ev,
  (VTBL_ENTRY)&_ZN6S245C63v44Ev,
  (VTBL_ENTRY)&_ZN6S245C63v45Ev,
  (VTBL_ENTRY)&_ZN6S245C63v46Ev,
  (VTBL_ENTRY)&_ZN6S245C63v47Ev,
  (VTBL_ENTRY)&_ZN6S245C63v48Ev,
  (VTBL_ENTRY)&_ZN6S245C63v49Ev,
  (VTBL_ENTRY)&_ZN6S245C63v50Ev,
  (VTBL_ENTRY)&_ZN6S245C63v51Ev,
  (VTBL_ENTRY)&_ZN6S245C63v52Ev,
  (VTBL_ENTRY)&_ZN6S245C63v53Ev,
  (VTBL_ENTRY)&_ZN6S245C63v54Ev,
  (VTBL_ENTRY)&_ZN6S245C63v55Ev,
  (VTBL_ENTRY)&_ZN6S245C63v56Ev,
  (VTBL_ENTRY)&_ZN6S245C63v57Ev,
  (VTBL_ENTRY)&_ZN6S245C63v58Ev,
  (VTBL_ENTRY)&_ZN6S245C63v59Ev,
  (VTBL_ENTRY)&_ZN6S245C63v60Ev,
  (VTBL_ENTRY)&_ZN6S245C63v61Ev,
  (VTBL_ENTRY)&_ZN6S245C63v62Ev,
  (VTBL_ENTRY)&_ZN6S245C63v63Ev,
  (VTBL_ENTRY)&_ZN6S245C63v64Ev,
  (VTBL_ENTRY)&_ZN6S245C63v65Ev,
  (VTBL_ENTRY)&_ZN6S245C63v66Ev,
  (VTBL_ENTRY)&_ZN6S245C63v67Ev,
  (VTBL_ENTRY)&_ZN6S245C63v68Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v110Ev,
};
extern VTBL_ENTRY _ZTI9S245C4_nt[];
VTBL_ENTRY *P__ZTI9S245C4_nt = _ZTI9S245C4_nt; 
extern  VTBL_ENTRY _ZTV9S245C4_nt[];
Class_Descriptor cd_S245C4_nt = {  "S245C4_nt", // class name
  bases_S245C4_nt, 2,
  &(vtc_S245C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S245C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S245C4_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  S245C3_nt  : S245C4_nt {
  ::S3222C4_nt s245c3f0;
  unsigned int s245c3f1:1;
  ::S245C19 s245c3f2;
  virtual  ~S245C3_nt(); // _ZN9S245C3_ntD1Ev
  virtual void  v111(); // _ZN9S245C3_nt4v111Ev
  virtual void  v112(); // _ZN9S245C3_nt4v112Ev
  virtual void  v113(); // _ZN9S245C3_nt4v113Ev
  virtual void  v114(); // _ZN9S245C3_nt4v114Ev
  S245C3_nt(); // tgen
};
//SIG(-1 S245C3_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 FC17}


 S245C3_nt ::~S245C3_nt(){ note_dtor("S245C3_nt", this);}
void  S245C3_nt ::v111(){vfunc_called(this, "_ZN9S245C3_nt4v111Ev");}
void  S245C3_nt ::v112(){vfunc_called(this, "_ZN9S245C3_nt4v112Ev");}
void  S245C3_nt ::v113(){vfunc_called(this, "_ZN9S245C3_nt4v113Ev");}
void  S245C3_nt ::v114(){vfunc_called(this, "_ZN9S245C3_nt4v114Ev");}
S245C3_nt ::S245C3_nt(){ note_ctor("S245C3_nt", this);} // tgen

//skip512 S245C3_nt

#else // __cplusplus

extern void _ZN9S245C3_ntC1Ev();
extern void _ZN9S245C3_ntD1Ev();
Name_Map name_map_S245C3_nt[] = {
  NSPAIR(_ZN9S245C3_ntC1Ev),
  NSPAIR(_ZN9S245C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S245C6;
extern VTBL_ENTRY _ZTI6S245C6[];
extern  VTBL_ENTRY _ZTV6S245C6[];
extern Class_Descriptor cd_S245C5_nt;
extern VTBL_ENTRY _ZTI9S245C5_nt[];
extern  VTBL_ENTRY _ZTV9S245C5_nt[];
extern Class_Descriptor cd_S245C4_nt;
extern VTBL_ENTRY _ZTI9S245C4_nt[];
extern  VTBL_ENTRY _ZTV9S245C4_nt[];
static Base_Class bases_S245C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S245C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S245C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S245C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S245C3_nt[];
extern void _ZN9S245C3_ntD1Ev();
extern void _ZN9S245C3_ntD0Ev();
extern void _ZN6S245C62v5Ev();
extern void _ZN6S245C62v6Ev();
extern void _ZN6S245C62v7Ev();
extern void _ZN6S245C62v8Ev();
extern void _ZN6S245C62v9Ev();
extern void _ZN6S245C63v10Ev();
extern void _ZN6S245C63v11Ev();
extern void _ZN6S245C63v12Ev();
extern void _ZN6S245C63v13Ev();
extern void _ZN6S245C63v14Ev();
extern void _ZN6S245C63v15Ev();
extern void _ZN6S245C63v16Ev();
extern void _ZN6S245C63v17Ev();
extern void _ZN6S245C63v18Ev();
extern void _ZN6S245C63v19Ev();
extern void _ZN6S245C63v20Ev();
extern void _ZN6S245C63v21Ev();
extern void _ZN6S245C63v22Ev();
extern void _ZN6S245C63v23Ev();
extern void _ZN6S245C63v24Ev();
extern void _ZN6S245C63v25Ev();
extern void _ZN6S245C63v26Ev();
extern void _ZN6S245C63v27Ev();
extern void _ZN6S245C63v28Ev();
extern void _ZN6S245C63v29Ev();
extern void _ZN6S245C63v30Ev();
extern void _ZN6S245C63v31Ev();
extern void _ZN6S245C63v32Ev();
extern void _ZN6S245C63v33Ev();
extern void _ZN6S245C63v34Ev();
extern void _ZN6S245C63v35Ev();
extern void _ZN6S245C63v36Ev();
extern void _ZN6S245C63v37Ev();
extern void _ZN6S245C63v38Ev();
extern void _ZN6S245C63v39Ev();
extern void _ZN6S245C63v40Ev();
extern void _ZN6S245C63v41Ev();
extern void _ZN6S245C63v42Ev();
extern void _ZN6S245C63v43Ev();
extern void _ZN6S245C63v44Ev();
extern void _ZN6S245C63v45Ev();
extern void _ZN6S245C63v46Ev();
extern void _ZN6S245C63v47Ev();
extern void _ZN6S245C63v48Ev();
extern void _ZN6S245C63v49Ev();
extern void _ZN6S245C63v50Ev();
extern void _ZN6S245C63v51Ev();
extern void _ZN6S245C63v52Ev();
extern void _ZN6S245C63v53Ev();
extern void _ZN6S245C63v54Ev();
extern void _ZN6S245C63v55Ev();
extern void _ZN6S245C63v56Ev();
extern void _ZN6S245C63v57Ev();
extern void _ZN6S245C63v58Ev();
extern void _ZN6S245C63v59Ev();
extern void _ZN6S245C63v60Ev();
extern void _ZN6S245C63v61Ev();
extern void _ZN6S245C63v62Ev();
extern void _ZN6S245C63v63Ev();
extern void _ZN6S245C63v64Ev();
extern void _ZN6S245C63v65Ev();
extern void _ZN6S245C63v66Ev();
extern void _ZN6S245C63v67Ev();
extern void _ZN6S245C63v68Ev();
extern void _ZN9S245C5_nt3v69Ev();
extern void _ZN9S245C5_nt3v70Ev();
extern void _ZN9S245C5_nt3v71Ev();
extern void _ZN9S245C5_nt3v72Ev();
extern void _ZN9S245C5_nt3v73Ev();
extern void _ZN9S245C5_nt3v74Ev();
extern void _ZN9S245C5_nt3v75Ev();
extern void _ZN9S245C5_nt3v76Ev();
extern void _ZN9S245C5_nt3v77Ev();
extern void _ZN9S245C5_nt3v78Ev();
extern void _ZN9S245C5_nt3v79Ev();
extern void _ZN9S245C5_nt3v80Ev();
extern void _ZN9S245C5_nt3v81Ev();
extern void _ZN9S245C5_nt3v82Ev();
extern void _ZN9S245C5_nt3v83Ev();
extern void _ZN9S245C5_nt3v84Ev();
extern void _ZN9S245C5_nt3v85Ev();
extern void _ZN9S245C5_nt3v86Ev();
extern void _ZN9S245C5_nt3v87Ev();
extern void _ZN9S245C5_nt3v88Ev();
extern void _ZN9S245C5_nt3v89Ev();
extern void _ZN9S245C5_nt3v90Ev();
extern void _ZN9S245C4_nt3v91Ev();
extern void _ZN9S245C4_nt3v92Ev();
extern void _ZN9S245C4_nt3v93Ev();
extern void _ZN9S245C4_nt3v94Ev();
extern void _ZN9S245C4_nt3v95Ev();
extern void _ZN9S245C4_nt3v96Ev();
extern void _ZN9S245C4_nt3v97Ev();
extern void _ZN9S245C4_nt3v98Ev();
extern void _ZN9S245C4_nt3v99Ev();
extern void _ZN9S245C4_nt4v100Ev();
extern void _ZN9S245C4_nt4v101Ev();
extern void _ZN9S245C4_nt4v102Ev();
extern void _ZN9S245C4_nt4v103Ev();
extern void _ZN9S245C4_nt4v104Ev();
extern void _ZN9S245C4_nt4v105Ev();
extern void _ZN9S245C4_nt4v106Ev();
extern void _ZN9S245C4_nt4v107Ev();
extern void _ZN9S245C4_nt4v108Ev();
extern void _ZN9S245C4_nt4v109Ev();
extern void _ZN9S245C4_nt4v110Ev();
extern void _ZN9S245C3_nt4v111Ev();
extern void _ZN9S245C3_nt4v112Ev();
extern void _ZN9S245C3_nt4v113Ev();
extern void _ZN9S245C3_nt4v114Ev();
static  VTBL_ENTRY vtc_S245C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S245C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S245C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S245C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S245C62v5Ev,
  (VTBL_ENTRY)&_ZN6S245C62v6Ev,
  (VTBL_ENTRY)&_ZN6S245C62v7Ev,
  (VTBL_ENTRY)&_ZN6S245C62v8Ev,
  (VTBL_ENTRY)&_ZN6S245C62v9Ev,
  (VTBL_ENTRY)&_ZN6S245C63v10Ev,
  (VTBL_ENTRY)&_ZN6S245C63v11Ev,
  (VTBL_ENTRY)&_ZN6S245C63v12Ev,
  (VTBL_ENTRY)&_ZN6S245C63v13Ev,
  (VTBL_ENTRY)&_ZN6S245C63v14Ev,
  (VTBL_ENTRY)&_ZN6S245C63v15Ev,
  (VTBL_ENTRY)&_ZN6S245C63v16Ev,
  (VTBL_ENTRY)&_ZN6S245C63v17Ev,
  (VTBL_ENTRY)&_ZN6S245C63v18Ev,
  (VTBL_ENTRY)&_ZN6S245C63v19Ev,
  (VTBL_ENTRY)&_ZN6S245C63v20Ev,
  (VTBL_ENTRY)&_ZN6S245C63v21Ev,
  (VTBL_ENTRY)&_ZN6S245C63v22Ev,
  (VTBL_ENTRY)&_ZN6S245C63v23Ev,
  (VTBL_ENTRY)&_ZN6S245C63v24Ev,
  (VTBL_ENTRY)&_ZN6S245C63v25Ev,
  (VTBL_ENTRY)&_ZN6S245C63v26Ev,
  (VTBL_ENTRY)&_ZN6S245C63v27Ev,
  (VTBL_ENTRY)&_ZN6S245C63v28Ev,
  (VTBL_ENTRY)&_ZN6S245C63v29Ev,
  (VTBL_ENTRY)&_ZN6S245C63v30Ev,
  (VTBL_ENTRY)&_ZN6S245C63v31Ev,
  (VTBL_ENTRY)&_ZN6S245C63v32Ev,
  (VTBL_ENTRY)&_ZN6S245C63v33Ev,
  (VTBL_ENTRY)&_ZN6S245C63v34Ev,
  (VTBL_ENTRY)&_ZN6S245C63v35Ev,
  (VTBL_ENTRY)&_ZN6S245C63v36Ev,
  (VTBL_ENTRY)&_ZN6S245C63v37Ev,
  (VTBL_ENTRY)&_ZN6S245C63v38Ev,
  (VTBL_ENTRY)&_ZN6S245C63v39Ev,
  (VTBL_ENTRY)&_ZN6S245C63v40Ev,
  (VTBL_ENTRY)&_ZN6S245C63v41Ev,
  (VTBL_ENTRY)&_ZN6S245C63v42Ev,
  (VTBL_ENTRY)&_ZN6S245C63v43Ev,
  (VTBL_ENTRY)&_ZN6S245C63v44Ev,
  (VTBL_ENTRY)&_ZN6S245C63v45Ev,
  (VTBL_ENTRY)&_ZN6S245C63v46Ev,
  (VTBL_ENTRY)&_ZN6S245C63v47Ev,
  (VTBL_ENTRY)&_ZN6S245C63v48Ev,
  (VTBL_ENTRY)&_ZN6S245C63v49Ev,
  (VTBL_ENTRY)&_ZN6S245C63v50Ev,
  (VTBL_ENTRY)&_ZN6S245C63v51Ev,
  (VTBL_ENTRY)&_ZN6S245C63v52Ev,
  (VTBL_ENTRY)&_ZN6S245C63v53Ev,
  (VTBL_ENTRY)&_ZN6S245C63v54Ev,
  (VTBL_ENTRY)&_ZN6S245C63v55Ev,
  (VTBL_ENTRY)&_ZN6S245C63v56Ev,
  (VTBL_ENTRY)&_ZN6S245C63v57Ev,
  (VTBL_ENTRY)&_ZN6S245C63v58Ev,
  (VTBL_ENTRY)&_ZN6S245C63v59Ev,
  (VTBL_ENTRY)&_ZN6S245C63v60Ev,
  (VTBL_ENTRY)&_ZN6S245C63v61Ev,
  (VTBL_ENTRY)&_ZN6S245C63v62Ev,
  (VTBL_ENTRY)&_ZN6S245C63v63Ev,
  (VTBL_ENTRY)&_ZN6S245C63v64Ev,
  (VTBL_ENTRY)&_ZN6S245C63v65Ev,
  (VTBL_ENTRY)&_ZN6S245C63v66Ev,
  (VTBL_ENTRY)&_ZN6S245C63v67Ev,
  (VTBL_ENTRY)&_ZN6S245C63v68Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v114Ev,
};
extern VTBL_ENTRY _ZTI9S245C3_nt[];
VTBL_ENTRY *P__ZTI9S245C3_nt = _ZTI9S245C3_nt; 
extern  VTBL_ENTRY _ZTV9S245C3_nt[];
Class_Descriptor cd_S245C3_nt = {  "S245C3_nt", // class name
  bases_S245C3_nt, 3,
  &(vtc_S245C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI9S245C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S245C3_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  S245C2_nt  : S245C3_nt {
  int s245c2f0;
  unsigned int s245c2f1:1;
  virtual  ~S245C2_nt(); // _ZN9S245C2_ntD1Ev
  virtual void  v115(); // _ZN9S245C2_nt4v115Ev
  virtual void  v116(); // _ZN9S245C2_nt4v116Ev
  virtual void  v117(); // _ZN9S245C2_nt4v117Ev
  virtual void  v118(); // _ZN9S245C2_nt4v118Ev
  virtual void  v119(); // _ZN9S245C2_nt4v119Ev
  virtual void  v120(); // _ZN9S245C2_nt4v120Ev
  virtual void  v121(); // _ZN9S245C2_nt4v121Ev
  virtual void  v122(); // _ZN9S245C2_nt4v122Ev
  S245C2_nt(); // tgen
};
//SIG(-1 S245C2_nt) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC18} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S245C2_nt ::~S245C2_nt(){ note_dtor("S245C2_nt", this);}
void  S245C2_nt ::v115(){vfunc_called(this, "_ZN9S245C2_nt4v115Ev");}
void  S245C2_nt ::v116(){vfunc_called(this, "_ZN9S245C2_nt4v116Ev");}
void  S245C2_nt ::v117(){vfunc_called(this, "_ZN9S245C2_nt4v117Ev");}
void  S245C2_nt ::v118(){vfunc_called(this, "_ZN9S245C2_nt4v118Ev");}
void  S245C2_nt ::v119(){vfunc_called(this, "_ZN9S245C2_nt4v119Ev");}
void  S245C2_nt ::v120(){vfunc_called(this, "_ZN9S245C2_nt4v120Ev");}
void  S245C2_nt ::v121(){vfunc_called(this, "_ZN9S245C2_nt4v121Ev");}
void  S245C2_nt ::v122(){vfunc_called(this, "_ZN9S245C2_nt4v122Ev");}
S245C2_nt ::S245C2_nt(){ note_ctor("S245C2_nt", this);} // tgen

//skip512 S245C2_nt

#else // __cplusplus

extern void _ZN9S245C2_ntC1Ev();
extern void _ZN9S245C2_ntD1Ev();
Name_Map name_map_S245C2_nt[] = {
  NSPAIR(_ZN9S245C2_ntC1Ev),
  NSPAIR(_ZN9S245C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S245C6;
extern VTBL_ENTRY _ZTI6S245C6[];
extern  VTBL_ENTRY _ZTV6S245C6[];
extern Class_Descriptor cd_S245C5_nt;
extern VTBL_ENTRY _ZTI9S245C5_nt[];
extern  VTBL_ENTRY _ZTV9S245C5_nt[];
extern Class_Descriptor cd_S245C4_nt;
extern VTBL_ENTRY _ZTI9S245C4_nt[];
extern  VTBL_ENTRY _ZTV9S245C4_nt[];
extern Class_Descriptor cd_S245C3_nt;
extern VTBL_ENTRY _ZTI9S245C3_nt[];
extern  VTBL_ENTRY _ZTV9S245C3_nt[];
static Base_Class bases_S245C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S245C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S245C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S245C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S245C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S245C2_nt[];
extern void _ZN9S245C2_ntD1Ev();
extern void _ZN9S245C2_ntD0Ev();
extern void _ZN6S245C62v5Ev();
extern void _ZN6S245C62v6Ev();
extern void _ZN6S245C62v7Ev();
extern void _ZN6S245C62v8Ev();
extern void _ZN6S245C62v9Ev();
extern void _ZN6S245C63v10Ev();
extern void _ZN6S245C63v11Ev();
extern void _ZN6S245C63v12Ev();
extern void _ZN6S245C63v13Ev();
extern void _ZN6S245C63v14Ev();
extern void _ZN6S245C63v15Ev();
extern void _ZN6S245C63v16Ev();
extern void _ZN6S245C63v17Ev();
extern void _ZN6S245C63v18Ev();
extern void _ZN6S245C63v19Ev();
extern void _ZN6S245C63v20Ev();
extern void _ZN6S245C63v21Ev();
extern void _ZN6S245C63v22Ev();
extern void _ZN6S245C63v23Ev();
extern void _ZN6S245C63v24Ev();
extern void _ZN6S245C63v25Ev();
extern void _ZN6S245C63v26Ev();
extern void _ZN6S245C63v27Ev();
extern void _ZN6S245C63v28Ev();
extern void _ZN6S245C63v29Ev();
extern void _ZN6S245C63v30Ev();
extern void _ZN6S245C63v31Ev();
extern void _ZN6S245C63v32Ev();
extern void _ZN6S245C63v33Ev();
extern void _ZN6S245C63v34Ev();
extern void _ZN6S245C63v35Ev();
extern void _ZN6S245C63v36Ev();
extern void _ZN6S245C63v37Ev();
extern void _ZN6S245C63v38Ev();
extern void _ZN6S245C63v39Ev();
extern void _ZN6S245C63v40Ev();
extern void _ZN6S245C63v41Ev();
extern void _ZN6S245C63v42Ev();
extern void _ZN6S245C63v43Ev();
extern void _ZN6S245C63v44Ev();
extern void _ZN6S245C63v45Ev();
extern void _ZN6S245C63v46Ev();
extern void _ZN6S245C63v47Ev();
extern void _ZN6S245C63v48Ev();
extern void _ZN6S245C63v49Ev();
extern void _ZN6S245C63v50Ev();
extern void _ZN6S245C63v51Ev();
extern void _ZN6S245C63v52Ev();
extern void _ZN6S245C63v53Ev();
extern void _ZN6S245C63v54Ev();
extern void _ZN6S245C63v55Ev();
extern void _ZN6S245C63v56Ev();
extern void _ZN6S245C63v57Ev();
extern void _ZN6S245C63v58Ev();
extern void _ZN6S245C63v59Ev();
extern void _ZN6S245C63v60Ev();
extern void _ZN6S245C63v61Ev();
extern void _ZN6S245C63v62Ev();
extern void _ZN6S245C63v63Ev();
extern void _ZN6S245C63v64Ev();
extern void _ZN6S245C63v65Ev();
extern void _ZN6S245C63v66Ev();
extern void _ZN6S245C63v67Ev();
extern void _ZN6S245C63v68Ev();
extern void _ZN9S245C5_nt3v69Ev();
extern void _ZN9S245C5_nt3v70Ev();
extern void _ZN9S245C5_nt3v71Ev();
extern void _ZN9S245C5_nt3v72Ev();
extern void _ZN9S245C5_nt3v73Ev();
extern void _ZN9S245C5_nt3v74Ev();
extern void _ZN9S245C5_nt3v75Ev();
extern void _ZN9S245C5_nt3v76Ev();
extern void _ZN9S245C5_nt3v77Ev();
extern void _ZN9S245C5_nt3v78Ev();
extern void _ZN9S245C5_nt3v79Ev();
extern void _ZN9S245C5_nt3v80Ev();
extern void _ZN9S245C5_nt3v81Ev();
extern void _ZN9S245C5_nt3v82Ev();
extern void _ZN9S245C5_nt3v83Ev();
extern void _ZN9S245C5_nt3v84Ev();
extern void _ZN9S245C5_nt3v85Ev();
extern void _ZN9S245C5_nt3v86Ev();
extern void _ZN9S245C5_nt3v87Ev();
extern void _ZN9S245C5_nt3v88Ev();
extern void _ZN9S245C5_nt3v89Ev();
extern void _ZN9S245C5_nt3v90Ev();
extern void _ZN9S245C4_nt3v91Ev();
extern void _ZN9S245C4_nt3v92Ev();
extern void _ZN9S245C4_nt3v93Ev();
extern void _ZN9S245C4_nt3v94Ev();
extern void _ZN9S245C4_nt3v95Ev();
extern void _ZN9S245C4_nt3v96Ev();
extern void _ZN9S245C4_nt3v97Ev();
extern void _ZN9S245C4_nt3v98Ev();
extern void _ZN9S245C4_nt3v99Ev();
extern void _ZN9S245C4_nt4v100Ev();
extern void _ZN9S245C4_nt4v101Ev();
extern void _ZN9S245C4_nt4v102Ev();
extern void _ZN9S245C4_nt4v103Ev();
extern void _ZN9S245C4_nt4v104Ev();
extern void _ZN9S245C4_nt4v105Ev();
extern void _ZN9S245C4_nt4v106Ev();
extern void _ZN9S245C4_nt4v107Ev();
extern void _ZN9S245C4_nt4v108Ev();
extern void _ZN9S245C4_nt4v109Ev();
extern void _ZN9S245C4_nt4v110Ev();
extern void _ZN9S245C3_nt4v111Ev();
extern void _ZN9S245C3_nt4v112Ev();
extern void _ZN9S245C3_nt4v113Ev();
extern void _ZN9S245C3_nt4v114Ev();
extern void _ZN9S245C2_nt4v115Ev();
extern void _ZN9S245C2_nt4v116Ev();
extern void _ZN9S245C2_nt4v117Ev();
extern void _ZN9S245C2_nt4v118Ev();
extern void _ZN9S245C2_nt4v119Ev();
extern void _ZN9S245C2_nt4v120Ev();
extern void _ZN9S245C2_nt4v121Ev();
extern void _ZN9S245C2_nt4v122Ev();
static  VTBL_ENTRY vtc_S245C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S245C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S245C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S245C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S245C62v5Ev,
  (VTBL_ENTRY)&_ZN6S245C62v6Ev,
  (VTBL_ENTRY)&_ZN6S245C62v7Ev,
  (VTBL_ENTRY)&_ZN6S245C62v8Ev,
  (VTBL_ENTRY)&_ZN6S245C62v9Ev,
  (VTBL_ENTRY)&_ZN6S245C63v10Ev,
  (VTBL_ENTRY)&_ZN6S245C63v11Ev,
  (VTBL_ENTRY)&_ZN6S245C63v12Ev,
  (VTBL_ENTRY)&_ZN6S245C63v13Ev,
  (VTBL_ENTRY)&_ZN6S245C63v14Ev,
  (VTBL_ENTRY)&_ZN6S245C63v15Ev,
  (VTBL_ENTRY)&_ZN6S245C63v16Ev,
  (VTBL_ENTRY)&_ZN6S245C63v17Ev,
  (VTBL_ENTRY)&_ZN6S245C63v18Ev,
  (VTBL_ENTRY)&_ZN6S245C63v19Ev,
  (VTBL_ENTRY)&_ZN6S245C63v20Ev,
  (VTBL_ENTRY)&_ZN6S245C63v21Ev,
  (VTBL_ENTRY)&_ZN6S245C63v22Ev,
  (VTBL_ENTRY)&_ZN6S245C63v23Ev,
  (VTBL_ENTRY)&_ZN6S245C63v24Ev,
  (VTBL_ENTRY)&_ZN6S245C63v25Ev,
  (VTBL_ENTRY)&_ZN6S245C63v26Ev,
  (VTBL_ENTRY)&_ZN6S245C63v27Ev,
  (VTBL_ENTRY)&_ZN6S245C63v28Ev,
  (VTBL_ENTRY)&_ZN6S245C63v29Ev,
  (VTBL_ENTRY)&_ZN6S245C63v30Ev,
  (VTBL_ENTRY)&_ZN6S245C63v31Ev,
  (VTBL_ENTRY)&_ZN6S245C63v32Ev,
  (VTBL_ENTRY)&_ZN6S245C63v33Ev,
  (VTBL_ENTRY)&_ZN6S245C63v34Ev,
  (VTBL_ENTRY)&_ZN6S245C63v35Ev,
  (VTBL_ENTRY)&_ZN6S245C63v36Ev,
  (VTBL_ENTRY)&_ZN6S245C63v37Ev,
  (VTBL_ENTRY)&_ZN6S245C63v38Ev,
  (VTBL_ENTRY)&_ZN6S245C63v39Ev,
  (VTBL_ENTRY)&_ZN6S245C63v40Ev,
  (VTBL_ENTRY)&_ZN6S245C63v41Ev,
  (VTBL_ENTRY)&_ZN6S245C63v42Ev,
  (VTBL_ENTRY)&_ZN6S245C63v43Ev,
  (VTBL_ENTRY)&_ZN6S245C63v44Ev,
  (VTBL_ENTRY)&_ZN6S245C63v45Ev,
  (VTBL_ENTRY)&_ZN6S245C63v46Ev,
  (VTBL_ENTRY)&_ZN6S245C63v47Ev,
  (VTBL_ENTRY)&_ZN6S245C63v48Ev,
  (VTBL_ENTRY)&_ZN6S245C63v49Ev,
  (VTBL_ENTRY)&_ZN6S245C63v50Ev,
  (VTBL_ENTRY)&_ZN6S245C63v51Ev,
  (VTBL_ENTRY)&_ZN6S245C63v52Ev,
  (VTBL_ENTRY)&_ZN6S245C63v53Ev,
  (VTBL_ENTRY)&_ZN6S245C63v54Ev,
  (VTBL_ENTRY)&_ZN6S245C63v55Ev,
  (VTBL_ENTRY)&_ZN6S245C63v56Ev,
  (VTBL_ENTRY)&_ZN6S245C63v57Ev,
  (VTBL_ENTRY)&_ZN6S245C63v58Ev,
  (VTBL_ENTRY)&_ZN6S245C63v59Ev,
  (VTBL_ENTRY)&_ZN6S245C63v60Ev,
  (VTBL_ENTRY)&_ZN6S245C63v61Ev,
  (VTBL_ENTRY)&_ZN6S245C63v62Ev,
  (VTBL_ENTRY)&_ZN6S245C63v63Ev,
  (VTBL_ENTRY)&_ZN6S245C63v64Ev,
  (VTBL_ENTRY)&_ZN6S245C63v65Ev,
  (VTBL_ENTRY)&_ZN6S245C63v66Ev,
  (VTBL_ENTRY)&_ZN6S245C63v67Ev,
  (VTBL_ENTRY)&_ZN6S245C63v68Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v122Ev,
};
extern VTBL_ENTRY _ZTI9S245C2_nt[];
VTBL_ENTRY *P__ZTI9S245C2_nt = _ZTI9S245C2_nt; 
extern  VTBL_ENTRY _ZTV9S245C2_nt[];
Class_Descriptor cd_S245C2_nt = {  "S245C2_nt", // class name
  bases_S245C2_nt, 4,
  &(vtc_S245C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI9S245C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S245C2_nt),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S245C1  : S245C2_nt {
  ::S245C8_nt s245c1f0;
  ::S245C8_nt s245c1f1;
  ::S245C8_nt s245c1f2;
  unsigned int s245c1f3:1;
  unsigned int s245c1f4:1;
  unsigned int s245c1f5:1;
  ::S245C8_nt s245c1f6;
  virtual  ~S245C1(); // _ZN6S245C1D1Ev
  virtual void  v1(); // _ZN6S245C12v1Ev
  virtual void  v2(); // _ZN6S245C12v2Ev
  virtual void  v3(); // _ZN6S245C12v3Ev
  virtual void  v4(); // _ZN6S245C12v4Ev
  S245C1(); // tgen
};
//SIG(1 S245C1) 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 FC19} vd v115 v116 v117 v118 v119 v120 v121 v122 Fi Fi:1} vd v1 v2 v3 v4 FC8 FC8 FC8 Fi:1 Fi:1 Fi:1 FC8}


 S245C1 ::~S245C1(){ note_dtor("S245C1", this);}
void  S245C1 ::v1(){vfunc_called(this, "_ZN6S245C12v1Ev");}
void  S245C1 ::v2(){vfunc_called(this, "_ZN6S245C12v2Ev");}
void  S245C1 ::v3(){vfunc_called(this, "_ZN6S245C12v3Ev");}
void  S245C1 ::v4(){vfunc_called(this, "_ZN6S245C12v4Ev");}
S245C1 ::S245C1(){ note_ctor("S245C1", this);} // tgen

static void Test_S245C1()
{
  extern Class_Descriptor cd_S245C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,71)];
    init_test(&cd_S245C1, buf);
    S245C1 *dp, &lv = *(dp=new (buf) S245C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,280), "sizeof(S245C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S245C1)");
    check_base_class_offset(lv, (S245C6*)(S245C5_nt*)(S245C4_nt*)(S245C3_nt*)(S245C2_nt*), 0, "S245C1");
    check_base_class_offset(lv, (S245C5_nt*)(S245C4_nt*)(S245C3_nt*)(S245C2_nt*), 0, "S245C1");
    check_base_class_offset(lv, (S245C4_nt*)(S245C3_nt*)(S245C2_nt*), 0, "S245C1");
    check_base_class_offset(lv, (S245C3_nt*)(S245C2_nt*), 0, "S245C1");
    check_base_class_offset(lv, (S245C2_nt*), 0, "S245C1");
    check_field_offset(lv, s245c1f0, ABISELECT(304,228), "S245C1.s245c1f0");
    check_field_offset(lv, s245c1f1, ABISELECT(320,240), "S245C1.s245c1f1");
    check_field_offset(lv, s245c1f2, ABISELECT(336,252), "S245C1.s245c1f2");
    set_bf_and_test(lv, s245c1f3, ABISELECT(352,264), 0, 1, 1, "S245C1");
    set_bf_and_test(lv, s245c1f4, ABISELECT(352,264), 1, 1, 1, "S245C1");
    set_bf_and_test(lv, s245c1f5, ABISELECT(352,264), 2, 1, 1, "S245C1");
    check_field_offset(lv, s245c1f6, ABISELECT(360,268), "S245C1.s245c1f6");
    test_class_info(&lv, &cd_S245C1);
    dp->~S245C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS245C1(Test_S245C1, "S245C1", ABISELECT(376,280));

#else // __cplusplus

extern void _ZN6S245C1C1Ev();
extern void _ZN6S245C1D1Ev();
Name_Map name_map_S245C1[] = {
  NSPAIR(_ZN6S245C1C1Ev),
  NSPAIR(_ZN6S245C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S245C6;
extern VTBL_ENTRY _ZTI6S245C6[];
extern  VTBL_ENTRY _ZTV6S245C6[];
extern Class_Descriptor cd_S245C5_nt;
extern VTBL_ENTRY _ZTI9S245C5_nt[];
extern  VTBL_ENTRY _ZTV9S245C5_nt[];
extern Class_Descriptor cd_S245C4_nt;
extern VTBL_ENTRY _ZTI9S245C4_nt[];
extern  VTBL_ENTRY _ZTV9S245C4_nt[];
extern Class_Descriptor cd_S245C3_nt;
extern VTBL_ENTRY _ZTI9S245C3_nt[];
extern  VTBL_ENTRY _ZTV9S245C3_nt[];
extern Class_Descriptor cd_S245C2_nt;
extern VTBL_ENTRY _ZTI9S245C2_nt[];
extern  VTBL_ENTRY _ZTV9S245C2_nt[];
static Base_Class bases_S245C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S245C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S245C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S245C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S245C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S245C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S245C1[];
extern void _ZN6S245C1D1Ev();
extern void _ZN6S245C1D0Ev();
extern void _ZN6S245C62v5Ev();
extern void _ZN6S245C62v6Ev();
extern void _ZN6S245C62v7Ev();
extern void _ZN6S245C62v8Ev();
extern void _ZN6S245C62v9Ev();
extern void _ZN6S245C63v10Ev();
extern void _ZN6S245C63v11Ev();
extern void _ZN6S245C63v12Ev();
extern void _ZN6S245C63v13Ev();
extern void _ZN6S245C63v14Ev();
extern void _ZN6S245C63v15Ev();
extern void _ZN6S245C63v16Ev();
extern void _ZN6S245C63v17Ev();
extern void _ZN6S245C63v18Ev();
extern void _ZN6S245C63v19Ev();
extern void _ZN6S245C63v20Ev();
extern void _ZN6S245C63v21Ev();
extern void _ZN6S245C63v22Ev();
extern void _ZN6S245C63v23Ev();
extern void _ZN6S245C63v24Ev();
extern void _ZN6S245C63v25Ev();
extern void _ZN6S245C63v26Ev();
extern void _ZN6S245C63v27Ev();
extern void _ZN6S245C63v28Ev();
extern void _ZN6S245C63v29Ev();
extern void _ZN6S245C63v30Ev();
extern void _ZN6S245C63v31Ev();
extern void _ZN6S245C63v32Ev();
extern void _ZN6S245C63v33Ev();
extern void _ZN6S245C63v34Ev();
extern void _ZN6S245C63v35Ev();
extern void _ZN6S245C63v36Ev();
extern void _ZN6S245C63v37Ev();
extern void _ZN6S245C63v38Ev();
extern void _ZN6S245C63v39Ev();
extern void _ZN6S245C63v40Ev();
extern void _ZN6S245C63v41Ev();
extern void _ZN6S245C63v42Ev();
extern void _ZN6S245C63v43Ev();
extern void _ZN6S245C63v44Ev();
extern void _ZN6S245C63v45Ev();
extern void _ZN6S245C63v46Ev();
extern void _ZN6S245C63v47Ev();
extern void _ZN6S245C63v48Ev();
extern void _ZN6S245C63v49Ev();
extern void _ZN6S245C63v50Ev();
extern void _ZN6S245C63v51Ev();
extern void _ZN6S245C63v52Ev();
extern void _ZN6S245C63v53Ev();
extern void _ZN6S245C63v54Ev();
extern void _ZN6S245C63v55Ev();
extern void _ZN6S245C63v56Ev();
extern void _ZN6S245C63v57Ev();
extern void _ZN6S245C63v58Ev();
extern void _ZN6S245C63v59Ev();
extern void _ZN6S245C63v60Ev();
extern void _ZN6S245C63v61Ev();
extern void _ZN6S245C63v62Ev();
extern void _ZN6S245C63v63Ev();
extern void _ZN6S245C63v64Ev();
extern void _ZN6S245C63v65Ev();
extern void _ZN6S245C63v66Ev();
extern void _ZN6S245C63v67Ev();
extern void _ZN6S245C63v68Ev();
extern void _ZN9S245C5_nt3v69Ev();
extern void _ZN9S245C5_nt3v70Ev();
extern void _ZN9S245C5_nt3v71Ev();
extern void _ZN9S245C5_nt3v72Ev();
extern void _ZN9S245C5_nt3v73Ev();
extern void _ZN9S245C5_nt3v74Ev();
extern void _ZN9S245C5_nt3v75Ev();
extern void _ZN9S245C5_nt3v76Ev();
extern void _ZN9S245C5_nt3v77Ev();
extern void _ZN9S245C5_nt3v78Ev();
extern void _ZN9S245C5_nt3v79Ev();
extern void _ZN9S245C5_nt3v80Ev();
extern void _ZN9S245C5_nt3v81Ev();
extern void _ZN9S245C5_nt3v82Ev();
extern void _ZN9S245C5_nt3v83Ev();
extern void _ZN9S245C5_nt3v84Ev();
extern void _ZN9S245C5_nt3v85Ev();
extern void _ZN9S245C5_nt3v86Ev();
extern void _ZN9S245C5_nt3v87Ev();
extern void _ZN9S245C5_nt3v88Ev();
extern void _ZN9S245C5_nt3v89Ev();
extern void _ZN9S245C5_nt3v90Ev();
extern void _ZN9S245C4_nt3v91Ev();
extern void _ZN9S245C4_nt3v92Ev();
extern void _ZN9S245C4_nt3v93Ev();
extern void _ZN9S245C4_nt3v94Ev();
extern void _ZN9S245C4_nt3v95Ev();
extern void _ZN9S245C4_nt3v96Ev();
extern void _ZN9S245C4_nt3v97Ev();
extern void _ZN9S245C4_nt3v98Ev();
extern void _ZN9S245C4_nt3v99Ev();
extern void _ZN9S245C4_nt4v100Ev();
extern void _ZN9S245C4_nt4v101Ev();
extern void _ZN9S245C4_nt4v102Ev();
extern void _ZN9S245C4_nt4v103Ev();
extern void _ZN9S245C4_nt4v104Ev();
extern void _ZN9S245C4_nt4v105Ev();
extern void _ZN9S245C4_nt4v106Ev();
extern void _ZN9S245C4_nt4v107Ev();
extern void _ZN9S245C4_nt4v108Ev();
extern void _ZN9S245C4_nt4v109Ev();
extern void _ZN9S245C4_nt4v110Ev();
extern void _ZN9S245C3_nt4v111Ev();
extern void _ZN9S245C3_nt4v112Ev();
extern void _ZN9S245C3_nt4v113Ev();
extern void _ZN9S245C3_nt4v114Ev();
extern void _ZN9S245C2_nt4v115Ev();
extern void _ZN9S245C2_nt4v116Ev();
extern void _ZN9S245C2_nt4v117Ev();
extern void _ZN9S245C2_nt4v118Ev();
extern void _ZN9S245C2_nt4v119Ev();
extern void _ZN9S245C2_nt4v120Ev();
extern void _ZN9S245C2_nt4v121Ev();
extern void _ZN9S245C2_nt4v122Ev();
extern void _ZN6S245C12v1Ev();
extern void _ZN6S245C12v2Ev();
extern void _ZN6S245C12v3Ev();
extern void _ZN6S245C12v4Ev();
static  VTBL_ENTRY vtc_S245C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S245C1[0]),
  (VTBL_ENTRY)&_ZN6S245C1D1Ev,
  (VTBL_ENTRY)&_ZN6S245C1D0Ev,
  (VTBL_ENTRY)&_ZN6S245C62v5Ev,
  (VTBL_ENTRY)&_ZN6S245C62v6Ev,
  (VTBL_ENTRY)&_ZN6S245C62v7Ev,
  (VTBL_ENTRY)&_ZN6S245C62v8Ev,
  (VTBL_ENTRY)&_ZN6S245C62v9Ev,
  (VTBL_ENTRY)&_ZN6S245C63v10Ev,
  (VTBL_ENTRY)&_ZN6S245C63v11Ev,
  (VTBL_ENTRY)&_ZN6S245C63v12Ev,
  (VTBL_ENTRY)&_ZN6S245C63v13Ev,
  (VTBL_ENTRY)&_ZN6S245C63v14Ev,
  (VTBL_ENTRY)&_ZN6S245C63v15Ev,
  (VTBL_ENTRY)&_ZN6S245C63v16Ev,
  (VTBL_ENTRY)&_ZN6S245C63v17Ev,
  (VTBL_ENTRY)&_ZN6S245C63v18Ev,
  (VTBL_ENTRY)&_ZN6S245C63v19Ev,
  (VTBL_ENTRY)&_ZN6S245C63v20Ev,
  (VTBL_ENTRY)&_ZN6S245C63v21Ev,
  (VTBL_ENTRY)&_ZN6S245C63v22Ev,
  (VTBL_ENTRY)&_ZN6S245C63v23Ev,
  (VTBL_ENTRY)&_ZN6S245C63v24Ev,
  (VTBL_ENTRY)&_ZN6S245C63v25Ev,
  (VTBL_ENTRY)&_ZN6S245C63v26Ev,
  (VTBL_ENTRY)&_ZN6S245C63v27Ev,
  (VTBL_ENTRY)&_ZN6S245C63v28Ev,
  (VTBL_ENTRY)&_ZN6S245C63v29Ev,
  (VTBL_ENTRY)&_ZN6S245C63v30Ev,
  (VTBL_ENTRY)&_ZN6S245C63v31Ev,
  (VTBL_ENTRY)&_ZN6S245C63v32Ev,
  (VTBL_ENTRY)&_ZN6S245C63v33Ev,
  (VTBL_ENTRY)&_ZN6S245C63v34Ev,
  (VTBL_ENTRY)&_ZN6S245C63v35Ev,
  (VTBL_ENTRY)&_ZN6S245C63v36Ev,
  (VTBL_ENTRY)&_ZN6S245C63v37Ev,
  (VTBL_ENTRY)&_ZN6S245C63v38Ev,
  (VTBL_ENTRY)&_ZN6S245C63v39Ev,
  (VTBL_ENTRY)&_ZN6S245C63v40Ev,
  (VTBL_ENTRY)&_ZN6S245C63v41Ev,
  (VTBL_ENTRY)&_ZN6S245C63v42Ev,
  (VTBL_ENTRY)&_ZN6S245C63v43Ev,
  (VTBL_ENTRY)&_ZN6S245C63v44Ev,
  (VTBL_ENTRY)&_ZN6S245C63v45Ev,
  (VTBL_ENTRY)&_ZN6S245C63v46Ev,
  (VTBL_ENTRY)&_ZN6S245C63v47Ev,
  (VTBL_ENTRY)&_ZN6S245C63v48Ev,
  (VTBL_ENTRY)&_ZN6S245C63v49Ev,
  (VTBL_ENTRY)&_ZN6S245C63v50Ev,
  (VTBL_ENTRY)&_ZN6S245C63v51Ev,
  (VTBL_ENTRY)&_ZN6S245C63v52Ev,
  (VTBL_ENTRY)&_ZN6S245C63v53Ev,
  (VTBL_ENTRY)&_ZN6S245C63v54Ev,
  (VTBL_ENTRY)&_ZN6S245C63v55Ev,
  (VTBL_ENTRY)&_ZN6S245C63v56Ev,
  (VTBL_ENTRY)&_ZN6S245C63v57Ev,
  (VTBL_ENTRY)&_ZN6S245C63v58Ev,
  (VTBL_ENTRY)&_ZN6S245C63v59Ev,
  (VTBL_ENTRY)&_ZN6S245C63v60Ev,
  (VTBL_ENTRY)&_ZN6S245C63v61Ev,
  (VTBL_ENTRY)&_ZN6S245C63v62Ev,
  (VTBL_ENTRY)&_ZN6S245C63v63Ev,
  (VTBL_ENTRY)&_ZN6S245C63v64Ev,
  (VTBL_ENTRY)&_ZN6S245C63v65Ev,
  (VTBL_ENTRY)&_ZN6S245C63v66Ev,
  (VTBL_ENTRY)&_ZN6S245C63v67Ev,
  (VTBL_ENTRY)&_ZN6S245C63v68Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S245C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S245C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S245C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S245C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN6S245C12v1Ev,
  (VTBL_ENTRY)&_ZN6S245C12v2Ev,
  (VTBL_ENTRY)&_ZN6S245C12v3Ev,
  (VTBL_ENTRY)&_ZN6S245C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S245C1[];
extern  VTBL_ENTRY _ZTV6S245C1[];
Class_Descriptor cd_S245C1 = {  "S245C1", // class name
  bases_S245C1, 5,
  &(vtc_S245C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,280), // object size
  NSPAIRA(_ZTI6S245C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S245C1),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C5  {
  short s6002c5f0:6;
  long s6002c5f1;
  short s6002c5f2:4;
  __tsi64 s6002c5f3[13];
  void *s6002c5f4;
  virtual void  v5(); // _ZN7S6002C52v5Ev
  ~S6002C5(); // tgen
  S6002C5(); // tgen
};
//SIG(-1 S6002C5) C1{ v1 Fs:6 Fl Fs:4 FL[13] Fp}


void  S6002C5 ::v5(){vfunc_called(this, "_ZN7S6002C52v5Ev");}
S6002C5 ::~S6002C5(){ note_dtor("S6002C5", this);} // tgen
S6002C5 ::S6002C5(){ note_ctor("S6002C5", this);} // tgen

static void Test_S6002C5()
{
  extern Class_Descriptor cd_S6002C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,32)];
    init_test(&cd_S6002C5, buf);
    S6002C5 *dp, &lv = *(dp=new (buf) S6002C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,124), "sizeof(S6002C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6002C5)");
    set_bf_and_test(lv, s6002c5f0, ABISELECT(8,4), 0, 6, 1, "S6002C5");
    set_bf_and_test(lv, s6002c5f0, ABISELECT(8,4), 0, 6, hide_sll(1LL<<5), "S6002C5");
    check_field_offset(lv, s6002c5f1, ABISELECT(16,8), "S6002C5.s6002c5f1");
    set_bf_and_test(lv, s6002c5f2, ABISELECT(24,12), 0, 4, 1, "S6002C5");
    set_bf_and_test(lv, s6002c5f2, ABISELECT(24,12), 0, 4, hide_sll(1LL<<3), "S6002C5");
    check_field_offset(lv, s6002c5f3, ABISELECT(32,16), "S6002C5.s6002c5f3");
    check_field_offset(lv, s6002c5f4, ABISELECT(136,120), "S6002C5.s6002c5f4");
    test_class_info(&lv, &cd_S6002C5);
    dp->~S6002C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C5(Test_S6002C5, "S6002C5", ABISELECT(144,124));

#else // __cplusplus

extern void _ZN7S6002C5C1Ev();
extern void _ZN7S6002C5D1Ev();
Name_Map name_map_S6002C5[] = {
  NSPAIR(_ZN7S6002C5C1Ev),
  NSPAIR(_ZN7S6002C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6002C5[];
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY vtc_S6002C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C5[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
Class_Descriptor cd_S6002C5 = {  "S6002C5", // class name
  0,0,//no base classes
  &(vtc_S6002C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,124), // object size
  NSPAIRA(_ZTI7S6002C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6002C5),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  S6002C4  {
  int s6002c4f0[2];
  __tsi64 s6002c4f1[2];
  ::S6002C5 s6002c4f2[3];
  virtual void  v2(); // _ZN7S6002C42v2Ev
  virtual void  v3(); // _ZN7S6002C42v3Ev
  virtual void  v4(); // _ZN7S6002C42v4Ev
  ~S6002C4(); // tgen
  S6002C4(); // tgen
};
//SIG(-1 S6002C4) C1{ v1 v2 v3 Fi[2] FL[2] FC2{ v4 Fs:6 Fl Fs:4 FL[13] Fp}[3]}


void  S6002C4 ::v2(){vfunc_called(this, "_ZN7S6002C42v2Ev");}
void  S6002C4 ::v3(){vfunc_called(this, "_ZN7S6002C42v3Ev");}
void  S6002C4 ::v4(){vfunc_called(this, "_ZN7S6002C42v4Ev");}
S6002C4 ::~S6002C4(){ note_dtor("S6002C4", this);} // tgen
S6002C4 ::S6002C4(){ note_ctor("S6002C4", this);} // tgen

static void Test_S6002C4()
{
  extern Class_Descriptor cd_S6002C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(59,101)];
    init_test(&cd_S6002C4, buf);
    S6002C4 *dp, &lv = *(dp=new (buf) S6002C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,400), "sizeof(S6002C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6002C4)");
    check_field_offset(lv, s6002c4f0, ABISELECT(8,4), "S6002C4.s6002c4f0");
    check_field_offset(lv, s6002c4f1, ABISELECT(16,12), "S6002C4.s6002c4f1");
    check_field_offset(lv, s6002c4f2, ABISELECT(32,28), "S6002C4.s6002c4f2");
    test_class_info(&lv, &cd_S6002C4);
    dp->~S6002C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C4(Test_S6002C4, "S6002C4", ABISELECT(464,400));

#else // __cplusplus

extern void _ZN7S6002C4C1Ev();
extern void _ZN7S6002C4D1Ev();
Name_Map name_map_S6002C4[] = {
  NSPAIR(_ZN7S6002C4C1Ev),
  NSPAIR(_ZN7S6002C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6002C4[];
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY vtc_S6002C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C4[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
Class_Descriptor cd_S6002C4 = {  "S6002C4", // class name
  0,0,//no base classes
  &(vtc_S6002C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,400), // object size
  NSPAIRA(_ZTI7S6002C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6002C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C9  {
  __tsi64 s6002c9f0;
  long double s6002c9f1;
  void *s6002c9f2;
  char s6002c9f3;
  ::S6002C5 s6002c9f4;
  void *s6002c9f5[2];
  __tsi64 s6002c9f6[8];
  short s6002c9f7;
  void *s6002c9f8;
  __tsi64 s6002c9f9:64;
  virtual void  v1(); // _ZN7S6002C92v1Ev
  ~S6002C9(); // tgen
  S6002C9(); // tgen
};
//SIG(-1 S6002C9) C1{ v1 FL FD Fp Fc FC2{ v2 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64}


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

static void Test_S6002C9()
{
  extern Class_Descriptor cd_S6002C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,62)];
    init_test(&cd_S6002C9, buf);
    S6002C9 *dp, &lv = *(dp=new (buf) S6002C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,244), "sizeof(S6002C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C9)");
    check_field_offset(lv, s6002c9f0, ABISELECT(8,4), "S6002C9.s6002c9f0");
    check_field_offset(lv, s6002c9f1, ABISELECT(16,12), "S6002C9.s6002c9f1");
    check_field_offset(lv, s6002c9f2, ABISELECT(32,24), "S6002C9.s6002c9f2");
    check_field_offset(lv, s6002c9f3, ABISELECT(40,28), "S6002C9.s6002c9f3");
    check_field_offset(lv, s6002c9f4, ABISELECT(48,32), "S6002C9.s6002c9f4");
    check_field_offset(lv, s6002c9f5, ABISELECT(192,156), "S6002C9.s6002c9f5");
    check_field_offset(lv, s6002c9f6, ABISELECT(208,164), "S6002C9.s6002c9f6");
    check_field_offset(lv, s6002c9f7, ABISELECT(272,228), "S6002C9.s6002c9f7");
    check_field_offset(lv, s6002c9f8, ABISELECT(280,232), "S6002C9.s6002c9f8");
    set_bf_and_test(lv, s6002c9f9, ABISELECT(288,236), 0, 64, 1, "S6002C9");
    set_bf_and_test(lv, s6002c9f9, ABISELECT(288,236), 0, 64, hide_sll(1LL<<63), "S6002C9");
    test_class_info(&lv, &cd_S6002C9);
    dp->~S6002C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C9(Test_S6002C9, "S6002C9", ABISELECT(304,244));

#else // __cplusplus

extern void _ZN7S6002C9C1Ev();
extern void _ZN7S6002C9D1Ev();
Name_Map name_map_S6002C9[] = {
  NSPAIR(_ZN7S6002C9C1Ev),
  NSPAIR(_ZN7S6002C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6002C9[];
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY vtc_S6002C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C9[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
Class_Descriptor cd_S6002C9 = {  "S6002C9", // class name
  0,0,//no base classes
  &(vtc_S6002C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,244), // object size
  NSPAIRA(_ZTI7S6002C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6002C9),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C8  : virtual S6002C5 {
  void *s6002c8f0;
  ::S6002C5 s6002c8f1;
  int s6002c8f2:3;
  ~S6002C8(); // tgen
  S6002C8(); // tgen
};
//SIG(-1 S6002C8) C1{ VBC2{ v1 Fs:6 Fl Fs:4 FL[13] Fp} Fp FC2 Fi:3}


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

static void Test_S6002C8()
{
  extern Class_Descriptor cd_S6002C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,66)];
    init_test(&cd_S6002C8, buf);
    S6002C8 *dp, &lv = *(dp=new (buf) S6002C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,260), "sizeof(S6002C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6002C8)");
    check_base_class_offset(lv, (S6002C5*), ABISELECT(168,136), "S6002C8");
    check_field_offset(lv, s6002c8f0, ABISELECT(8,4), "S6002C8.s6002c8f0");
    check_field_offset(lv, s6002c8f1, ABISELECT(16,8), "S6002C8.s6002c8f1");
    set_bf_and_test(lv, s6002c8f2, ABISELECT(160,132), 0, 3, 1, "S6002C8");
    set_bf_and_test(lv, s6002c8f2, ABISELECT(160,132), 0, 3, hide_sll(1LL<<2), "S6002C8");
    test_class_info(&lv, &cd_S6002C8);
    dp->~S6002C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C8(Test_S6002C8, "S6002C8", ABISELECT(312,260));

#else // __cplusplus

extern void _ZN7S6002C8C1Ev();
extern void _ZN7S6002C8D1Ev();
Name_Map name_map_S6002C8[] = {
  NSPAIR(_ZN7S6002C8C1Ev),
  NSPAIR(_ZN7S6002C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
static Base_Class bases_S6002C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C5,    ABISELECT(168,136), //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 _ZTI7S6002C8[];
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY vtc_S6002C8[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern VTBL_ENTRY _ZTV7S6002C8[];
static  VTT_ENTRY vtt_S6002C8[] = {
  {&(_ZTV7S6002C8[3]),  3,7},
  {&(_ZTV7S6002C8[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
Class_Descriptor cd_S6002C8 = {  "S6002C8", // class name
  bases_S6002C8, 1,
  &(vtc_S6002C8[0]), // expected_vtbl_contents
  &(vtt_S6002C8[0]), // expected_vtt_contents
  ABISELECT(312,260), // object size
  NSPAIRA(_ZTI7S6002C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6002C8),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6002C8),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  S6002C7  : S6002C5 , virtual S6002C4 , virtual S6002C8 , virtual S6002C9 {
  ::S6002C9 s6002c7f0;
  short s6002c7f1;
  int s6002c7f2[2];
  ~S6002C7(); // tgen
  S6002C7(); // tgen
};
//SIG(-1 S6002C7) C1{ BC2{ v1 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ v2 v3 v4 Fi[2] FL[2] FC2[3]} VBC4{ VBC2 Fp FC2 Fi:3} VBC5{ v5 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} FC5 Fs Fi[2]}


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

static void Test_S6002C7()
{
  extern Class_Descriptor cd_S6002C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(98,322)];
    init_test(&cd_S6002C7, buf);
    S6002C7 *dp, &lv = *(dp=new (buf) S6002C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1552,1284), "sizeof(S6002C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C7)");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*), 0, "S6002C7");
    check_base_class_offset(lv, (S6002C4*), ABISELECT(464,380), "S6002C7");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(1096,916), "S6002C7");
    check_base_class_offset(lv, (S6002C8*), ABISELECT(928,780), "S6002C7");
    check_base_class_offset(lv, (S6002C9*), ABISELECT(1248,1040), "S6002C7");
    check_field_offset(lv, s6002c7f0, ABISELECT(144,124), "S6002C7.s6002c7f0");
    check_field_offset(lv, s6002c7f1, ABISELECT(448,368), "S6002C7.s6002c7f1");
    check_field_offset(lv, s6002c7f2, ABISELECT(452,372), "S6002C7.s6002c7f2");
    test_class_info(&lv, &cd_S6002C7);
    dp->~S6002C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C7(Test_S6002C7, "S6002C7", ABISELECT(1552,1284));

#else // __cplusplus

extern void _ZN7S6002C7C1Ev();
extern void _ZN7S6002C7D1Ev();
Name_Map name_map_S6002C7[] = {
  NSPAIR(_ZN7S6002C7C1Ev),
  NSPAIR(_ZN7S6002C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
static Base_Class bases_S6002C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C4,    ABISELECT(464,380), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C5,    ABISELECT(1096,916), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6002C8,    ABISELECT(928,780), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C9,    ABISELECT(1248,1040), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6002C7[];
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY vtc_S6002C7[] = {
  ABISELECT(1248,1040),
  ABISELECT(1096,916),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(168,136),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  0,
  ABISELECT(-1096,-916),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-1248,-1040),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S6002C7[];
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C7[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__7S6002C7[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTT_ENTRY vtt_S6002C7[] = {
  {&(_ZTV7S6002C7[6]),  6,26},
  {&(_ZTV7S6002C7[12]),  12,26},
  {&(_ZTV7S6002C7[18]),  18,26},
  {&(_ZTV7S6002C7[21]),  21,26},
  {&(_ZTV7S6002C7[25]),  25,26},
  {&(_tg__ZTV7S6002C8__7S6002C7[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__7S6002C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
Class_Descriptor cd_S6002C7 = {  "S6002C7", // class name
  bases_S6002C7, 5,
  &(vtc_S6002C7[0]), // expected_vtbl_contents
  &(vtt_S6002C7[0]), // expected_vtt_contents
  ABISELECT(1552,1284), // object size
  NSPAIRA(_ZTI7S6002C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6002C7),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6002C7),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C10  : S6002C9 , S6002C4 , S6002C5 {
  __tsi64 s6002c10f0[2];
  void *s6002c10f1[8];
  ::S6002C7 s6002c10f2;
  void *s6002c10f3;
  int s6002c10f4;
  ::S6002C7 s6002c10f5;
  int s6002c10f6;
  virtual  ~S6002C10(); // _ZN8S6002C10D1Ev
  virtual void  v6(); // _ZN8S6002C102v6Ev
  S6002C10(); // tgen
};
//SIG(-1 S6002C10) C1{ BC2{ v2 FL FD Fp Fc FC3{ v6 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC4{ v3 v4 v5 Fi[2] FL[2] FC3[3]} BC3 vd v1 FL[2] Fp[8] FC5{ BC3 VBC4 VBC6{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC5 Fi}


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

static void Test_S6002C10()
{
  extern Class_Descriptor cd_S6002C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(259,850)];
    init_test(&cd_S6002C10, buf);
    S6002C10 *dp, &lv = *(dp=new (buf) S6002C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4128,3396), "sizeof(S6002C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C10)");
    check_base_class_offset(lv, (S6002C9*), 0, "S6002C10");
    check_base_class_offset(lv, (S6002C4*), ABISELECT(296,244), "S6002C10");
    check_base_class_offset(lv, (S6002C5*), ABISELECT(760,644), "S6002C10");
    check_field_offset(lv, s6002c10f0, ABISELECT(904,768), "S6002C10.s6002c10f0");
    check_field_offset(lv, s6002c10f1, ABISELECT(920,784), "S6002C10.s6002c10f1");
    check_field_offset(lv, s6002c10f2, ABISELECT(992,816), "S6002C10.s6002c10f2");
    check_field_offset(lv, s6002c10f3, ABISELECT(2544,2100), "S6002C10.s6002c10f3");
    check_field_offset(lv, s6002c10f4, ABISELECT(2552,2104), "S6002C10.s6002c10f4");
    check_field_offset(lv, s6002c10f5, ABISELECT(2560,2108), "S6002C10.s6002c10f5");
    check_field_offset(lv, s6002c10f6, ABISELECT(4112,3392), "S6002C10.s6002c10f6");
    test_class_info(&lv, &cd_S6002C10);
    dp->~S6002C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C10(Test_S6002C10, "S6002C10", ABISELECT(4128,3396));

#else // __cplusplus

extern void _ZN8S6002C10C1Ev();
extern void _ZN8S6002C10D1Ev();
Name_Map name_map_S6002C10[] = {
  NSPAIR(_ZN8S6002C10C1Ev),
  NSPAIR(_ZN8S6002C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
static Base_Class bases_S6002C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6002C4,    ABISELECT(296,244), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C5,    ABISELECT(760,644), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C10[];
extern void _ZN7S6002C92v1Ev();
extern void _ZN8S6002C10D1Ev();
extern void _ZN8S6002C10D0Ev();
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY vtc_S6002C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C10[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&_ZN8S6002C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C10D0Ev,
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI8S6002C10[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI8S6002C10[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
Class_Descriptor cd_S6002C10 = {  "S6002C10", // class name
  bases_S6002C10, 3,
  &(vtc_S6002C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4128,3396), // object size
  NSPAIRA(_ZTI8S6002C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6002C10),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C13  : S6002C9 {
  ::S6002C8 s6002c13f0;
  int s6002c13f1;
  void *s6002c13f2;
  int s6002c13f3;
  virtual  ~S6002C13(); // _ZN8S6002C13D1Ev
  virtual void  v10(); // _ZN8S6002C133v10Ev
  S6002C13(); // tgen
};
//SIG(-1 S6002C13) C1{ BC2{ v2 FL FD Fp Fc FC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v1 FC4{ VBC3 Fp FC3 Fi:3} Fi Fp Fi}


 S6002C13 ::~S6002C13(){ note_dtor("S6002C13", this);}
void  S6002C13 ::v10(){vfunc_called(this, "_ZN8S6002C133v10Ev");}
S6002C13 ::S6002C13(){ note_ctor("S6002C13", this);} // tgen

static void Test_S6002C13()
{
  extern Class_Descriptor cd_S6002C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,130)];
    init_test(&cd_S6002C13, buf);
    S6002C13 *dp, &lv = *(dp=new (buf) S6002C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,516), "sizeof(S6002C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C13)");
    check_base_class_offset(lv, (S6002C9*), 0, "S6002C13");
    check_field_offset(lv, s6002c13f0, ABISELECT(296,244), "S6002C13.s6002c13f0");
    check_field_offset(lv, s6002c13f1, ABISELECT(608,504), "S6002C13.s6002c13f1");
    check_field_offset(lv, s6002c13f2, ABISELECT(616,508), "S6002C13.s6002c13f2");
    check_field_offset(lv, s6002c13f3, ABISELECT(624,512), "S6002C13.s6002c13f3");
    test_class_info(&lv, &cd_S6002C13);
    dp->~S6002C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C13(Test_S6002C13, "S6002C13", ABISELECT(640,516));

#else // __cplusplus

extern void _ZN8S6002C13C1Ev();
extern void _ZN8S6002C13D1Ev();
Name_Map name_map_S6002C13[] = {
  NSPAIR(_ZN8S6002C13C1Ev),
  NSPAIR(_ZN8S6002C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
static Base_Class bases_S6002C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C13[];
extern void _ZN7S6002C92v1Ev();
extern void _ZN8S6002C13D1Ev();
extern void _ZN8S6002C13D0Ev();
extern void _ZN8S6002C133v10Ev();
static  VTBL_ENTRY vtc_S6002C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C13[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&_ZN8S6002C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C13D0Ev,
  (VTBL_ENTRY)&_ZN8S6002C133v10Ev,
};
extern VTBL_ENTRY _ZTI8S6002C13[];
extern  VTBL_ENTRY _ZTV8S6002C13[];
Class_Descriptor cd_S6002C13 = {  "S6002C13", // class name
  bases_S6002C13, 1,
  &(vtc_S6002C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(640,516), // object size
  NSPAIRA(_ZTI8S6002C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6002C13),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  S6002C12  : virtual S6002C9 , virtual S6002C10 , virtual S6002C5 , virtual S6002C8 {
  __tsi64 s6002c12f0:44;
  void *s6002c12f1;
  int s6002c12f2;
  ::S6002C7 s6002c12f3;
  __tsi64 s6002c12f4[2];
  int s6002c12f5[3];
  ::S6002C10 s6002c12f6;
  char s6002c12f7:7;
  ::S6002C13 s6002c12f8;
  ~S6002C12(); // tgen
  S6002C12(); // tgen
};
//SIG(-1 S6002C12) C1{ VBC2{ v1 FL FD Fp Fc FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} VBC4{ BC2 BC5{ v2 v3 v4 Fi[2] FL[2] FC3[3]} BC3 vd v6 FL[2] Fp[8] FC6{ BC3 VBC5 VBC7{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC6 Fi} VBC3 VBC7 FL:44 Fp Fi FC6 FL[2] Fi[3] FC4 Fc:7 FC8{ BC2 vd v7 FC7 Fi Fp Fi}}


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

static void Test_S6002C12()
{
  extern Class_Descriptor cd_S6002C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(697,2288)];
    init_test(&cd_S6002C12, buf);
    S6002C12 *dp, &lv = *(dp=new (buf) S6002C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11136,9148), "sizeof(S6002C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C12)");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*), ABISELECT(6400,5248), "S6002C12");
    check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(6704,5492), "S6002C12");
    check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(7000,5736), "S6002C12");
    check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(7464,6136), "S6002C12");
    check_base_class_offset(lv, (S6002C10*), ABISELECT(6704,5492), "S6002C12");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*), ABISELECT(10824,8888), "S6002C12");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(10824,8888), "S6002C12");
    check_base_class_offset(lv, (S6002C8*), ABISELECT(10968,9012), "S6002C12");
    set_bf_and_test(lv, s6002c12f0, ABISELECT(8,4), 0, 44, 1, "S6002C12");
    set_bf_and_test(lv, s6002c12f0, ABISELECT(8,4), 0, 44, hide_sll(1LL<<43), "S6002C12");
    check_field_offset(lv, s6002c12f1, ABISELECT(16,12), "S6002C12.s6002c12f1");
    check_field_offset(lv, s6002c12f2, ABISELECT(24,16), "S6002C12.s6002c12f2");
    check_field_offset(lv, s6002c12f3, ABISELECT(32,20), "S6002C12.s6002c12f3");
    check_field_offset(lv, s6002c12f4, ABISELECT(1584,1304), "S6002C12.s6002c12f4");
    check_field_offset(lv, s6002c12f5, ABISELECT(1600,1320), "S6002C12.s6002c12f5");
    check_field_offset(lv, s6002c12f6, ABISELECT(1616,1332), "S6002C12.s6002c12f6");
    set_bf_and_test(lv, s6002c12f7, ABISELECT(5744,4728), 0, 7, 1, "S6002C12");
    set_bf_and_test(lv, s6002c12f7, ABISELECT(5744,4728), 0, 7, hide_sll(1LL<<6), "S6002C12");
    check_field_offset(lv, s6002c12f8, ABISELECT(5760,4732), "S6002C12.s6002c12f8");
    test_class_info(&lv, &cd_S6002C12);
    dp->~S6002C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C12(Test_S6002C12, "S6002C12", ABISELECT(11136,9148));

#else // __cplusplus

extern void _ZN8S6002C12C1Ev();
extern void _ZN8S6002C12D1Ev();
Name_Map name_map_S6002C12[] = {
  NSPAIR(_ZN8S6002C12C1Ev),
  NSPAIR(_ZN8S6002C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
static Base_Class bases_S6002C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C9,    ABISELECT(6400,5248), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C9,    ABISELECT(6704,5492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(7000,5736), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(7464,6136), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(6704,5492), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C5,    ABISELECT(10824,8888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C8,    ABISELECT(10968,9012), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C12[];
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn6704_N8S6002C12D1Ev,_ZThn5492_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn6704_N8S6002C12D0Ev,_ZThn5492_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY vtc_S6002C12[] = {
  ABISELECT(10968,9012),
  ABISELECT(10824,8888),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-144,-124),
  ABISELECT(-10968,-9012),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern VTBL_ENTRY _ZTV8S6002C12[];
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C12[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__8S6002C12[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTT_ENTRY vtt_S6002C12[] = {
  {&(_ZTV8S6002C12[6]),  6,40},
  {&(_ZTV8S6002C12[11]),  11,40},
  {&(_ZTV8S6002C12[21]),  21,40},
  {&(_ZTV8S6002C12[27]),  27,40},
  {&(_ZTV8S6002C12[32]),  32,40},
  {&(_ZTV8S6002C12[36]),  36,40},
  {&(_ZTV8S6002C12[40]),  40,40},
  {&(_tg__ZTV7S6002C8__8S6002C12[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__8S6002C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S6002C12D0Ev,_ZThn5492_N8S6002C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N8S6002C12D1Ev,_ZThn5492_N8S6002C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C12 = {  "S6002C12", // class name
  bases_S6002C12, 7,
  &(vtc_S6002C12[0]), // expected_vtbl_contents
  &(vtt_S6002C12[0]), // expected_vtt_contents
  ABISELECT(11136,9148), // object size
  NSPAIRA(_ZTI8S6002C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6002C12),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6002C12),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C11  : virtual S6002C10 , virtual S6002C5 , virtual S6002C8 , S6002C7 , S6002C12 {
  ::S6002C10 s6002c11f0;
  __tsi64 s6002c11f1;
  char s6002c11f2:7;
  virtual void  v7(); // _ZN8S6002C112v7Ev
  ~S6002C11(); // tgen
  S6002C11(); // tgen
};
//SIG(-1 S6002C11) C1{ VBC2{ BC3{ v2 FL FD Fp Fc FC4{ v6 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC5{ v3 v4 v5 Fi[2] FL[2] FC4[3]} BC4 vd v7 FL[2] Fp[8] FC6{ BC4 VBC5 VBC7{ VBC4 Fp FC4 Fi:3} VBC3 FC3 Fs Fi[2]} Fp Fi FC6 Fi} VBC4 VBC7 BC6 BC8{ VBC3 VBC2 VBC4 VBC7 FL:44 Fp Fi FC6 FL[2] Fi[3] FC2 Fc:7 FC9{ BC3 vd v8 FC7 Fi Fp Fi}} v1 FC2 FL Fc:7}


void  S6002C11 ::v7(){vfunc_called(this, "_ZN8S6002C112v7Ev");}
S6002C11 ::~S6002C11(){ note_dtor("S6002C11", this);} // tgen
S6002C11 ::S6002C11(){ note_ctor("S6002C11", this);} // tgen

static void Test_S6002C11()
{
  extern Class_Descriptor cd_S6002C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1014,3335)];
    init_test(&cd_S6002C11, buf);
    S6002C11 *dp, &lv = *(dp=new (buf) S6002C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16208,13336), "sizeof(S6002C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C11)");
    check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(11008,9036), "S6002C11");
    check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(11304,9280), "S6002C11");
    check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(11768,9680), "S6002C11");
    check_base_class_offset(lv, (S6002C10*), ABISELECT(11008,9036), "S6002C11");
    check_base_class_offset(lv, (S6002C10*)(S6002C12*), ABISELECT(11008,9036), "S6002C11");
    /*is_ambiguous_... S6002C11::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*), ABISELECT(15128,12432), "S6002C11");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(15128,12432), "S6002C11");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*), ABISELECT(15128,12432), "S6002C11");
    check_base_class_offset(lv, (S6002C8*), ABISELECT(15272,12556), "S6002C11");
    check_base_class_offset(lv, (S6002C8*)(S6002C7*), ABISELECT(15272,12556), "S6002C11");
    check_base_class_offset(lv, (S6002C8*)(S6002C12*), ABISELECT(15272,12556), "S6002C11");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*), 0, "S6002C11");
    check_base_class_offset(lv, (S6002C4*)(S6002C7*), ABISELECT(15440,12692), "S6002C11");
    check_base_class_offset(lv, (S6002C9*)(S6002C7*), ABISELECT(15904,13092), "S6002C11");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*), ABISELECT(15904,13092), "S6002C11");
    check_base_class_offset(lv, (S6002C7*), 0, "S6002C11");
    check_base_class_offset(lv, (S6002C12*), ABISELECT(464,380), "S6002C11");
    check_field_offset(lv, s6002c11f0, ABISELECT(6864,5628), "S6002C11.s6002c11f0");
    check_field_offset(lv, s6002c11f1, ABISELECT(10992,9024), "S6002C11.s6002c11f1");
    set_bf_and_test(lv, s6002c11f2, ABISELECT(11000,9032), 0, 7, 1, "S6002C11");
    set_bf_and_test(lv, s6002c11f2, ABISELECT(11000,9032), 0, 7, hide_sll(1LL<<6), "S6002C11");
    test_class_info(&lv, &cd_S6002C11);
    dp->~S6002C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C11(Test_S6002C11, "S6002C11", ABISELECT(16208,13336));

#else // __cplusplus

extern void _ZN8S6002C11C1Ev();
extern void _ZN8S6002C11D1Ev();
Name_Map name_map_S6002C11[] = {
  NSPAIR(_ZN8S6002C11C1Ev),
  NSPAIR(_ZN8S6002C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
static Base_Class bases_S6002C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C9,    ABISELECT(11008,9036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6002C4,    ABISELECT(11304,9280), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(11768,9680), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(11008,9036), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C5,    ABISELECT(15128,12432), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C8,    ABISELECT(15272,12556), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(15440,12692), //bcp->offset
    47, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6002C9,    ABISELECT(15904,13092), //bcp->offset
    55, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6002C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C12,    ABISELECT(464,380), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C11[];
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void _ZN8S6002C11D1Ev();
extern void _ZN8S6002C11D0Ev();
extern void ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev)();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY vtc_S6002C11[] = {
  ABISELECT(11008,9036),
  ABISELECT(15904,13092),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D0Ev,
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(15440,12712),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  0,
  ABISELECT(-15904,-13092),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S6002C11[];
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__8S6002C11[] = {
  ABISELECT(15904,13092),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C7__8S6002C11[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C7__8S6002C11[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C7__8S6002C11[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C7__8S6002C11[] = {
  0,
  ABISELECT(-15904,-13092),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C11[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(15440,12712),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C12__8S6002C11[] = {
  0,
  ABISELECT(-15440,-12712),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C12__8S6002C11[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C12__8S6002C11[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C12__8S6002C11[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C12__8S6002C11[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C12__8S6002C11[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C11[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__8S6002C11[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTT_ENTRY vtt_S6002C11[] = {
  {&(_ZTV8S6002C11[7]),  7,59},
  {&(_tg__ZTV7S6002C7__8S6002C11[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C7__8S6002C11[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C7__8S6002C11[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C7__8S6002C11[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C7__8S6002C11[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C11[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C12__8S6002C11[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C12__8S6002C11[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C12__8S6002C11[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C12__8S6002C11[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C12__8S6002C11[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C12__8S6002C11[3]),  3,3},
  {&(_ZTV8S6002C11[28]),  28,59},
  {&(_ZTV8S6002C11[34]),  34,59},
  {&(_ZTV8S6002C11[39]),  39,59},
  {&(_ZTV8S6002C11[43]),  43,59},
  {&(_ZTV8S6002C11[47]),  47,59},
  {&(_ZTV8S6002C11[52]),  52,59},
  {&(_ZTV8S6002C11[58]),  58,59},
  {&(_ZTV8S6002C11[17]),  17,59},
  {&(_tg__ZTV7S6002C8__8S6002C11[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__8S6002C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6002C11[];
extern  VTBL_ENTRY _ZTV8S6002C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C11[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C11 = {  "S6002C11", // class name
  bases_S6002C11, 11,
  &(vtc_S6002C11[0]), // expected_vtbl_contents
  &(vtt_S6002C11[0]), // expected_vtt_contents
  ABISELECT(16208,13336), // object size
  NSPAIRA(_ZTI8S6002C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6002C11),59, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6002C11),23, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C15  : virtual S6002C9 , S6002C4 , virtual S6002C11 {
  char s6002c15f0:8;
  int s6002c15f1;
  ~S6002C15(); // tgen
  S6002C15(); // tgen
};
//SIG(-1 S6002C15) C1{ VBC2{ v1 FL FD Fp Fc FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC4{ v2 v3 v4 Fi[2] FL[2] FC3[3]} VBC5{ VBC6{ BC2 BC4 BC3 vd v6 FL[2] Fp[8] FC7{ BC3 VBC4 VBC8{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC7 Fi} VBC3 VBC8 BC7 BC9{ VBC2 VBC6 VBC3 VBC8 FL:44 Fp Fi FC7 FL[2] Fi[3] FC6 Fc:7 FC10{ BC2 vd v8 FC8 Fi Fp Fi}} v7 FC6 FL Fc:7} Fc:8 Fi}


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

static void Test_S6002C15()
{
  extern Class_Descriptor cd_S6002C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1044,3437)];
    init_test(&cd_S6002C15, buf);
    S6002C15 *dp, &lv = *(dp=new (buf) S6002C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16688,13744), "sizeof(S6002C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C15)");
    /*is_ambiguous_... S6002C15::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*), ABISELECT(480,408), "S6002C15");
    check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C11*), ABISELECT(480,408), "S6002C15");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C11*), ABISELECT(480,408), "S6002C15");
    /*is_ambiguous_... S6002C15::S6002C4 */ AMB_check_base_class_offset(lv, (S6002C4*), 0, "S6002C15");
    check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(11792,9688), "S6002C15");
    check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(12088,9932), "S6002C15");
    check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(12552,10332), "S6002C15");
    check_base_class_offset(lv, (S6002C10*)(S6002C11*), ABISELECT(11792,9688), "S6002C15");
    check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C11*), ABISELECT(11792,9688), "S6002C15");
    /*is_ambiguous_... S6002C11::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C11*), ABISELECT(15912,13084), "S6002C15");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(15912,13084), "S6002C15");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C11*), ABISELECT(15912,13084), "S6002C15");
    check_base_class_offset(lv, (S6002C8*)(S6002C11*), ABISELECT(16056,13208), "S6002C15");
    check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C11*), ABISELECT(16056,13208), "S6002C15");
    check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C11*), ABISELECT(16056,13208), "S6002C15");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C11*), ABISELECT(784,652), "S6002C15");
    check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C11*), ABISELECT(16224,13344), "S6002C15");
    check_base_class_offset(lv, (S6002C7*)(S6002C11*), ABISELECT(784,652), "S6002C15");
    check_base_class_offset(lv, (S6002C12*)(S6002C11*), ABISELECT(1248,1032), "S6002C15");
    check_base_class_offset(lv, (S6002C11*), ABISELECT(784,652), "S6002C15");
    set_bf_and_test(lv, s6002c15f0, ABISELECT(464,400), 0, 8, 1, "S6002C15");
    set_bf_and_test(lv, s6002c15f0, ABISELECT(464,400), 0, 8, hide_sll(1LL<<7), "S6002C15");
    check_field_offset(lv, s6002c15f1, ABISELECT(468,404), "S6002C15.s6002c15f1");
    test_class_info(&lv, &cd_S6002C15);
    dp->~S6002C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C15(Test_S6002C15, "S6002C15", ABISELECT(16688,13744));

#else // __cplusplus

extern void _ZN8S6002C15C1Ev();
extern void _ZN8S6002C15D1Ev();
Name_Map name_map_S6002C15[] = {
  NSPAIR(_ZN8S6002C15C1Ev),
  NSPAIR(_ZN8S6002C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C11;
extern VTBL_ENTRY _ZTI8S6002C11[];
extern  VTBL_ENTRY _ZTV8S6002C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C11[];
static Base_Class bases_S6002C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C9,    ABISELECT(480,408), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S6002C9,    ABISELECT(11792,9688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(12088,9932), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(12552,10332), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(11792,9688), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(15912,13084), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6002C8,    ABISELECT(16056,13208), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(784,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(16224,13344), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6002C7,    ABISELECT(784,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6002C12,    ABISELECT(1248,1032), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6002C11,    ABISELECT(784,652), //bcp->offset
    17, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C15[];
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN8S6002C15D1Ev();
extern void _ZN8S6002C15D0Ev();
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn784_N8S6002C15D1Ev,_ZThn652_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn784_N8S6002C15D0Ev,_ZThn652_N8S6002C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev)();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn11792_N8S6002C15D1Ev,_ZThn9688_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn11792_N8S6002C15D0Ev,_ZThn9688_N8S6002C15D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY vtc_S6002C15[] = {
  ABISELECT(16224,13344),
  ABISELECT(16056,13208),
  ABISELECT(15912,13084),
  ABISELECT(11792,9688),
  ABISELECT(784,652),
  ABISELECT(480,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D0Ev,
  0,
  ABISELECT(-480,-408),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  ABISELECT(-784,-652),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-784,-652),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev),
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-1248,-1032),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11792,-9688),
  0,
  ABISELECT(-11792,-9688),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-12088,-9932),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-12552,-10332),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-15912,-13084),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-144,-124),
  ABISELECT(-16056,-13208),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  0,
  0,
  0,
  ABISELECT(-16224,-13344),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S6002C15[];
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void _ZN8S6002C11D1Ev();
extern void _ZN8S6002C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C15[] = {
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D0Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C11__8S6002C15[] = {
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C11__8S6002C15[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C11__8S6002C15[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C11__8S6002C15[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C11__8S6002C15[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C15[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C11__8S6002C15[] = {
  0,
  ABISELECT(768,624),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C11__8S6002C15[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__8S6002C15[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__8S6002C15[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C11__8S6002C15[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C11__8S6002C15[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C11__8S6002C15[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C11__8S6002C15[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C11__8S6002C15[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C11__8S6002C15[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C11__8S6002C15[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A1__8S6002C11__8S6002C15[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__A1__8S6002C11__8S6002C15[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C11__8S6002C15[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C15[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__8S6002C15[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTT_ENTRY vtt_S6002C15[] = {
  {&(_ZTV8S6002C15[8]),  8,75},
  {&(_ZTV8S6002C15[16]),  16,75},
  {&(_ZTV8S6002C15[27]),  27,75},
  {&(_ZTV8S6002C15[48]),  48,75},
  {&(_ZTV8S6002C15[54]),  54,75},
  {&(_ZTV8S6002C15[59]),  59,75},
  {&(_ZTV8S6002C15[63]),  63,75},
  {&(_ZTV8S6002C15[67]),  67,75},
  {&(_ZTV8S6002C15[72]),  72,75},
  {&(_ZTV8S6002C15[37]),  37,75},
  {&(_tg__ZTV8S6002C11__8S6002C15[7]),  7,11},
  {&(_tg__ZTV7S6002C78S6002C11__8S6002C15[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C11__8S6002C15[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C11__8S6002C15[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C11__8S6002C15[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C11__8S6002C15[3]),  3,4},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C15[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C11__8S6002C15[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C11__8S6002C15[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__8S6002C15[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__8S6002C15[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C11__8S6002C15[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C11__8S6002C15[3]),  3,3},
  {&(_tg__ZTV8S6002C10__8S6002C11__8S6002C15[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C11__8S6002C15[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C11__8S6002C15[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C11__8S6002C15[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C11__8S6002C15[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A1__8S6002C11__8S6002C15[5]),  5,8},
  {&(_tg__ZTV7S6002C9__A1__8S6002C11__8S6002C15[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C11__8S6002C15[6]),  6,8},
  {&(_tg__ZTV7S6002C8__8S6002C15[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__8S6002C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6002C15[];
extern  VTBL_ENTRY _ZTV8S6002C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C15[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N8S6002C15D0Ev,_ZThn9688_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N8S6002C15D1Ev,_ZThn9688_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S6002C15D0Ev,_ZThn652_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S6002C15D1Ev,_ZThn652_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C15 = {  "S6002C15", // class name
  bases_S6002C15, 13,
  &(vtc_S6002C15[0]), // expected_vtbl_contents
  &(vtt_S6002C15[0]), // expected_vtt_contents
  ABISELECT(16688,13744), // object size
  NSPAIRA(_ZTI8S6002C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6002C15),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6002C15),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C6  : virtual S6002C5 , virtual S6002C7 , S6002C10 , S6002C11 {
  ::S6002C12 s6002c6f0;
  short s6002c6f1;
  int s6002c6f2:8;
  virtual void  v8(); // _ZN7S6002C62v8Ev
  virtual void  v9(); // _ZN7S6002C62v9Ev
  ~S6002C6(); // tgen
  S6002C6(); // tgen
};
//SIG(-1 S6002C6) C1{ VBC2{ v3 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ BC2 VBC4{ v4 v5 v6 Fi[2] FL[2] FC2[3]} VBC5{ VBC2 Fp FC2 Fi:3} VBC6{ v7 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} FC6 Fs Fi[2]} BC7{ BC6 BC4 BC2 vd v8 FL[2] Fp[8] FC3 Fp Fi FC3 Fi} BC8{ VBC7 VBC2 VBC5 BC3 BC9{ VBC6 VBC7 VBC2 VBC5 FL:44 Fp Fi FC3 FL[2] Fi[3] FC7 Fc:7 FC10{ BC6 vd v10 FC5 Fi Fp Fi}} v9 FC7 FL Fc:7} v1 v2 FC9 Fs Fi:8}


void  S6002C6 ::v8(){vfunc_called(this, "_ZN7S6002C62v8Ev");}
void  S6002C6 ::v9(){vfunc_called(this, "_ZN7S6002C62v9Ev");}
S6002C6 ::~S6002C6(){ note_dtor("S6002C6", this);} // tgen
S6002C6 ::S6002C6(){ note_ctor("S6002C6", this);} // tgen

static void Test_S6002C6()
{
  extern Class_Descriptor cd_S6002C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1999,6567)];
    init_test(&cd_S6002C6, buf);
    S6002C6 *dp, &lv = *(dp=new (buf) S6002C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31968,26264), "sizeof(S6002C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C6)");
    /*is_ambiguous_... S6002C6::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*), ABISELECT(26280,21584), "S6002C6");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(26280,21584), "S6002C6");
    /*is_ambiguous_... S6002C11::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C11*), ABISELECT(26280,21584), "S6002C6");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C11*), ABISELECT(26280,21584), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*), ABISELECT(26432,21708), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C7*), ABISELECT(26896,22088), "S6002C6");
    check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C11*), ABISELECT(26896,22088), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C7*), ABISELECT(27360,22488), "S6002C6");
    check_base_class_offset(lv, (S6002C8*)(S6002C11*), ABISELECT(27360,22488), "S6002C6");
    check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C11*), ABISELECT(27360,22488), "S6002C6");
    check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C11*), ABISELECT(27360,22488), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C7*), ABISELECT(27536,22624), "S6002C6");
    check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C11*), ABISELECT(27536,22624), "S6002C6");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C11*), ABISELECT(27536,22624), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C7*), ABISELECT(26432,21708), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C10*), 0, "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(296,244), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(760,644), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C10*), 0, "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(27840,22868), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(28136,23112), "S6002C6");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(28600,23512), "S6002C6");
    check_base_class_offset(lv, (S6002C10*)(S6002C11*), ABISELECT(27840,22868), "S6002C6");
    check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C11*), ABISELECT(27840,22868), "S6002C6");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C11*), ABISELECT(4128,3396), "S6002C6");
    check_base_class_offset(lv, (S6002C7*)(S6002C11*), ABISELECT(4128,3396), "S6002C6");
    check_base_class_offset(lv, (S6002C12*)(S6002C11*), ABISELECT(4592,3776), "S6002C6");
    check_base_class_offset(lv, (S6002C11*), ABISELECT(4128,3396), "S6002C6");
    check_field_offset(lv, s6002c6f0, ABISELECT(15136,12432), "S6002C6.s6002c6f0");
    check_field_offset(lv, s6002c6f1, ABISELECT(26272,21580), "S6002C6.s6002c6f1");
    set_bf_and_test(lv, s6002c6f2, ABISELECT(26274,21582), 0, 8, 1, "S6002C6");
    set_bf_and_test(lv, s6002c6f2, ABISELECT(26274,21582), 0, 8, hide_sll(1LL<<7), "S6002C6");
    test_class_info(&lv, &cd_S6002C6);
    dp->~S6002C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C6(Test_S6002C6, "S6002C6", ABISELECT(31968,26264));

#else // __cplusplus

extern void _ZN7S6002C6C1Ev();
extern void _ZN7S6002C6D1Ev();
Name_Map name_map_S6002C6[] = {
  NSPAIR(_ZN7S6002C6C1Ev),
  NSPAIR(_ZN7S6002C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C11;
extern VTBL_ENTRY _ZTI8S6002C11[];
extern  VTBL_ENTRY _ZTV8S6002C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C11[];
static Base_Class bases_S6002C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C5,    ABISELECT(26280,21584), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C5,    ABISELECT(26432,21708), //bcp->offset
    -1, //bcp->virtual_function_table_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_S6002C4,    ABISELECT(26896,22088), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6002C8,    ABISELECT(27360,22488), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6002C9,    ABISELECT(27536,22624), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6002C7,    ABISELECT(26432,21708), //bcp->offset
    45, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(296,244), //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
    12, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(760,644), //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
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6002C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C9,    ABISELECT(27840,22868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(28136,23112), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(28600,23512), //bcp->offset
    86, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(27840,22868), //bcp->offset
    68, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6002C12,    ABISELECT(4592,3776), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6002C11,    ABISELECT(4128,3396), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6002C6[];
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C6D1Ev();
extern void _ZN7S6002C6D0Ev();
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C62v8Ev();
extern void _ZN7S6002C62v9Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZThn4128_N7S6002C6D1Ev,_ZThn3396_N7S6002C6D1Ev)();
extern void ABISELECT(_ZThn4128_N7S6002C6D0Ev,_ZThn3396_N7S6002C6D0Ev)();
extern void ABISELECT(_ZThn4592_N7S6002C6D1Ev,_ZThn3776_N7S6002C6D1Ev)();
extern void ABISELECT(_ZThn4592_N7S6002C6D0Ev,_ZThn3776_N7S6002C6D0Ev)();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N7S6002C6D1Ev,_ZTv0_n16_N7S6002C6D1Ev)();
extern void ABISELECT(_ZThn27840_N7S6002C6D1Ev,_ZThn22868_N7S6002C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6002C6D0Ev,_ZTv0_n16_N7S6002C6D0Ev)();
extern void ABISELECT(_ZThn27840_N7S6002C6D0Ev,_ZThn22868_N7S6002C6D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY vtc_S6002C6[] = {
  ABISELECT(27840,22868),
  ABISELECT(27536,22624),
  ABISELECT(27360,22488),
  ABISELECT(26896,22088),
  ABISELECT(26432,21708),
  ABISELECT(26280,21584),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&_ZN7S6002C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6002C6D0Ev,
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v8Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v9Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(23712,19472),
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N7S6002C6D1Ev,_ZThn3396_N7S6002C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N7S6002C6D0Ev,_ZThn3396_N7S6002C6D0Ev),
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N7S6002C6D1Ev,_ZThn3776_N7S6002C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N7S6002C6D0Ev,_ZThn3776_N7S6002C6D0Ev),
  0,
  ABISELECT(-26280,-21584),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-26432,-21708),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  0,
  0,
  ABISELECT(-26896,-22088),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-1080,-904),
  ABISELECT(-27360,-22488),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  0,
  ABISELECT(-27536,-22624),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-27840,-22868),
  0,
  ABISELECT(-27840,-22868),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6002C6D1Ev,_ZTv0_n16_N7S6002C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6002C6D0Ev,_ZTv0_n16_N7S6002C6D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-28136,-23112),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-28600,-23512),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern VTBL_ENTRY _ZTV7S6002C6[];
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void _ZN8S6002C11D1Ev();
extern void _ZN8S6002C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C11__7S6002C6[] = {
  ABISELECT(23712,19472),
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D0Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C11__A1__7S6002C6[] = {
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C11__A1__7S6002C6[] = {
  0,
  0,
  0,
  ABISELECT(-22768,-18692),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C11__A1__7S6002C6[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-23232,-19092),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C11__A1__7S6002C6[] = {
  0,
  ABISELECT(-22152,-18188),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C11__A1__7S6002C6[] = {
  0,
  ABISELECT(-23408,-19228),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__7S6002C6[] = {
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C11__7S6002C6[] = {
  0,
  ABISELECT(-22944,-18848),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn23248_N8S6002C12D1Ev,_ZThn19092_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn23248_N8S6002C12D0Ev,_ZThn19092_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C11__7S6002C6[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-23248,-19092),
  0,
  ABISELECT(-23248,-19092),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__7S6002C6[] = {
  ABISELECT(-23544,-19336),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__7S6002C6[] = {
  ABISELECT(-24008,-19736),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C11__7S6002C6[] = {
  0,
  ABISELECT(-21688,-17808),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C11__7S6002C6[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-22768,-18712),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn23712_N8S6002C11D1Ev,_ZThn19472_N8S6002C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev)();
extern void ABISELECT(_ZThn23712_N8S6002C11D0Ev,_ZThn19472_N8S6002C11D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C11__7S6002C6[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-23712,-19472),
  0,
  ABISELECT(-23712,-19472),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C11__7S6002C6[] = {
  ABISELECT(-24008,-19716),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C11__7S6002C6[] = {
  ABISELECT(-24472,-20116),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C11__7S6002C6[] = {
  0,
  ABISELECT(-22152,-18188),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C11__7S6002C6[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-23232,-19092),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A1__8S6002C11__7S6002C6[] = {
  0,
  0,
  0,
  ABISELECT(-22768,-18692),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__A1__8S6002C11__7S6002C6[] = {
  0,
  ABISELECT(-23408,-19228),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C11__7S6002C6[] = {
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__7S6002C6[] = {
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C7__7S6002C6[] = {
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C7__7S6002C6[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C7__7S6002C6[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C7__7S6002C6[] = {
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C6[] = {
  ABISELECT(-1080,-904),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__7S6002C6[] = {
  0,
  ABISELECT(1080,904),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTT_ENTRY vtt_S6002C6[] = {
  {&(_ZTV7S6002C6[8]),  8,89},
  {&(_tg__ZTV8S6002C11__7S6002C6[7]),  7,11},
  {&(_tg__ZTV7S6002C78S6002C11__A1__7S6002C6[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C11__A1__7S6002C6[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C11__A1__7S6002C6[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C11__A1__7S6002C6[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C11__A1__7S6002C6[3]),  3,4},
  {&(_tg__ZTV8S6002C128S6002C11__7S6002C6[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C11__7S6002C6[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C11__7S6002C6[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__7S6002C6[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__7S6002C6[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C11__7S6002C6[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C11__7S6002C6[3]),  3,3},
  {&(_tg__ZTV8S6002C10__8S6002C11__7S6002C6[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C11__7S6002C6[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C11__7S6002C6[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C11__7S6002C6[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C11__7S6002C6[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A1__8S6002C11__7S6002C6[5]),  5,8},
  {&(_tg__ZTV7S6002C9__A1__8S6002C11__7S6002C6[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C11__7S6002C6[6]),  6,8},
  {&(_ZTV7S6002C6[44]),  44,89},
  {&(_ZTV7S6002C6[52]),  52,89},
  {&(_ZTV7S6002C6[58]),  58,89},
  {&(_ZTV7S6002C6[64]),  64,89},
  {&(_ZTV7S6002C6[67]),  67,89},
  {&(_ZTV7S6002C6[29]),  29,89},
  {&(_ZTV7S6002C6[77]),  77,89},
  {&(_ZTV7S6002C6[83]),  83,89},
  {&(_ZTV7S6002C6[88]),  88,89},
  {&(_ZTV7S6002C6[39]),  39,89},
  {&(_tg__ZTV7S6002C7__7S6002C6[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C7__7S6002C6[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C7__7S6002C6[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C7__7S6002C6[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C7__7S6002C6[3]),  3,4},
  {&(_tg__ZTV7S6002C8__7S6002C6[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__7S6002C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6002C6[];
extern  VTBL_ENTRY _ZTV7S6002C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C6[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23712_N8S6002C11D0Ev,_ZThn19472_N8S6002C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23712_N8S6002C11D1Ev,_ZThn19472_N8S6002C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23248_N8S6002C12D0Ev,_ZThn19092_N8S6002C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23248_N8S6002C12D1Ev,_ZThn19092_N8S6002C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6002C6D0Ev,_ZTv0_n16_N7S6002C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27840_N7S6002C6D0Ev,_ZThn22868_N7S6002C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6002C6D1Ev,_ZTv0_n16_N7S6002C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27840_N7S6002C6D1Ev,_ZThn22868_N7S6002C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C6 = {  "S6002C6", // class name
  bases_S6002C6, 18,
  &(vtc_S6002C6[0]), // expected_vtbl_contents
  &(vtt_S6002C6[0]), // expected_vtt_contents
  ABISELECT(31968,26264), // object size
  NSPAIRA(_ZTI7S6002C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6002C6),89, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6002C6),39, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S6002C18  {
  __tsi64 s6002c18f0;
  int s6002c18f1;
  __tsi64 s6002c18f2;
  short s6002c18f3;
  int s6002c18f4;
  void  mf6002c18(); // _ZN8S6002C189mf6002c18Ev
};
//SIG(1 S6002C18) U1{ m FL Fi FL Fs Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S6002C17  : virtual S6002C4 , S6002C15 , virtual S6002C6 , S6002C12 , S6002C13 {
  ::S6002C18 s6002c17f0;
  __tsi64 s6002c17f1;
  long double s6002c17f2;
  void *s6002c17f3;
  __tsi64 s6002c17f4;
  int s6002c17f5;
  ::S6002C15 s6002c17f6;
  int s6002c17f7;
  ::S6002C5 s6002c17f8;
  virtual  ~S6002C17(); // _ZN8S6002C17D2Ev
  S6002C17(); // tgen
};
//SIG(-1 S6002C17) C1{ VBC2{ v1 v2 v3 Fi[2] FL[2] FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp}[3]} BC4{ VBC5{ v4 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} BC2 VBC6{ VBC7{ BC5 BC2 BC3 vd v6 FL[2] Fp[8] FC8{ BC3 VBC2 VBC9{ VBC3 Fp FC3 Fi:3} VBC5 FC5 Fs Fi[2]} Fp Fi FC8 Fi} VBC3 VBC9 BC8 BC10{ VBC5 VBC7 VBC3 VBC9 FL:44 Fp Fi FC8 FL[2] Fi[3] FC7 Fc:7 FC11{ BC5 vd v10 FC9 Fi Fp Fi}} v7 FC7 FL Fc:7} Fc:8 Fi} VBC12{ VBC3 VBC8 BC7 BC6 v8 v9 FC10 Fs Fi:8} BC10 BC11 vd FU13{ m FL Fi FL Fs Fi} FL FD Fp FL Fi FC4 Fi FC3}


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

static void Test_S6002C17()
{
  extern Class_Descriptor cd_S6002C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4213,13848)];
    init_test(&cd_S6002C17, buf);
    S6002C17 *dp, &lv = *(dp=new (buf) S6002C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(67392,55388), "sizeof(S6002C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C17)");
    /*is_ambiguous_... S6002C17::S6002C4 */ AMB_check_base_class_offset(lv, (S6002C4*), ABISELECT(24424,20088), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C11*), ABISELECT(24424,20088), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C7*), ABISELECT(24424,20088), "S6002C17");
    check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(24424,20088), "S6002C17");
    /*is_ambiguous_... S6002C15::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C15*), ABISELECT(24896,20488), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C11*), ABISELECT(24896,20488), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C11*), ABISELECT(24896,20488), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C7*), ABISELECT(24896,20488), "S6002C17");
    check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(24896,20488), "S6002C17");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(24896,20488), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*), ABISELECT(24896,20488), "S6002C17");
    /*is_ambiguous_... S6002C15::S6002C4 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C15*), 0, "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(36208,29768), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(36504,30012), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(36968,30412), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C10*)(S6002C11*), ABISELECT(36208,29768), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C11*), ABISELECT(36208,29768), "S6002C17");
    check_base_class_offset(lv, (S6002C10*)(S6002C11*)(S6002C6*), ABISELECT(36208,29768), "S6002C17");
    check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(36208,29768), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C10*)(S6002C12*), ABISELECT(36208,29768), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C11*), ABISELECT(40328,33164), "S6002C17");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(40328,33164), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C11*), ABISELECT(40328,33164), "S6002C17");
    /*is_ambiguous_... S6002C6::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C6*), ABISELECT(40328,33164), "S6002C17");
    /*is_ambiguous_... S6002C11::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C11*)(S6002C6*), ABISELECT(40328,33164), "S6002C17");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(40328,33164), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*), ABISELECT(40328,33164), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C11*), ABISELECT(40472,33288), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C11*), ABISELECT(40472,33288), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C11*), ABISELECT(40472,33288), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C7*), ABISELECT(40472,33288), "S6002C17");
    check_base_class_offset(lv, (S6002C8*)(S6002C11*)(S6002C6*), ABISELECT(40472,33288), "S6002C17");
    check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(40472,33288), "S6002C17");
    check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(40472,33288), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C12*), ABISELECT(40472,33288), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C11*), ABISELECT(25200,20732), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C7*)(S6002C11*), ABISELECT(25200,20732), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C12*)(S6002C11*), ABISELECT(25664,21112), "S6002C17");
    check_base_class_offset(lv, (S6002C11*)(S6002C15*), ABISELECT(25200,20732), "S6002C17");
    check_base_class_offset(lv, (S6002C15*), 0, "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*), ABISELECT(66928,55008), "S6002C17");
    /*is_ambiguous_... S6002C6::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C7*)(S6002C6*), ABISELECT(66928,55008), "S6002C17");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C10*)(S6002C6*), ABISELECT(40640,33424), "S6002C17");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C10*)(S6002C6*), ABISELECT(40936,33668), "S6002C17");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C10*)(S6002C6*), ABISELECT(41400,34068), "S6002C17");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C10*)(S6002C6*), ABISELECT(40640,33424), "S6002C17");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(44768,36820), "S6002C17");
    check_base_class_offset(lv, (S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(44768,36820), "S6002C17");
    check_base_class_offset(lv, (S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(45232,37200), "S6002C17");
    check_base_class_offset(lv, (S6002C11*)(S6002C6*), ABISELECT(44768,36820), "S6002C17");
    check_base_class_offset(lv, (S6002C6*), ABISELECT(40640,33424), "S6002C17");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C12*), ABISELECT(480,408), "S6002C17");
    check_base_class_offset(lv, (S6002C9*)(S6002C13*), ABISELECT(6880,5656), "S6002C17");
    check_base_class_offset(lv, (S6002C13*), ABISELECT(6880,5656), "S6002C17");
    check_field_offset(lv, s6002c17f0, ABISELECT(7512,6172), "S6002C17.s6002c17f0");
    check_field_offset(lv, s6002c17f1, ABISELECT(7520,6180), "S6002C17.s6002c17f1");
    check_field_offset(lv, s6002c17f2, ABISELECT(7536,6188), "S6002C17.s6002c17f2");
    check_field_offset(lv, s6002c17f3, ABISELECT(7552,6200), "S6002C17.s6002c17f3");
    check_field_offset(lv, s6002c17f4, ABISELECT(7560,6204), "S6002C17.s6002c17f4");
    check_field_offset(lv, s6002c17f5, ABISELECT(7568,6212), "S6002C17.s6002c17f5");
    check_field_offset(lv, s6002c17f6, ABISELECT(7584,6216), "S6002C17.s6002c17f6");
    check_field_offset(lv, s6002c17f7, ABISELECT(24272,19960), "S6002C17.s6002c17f7");
    check_field_offset(lv, s6002c17f8, ABISELECT(24280,19964), "S6002C17.s6002c17f8");
    test_class_info(&lv, &cd_S6002C17);
    dp->~S6002C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C17(Test_S6002C17, "S6002C17", ABISELECT(67392,55388));

#else // __cplusplus

extern void _ZN8S6002C17C1Ev();
extern void _ZN8S6002C17D2Ev();
Name_Map name_map_S6002C17[] = {
  NSPAIR(_ZN8S6002C17C1Ev),
  NSPAIR(_ZN8S6002C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C11;
extern VTBL_ENTRY _ZTI8S6002C11[];
extern  VTBL_ENTRY _ZTV8S6002C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C11[];
extern Class_Descriptor cd_S6002C15;
extern VTBL_ENTRY _ZTI8S6002C15[];
extern  VTBL_ENTRY _ZTV8S6002C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C15[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C11;
extern VTBL_ENTRY _ZTI8S6002C11[];
extern  VTBL_ENTRY _ZTV8S6002C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C11[];
extern Class_Descriptor cd_S6002C6;
extern VTBL_ENTRY _ZTI7S6002C6[];
extern  VTBL_ENTRY _ZTV7S6002C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C6[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C13;
extern VTBL_ENTRY _ZTI8S6002C13[];
extern  VTBL_ENTRY _ZTV8S6002C13[];
static Base_Class bases_S6002C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C4,    ABISELECT(24424,20088), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C9,    ABISELECT(24896,20488), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6002C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6002C9,    ABISELECT(36208,29768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(36504,30012), //bcp->offset
    76, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(36968,30412), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(36208,29768), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(40328,33164), //bcp->offset
    84, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6002C8,    ABISELECT(40472,33288), //bcp->offset
    88, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(25200,20732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(25200,20732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6002C12,    ABISELECT(25664,21112), //bcp->offset
    55, //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
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6002C11,    ABISELECT(25200,20732), //bcp->offset
    41, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6002C15,    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
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C5,    ABISELECT(66928,55008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(66928,55008), //bcp->offset
    142, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S6002C9,    ABISELECT(40640,33424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(40936,33668), //bcp->offset
    115, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(41400,34068), //bcp->offset
    120, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(40640,33424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(44768,36820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(44768,36820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6002C12,    ABISELECT(45232,37200), //bcp->offset
    134, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6002C11,    ABISELECT(44768,36820), //bcp->offset
    123, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6002C6,    ABISELECT(40640,33424), //bcp->offset
    91, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C12,    ABISELECT(480,408), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C9,    ABISELECT(6880,5656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6002C13,    ABISELECT(6880,5656), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C17[];
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN8S6002C17D1Ev();
extern void _ZN8S6002C17D0Ev();
extern void ABISELECT(_ZThn480_N8S6002C17D1Ev,_ZThn408_N8S6002C17D1Ev)();
extern void ABISELECT(_ZThn480_N8S6002C17D0Ev,_ZThn408_N8S6002C17D0Ev)();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZThn6880_N8S6002C17D1Ev,_ZThn5656_N8S6002C17D1Ev)();
extern void ABISELECT(_ZThn6880_N8S6002C17D0Ev,_ZThn5656_N8S6002C17D0Ev)();
extern void _ZN8S6002C133v10Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZThn25200_N8S6002C17D1Ev,_ZThn20732_N8S6002C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev)();
extern void ABISELECT(_ZThn25200_N8S6002C17D0Ev,_ZThn20732_N8S6002C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N8S6002C17D1Ev,_ZTvn380_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C17D0Ev,_ZTvn380_n40_N8S6002C17D0Ev)();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C17D1Ev,_ZTv0_n16_N8S6002C17D1Ev)();
extern void ABISELECT(_ZThn36208_N8S6002C17D1Ev,_ZThn29768_N8S6002C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C17D0Ev,_ZTv0_n16_N8S6002C17D0Ev)();
extern void ABISELECT(_ZThn36208_N8S6002C17D0Ev,_ZThn29768_N8S6002C17D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZThn40640_N8S6002C17D1Ev,_ZThn33424_N8S6002C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev)();
extern void ABISELECT(_ZThn40640_N8S6002C17D0Ev,_ZThn33424_N8S6002C17D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C62v8Ev();
extern void _ZN7S6002C62v9Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTvn4128_n80_N8S6002C17D1Ev,_ZTvn3396_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZTvn4128_n80_N8S6002C17D0Ev,_ZTvn3396_n40_N8S6002C17D0Ev)();
extern void ABISELECT(_ZTvn4592_n80_N8S6002C17D1Ev,_ZTvn3776_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZTvn4592_n80_N8S6002C17D0Ev,_ZTvn3776_n40_N8S6002C17D0Ev)();
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY vtc_S6002C17[] = {
  ABISELECT(66928,55008),
  ABISELECT(40640,33424),
  ABISELECT(24424,20088),
  ABISELECT(40472,33288),
  ABISELECT(40328,33164),
  ABISELECT(36208,29768),
  ABISELECT(25200,20732),
  ABISELECT(24896,20488),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&_ZN8S6002C17D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C17D0Ev,
  ABISELECT(39992,32880),
  ABISELECT(39848,32756),
  ABISELECT(35728,29360),
  ABISELECT(24416,20080),
  ABISELECT(-480,-408),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S6002C17D1Ev,_ZThn408_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S6002C17D0Ev,_ZThn408_N8S6002C17D0Ev),
  ABISELECT(-6880,-5656),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn6880_N8S6002C17D1Ev,_ZThn5656_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6880_N8S6002C17D0Ev,_ZThn5656_N8S6002C17D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C133v10Ev,
  0,
  0,
  0,
  ABISELECT(-24424,-20088),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  0,
  ABISELECT(-24896,-20488),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  ABISELECT(-25200,-20732),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(-776,-644),
  ABISELECT(-25200,-20732),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev),
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-25664,-21112),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C17D1Ev,_ZTvn380_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C17D0Ev,_ZTvn380_n40_N8S6002C17D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-36208,-29768),
  0,
  ABISELECT(-36208,-29768),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C17D1Ev,_ZTv0_n16_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C17D0Ev,_ZTv0_n16_N8S6002C17D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-36504,-30012),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-36968,-30412),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-40328,-33164),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-144,-124),
  ABISELECT(-40472,-33288),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  ABISELECT(4128,3396),
  0,
  0,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-40640,-33424),
  0,
  ABISELECT(-4432,-3656),
  ABISELECT(-15744,-12936),
  ABISELECT(-168,-136),
  ABISELECT(-16216,-13336),
  ABISELECT(26288,21584),
  ABISELECT(-312,-260),
  ABISELECT(-40640,-33424),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v8Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v9Ev,
  ABISELECT(-40936,-33668),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-41400,-34068),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-8560,-7052),
  ABISELECT(-19872,-16332),
  ABISELECT(-4440,-3656),
  ABISELECT(-4296,-3532),
  ABISELECT(-20344,-16732),
  ABISELECT(-44768,-36820),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn4128_n80_N8S6002C17D1Ev,_ZTvn3396_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4128_n80_N8S6002C17D0Ev,_ZTvn3396_n40_N8S6002C17D0Ev),
  ABISELECT(-4760,-3912),
  ABISELECT(-4904,-4036),
  ABISELECT(-9024,-7432),
  ABISELECT(-20336,-16712),
  ABISELECT(-45232,-37200),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4592_n80_N8S6002C17D1Ev,_ZTvn3776_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4592_n80_N8S6002C17D0Ev,_ZTvn3776_n40_N8S6002C17D0Ev),
  0,
  ABISELECT(-42032,-34520),
  ABISELECT(-26600,-21844),
  ABISELECT(-26456,-21720),
  ABISELECT(-42504,-34920),
  ABISELECT(-66928,-55008),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S6002C17[];
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN8S6002C15D1Ev();
extern void _ZN8S6002C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C15__8S6002C17[] = {
  ABISELECT(24424,20088),
  ABISELECT(40472,33288),
  ABISELECT(40328,33164),
  ABISELECT(36208,29768),
  ABISELECT(25200,20732),
  ABISELECT(24896,20488),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C15__8S6002C17[] = {
  0,
  ABISELECT(-24896,-20488),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn25200_N8S6002C15D1Ev,_ZThn20732_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn25200_N8S6002C15D0Ev,_ZThn20732_N8S6002C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C15__8S6002C17[] = {
  ABISELECT(-25200,-20732),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(-776,-644),
  ABISELECT(-25200,-20732),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn36208_N8S6002C15D1Ev,_ZThn29768_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn36208_N8S6002C15D0Ev,_ZThn29768_N8S6002C15D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C15__8S6002C17[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-36208,-29768),
  0,
  ABISELECT(-36208,-29768),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__A1__8S6002C15__8S6002C17[] = {
  ABISELECT(-36504,-30012),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C15__8S6002C17[] = {
  ABISELECT(-36968,-30412),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C15__8S6002C17[] = {
  0,
  ABISELECT(-40328,-33164),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C15__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(-40472,-33288),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A2__8S6002C15__8S6002C17[] = {
  0,
  0,
  0,
  ABISELECT(-24424,-20088),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C15__8S6002C17[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-25664,-21112),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev),
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C12__A2__8S6002C17[] = {
  ABISELECT(39992,32880),
  ABISELECT(39848,32756),
  ABISELECT(35728,29360),
  ABISELECT(24416,20080),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C12__A2__8S6002C17[] = {
  0,
  ABISELECT(-24416,-20080),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn35728_N8S6002C12D1Ev,_ZThn29360_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn35728_N8S6002C12D0Ev,_ZThn29360_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C12__A2__8S6002C17[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-35728,-29360),
  0,
  ABISELECT(-35728,-29360),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C12__A2__8S6002C17[] = {
  ABISELECT(-36024,-29604),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C12__A2__8S6002C17[] = {
  ABISELECT(-36488,-30004),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C12__A2__8S6002C17[] = {
  0,
  ABISELECT(-39848,-32756),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C12__A2__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(-39992,-32880),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void _ZN8S6002C11D1Ev();
extern void _ZN8S6002C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C17[] = {
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(-776,-644),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D0Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C11__8S6002C17[] = {
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(-776,-644),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C11__8S6002C17[] = {
  0,
  0,
  0,
  ABISELECT(776,644),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C11__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C11__8S6002C17[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C11__8S6002C17[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C17[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C11__8S6002C17[] = {
  0,
  ABISELECT(768,624),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C11__8S6002C17[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__8S6002C17[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__8S6002C17[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C11__8S6002C17[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C11__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C11__8S6002C17[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C11__8S6002C17[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C11__8S6002C17[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C11__8S6002C17[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C11__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A1__8S6002C11__8S6002C17[] = {
  0,
  0,
  0,
  ABISELECT(776,644),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__A1__8S6002C11__8S6002C17[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C11__8S6002C17[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C17[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__8S6002C17[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C6D1Ev();
extern void _ZN7S6002C6D0Ev();
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C62v8Ev();
extern void _ZN7S6002C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C6__8S6002C17[] = {
  ABISELECT(-4432,-3656),
  ABISELECT(-15744,-12936),
  ABISELECT(-168,-136),
  ABISELECT(-16216,-13336),
  ABISELECT(26288,21584),
  ABISELECT(-312,-260),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&_ZN7S6002C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6002C6D0Ev,
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v8Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v9Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void _ZN8S6002C11D1Ev();
extern void _ZN8S6002C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(-8560,-7052),
  ABISELECT(-19872,-16332),
  ABISELECT(-4440,-3656),
  ABISELECT(-4296,-3532),
  ABISELECT(-20344,-16732),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D0Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C117S6002C6__A2__8S6002C17[] = {
  ABISELECT(-19872,-16332),
  ABISELECT(-4440,-3656),
  ABISELECT(-4296,-3532),
  ABISELECT(-20344,-16732),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C117S6002C6__A2__8S6002C17[] = {
  0,
  0,
  0,
  ABISELECT(20344,16732),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C117S6002C6__A2__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(4296,3532),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C117S6002C6__A2__8S6002C17[] = {
  0,
  ABISELECT(4440,3656),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C117S6002C6__A2__8S6002C17[] = {
  0,
  ABISELECT(19872,16332),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(-4760,-3912),
  ABISELECT(-4904,-4036),
  ABISELECT(-9024,-7432),
  ABISELECT(-20336,-16712),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C117S6002C6__A1__8S6002C17[] = {
  0,
  ABISELECT(20336,16712),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(9024,7432),
  0,
  ABISELECT(9024,7432),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(8728,7188),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(8264,6788),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C117S6002C6__A1__8S6002C17[] = {
  0,
  ABISELECT(4904,4036),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(4760,3912),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev)();
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(8560,7052),
  0,
  ABISELECT(8560,7052),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(8264,6808),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(7800,6408),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C117S6002C6__A1__8S6002C17[] = {
  0,
  ABISELECT(4440,3656),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(4296,3532),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A1__8S6002C117S6002C6__A1__8S6002C17[] = {
  0,
  0,
  0,
  ABISELECT(20344,16732),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__A1__8S6002C117S6002C6__A1__8S6002C17[] = {
  0,
  ABISELECT(19872,16332),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C117S6002C6__A1__8S6002C17[] = {
  ABISELECT(-4760,-3912),
  ABISELECT(-4904,-4036),
  ABISELECT(-9024,-7432),
  ABISELECT(-20336,-16712),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C6__8S6002C17[] = {
  0,
  ABISELECT(312,260),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__7S6002C6__8S6002C17[] = {
  0,
  ABISELECT(-42032,-34520),
  ABISELECT(-26600,-21844),
  ABISELECT(-26456,-21720),
  ABISELECT(-42504,-34920),
  ABISELECT(-26288,-21584),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C6__8S6002C17[] = {
  0,
  0,
  0,
  ABISELECT(16216,13336),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C6__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(168,136),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C6__8S6002C17[] = {
  0,
  ABISELECT(15744,12936),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZThn4128_N7S6002C6D1Ev,_ZThn3396_N7S6002C6D1Ev)();
extern void ABISELECT(_ZThn4128_N7S6002C6D0Ev,_ZThn3396_N7S6002C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C11__7S6002C6__8S6002C17[] = {
  ABISELECT(-8560,-7052),
  ABISELECT(-19872,-16332),
  ABISELECT(-4440,-3656),
  ABISELECT(-4296,-3532),
  ABISELECT(-20344,-16732),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N7S6002C6D1Ev,_ZThn3396_N7S6002C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N7S6002C6D0Ev,_ZThn3396_N7S6002C6D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N7S6002C6D1Ev,_ZTv0_n16_N7S6002C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S6002C6D0Ev,_ZTv0_n16_N7S6002C6D0Ev)();
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__A1__7S6002C6__8S6002C17[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4432,3656),
  0,
  ABISELECT(4432,3656),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6002C6D1Ev,_ZTv0_n16_N7S6002C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6002C6D0Ev,_ZTv0_n16_N7S6002C6D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__A2__7S6002C6__8S6002C17[] = {
  ABISELECT(4136,3412),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__A3__7S6002C6__8S6002C17[] = {
  ABISELECT(3672,3012),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void ABISELECT(_ZThn4592_N7S6002C6D1Ev,_ZThn3776_N7S6002C6D1Ev)();
extern void ABISELECT(_ZThn4592_N7S6002C6D0Ev,_ZThn3776_N7S6002C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__7S6002C6__8S6002C17[] = {
  ABISELECT(-4760,-3912),
  ABISELECT(-4904,-4036),
  ABISELECT(-9024,-7432),
  ABISELECT(-20336,-16712),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N7S6002C6D1Ev,_ZThn3776_N7S6002C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N7S6002C6D0Ev,_ZThn3776_N7S6002C6D0Ev),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__A1__8S6002C17[] = {
  ABISELECT(-42032,-34520),
  ABISELECT(-26600,-21844),
  ABISELECT(-26456,-21720),
  ABISELECT(-42504,-34920),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C7__A1__8S6002C17[] = {
  0,
  0,
  0,
  ABISELECT(42504,34920),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C7__A1__8S6002C17[] = {
  ABISELECT(-144,-124),
  ABISELECT(26456,21720),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C7__A1__8S6002C17[] = {
  0,
  ABISELECT(26600,21844),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C7__A1__8S6002C17[] = {
  0,
  ABISELECT(42032,34520),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
static  VTT_ENTRY vtt_S6002C17[] = {
  {&(_ZTV8S6002C17[10]),  10,150},
  {&(_tg__ZTV8S6002C15__8S6002C17[8]),  8,13},
  {&(_tg__ZTV7S6002C9__8S6002C15__8S6002C17[3]),  3,4},
  {&(_tg__ZTV8S6002C11__8S6002C15__8S6002C17[10]),  10,14},
  {&(_tg__ZTV8S6002C10__8S6002C15__8S6002C17[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__A1__8S6002C15__8S6002C17[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C15__8S6002C17[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C15__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C15__8S6002C17[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A2__8S6002C15__8S6002C17[5]),  5,8},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C15__8S6002C17[6]),  6,8},
  {&(_tg__ZTV8S6002C12__A2__8S6002C17[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C12__A2__8S6002C17[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C12__A2__8S6002C17[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C12__A2__8S6002C17[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C12__A2__8S6002C17[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C12__A2__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C12__A2__8S6002C17[3]),  3,3},
  {&(_ZTV8S6002C17[34]),  34,150},
  {&(_ZTV8S6002C17[40]),  40,150},
  {&(_ZTV8S6002C17[51]),  51,150},
  {&(_ZTV8S6002C17[72]),  72,150},
  {&(_ZTV8S6002C17[78]),  78,150},
  {&(_ZTV8S6002C17[83]),  83,150},
  {&(_ZTV8S6002C17[87]),  87,150},
  {&(_ZTV8S6002C17[91]),  91,150},
  {&(_ZTV8S6002C17[61]),  61,150},
  {&(_ZTV8S6002C17[109]),  109,150},
  {&(_ZTV8S6002C17[149]),  149,150},
  {&(_ZTV8S6002C17[117]),  117,150},
  {&(_ZTV8S6002C17[122]),  122,150},
  {&(_ZTV8S6002C17[130]),  130,150},
  {&(_ZTV8S6002C17[140]),  140,150},
  {&(_ZTV8S6002C17[21]),  21,150},
  {&(_tg__ZTV8S6002C11__8S6002C17[7]),  7,11},
  {&(_tg__ZTV7S6002C78S6002C11__8S6002C17[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C11__8S6002C17[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C11__8S6002C17[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C11__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C11__8S6002C17[3]),  3,4},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C17[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C11__8S6002C17[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C11__8S6002C17[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__8S6002C17[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__8S6002C17[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C11__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C11__8S6002C17[3]),  3,3},
  {&(_tg__ZTV8S6002C10__8S6002C11__8S6002C17[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C11__8S6002C17[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C11__8S6002C17[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C11__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C11__8S6002C17[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A1__8S6002C11__8S6002C17[5]),  5,8},
  {&(_tg__ZTV7S6002C9__A1__8S6002C11__8S6002C17[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C11__8S6002C17[6]),  6,8},
  {&(_tg__ZTV7S6002C8__8S6002C17[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C6__8S6002C17[8]),  8,14},
  {&(_tg__ZTV8S6002C117S6002C6__A1__8S6002C17[7]),  7,11},
  {&(_tg__ZTV7S6002C78S6002C117S6002C6__A2__8S6002C17[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C117S6002C6__A2__8S6002C17[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C117S6002C6__A2__8S6002C17[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C117S6002C6__A2__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C117S6002C6__A2__8S6002C17[3]),  3,4},
  {&(_tg__ZTV8S6002C128S6002C117S6002C6__A1__8S6002C17[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C117S6002C6__A1__8S6002C17[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C117S6002C6__A1__8S6002C17[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C117S6002C6__A1__8S6002C17[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C117S6002C6__A1__8S6002C17[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C117S6002C6__A1__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C117S6002C6__A1__8S6002C17[3]),  3,3},
  {&(_tg__ZTV8S6002C10__8S6002C117S6002C6__A1__8S6002C17[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C117S6002C6__A1__8S6002C17[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C117S6002C6__A1__8S6002C17[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C117S6002C6__A1__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C117S6002C6__A1__8S6002C17[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A1__8S6002C117S6002C6__A1__8S6002C17[5]),  5,8},
  {&(_tg__ZTV7S6002C9__A1__8S6002C117S6002C6__A1__8S6002C17[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C117S6002C6__A1__8S6002C17[6]),  6,8},
  {&(_tg__ZTV7S6002C5__7S6002C6__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C7__7S6002C6__8S6002C17[7]),  7,8},
  {&(_tg__ZTV7S6002C4__7S6002C6__8S6002C17[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C6__8S6002C17[3]),  3,3},
  {&(_tg__ZTV7S6002C9__7S6002C6__8S6002C17[3]),  3,4},
  {&(_tg__ZTV8S6002C11__7S6002C6__8S6002C17[7]),  7,11},
  {&(_tg__ZTV8S6002C10__A1__7S6002C6__8S6002C17[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__A2__7S6002C6__8S6002C17[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__A3__7S6002C6__8S6002C17[2]),  2,3},
  {&(_tg__ZTV8S6002C128S6002C11__7S6002C6__8S6002C17[6]),  6,8},
  {&(_tg__ZTV7S6002C7__A1__8S6002C17[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C7__A1__8S6002C17[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C7__A1__8S6002C17[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C7__A1__8S6002C17[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C7__A1__8S6002C17[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6002C17[];
extern  VTBL_ENTRY _ZTV8S6002C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C17[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn35728_N8S6002C12D0Ev,_ZThn29360_N8S6002C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn35728_N8S6002C12D1Ev,_ZThn29360_N8S6002C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36208_N8S6002C15D0Ev,_ZThn29768_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36208_N8S6002C15D1Ev,_ZThn29768_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25200_N8S6002C15D0Ev,_ZThn20732_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25200_N8S6002C15D1Ev,_ZThn20732_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C17D0Ev,_ZTv0_n16_N8S6002C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36208_N8S6002C17D0Ev,_ZThn29768_N8S6002C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C17D1Ev,_ZTv0_n16_N8S6002C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36208_N8S6002C17D1Ev,_ZThn29768_N8S6002C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40640_N8S6002C17D0Ev,_ZThn33424_N8S6002C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn25200_N8S6002C17D0Ev,_ZThn20732_N8S6002C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40640_N8S6002C17D1Ev,_ZThn33424_N8S6002C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn25200_N8S6002C17D1Ev,_ZThn20732_N8S6002C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C17 = {  "S6002C17", // class name
  bases_S6002C17, 28,
  &(vtc_S6002C17[0]), // expected_vtbl_contents
  &(vtt_S6002C17[0]), // expected_vtt_contents
  ABISELECT(67392,55388), // object size
  NSPAIRA(_ZTI8S6002C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6002C17),150, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6002C17),94, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C16  : S6002C5 , virtual S6002C9 , virtual S6002C15 , S6002C7 , S6002C13 {
  int s6002c16f0;
  ::S6002C7 s6002c16f1;
  int s6002c16f2;
  short s6002c16f3;
  __tsi64 s6002c16f4:8;
  int s6002c16f5;
  virtual  ~S6002C16(); // _ZN8S6002C16D2Ev
  virtual void  v15(); // _ZN8S6002C163v15Ev
  S6002C16(); // tgen
};
//SIG(-1 S6002C16) C1{ BC2{ v2 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ v3 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} VBC4{ VBC3 BC5{ v4 v5 v6 Fi[2] FL[2] FC2[3]} VBC6{ VBC7{ BC3 BC5 BC2 vd v7 FL[2] Fp[8] FC8{ BC2 VBC5 VBC9{ VBC2 Fp FC2 Fi:3} VBC3 FC3 Fs Fi[2]} Fp Fi FC8 Fi} VBC2 VBC9 BC8 BC10{ VBC3 VBC7 VBC2 VBC9 FL:44 Fp Fi FC8 FL[2] Fi[3] FC7 Fc:7 FC11{ BC3 vd v9 FC9 Fi Fp Fi}} v8 FC7 FL Fc:7} Fc:8 Fi} BC8 BC11 vd v1 Fi FC8 Fi Fs FL:8 Fi}


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

static void Test_S6002C16()
{
  extern Class_Descriptor cd_S6002C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1219,4017)];
    init_test(&cd_S6002C16, buf);
    S6002C16 *dp, &lv = *(dp=new (buf) S6002C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19488,16064), "sizeof(S6002C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C16)");
    /*is_ambiguous_... S6002C16::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*), 0, "S6002C16");
    /*is_ambiguous_... S6002C16::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*), ABISELECT(2816,2320), "S6002C16");
    /*is_ambiguous_... S6002C15::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C15*), ABISELECT(2816,2320), "S6002C16");
    check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C11*), ABISELECT(2816,2320), "S6002C16");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C11*), ABISELECT(2816,2320), "S6002C16");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C7*), ABISELECT(2816,2320), "S6002C16");
    /*is_ambiguous_... S6002C15::S6002C4 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C15*), ABISELECT(3112,2564), "S6002C16");
    check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(14592,12008), "S6002C16");
    check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(14888,12252), "S6002C16");
    check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(15352,12652), "S6002C16");
    check_base_class_offset(lv, (S6002C10*)(S6002C11*), ABISELECT(14592,12008), "S6002C16");
    check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C11*), ABISELECT(14592,12008), "S6002C16");
    /*is_ambiguous_... S6002C11::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C11*), ABISELECT(18712,15404), "S6002C16");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(18712,15404), "S6002C16");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C11*), ABISELECT(18712,15404), "S6002C16");
    check_base_class_offset(lv, (S6002C8*)(S6002C11*), ABISELECT(18856,15528), "S6002C16");
    check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C11*), ABISELECT(18856,15528), "S6002C16");
    check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C11*), ABISELECT(18856,15528), "S6002C16");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C7*), ABISELECT(18856,15528), "S6002C16");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C11*), ABISELECT(3584,2972), "S6002C16");
    check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C11*), ABISELECT(19024,15664), "S6002C16");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C7*), ABISELECT(19024,15664), "S6002C16");
    check_base_class_offset(lv, (S6002C7*)(S6002C11*), ABISELECT(3584,2972), "S6002C16");
    check_base_class_offset(lv, (S6002C12*)(S6002C11*), ABISELECT(4048,3352), "S6002C16");
    check_base_class_offset(lv, (S6002C11*)(S6002C15*), ABISELECT(3584,2972), "S6002C16");
    check_base_class_offset(lv, (S6002C15*), ABISELECT(3112,2564), "S6002C16");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*), ABISELECT(144,124), "S6002C16");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C7*), ABISELECT(144,124), "S6002C16");
    check_base_class_offset(lv, (S6002C9*)(S6002C13*), ABISELECT(608,504), "S6002C16");
    check_base_class_offset(lv, (S6002C13*), ABISELECT(608,504), "S6002C16");
    check_field_offset(lv, s6002c16f0, ABISELECT(1236,1020), "S6002C16.s6002c16f0");
    check_field_offset(lv, s6002c16f1, ABISELECT(1248,1024), "S6002C16.s6002c16f1");
    check_field_offset(lv, s6002c16f2, ABISELECT(2800,2308), "S6002C16.s6002c16f2");
    check_field_offset(lv, s6002c16f3, ABISELECT(2804,2312), "S6002C16.s6002c16f3");
    set_bf_and_test(lv, s6002c16f4, ABISELECT(2806,2314), 0, 8, 1, "S6002C16");
    set_bf_and_test(lv, s6002c16f4, ABISELECT(2806,2314), 0, 8, hide_sll(1LL<<7), "S6002C16");
    check_field_offset(lv, s6002c16f5, ABISELECT(2808,2316), "S6002C16.s6002c16f5");
    test_class_info(&lv, &cd_S6002C16);
    dp->~S6002C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C16(Test_S6002C16, "S6002C16", ABISELECT(19488,16064));

#else // __cplusplus

extern void _ZN8S6002C16C1Ev();
extern void _ZN8S6002C16D2Ev();
Name_Map name_map_S6002C16[] = {
  NSPAIR(_ZN8S6002C16C1Ev),
  NSPAIR(_ZN8S6002C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C11;
extern VTBL_ENTRY _ZTI8S6002C11[];
extern  VTBL_ENTRY _ZTV8S6002C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C11[];
extern Class_Descriptor cd_S6002C15;
extern VTBL_ENTRY _ZTI8S6002C15[];
extern  VTBL_ENTRY _ZTV8S6002C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C15[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C13;
extern VTBL_ENTRY _ZTI8S6002C13[];
extern  VTBL_ENTRY _ZTV8S6002C13[];
static Base_Class bases_S6002C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C9,    ABISELECT(2816,2320), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C4,    ABISELECT(3112,2564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6002C9,    ABISELECT(14592,12008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(14888,12252), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(15352,12652), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(14592,12008), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(18712,15404), //bcp->offset
    90, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6002C8,    ABISELECT(18856,15528), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(3584,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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(19024,15664), //bcp->offset
    97, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6002C7,    ABISELECT(3584,2972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6002C12,    ABISELECT(4048,3352), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6002C11,    ABISELECT(3584,2972), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6002C15,    ABISELECT(3112,2564), //bcp->offset
    30, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C5,    ABISELECT(144,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(144,124), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C9,    ABISELECT(608,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6002C13,    ABISELECT(608,504), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C16[];
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C16D1Ev();
extern void _ZN8S6002C16D0Ev();
extern void _ZN8S6002C163v15Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZThn608_N8S6002C16D1Ev,_ZThn504_N8S6002C16D1Ev)();
extern void ABISELECT(_ZThn608_N8S6002C16D0Ev,_ZThn504_N8S6002C16D0Ev)();
extern void _ZN8S6002C133v10Ev();
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void ABISELECT(_ZTv0_n96_N8S6002C16D1Ev,_ZTv0_n48_N8S6002C16D1Ev)();
extern void ABISELECT(_ZThn3112_N8S6002C16D1Ev,_ZThn2564_N8S6002C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S6002C16D0Ev,_ZTv0_n48_N8S6002C16D0Ev)();
extern void ABISELECT(_ZThn3112_N8S6002C16D0Ev,_ZThn2564_N8S6002C16D0Ev)() __attribute__((weak));
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C16D1Ev,_ZTv0_n40_N8S6002C16D1Ev)();
extern void ABISELECT(_ZThn3584_N8S6002C16D1Ev,_ZThn2972_N8S6002C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C16D0Ev,_ZTv0_n40_N8S6002C16D0Ev)();
extern void ABISELECT(_ZThn3584_N8S6002C16D0Ev,_ZThn2972_N8S6002C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N8S6002C16D1Ev,_ZTvn380_n40_N8S6002C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C16D0Ev,_ZTvn380_n40_N8S6002C16D0Ev)();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C16D1Ev,_ZTv0_n16_N8S6002C16D1Ev)();
extern void ABISELECT(_ZThn14592_N8S6002C16D1Ev,_ZThn12008_N8S6002C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C16D0Ev,_ZTv0_n16_N8S6002C16D0Ev)();
extern void ABISELECT(_ZThn14592_N8S6002C16D0Ev,_ZThn12008_N8S6002C16D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY vtc_S6002C16[] = {
  ABISELECT(19024,15664),
  ABISELECT(18856,15528),
  ABISELECT(18712,15404),
  ABISELECT(14592,12008),
  ABISELECT(3584,2972),
  ABISELECT(3112,2564),
  ABISELECT(2816,2320),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C16D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C16D0Ev,
  (VTBL_ENTRY)&_ZN8S6002C163v15Ev,
  ABISELECT(2672,2196),
  ABISELECT(18568,15280),
  ABISELECT(18712,15404),
  ABISELECT(18880,15540),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-608,-504),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N8S6002C16D1Ev,_ZThn504_N8S6002C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N8S6002C16D0Ev,_ZThn504_N8S6002C16D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C133v10Ev,
  0,
  ABISELECT(-2816,-2320),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  ABISELECT(-3112,-2564),
  0,
  0,
  0,
  ABISELECT(15912,13100),
  ABISELECT(15744,12964),
  ABISELECT(15600,12840),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  ABISELECT(-3112,-2564),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S6002C16D1Ev,_ZTv0_n48_N8S6002C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S6002C16D0Ev,_ZTv0_n48_N8S6002C16D0Ev),
  ABISELECT(-3584,-2972),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-3584,-2972),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C16D1Ev,_ZTv0_n40_N8S6002C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C16D0Ev,_ZTv0_n40_N8S6002C16D0Ev),
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-4048,-3352),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C16D1Ev,_ZTvn380_n40_N8S6002C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C16D0Ev,_ZTvn380_n40_N8S6002C16D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-14592,-12008),
  0,
  ABISELECT(-14592,-12008),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C16D1Ev,_ZTv0_n16_N8S6002C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C16D0Ev,_ZTv0_n16_N8S6002C16D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-14888,-12252),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-15352,-12652),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-18712,-15404),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-144,-124),
  ABISELECT(-18856,-15528),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  0,
  0,
  0,
  ABISELECT(-19024,-15664),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S6002C16[];
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__A1__8S6002C16[] = {
  ABISELECT(2672,2196),
  ABISELECT(18568,15280),
  ABISELECT(18712,15404),
  ABISELECT(18880,15540),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C7__A1__8S6002C16[] = {
  0,
  0,
  0,
  ABISELECT(-18880,-15540),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C7__A1__8S6002C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-18712,-15404),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C7__A1__8S6002C16[] = {
  0,
  ABISELECT(-18568,-15280),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C7__A1__8S6002C16[] = {
  0,
  ABISELECT(-2672,-2196),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN8S6002C15D1Ev();
extern void _ZN8S6002C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C15__8S6002C16[] = {
  ABISELECT(15912,13100),
  ABISELECT(15744,12964),
  ABISELECT(15600,12840),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C15__8S6002C16[] = {
  0,
  ABISELECT(296,244),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn472_N8S6002C15D1Ev,_ZThn408_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn472_N8S6002C15D0Ev,_ZThn408_N8S6002C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C15__8S6002C16[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn11480_N8S6002C15D1Ev,_ZThn9444_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn11480_N8S6002C15D0Ev,_ZThn9444_N8S6002C15D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C15__8S6002C16[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11480,-9444),
  0,
  ABISELECT(-11480,-9444),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__A1__8S6002C15__8S6002C16[] = {
  ABISELECT(-11776,-9688),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C15__8S6002C16[] = {
  ABISELECT(-12240,-10088),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C15__8S6002C16[] = {
  0,
  ABISELECT(-15600,-12840),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C15__8S6002C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15744,-12964),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A2__8S6002C15__8S6002C16[] = {
  0,
  0,
  0,
  ABISELECT(-15912,-13100),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C15__8S6002C16[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev),
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void _ZN8S6002C11D1Ev();
extern void _ZN8S6002C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C16[] = {
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D0Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C11__8S6002C16[] = {
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C11__8S6002C16[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C11__8S6002C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C11__8S6002C16[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C11__8S6002C16[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C16[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C11__8S6002C16[] = {
  0,
  ABISELECT(1232,1032),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C11__8S6002C16[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__8S6002C16[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__8S6002C16[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C11__8S6002C16[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C11__8S6002C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C11__8S6002C16[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C11__8S6002C16[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C11__8S6002C16[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C11__8S6002C16[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C11__8S6002C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A1__8S6002C11__8S6002C16[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__A1__8S6002C11__8S6002C16[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C11__8S6002C16[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C16[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__8S6002C16[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTT_ENTRY vtt_S6002C16[] = {
  {&(_ZTV8S6002C16[9]),  9,105},
  {&(_tg__ZTV7S6002C7__A1__8S6002C16[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C7__A1__8S6002C16[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C7__A1__8S6002C16[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C7__A1__8S6002C16[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C7__A1__8S6002C16[3]),  3,4},
  {&(_ZTV8S6002C16[29]),  29,105},
  {&(_ZTV8S6002C16[42]),  42,105},
  {&(_ZTV8S6002C16[57]),  57,105},
  {&(_ZTV8S6002C16[78]),  78,105},
  {&(_ZTV8S6002C16[84]),  84,105},
  {&(_ZTV8S6002C16[89]),  89,105},
  {&(_ZTV8S6002C16[93]),  93,105},
  {&(_ZTV8S6002C16[97]),  97,105},
  {&(_ZTV8S6002C16[102]),  102,105},
  {&(_ZTV8S6002C16[67]),  67,105},
  {&(_ZTV8S6002C16[19]),  19,105},
  {&(_tg__ZTV8S6002C15__8S6002C16[8]),  8,13},
  {&(_tg__ZTV7S6002C9__8S6002C15__8S6002C16[3]),  3,4},
  {&(_tg__ZTV8S6002C11__8S6002C15__8S6002C16[10]),  10,14},
  {&(_tg__ZTV8S6002C10__8S6002C15__8S6002C16[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__A1__8S6002C15__8S6002C16[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C15__8S6002C16[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C15__8S6002C16[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C15__8S6002C16[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A2__8S6002C15__8S6002C16[5]),  5,8},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C15__8S6002C16[6]),  6,8},
  {&(_tg__ZTV8S6002C11__8S6002C16[7]),  7,11},
  {&(_tg__ZTV7S6002C78S6002C11__8S6002C16[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C11__8S6002C16[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C11__8S6002C16[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C11__8S6002C16[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C11__8S6002C16[3]),  3,4},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C16[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C11__8S6002C16[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C11__8S6002C16[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__8S6002C16[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__8S6002C16[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C11__8S6002C16[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C11__8S6002C16[3]),  3,3},
  {&(_tg__ZTV8S6002C10__8S6002C11__8S6002C16[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C11__8S6002C16[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C11__8S6002C16[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C11__8S6002C16[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C11__8S6002C16[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A1__8S6002C11__8S6002C16[5]),  5,8},
  {&(_tg__ZTV7S6002C9__A1__8S6002C11__8S6002C16[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C11__8S6002C16[6]),  6,8},
  {&(_tg__ZTV7S6002C8__8S6002C16[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__8S6002C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6002C16[];
extern  VTBL_ENTRY _ZTV8S6002C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C16[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N8S6002C15D0Ev,_ZThn9444_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N8S6002C15D1Ev,_ZThn9444_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S6002C15D0Ev,_ZThn408_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S6002C15D1Ev,_ZThn408_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C16D0Ev,_ZTv0_n16_N8S6002C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14592_N8S6002C16D0Ev,_ZThn12008_N8S6002C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C16D1Ev,_ZTv0_n16_N8S6002C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14592_N8S6002C16D1Ev,_ZThn12008_N8S6002C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C16D0Ev,_ZTv0_n40_N8S6002C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S6002C16D0Ev,_ZThn2972_N8S6002C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C16D1Ev,_ZTv0_n40_N8S6002C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S6002C16D1Ev,_ZThn2972_N8S6002C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S6002C16D0Ev,_ZTv0_n48_N8S6002C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3112_N8S6002C16D0Ev,_ZThn2564_N8S6002C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S6002C16D1Ev,_ZTv0_n48_N8S6002C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3112_N8S6002C16D1Ev,_ZThn2564_N8S6002C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C16 = {  "S6002C16", // class name
  bases_S6002C16, 19,
  &(vtc_S6002C16[0]), // expected_vtbl_contents
  &(vtt_S6002C16[0]), // expected_vtt_contents
  ABISELECT(19488,16064), // object size
  NSPAIRA(_ZTI8S6002C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6002C16),105, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6002C16),50, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C21  : S6002C7 , virtual S6002C15 , S6002C16 {
  ::S6002C15 s6002c21f0;
  int s6002c21f1;
  int s6002c21f2;
  char s6002c21f3;
  int s6002c21f4;
  __tsi64 s6002c21f5;
  int s6002c21f6;
  int s6002c21f7;
  void *s6002c21f8;
  void *s6002c21f9;
  int s6002c21f10;
  int s6002c21f11;
  virtual void  v16(); // _ZN8S6002C213v16Ev
  virtual void  v17(); // _ZN8S6002C213v17Ev
  ~S6002C21(); // tgen
  S6002C21(); // tgen
};
//SIG(-1 S6002C21) C1{ BC2{ BC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} VBC4{ v4 v5 v6 Fi[2] FL[2] FC3[3]} VBC5{ VBC3 Fp FC3 Fi:3} VBC6{ v7 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} FC6 Fs Fi[2]} VBC7{ VBC6 BC4 VBC8{ VBC9{ BC6 BC4 BC3 vd v8 FL[2] Fp[8] FC2 Fp Fi FC2 Fi} VBC3 VBC5 BC2 BC10{ VBC6 VBC9 VBC3 VBC5 FL:44 Fp Fi FC2 FL[2] Fi[3] FC9 Fc:7 FC11{ BC6 vd v10 FC5 Fi Fp Fi}} v9 FC9 FL Fc:7} Fc:8 Fi} BC12{ BC3 VBC6 VBC7 BC2 BC11 vd v11 Fi FC2 Fi Fs FL:8 Fi} v1 v2 FC7 Fi[2] Fc Fi FL Fi[2] Fp[2] Fi[2]}


void  S6002C21 ::v16(){vfunc_called(this, "_ZN8S6002C213v16Ev");}
void  S6002C21 ::v17(){vfunc_called(this, "_ZN8S6002C213v17Ev");}
S6002C21 ::~S6002C21(){ note_dtor("S6002C21", this);} // tgen
S6002C21 ::S6002C21(){ note_ctor("S6002C21", this);} // tgen

static void Test_S6002C21()
{
  extern Class_Descriptor cd_S6002C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2295,7560)];
    init_test(&cd_S6002C21, buf);
    S6002C21 *dp, &lv = *(dp=new (buf) S6002C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(36704,30236), "sizeof(S6002C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C21)");
    /*is_ambiguous_... S6002C21::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*), 0, "S6002C21");
    /*is_ambiguous_... S6002C21::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C7*), ABISELECT(20024,16492), "S6002C21");
    check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C11*), ABISELECT(20024,16492), "S6002C21");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C16*), ABISELECT(20024,16492), "S6002C21");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(20656,17028), "S6002C21");
    /*is_ambiguous_... S6002C11::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C11*), ABISELECT(20656,17028), "S6002C21");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C11*), ABISELECT(20656,17028), "S6002C21");
    /*is_ambiguous_... S6002C21::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C7*), ABISELECT(20488,16892), "S6002C21");
    check_base_class_offset(lv, (S6002C8*)(S6002C11*), ABISELECT(20488,16892), "S6002C21");
    check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C11*), ABISELECT(20488,16892), "S6002C21");
    check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C11*), ABISELECT(20488,16892), "S6002C21");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C16*), ABISELECT(20488,16892), "S6002C21");
    /*is_ambiguous_... S6002C21::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C7*), ABISELECT(20800,17152), "S6002C21");
    /*is_ambiguous_... S6002C15::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C15*), ABISELECT(20800,17152), "S6002C21");
    check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C11*), ABISELECT(20800,17152), "S6002C21");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C11*), ABISELECT(20800,17152), "S6002C21");
    /*is_ambiguous_... S6002C16::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C16*), ABISELECT(20800,17152), "S6002C21");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C16*), ABISELECT(20800,17152), "S6002C21");
    /*is_ambiguous_... S6002C21::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C7*), 0, "S6002C21");
    /*is_ambiguous_... S6002C15::S6002C4 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C15*), ABISELECT(21096,17396), "S6002C21");
    check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(32576,26840), "S6002C21");
    check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(32872,27084), "S6002C21");
    check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(33336,27484), "S6002C21");
    check_base_class_offset(lv, (S6002C10*)(S6002C11*), ABISELECT(32576,26840), "S6002C21");
    check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C11*), ABISELECT(32576,26840), "S6002C21");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C11*), ABISELECT(21568,17804), "S6002C21");
    check_base_class_offset(lv, (S6002C7*)(S6002C11*), ABISELECT(21568,17804), "S6002C21");
    check_base_class_offset(lv, (S6002C12*)(S6002C11*), ABISELECT(22032,18184), "S6002C21");
    check_base_class_offset(lv, (S6002C11*)(S6002C15*), ABISELECT(21568,17804), "S6002C21");
    check_base_class_offset(lv, (S6002C15*), ABISELECT(21096,17396), "S6002C21");
    check_base_class_offset(lv, (S6002C15*)(S6002C16*), ABISELECT(21096,17396), "S6002C21");
    /*is_ambiguous_... S6002C16::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C16*), ABISELECT(464,380), "S6002C21");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C16*), ABISELECT(608,504), "S6002C21");
    /*is_ambiguous_... S6002C16::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C7*)(S6002C16*), ABISELECT(608,504), "S6002C21");
    check_base_class_offset(lv, (S6002C9*)(S6002C13*)(S6002C16*), ABISELECT(1072,884), "S6002C21");
    check_base_class_offset(lv, (S6002C13*)(S6002C16*), ABISELECT(1072,884), "S6002C21");
    check_base_class_offset(lv, (S6002C16*), ABISELECT(464,380), "S6002C21");
    check_field_offset(lv, s6002c21f0, ABISELECT(3280,2700), "S6002C21.s6002c21f0");
    check_field_offset(lv, s6002c21f1, ABISELECT(19968,16444), "S6002C21.s6002c21f1");
    check_field_offset(lv, s6002c21f2, ABISELECT(19972,16448), "S6002C21.s6002c21f2");
    check_field_offset(lv, s6002c21f3, ABISELECT(19976,16452), "S6002C21.s6002c21f3");
    check_field_offset(lv, s6002c21f4, ABISELECT(19980,16456), "S6002C21.s6002c21f4");
    check_field_offset(lv, s6002c21f5, ABISELECT(19984,16460), "S6002C21.s6002c21f5");
    check_field_offset(lv, s6002c21f6, ABISELECT(19992,16468), "S6002C21.s6002c21f6");
    check_field_offset(lv, s6002c21f7, ABISELECT(19996,16472), "S6002C21.s6002c21f7");
    check_field_offset(lv, s6002c21f8, ABISELECT(20000,16476), "S6002C21.s6002c21f8");
    check_field_offset(lv, s6002c21f9, ABISELECT(20008,16480), "S6002C21.s6002c21f9");
    check_field_offset(lv, s6002c21f10, ABISELECT(20016,16484), "S6002C21.s6002c21f10");
    check_field_offset(lv, s6002c21f11, ABISELECT(20020,16488), "S6002C21.s6002c21f11");
    test_class_info(&lv, &cd_S6002C21);
    dp->~S6002C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C21(Test_S6002C21, "S6002C21", ABISELECT(36704,30236));

#else // __cplusplus

extern void _ZN8S6002C21C1Ev();
extern void _ZN8S6002C21D1Ev();
Name_Map name_map_S6002C21[] = {
  NSPAIR(_ZN8S6002C21C1Ev),
  NSPAIR(_ZN8S6002C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C11;
extern VTBL_ENTRY _ZTI8S6002C11[];
extern  VTBL_ENTRY _ZTV8S6002C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C11[];
extern Class_Descriptor cd_S6002C15;
extern VTBL_ENTRY _ZTI8S6002C15[];
extern  VTBL_ENTRY _ZTV8S6002C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C15[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C13;
extern VTBL_ENTRY _ZTI8S6002C13[];
extern  VTBL_ENTRY _ZTV8S6002C13[];
extern Class_Descriptor cd_S6002C16;
extern VTBL_ENTRY _ZTI8S6002C16[];
extern  VTBL_ENTRY _ZTV8S6002C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C16[];
static Base_Class bases_S6002C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(20024,16492), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(20656,17028), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6002C8,    ABISELECT(20488,16892), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6002C9,    ABISELECT(20800,17152), //bcp->offset
    55, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6002C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C4,    ABISELECT(21096,17396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6002C9,    ABISELECT(32576,26840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(32872,27084), //bcp->offset
    111, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(33336,27484), //bcp->offset
    116, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(32576,26840), //bcp->offset
    98, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(21568,17804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(21568,17804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6002C12,    ABISELECT(22032,18184), //bcp->offset
    90, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6002C11,    ABISELECT(21568,17804), //bcp->offset
    76, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6002C15,    ABISELECT(21096,17396), //bcp->offset
    59, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C5,    ABISELECT(464,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(608,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(608,504), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6002C9,    ABISELECT(1072,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
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6002C13,    ABISELECT(1072,884), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6002C16,    ABISELECT(464,380), //bcp->offset
    14, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C21[];
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C213v16Ev();
extern void _ZN8S6002C213v17Ev();
extern void _ZN8S6002C21D1Ev();
extern void _ZN8S6002C21D0Ev();
extern void _ZN7S6002C52v5Ev();
extern void ABISELECT(_ZThn464_N8S6002C21D1Ev,_ZThn380_N8S6002C21D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C21D0Ev,_ZThn380_N8S6002C21D0Ev)();
extern void _ZN8S6002C163v15Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZThn1072_N8S6002C21D1Ev,_ZThn884_N8S6002C21D1Ev)();
extern void ABISELECT(_ZThn1072_N8S6002C21D0Ev,_ZThn884_N8S6002C21D0Ev)();
extern void _ZN8S6002C133v10Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void ABISELECT(_ZTv0_n96_N8S6002C21D1Ev,_ZTv0_n48_N8S6002C21D1Ev)();
extern void ABISELECT(_ZThn21096_N8S6002C21D1Ev,_ZThn17396_N8S6002C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S6002C21D0Ev,_ZTv0_n48_N8S6002C21D0Ev)();
extern void ABISELECT(_ZThn21096_N8S6002C21D0Ev,_ZThn17396_N8S6002C21D0Ev)() __attribute__((weak));
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C21D1Ev,_ZTv0_n40_N8S6002C21D1Ev)();
extern void ABISELECT(_ZThn21568_N8S6002C21D1Ev,_ZThn17804_N8S6002C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C21D0Ev,_ZTv0_n40_N8S6002C21D0Ev)();
extern void ABISELECT(_ZThn21568_N8S6002C21D0Ev,_ZThn17804_N8S6002C21D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N8S6002C21D1Ev,_ZTvn380_n40_N8S6002C21D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C21D0Ev,_ZTvn380_n40_N8S6002C21D0Ev)();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C21D1Ev,_ZTv0_n16_N8S6002C21D1Ev)();
extern void ABISELECT(_ZThn32576_N8S6002C21D1Ev,_ZThn26840_N8S6002C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C21D0Ev,_ZTv0_n16_N8S6002C21D0Ev)();
extern void ABISELECT(_ZThn32576_N8S6002C21D0Ev,_ZThn26840_N8S6002C21D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY vtc_S6002C21[] = {
  ABISELECT(32576,26840),
  ABISELECT(21568,17804),
  ABISELECT(21096,17396),
  ABISELECT(20800,17152),
  ABISELECT(20656,17028),
  ABISELECT(20488,16892),
  ABISELECT(20024,16492),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C213v16Ev,
  (VTBL_ENTRY)&_ZN8S6002C213v17Ev,
  (VTBL_ENTRY)&_ZN8S6002C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C21D0Ev,
  ABISELECT(19560,16112),
  ABISELECT(20024,16512),
  ABISELECT(20192,16648),
  ABISELECT(32112,26460),
  ABISELECT(21104,17424),
  ABISELECT(20632,17016),
  ABISELECT(20336,16772),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C21D1Ev,_ZThn380_N8S6002C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C21D0Ev,_ZThn380_N8S6002C21D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C163v15Ev,
  ABISELECT(20192,16648),
  ABISELECT(20048,16524),
  ABISELECT(19880,16388),
  ABISELECT(19416,15988),
  ABISELECT(-608,-504),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-1072,-884),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S6002C21D1Ev,_ZThn884_N8S6002C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1072_N8S6002C21D0Ev,_ZThn884_N8S6002C21D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C133v10Ev,
  0,
  0,
  0,
  ABISELECT(-20024,-16492),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(168,136),
  ABISELECT(-20488,-16892),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  0,
  ABISELECT(-20656,-17028),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-20800,-17152),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  ABISELECT(-21096,-17396),
  0,
  0,
  0,
  ABISELECT(-1072,-904),
  ABISELECT(-608,-504),
  ABISELECT(-440,-368),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  ABISELECT(-21096,-17396),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S6002C21D1Ev,_ZTv0_n48_N8S6002C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S6002C21D0Ev,_ZTv0_n48_N8S6002C21D0Ev),
  ABISELECT(-21568,-17804),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  ABISELECT(-21568,-17804),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C21D1Ev,_ZTv0_n40_N8S6002C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C21D0Ev,_ZTv0_n40_N8S6002C21D0Ev),
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-22032,-18184),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C21D1Ev,_ZTvn380_n40_N8S6002C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C21D0Ev,_ZTvn380_n40_N8S6002C21D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-32576,-26840),
  0,
  ABISELECT(-32576,-26840),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C21D1Ev,_ZTv0_n16_N8S6002C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C21D0Ev,_ZTv0_n16_N8S6002C21D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-32872,-27084),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-33336,-27484),
  (VTBL_ENTRY)&(_ZTI8S6002C21[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S6002C21[];
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__8S6002C21[] = {
  ABISELECT(20800,17152),
  ABISELECT(20656,17028),
  ABISELECT(20488,16892),
  ABISELECT(20024,16492),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C7__8S6002C21[] = {
  0,
  0,
  0,
  ABISELECT(-20024,-16492),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C7__8S6002C21[] = {
  ABISELECT(168,136),
  ABISELECT(-20488,-16892),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C7__8S6002C21[] = {
  0,
  ABISELECT(-20656,-17028),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C7__8S6002C21[] = {
  0,
  ABISELECT(-20800,-17152),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C16D1Ev();
extern void _ZN8S6002C16D0Ev();
extern void _ZN8S6002C163v15Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C16__8S6002C21[] = {
  ABISELECT(19560,16112),
  ABISELECT(20024,16512),
  ABISELECT(20192,16648),
  ABISELECT(32112,26460),
  ABISELECT(21104,17424),
  ABISELECT(20632,17016),
  ABISELECT(20336,16772),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C16D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C16D0Ev,
  (VTBL_ENTRY)&_ZN8S6002C163v15Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C16__A2__8S6002C21[] = {
  ABISELECT(20192,16648),
  ABISELECT(20048,16524),
  ABISELECT(19880,16388),
  ABISELECT(19416,15988),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C16__A2__8S6002C21[] = {
  0,
  0,
  0,
  ABISELECT(-19416,-15988),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C16__A2__8S6002C21[] = {
  ABISELECT(168,136),
  ABISELECT(-19880,-16388),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C16__A2__8S6002C21[] = {
  0,
  ABISELECT(-20048,-16524),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C16__A2__8S6002C21[] = {
  0,
  ABISELECT(-20192,-16648),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C16__8S6002C21[] = {
  0,
  ABISELECT(-20336,-16772),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void ABISELECT(_ZTv0_n96_N8S6002C16D1Ev,_ZTv0_n48_N8S6002C16D1Ev)();
extern void ABISELECT(_ZThn20632_N8S6002C16D1Ev,_ZThn17016_N8S6002C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S6002C16D0Ev,_ZTv0_n48_N8S6002C16D0Ev)();
extern void ABISELECT(_ZThn20632_N8S6002C16D0Ev,_ZThn17016_N8S6002C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6002C15__8S6002C16__8S6002C21[] = {
  ABISELECT(-20632,-17016),
  0,
  0,
  0,
  ABISELECT(-1072,-904),
  ABISELECT(-608,-504),
  ABISELECT(-440,-368),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  ABISELECT(-20632,-17016),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S6002C16D1Ev,_ZTv0_n48_N8S6002C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S6002C16D0Ev,_ZTv0_n48_N8S6002C16D0Ev),
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C16D1Ev,_ZTv0_n40_N8S6002C16D1Ev)();
extern void ABISELECT(_ZThn21104_N8S6002C16D1Ev,_ZThn17424_N8S6002C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C16D0Ev,_ZTv0_n40_N8S6002C16D0Ev)();
extern void ABISELECT(_ZThn21104_N8S6002C16D0Ev,_ZThn17424_N8S6002C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C16__8S6002C21[] = {
  ABISELECT(-21104,-17424),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  ABISELECT(-21104,-17424),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C16D1Ev,_ZTv0_n40_N8S6002C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C16D0Ev,_ZTv0_n40_N8S6002C16D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C16D1Ev,_ZTv0_n16_N8S6002C16D1Ev)();
extern void ABISELECT(_ZThn32112_N8S6002C16D1Ev,_ZThn26460_N8S6002C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C16D0Ev,_ZTv0_n16_N8S6002C16D0Ev)();
extern void ABISELECT(_ZThn32112_N8S6002C16D0Ev,_ZThn26460_N8S6002C16D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C16__8S6002C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-32112,-26460),
  0,
  ABISELECT(-32112,-26460),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C16D1Ev,_ZTv0_n16_N8S6002C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C16D0Ev,_ZTv0_n16_N8S6002C16D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__A1__8S6002C16__8S6002C21[] = {
  ABISELECT(-32408,-26704),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__A1__8S6002C16__8S6002C21[] = {
  ABISELECT(-32872,-27104),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A2__8S6002C16__8S6002C21[] = {
  0,
  ABISELECT(-20192,-16648),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C16__8S6002C21[] = {
  ABISELECT(168,136),
  ABISELECT(-20024,-16512),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A2__8S6002C16__8S6002C21[] = {
  0,
  0,
  0,
  ABISELECT(-19560,-16112),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void ABISELECT(_ZTvn464_n80_N8S6002C16D1Ev,_ZTvn380_n40_N8S6002C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C16D0Ev,_ZTvn380_n40_N8S6002C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C16__8S6002C21[] = {
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-21568,-17804),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C16D1Ev,_ZTvn380_n40_N8S6002C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C16D0Ev,_ZTvn380_n40_N8S6002C16D0Ev),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__A1__8S6002C16__8S6002C21[] = {
  ABISELECT(20192,16648),
  ABISELECT(20048,16524),
  ABISELECT(19880,16388),
  ABISELECT(19416,15988),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI8S6002C16[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C21[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__8S6002C21[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN8S6002C15D1Ev();
extern void _ZN8S6002C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C15__8S6002C21[] = {
  ABISELECT(-1072,-904),
  ABISELECT(-608,-504),
  ABISELECT(-440,-368),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C15__8S6002C21[] = {
  0,
  ABISELECT(296,244),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn472_N8S6002C15D1Ev,_ZThn408_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn472_N8S6002C15D0Ev,_ZThn408_N8S6002C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C15__8S6002C21[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn11480_N8S6002C15D1Ev,_ZThn9444_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn11480_N8S6002C15D0Ev,_ZThn9444_N8S6002C15D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C15__8S6002C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11480,-9444),
  0,
  ABISELECT(-11480,-9444),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__A1__8S6002C15__8S6002C21[] = {
  ABISELECT(-11776,-9688),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C15__8S6002C21[] = {
  ABISELECT(-12240,-10088),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C15__8S6002C21[] = {
  0,
  ABISELECT(440,368),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C15__8S6002C21[] = {
  ABISELECT(168,136),
  ABISELECT(608,504),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A2__8S6002C15__8S6002C21[] = {
  0,
  0,
  0,
  ABISELECT(1072,904),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C15__8S6002C21[] = {
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev),
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void _ZN8S6002C11D1Ev();
extern void _ZN8S6002C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C21[] = {
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D0Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C11__A1__8S6002C21[] = {
  ABISELECT(-768,-652),
  ABISELECT(-912,-776),
  ABISELECT(-1080,-912),
  ABISELECT(-1544,-1312),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C11__A1__8S6002C21[] = {
  0,
  0,
  0,
  ABISELECT(1544,1312),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C11__A1__8S6002C21[] = {
  ABISELECT(168,136),
  ABISELECT(1080,912),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C11__A1__8S6002C21[] = {
  0,
  ABISELECT(912,776),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C11__A1__8S6002C21[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C21[] = {
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C11__8S6002C21[] = {
  0,
  ABISELECT(1232,1032),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C11__8S6002C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__8S6002C21[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__8S6002C21[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C11__8S6002C21[] = {
  0,
  ABISELECT(1376,1156),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C11__8S6002C21[] = {
  ABISELECT(168,136),
  ABISELECT(1544,1292),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C11__8S6002C21[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C11__8S6002C21[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C11__8S6002C21[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C11__8S6002C21[] = {
  0,
  ABISELECT(912,776),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C11__8S6002C21[] = {
  ABISELECT(168,136),
  ABISELECT(1080,912),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A1__8S6002C11__8S6002C21[] = {
  0,
  0,
  0,
  ABISELECT(1544,1312),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__A1__8S6002C11__8S6002C21[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C11__8S6002C21[] = {
  ABISELECT(-1544,-1292),
  ABISELECT(-1376,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev),
};
static  VTT_ENTRY vtt_S6002C21[] = {
  {&(_ZTV8S6002C21[9]),  9,119},
  {&(_tg__ZTV7S6002C7__8S6002C21[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C7__8S6002C21[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C7__8S6002C21[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C7__8S6002C21[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C7__8S6002C21[3]),  3,4},
  {&(_tg__ZTV8S6002C16__8S6002C21[9]),  9,13},
  {&(_tg__ZTV7S6002C78S6002C16__A2__8S6002C21[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C16__A2__8S6002C21[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C16__A2__8S6002C21[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C16__A2__8S6002C21[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C16__A2__8S6002C21[3]),  3,4},
  {&(_tg__ZTV7S6002C9__8S6002C16__8S6002C21[3]),  3,4},
  {&(_tg__ZTV8S6002C15__8S6002C16__8S6002C21[12]),  12,17},
  {&(_tg__ZTV8S6002C11__8S6002C16__8S6002C21[10]),  10,14},
  {&(_tg__ZTV8S6002C10__8S6002C16__8S6002C21[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__A1__8S6002C16__8S6002C21[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__A1__8S6002C16__8S6002C21[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A2__8S6002C16__8S6002C21[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C16__8S6002C21[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A2__8S6002C16__8S6002C21[5]),  5,8},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C16__8S6002C21[6]),  6,8},
  {&(_tg__ZTV7S6002C7__A1__8S6002C16__8S6002C21[6]),  6,7},
  {&(_ZTV8S6002C21[45]),  45,119},
  {&(_ZTV8S6002C21[51]),  51,119},
  {&(_ZTV8S6002C21[54]),  54,119},
  {&(_ZTV8S6002C21[58]),  58,119},
  {&(_ZTV8S6002C21[71]),  71,119},
  {&(_ZTV8S6002C21[86]),  86,119},
  {&(_ZTV8S6002C21[107]),  107,119},
  {&(_ZTV8S6002C21[113]),  113,119},
  {&(_ZTV8S6002C21[118]),  118,119},
  {&(_ZTV8S6002C21[96]),  96,119},
  {&(_ZTV8S6002C21[23]),  23,119},
  {&(_ZTV8S6002C21[33]),  33,119},
  {&(_tg__ZTV7S6002C8__8S6002C21[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__8S6002C21[3]),  3,4},
  {&(_tg__ZTV8S6002C15__8S6002C21[8]),  8,13},
  {&(_tg__ZTV7S6002C9__8S6002C15__8S6002C21[3]),  3,4},
  {&(_tg__ZTV8S6002C11__8S6002C15__8S6002C21[10]),  10,14},
  {&(_tg__ZTV8S6002C10__8S6002C15__8S6002C21[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__A1__8S6002C15__8S6002C21[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C15__8S6002C21[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C15__8S6002C21[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C15__8S6002C21[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A2__8S6002C15__8S6002C21[5]),  5,8},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C15__8S6002C21[6]),  6,8},
  {&(_tg__ZTV8S6002C11__8S6002C21[7]),  7,11},
  {&(_tg__ZTV7S6002C78S6002C11__A1__8S6002C21[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C11__A1__8S6002C21[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C11__A1__8S6002C21[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C11__A1__8S6002C21[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C11__A1__8S6002C21[3]),  3,4},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C21[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C11__8S6002C21[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C11__8S6002C21[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__8S6002C21[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__8S6002C21[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C11__8S6002C21[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C11__8S6002C21[3]),  3,3},
  {&(_tg__ZTV8S6002C10__8S6002C11__8S6002C21[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C11__8S6002C21[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C11__8S6002C21[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C11__8S6002C21[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C11__8S6002C21[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A1__8S6002C11__8S6002C21[5]),  5,8},
  {&(_tg__ZTV7S6002C9__A1__8S6002C11__8S6002C21[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C11__8S6002C21[6]),  6,8},
};
extern VTBL_ENTRY _ZTI8S6002C21[];
extern  VTBL_ENTRY _ZTV8S6002C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C21[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N8S6002C15D0Ev,_ZThn9444_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N8S6002C15D1Ev,_ZThn9444_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S6002C15D0Ev,_ZThn408_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S6002C15D1Ev,_ZThn408_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C16D0Ev,_ZTv0_n16_N8S6002C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32112_N8S6002C16D0Ev,_ZThn26460_N8S6002C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C16D1Ev,_ZTv0_n16_N8S6002C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32112_N8S6002C16D1Ev,_ZThn26460_N8S6002C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C16D0Ev,_ZTv0_n40_N8S6002C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21104_N8S6002C16D0Ev,_ZThn17424_N8S6002C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C16D1Ev,_ZTv0_n40_N8S6002C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21104_N8S6002C16D1Ev,_ZThn17424_N8S6002C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S6002C16D0Ev,_ZTv0_n48_N8S6002C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20632_N8S6002C16D0Ev,_ZThn17016_N8S6002C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S6002C16D1Ev,_ZTv0_n48_N8S6002C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20632_N8S6002C16D1Ev,_ZThn17016_N8S6002C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C21D0Ev,_ZTv0_n16_N8S6002C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32576_N8S6002C21D0Ev,_ZThn26840_N8S6002C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C21D1Ev,_ZTv0_n16_N8S6002C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32576_N8S6002C21D1Ev,_ZThn26840_N8S6002C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C21D0Ev,_ZTv0_n40_N8S6002C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21568_N8S6002C21D0Ev,_ZThn17804_N8S6002C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C21D1Ev,_ZTv0_n40_N8S6002C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21568_N8S6002C21D1Ev,_ZThn17804_N8S6002C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S6002C21D0Ev,_ZTv0_n48_N8S6002C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21096_N8S6002C21D0Ev,_ZThn17396_N8S6002C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S6002C21D1Ev,_ZTv0_n48_N8S6002C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21096_N8S6002C21D1Ev,_ZThn17396_N8S6002C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C21 = {  "S6002C21", // class name
  bases_S6002C21, 22,
  &(vtc_S6002C21[0]), // expected_vtbl_contents
  &(vtt_S6002C21[0]), // expected_vtt_contents
  ABISELECT(36704,30236), // object size
  NSPAIRA(_ZTI8S6002C21),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6002C21),119, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6002C21),68, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C19  {
  ::S19762C18_nt s6002c19f0;
  ::S6002C21 s6002c19f1;
  int s6002c19f2;
  char s6002c19f3:5;
  virtual void  v11(); // _ZN8S6002C193v11Ev
  ~S6002C19(); // tgen
  S6002C19(); // tgen
};
//SIG(-1 S6002C19) C1{ v1 FC2{} FC3{ BC4{ BC5{ v4 Fs:6 Fl Fs:4 FL[13] Fp} VBC6{ v5 v6 v7 Fi[2] FL[2] FC5[3]} VBC7{ VBC5 Fp FC5 Fi:3} VBC8{ v8 FL FD Fp Fc FC5 Fp[2] FL[8] Fs Fp FL:64} FC8 Fs Fi[2]} VBC9{ VBC8 BC6 VBC10{ VBC11{ BC8 BC6 BC5 vd v9 FL[2] Fp[8] FC4 Fp Fi FC4 Fi} VBC5 VBC7 BC4 BC12{ VBC8 VBC11 VBC5 VBC7 FL:44 Fp Fi FC4 FL[2] Fi[3] FC11 Fc:7 FC13{ BC8 vd v11 FC7 Fi Fp Fi}} v10 FC11 FL Fc:7} Fc:8 Fi} BC14{ BC5 VBC8 VBC9 BC4 BC13 vd v12 Fi FC4 Fi Fs FL:8 Fi} v2 v3 FC9 Fi[2] Fc Fi FL Fi[2] Fp[2] Fi[2]} Fi Fc:5}


void  S6002C19 ::v11(){vfunc_called(this, "_ZN8S6002C193v11Ev");}
S6002C19 ::~S6002C19(){ note_dtor("S6002C19", this);} // tgen
S6002C19 ::S6002C19(){ note_ctor("S6002C19", this);} // tgen

static void Test_S6002C19()
{
  extern Class_Descriptor cd_S6002C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2297,7564)];
    init_test(&cd_S6002C19, buf);
    S6002C19 *dp, &lv = *(dp=new (buf) S6002C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(36736,30252), "sizeof(S6002C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C19)");
    check_field_offset(lv, s6002c19f0, ABISELECT(8,4), "S6002C19.s6002c19f0");
    check_field_offset(lv, s6002c19f1, ABISELECT(16,8), "S6002C19.s6002c19f1");
    check_field_offset(lv, s6002c19f2, ABISELECT(36720,30244), "S6002C19.s6002c19f2");
    set_bf_and_test(lv, s6002c19f3, ABISELECT(36724,30248), 0, 5, 1, "S6002C19");
    set_bf_and_test(lv, s6002c19f3, ABISELECT(36724,30248), 0, 5, hide_sll(1LL<<4), "S6002C19");
    test_class_info(&lv, &cd_S6002C19);
    dp->~S6002C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C19(Test_S6002C19, "S6002C19", ABISELECT(36736,30252));

#else // __cplusplus

extern void _ZN8S6002C19C1Ev();
extern void _ZN8S6002C19D1Ev();
Name_Map name_map_S6002C19[] = {
  NSPAIR(_ZN8S6002C19C1Ev),
  NSPAIR(_ZN8S6002C19D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6002C19[];
extern void _ZN8S6002C193v11Ev();
static  VTBL_ENTRY vtc_S6002C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C19[0]),
  (VTBL_ENTRY)&_ZN8S6002C193v11Ev,
};
extern VTBL_ENTRY _ZTI8S6002C19[];
extern  VTBL_ENTRY _ZTV8S6002C19[];
Class_Descriptor cd_S6002C19 = {  "S6002C19", // class name
  0,0,//no base classes
  &(vtc_S6002C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(36736,30252), // object size
  NSPAIRA(_ZTI8S6002C19),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6002C19),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C22  : S6002C7 , S6002C12 {
  int s6002c22f0:13;
  __tsi64 s6002c22f1;
  int s6002c22f2;
  void *s6002c22f3[2];
  __tsi64 s6002c22f4;
  ::S6002C4 s6002c22f5;
  virtual  ~S6002C22(); // _ZN8S6002C22D2Ev
  virtual void  v12(); // _ZN8S6002C223v12Ev
  virtual void  v13(); // _ZN8S6002C223v13Ev
  S6002C22(); // tgen
};
//SIG(-1 S6002C22) C1{ BC2{ BC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} VBC4{ v4 v5 v6 Fi[2] FL[2] FC3[3]} VBC5{ VBC3 Fp FC3 Fi:3} VBC6{ v7 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} FC6 Fs Fi[2]} BC7{ VBC6 VBC8{ BC6 BC4 BC3 vd v8 FL[2] Fp[8] FC2 Fp Fi FC2 Fi} VBC3 VBC5 FL:44 Fp Fi FC2 FL[2] Fi[3] FC8 Fc:7 FC9{ BC6 vd v9 FC5 Fi Fp Fi}} vd v1 v2 Fi:13 FL Fi Fp[2] FL FC4}


 S6002C22 ::~S6002C22(){ note_dtor("S6002C22", this);}
void  S6002C22 ::v12(){vfunc_called(this, "_ZN8S6002C223v12Ev");}
void  S6002C22 ::v13(){vfunc_called(this, "_ZN8S6002C223v13Ev");}
S6002C22 ::S6002C22(){ note_ctor("S6002C22", this);} // tgen

static void Test_S6002C22()
{
  extern Class_Descriptor cd_S6002C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(788,2591)];
    init_test(&cd_S6002C22, buf);
    S6002C22 *dp, &lv = *(dp=new (buf) S6002C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12592,10360), "sizeof(S6002C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C22)");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*), 0, "S6002C22");
    check_base_class_offset(lv, (S6002C4*)(S6002C7*), ABISELECT(7376,6060), "S6002C22");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(8008,6596), "S6002C22");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*), ABISELECT(8008,6596), "S6002C22");
    check_base_class_offset(lv, (S6002C8*)(S6002C7*), ABISELECT(7840,6460), "S6002C22");
    check_base_class_offset(lv, (S6002C8*)(S6002C12*), ABISELECT(7840,6460), "S6002C22");
    check_base_class_offset(lv, (S6002C9*)(S6002C7*), ABISELECT(8160,6720), "S6002C22");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*), ABISELECT(8160,6720), "S6002C22");
    check_base_class_offset(lv, (S6002C7*), 0, "S6002C22");
    check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(8464,6964), "S6002C22");
    check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(8760,7208), "S6002C22");
    check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(9224,7608), "S6002C22");
    check_base_class_offset(lv, (S6002C10*)(S6002C12*), ABISELECT(8464,6964), "S6002C22");
    check_base_class_offset(lv, (S6002C12*), ABISELECT(464,380), "S6002C22");
    set_bf_and_test(lv, s6002c22f0, ABISELECT(6864,5628), 0, 13, 1, "S6002C22");
    set_bf_and_test(lv, s6002c22f0, ABISELECT(6864,5628), 0, 13, hide_sll(1LL<<12), "S6002C22");
    check_field_offset(lv, s6002c22f1, ABISELECT(6872,5632), "S6002C22.s6002c22f1");
    check_field_offset(lv, s6002c22f2, ABISELECT(6880,5640), "S6002C22.s6002c22f2");
    check_field_offset(lv, s6002c22f3, ABISELECT(6888,5644), "S6002C22.s6002c22f3");
    check_field_offset(lv, s6002c22f4, ABISELECT(6904,5652), "S6002C22.s6002c22f4");
    check_field_offset(lv, s6002c22f5, ABISELECT(6912,5660), "S6002C22.s6002c22f5");
    test_class_info(&lv, &cd_S6002C22);
    dp->~S6002C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C22(Test_S6002C22, "S6002C22", ABISELECT(12592,10360));

#else // __cplusplus

extern void _ZN8S6002C22C1Ev();
extern void _ZN8S6002C22D2Ev();
Name_Map name_map_S6002C22[] = {
  NSPAIR(_ZN8S6002C22C1Ev),
  NSPAIR(_ZN8S6002C22D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
static Base_Class bases_S6002C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(7376,6060), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(8008,6596), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6002C8,    ABISELECT(7840,6460), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6002C9,    ABISELECT(8160,6720), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6002C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C9,    ABISELECT(8464,6964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(8760,7208), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(9224,7608), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(8464,6964), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6002C12,    ABISELECT(464,380), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C22[];
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C22D1Ev();
extern void _ZN8S6002C22D0Ev();
extern void _ZN8S6002C223v12Ev();
extern void _ZN8S6002C223v13Ev();
extern void ABISELECT(_ZThn464_N8S6002C22D1Ev,_ZThn380_N8S6002C22D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C22D0Ev,_ZThn380_N8S6002C22D0Ev)();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C22D1Ev,_ZTv0_n16_N8S6002C22D1Ev)();
extern void ABISELECT(_ZThn8464_N8S6002C22D1Ev,_ZThn6964_N8S6002C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C22D0Ev,_ZTv0_n16_N8S6002C22D0Ev)();
extern void ABISELECT(_ZThn8464_N8S6002C22D0Ev,_ZThn6964_N8S6002C22D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY vtc_S6002C22[] = {
  ABISELECT(8464,6964),
  ABISELECT(8160,6720),
  ABISELECT(8008,6596),
  ABISELECT(7840,6460),
  ABISELECT(7376,6060),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C22D0Ev,
  (VTBL_ENTRY)&_ZN8S6002C223v12Ev,
  (VTBL_ENTRY)&_ZN8S6002C223v13Ev,
  ABISELECT(7376,6080),
  ABISELECT(7544,6216),
  ABISELECT(8000,6584),
  ABISELECT(7696,6340),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C22D1Ev,_ZThn380_N8S6002C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C22D0Ev,_ZThn380_N8S6002C22D0Ev),
  0,
  0,
  0,
  ABISELECT(-7376,-6060),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(168,136),
  ABISELECT(-7840,-6460),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  0,
  ABISELECT(-8008,-6596),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-8160,-6720),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-8464,-6964),
  0,
  ABISELECT(-8464,-6964),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C22D1Ev,_ZTv0_n16_N8S6002C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C22D0Ev,_ZTv0_n16_N8S6002C22D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-8760,-7208),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-9224,-7608),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern VTBL_ENTRY _ZTV8S6002C22[];
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__8S6002C22[] = {
  ABISELECT(8160,6720),
  ABISELECT(8008,6596),
  ABISELECT(7840,6460),
  ABISELECT(7376,6060),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C7__8S6002C22[] = {
  0,
  0,
  0,
  ABISELECT(-7376,-6060),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C7__8S6002C22[] = {
  ABISELECT(168,136),
  ABISELECT(-7840,-6460),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C7__8S6002C22[] = {
  0,
  ABISELECT(-8008,-6596),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C7__8S6002C22[] = {
  0,
  ABISELECT(-8160,-6720),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C22[] = {
  ABISELECT(7376,6080),
  ABISELECT(7544,6216),
  ABISELECT(8000,6584),
  ABISELECT(7696,6340),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C12__8S6002C22[] = {
  0,
  ABISELECT(-7696,-6340),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn8000_N8S6002C12D1Ev,_ZThn6584_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn8000_N8S6002C12D0Ev,_ZThn6584_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C12__8S6002C22[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-8000,-6584),
  0,
  ABISELECT(-8000,-6584),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C12__8S6002C22[] = {
  ABISELECT(-8296,-6828),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C12__8S6002C22[] = {
  ABISELECT(-8760,-7228),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C12__8S6002C22[] = {
  0,
  ABISELECT(-7544,-6216),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C12__8S6002C22[] = {
  ABISELECT(168,136),
  ABISELECT(-7376,-6080),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C22[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__8S6002C22[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTT_ENTRY vtt_S6002C22[] = {
  {&(_ZTV8S6002C22[7]),  7,60},
  {&(_tg__ZTV7S6002C7__8S6002C22[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C7__8S6002C22[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C7__8S6002C22[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C7__8S6002C22[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C7__8S6002C22[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C22[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C12__8S6002C22[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C12__8S6002C22[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C12__8S6002C22[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C12__8S6002C22[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C12__8S6002C22[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C12__8S6002C22[3]),  3,3},
  {&(_ZTV8S6002C22[25]),  25,60},
  {&(_ZTV8S6002C22[31]),  31,60},
  {&(_ZTV8S6002C22[34]),  34,60},
  {&(_ZTV8S6002C22[38]),  38,60},
  {&(_ZTV8S6002C22[18]),  18,60},
  {&(_ZTV8S6002C22[48]),  48,60},
  {&(_ZTV8S6002C22[54]),  54,60},
  {&(_ZTV8S6002C22[59]),  59,60},
  {&(_tg__ZTV7S6002C8__8S6002C22[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__8S6002C22[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6002C22[];
extern  VTBL_ENTRY _ZTV8S6002C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C22[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8000_N8S6002C12D0Ev,_ZThn6584_N8S6002C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8000_N8S6002C12D1Ev,_ZThn6584_N8S6002C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C22D0Ev,_ZTv0_n16_N8S6002C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N8S6002C22D0Ev,_ZThn6964_N8S6002C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C22D1Ev,_ZTv0_n16_N8S6002C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N8S6002C22D1Ev,_ZThn6964_N8S6002C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C22 = {  "S6002C22", // class name
  bases_S6002C22, 11,
  &(vtc_S6002C22[0]), // expected_vtbl_contents
  &(vtt_S6002C22[0]), // expected_vtt_contents
  ABISELECT(12592,10360), // object size
  NSPAIRA(_ZTI8S6002C22),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6002C22),60, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6002C22),23, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C23  : virtual S6002C10 , virtual S6002C9 {
  __tsi64 s6002c23f0;
  int s6002c23f1;
  void *s6002c23f2;
  void *s6002c23f3[3];
  __tsi64 s6002c23f4;
  ~S6002C23(); // tgen
  S6002C23(); // tgen
};
//SIG(-1 S6002C23) C1{ VBC2{ BC3{ v1 FL FD Fp Fc FC4{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC5{ v2 v3 v4 Fi[2] FL[2] FC4[3]} BC4 vd v6 FL[2] Fp[8] FC6{ BC4 VBC5 VBC7{ VBC4 Fp FC4 Fi:3} VBC3 FC3 Fs Fi[2]} Fp Fi FC6 Fi} VBC3 FL Fi Fp[4] FL}


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

static void Test_S6002C23()
{
  extern Class_Descriptor cd_S6002C23;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(282,921)];
    init_test(&cd_S6002C23, buf);
    S6002C23 *dp, &lv = *(dp=new (buf) S6002C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4496,3680), "sizeof(S6002C23)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C23)");
    check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(64,40), "S6002C23");
    check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(360,284), "S6002C23");
    check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(824,684), "S6002C23");
    check_base_class_offset(lv, (S6002C10*), ABISELECT(64,40), "S6002C23");
    /*is_ambiguous_... S6002C23::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*), ABISELECT(4192,3436), "S6002C23");
    check_field_offset(lv, s6002c23f0, ABISELECT(8,4), "S6002C23.s6002c23f0");
    check_field_offset(lv, s6002c23f1, ABISELECT(16,12), "S6002C23.s6002c23f1");
    check_field_offset(lv, s6002c23f2, ABISELECT(24,16), "S6002C23.s6002c23f2");
    check_field_offset(lv, s6002c23f3, ABISELECT(32,20), "S6002C23.s6002c23f3");
    check_field_offset(lv, s6002c23f4, ABISELECT(56,32), "S6002C23.s6002c23f4");
    test_class_info(&lv, &cd_S6002C23);
    dp->~S6002C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C23(Test_S6002C23, "S6002C23", ABISELECT(4496,3680));

#else // __cplusplus

extern void _ZN8S6002C23C1Ev();
extern void _ZN8S6002C23D1Ev();
Name_Map name_map_S6002C23[] = {
  NSPAIR(_ZN8S6002C23C1Ev),
  NSPAIR(_ZN8S6002C23D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
static Base_Class bases_S6002C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6002C9,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(360,284), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(824,684), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(64,40), //bcp->offset
    6, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C9,    ABISELECT(4192,3436), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6002C23[];
extern void _ZN8S6002C23D1Ev();
extern void _ZN8S6002C23D0Ev();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C23D1Ev,_ZTv0_n16_N8S6002C23D1Ev)();
extern void ABISELECT(_ZThn64_N8S6002C23D1Ev,_ZThn40_N8S6002C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C23D0Ev,_ZTv0_n16_N8S6002C23D0Ev)();
extern void ABISELECT(_ZThn64_N8S6002C23D0Ev,_ZThn40_N8S6002C23D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY vtc_S6002C23[] = {
  ABISELECT(4192,3436),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C23[0]),
  (VTBL_ENTRY)&_ZN8S6002C23D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C23D0Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-64,-40),
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S6002C23[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C23D1Ev,_ZTv0_n16_N8S6002C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C23D0Ev,_ZTv0_n16_N8S6002C23D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-360,-284),
  (VTBL_ENTRY)&(_ZTI8S6002C23[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-824,-684),
  (VTBL_ENTRY)&(_ZTI8S6002C23[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-4192,-3436),
  (VTBL_ENTRY)&(_ZTI8S6002C23[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S6002C23[];
static  VTT_ENTRY vtt_S6002C23[] = {
  {&(_ZTV8S6002C23[4]),  4,31},
  {&(_ZTV8S6002C23[15]),  15,31},
  {&(_ZTV8S6002C23[21]),  21,31},
  {&(_ZTV8S6002C23[26]),  26,31},
  {&(_ZTV8S6002C23[30]),  30,31},
};
extern VTBL_ENTRY _ZTI8S6002C23[];
extern  VTBL_ENTRY _ZTV8S6002C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C23[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C23D0Ev,_ZTv0_n16_N8S6002C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S6002C23D0Ev,_ZThn40_N8S6002C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C23D1Ev,_ZTv0_n16_N8S6002C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S6002C23D1Ev,_ZThn40_N8S6002C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C23 = {  "S6002C23", // class name
  bases_S6002C23, 5,
  &(vtc_S6002C23[0]), // expected_vtbl_contents
  &(vtt_S6002C23[0]), // expected_vtt_contents
  ABISELECT(4496,3680), // object size
  NSPAIRA(_ZTI8S6002C23),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6002C23),31, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6002C23),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6002C1  : S19762C2 , virtual S6002C17 , virtual S6002C19 , S6002C5 , virtual S6002C22 {
  int s6002c1f0;
  void *s6002c1f1;
  int s6002c1f2;
  ::S6002C23 s6002c1f3;
  char s6002c1f4:3;
  ::S6002C5 s6002c1f5;
  void *s6002c1f6;
  __tsi64 s6002c1f7:64;
  int s6002c1f8;
  ~S6002C1(); // tgen
  S6002C1(); // tgen
};
//SIG(1 S6002C1) C1{ BC2{ m Fp Fi[2] Fs Fc Fi FC3{ VBC4{ v15 v16 v17 Fi[2] FL[2] FC5{ v18 Fs:6 Fl Fs:4 FL[13] Fp}[3]} BC6{ VBC5 VBC7{ BC5 VBC4 VBC8{ VBC5 Fp FC5 Fi:3} VBC9{ v19 FL FD Fp Fc FC5 Fp[2] FL[8] Fs Fp FL:64} FC9 Fs Fi[2]} BC10{ BC9 BC4 BC5 vd v20 FL[2] Fp[8] FC7 Fp Fi FC7 Fi} BC11{ VBC10 VBC5 VBC8 BC7 BC12{ VBC9 VBC10 VBC5 VBC8 FL:44 Fp Fi FC7 FL[2] Fi[3] FC10 Fc:7 FC13{ BC9 vd v24 FC8 Fi Fp Fi}} v21 FC10 FL Fc:7} v22 v23 FC12 Fs Fi:8} BC14{ VBC8 FC12 Fi:6 Fi FL} VBC15{ VBC9 BC4 VBC11 Fc:8 Fi} VBC16{ BC5 VBC9 VBC15 BC7 BC13 vd v25 Fi FC7 Fi Fs FL:8 Fi} v14 FC15 FC6} Fi} VBC17{ VBC18{ v1 v2 v3 Fi[2] FL[2] FC19{ v5 Fs:6 Fl Fs:4 FL[13] Fp}[3]} BC20{ VBC21{ v4 FL FD Fp Fc FC19 Fp[2] FL[8] Fs Fp FL:64} BC18 VBC22{ VBC23{ BC21 BC18 BC19 vd v6 FL[2] Fp[8] FC24{ BC19 VBC18 VBC25{ VBC19 Fp FC19 Fi:3} VBC21 FC21 Fs Fi[2]} Fp Fi FC24 Fi} VBC19 VBC25 BC24 BC26{ VBC21 VBC23 VBC19 VBC25 FL:44 Fp Fi FC24 FL[2] Fi[3] FC23 Fc:7 FC27{ BC21 vd v10 FC25 Fi Fp Fi}} v7 FC23 FL Fc:7} Fc:8 Fi} VBC28{ VBC19 VBC24 BC23 BC22 v8 v9 FC26 Fs Fi:8} BC26 BC27 vd FU29{ m FL Fi FL Fs Fi} FL FD Fp FL Fi FC20 Fi FC19} VBC30{ v11 FC31{} FC32{ BC24 VBC20 BC33{ BC19 VBC21 VBC20 BC24 BC27 vd v28 Fi FC24 Fi Fs FL:8 Fi} v26 v27 FC20 Fi Fi Fc Fi FL Fi Fi Fp Fp Fi Fi} Fi Fc:5} BC19 VBC34{ BC24 BC26 vd v12 v13 Fi:13 FL Fi Fp[2] FL FC18} Fi Fp Fi FC35{ VBC23 VBC21 FL Fi Fp Fp[3] FL} Fc:3 FC19 Fp FL:64 Fi}


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

static void Test_S6002C1()
{
  extern Class_Descriptor cd_S6002C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13905,45723)];
    init_test(&cd_S6002C1, buf);
    S6002C1 *dp, &lv = *(dp=new (buf) S6002C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(222464,182888), "sizeof(S6002C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6002C1)");
    check_base_class_offset(lv, (S19762C2*), ABISELECT(144,124), "S6002C1");
    /*is_ambiguous_... S6002C17::S6002C4 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C17*), ABISELECT(135384,111276), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C11*), ABISELECT(135384,111276), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C7*), ABISELECT(135384,111276), "S6002C1");
    check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(135384,111276), "S6002C1");
    check_base_class_offset(lv, (S6002C4*)(S6002C7*)(S6002C22*), ABISELECT(135384,111276), "S6002C1");
    /*is_ambiguous_... S6002C15::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C15*)(S6002C17*), ABISELECT(135856,111676), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C11*), ABISELECT(135856,111676), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C11*), ABISELECT(135856,111676), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C7*), ABISELECT(135856,111676), "S6002C1");
    check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(135856,111676), "S6002C1");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(135856,111676), "S6002C1");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C17*), ABISELECT(135856,111676), "S6002C1");
    check_base_class_offset(lv, (S6002C9*)(S6002C7*)(S6002C22*), ABISELECT(135856,111676), "S6002C1");
    /*is_ambiguous_... S6002C12::S6002C9 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C12*)(S6002C22*), ABISELECT(135856,111676), "S6002C1");
    /*is_ambiguous_... S6002C15::S6002C4 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C15*)(S6002C17*), ABISELECT(110960,91188), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C10*), ABISELECT(147168,120956), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C10*), ABISELECT(147464,121200), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C10*), ABISELECT(147928,121600), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C10*)(S6002C11*), ABISELECT(147168,120956), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C11*), ABISELECT(147168,120956), "S6002C1");
    check_base_class_offset(lv, (S6002C10*)(S6002C11*)(S6002C6*), ABISELECT(147168,120956), "S6002C1");
    check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(147168,120956), "S6002C1");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C17*), ABISELECT(147168,120956), "S6002C1");
    check_base_class_offset(lv, (S6002C10*)(S6002C12*)(S6002C22*), ABISELECT(147168,120956), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C11*), ABISELECT(151288,124352), "S6002C1");
    check_base_class_offset(lv, (S6002C5*)(S6002C8*), ABISELECT(151288,124352), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C11*), ABISELECT(151288,124352), "S6002C1");
    /*is_ambiguous_... S6002C6::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C6*), ABISELECT(151288,124352), "S6002C1");
    /*is_ambiguous_... S6002C11::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C11*)(S6002C6*), ABISELECT(151288,124352), "S6002C1");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(151288,124352), "S6002C1");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C17*), ABISELECT(151288,124352), "S6002C1");
    /*is_ambiguous_... S6002C12::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C12*)(S6002C22*), ABISELECT(151288,124352), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C11*), ABISELECT(151432,124476), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C11*), ABISELECT(151432,124476), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C11*), ABISELECT(151432,124476), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C7*), ABISELECT(151432,124476), "S6002C1");
    check_base_class_offset(lv, (S6002C8*)(S6002C11*)(S6002C6*), ABISELECT(151432,124476), "S6002C1");
    check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(151432,124476), "S6002C1");
    check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(151432,124476), "S6002C1");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C17*), ABISELECT(151432,124476), "S6002C1");
    check_base_class_offset(lv, (S6002C8*)(S6002C7*)(S6002C22*), ABISELECT(151432,124476), "S6002C1");
    check_base_class_offset(lv, (S6002C8*)(S6002C12*)(S6002C22*), ABISELECT(151432,124476), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C11*), ABISELECT(136160,111920), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C7*)(S6002C11*), ABISELECT(136160,111920), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C11 */ AMB_check_base_class_offset(lv, (S6002C12*)(S6002C11*), ABISELECT(136624,112300), "S6002C1");
    check_base_class_offset(lv, (S6002C11*)(S6002C15*)(S6002C17*), ABISELECT(136160,111920), "S6002C1");
    check_base_class_offset(lv, (S6002C15*)(S6002C17*), ABISELECT(110960,91188), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*), ABISELECT(177888,146196), "S6002C1");
    /*is_ambiguous_... S6002C6::S6002C7 */ AMB_check_base_class_offset(lv, (S6002C7*)(S6002C6*), ABISELECT(177888,146196), "S6002C1");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C9*)(S6002C10*)(S6002C6*), ABISELECT(151600,124612), "S6002C1");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C4*)(S6002C10*)(S6002C6*), ABISELECT(151896,124856), "S6002C1");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C10*)(S6002C6*), ABISELECT(152360,125256), "S6002C1");
    /*is_ambiguous_... S6002C6::S6002C10 */ AMB_check_base_class_offset(lv, (S6002C10*)(S6002C6*), ABISELECT(151600,124612), "S6002C1");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(155728,128008), "S6002C1");
    check_base_class_offset(lv, (S6002C7*)(S6002C11*)(S6002C6*), ABISELECT(155728,128008), "S6002C1");
    check_base_class_offset(lv, (S6002C12*)(S6002C11*)(S6002C6*), ABISELECT(156192,128388), "S6002C1");
    check_base_class_offset(lv, (S6002C11*)(S6002C6*), ABISELECT(155728,128008), "S6002C1");
    check_base_class_offset(lv, (S6002C6*)(S6002C17*), ABISELECT(151600,124612), "S6002C1");
    /*is_ambiguous_... S6002C17::S6002C12 */ AMB_check_base_class_offset(lv, (S6002C12*)(S6002C17*), ABISELECT(111440,91596), "S6002C1");
    check_base_class_offset(lv, (S6002C9*)(S6002C13*)(S6002C17*), ABISELECT(117840,96844), "S6002C1");
    check_base_class_offset(lv, (S6002C13*)(S6002C17*), ABISELECT(117840,96844), "S6002C1");
    check_base_class_offset(lv, (S6002C17*), ABISELECT(110960,91188), "S6002C1");
    check_base_class_offset(lv, (S6002C19*), ABISELECT(178352,146576), "S6002C1");
    /*is_ambiguous_... S6002C1::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*), 0, "S6002C1");
    /*is_ambiguous_... S6002C7::S6002C5 */ AMB_check_base_class_offset(lv, (S6002C5*)(S6002C7*)(S6002C22*), ABISELECT(215088,176828), "S6002C1");
    check_base_class_offset(lv, (S6002C7*)(S6002C22*), ABISELECT(215088,176828), "S6002C1");
    check_base_class_offset(lv, (S6002C12*)(S6002C22*), ABISELECT(215552,177208), "S6002C1");
    check_base_class_offset(lv, (S6002C22*), ABISELECT(215088,176828), "S6002C1");
    check_field_offset(lv, s6002c1f0, ABISELECT(106260,87352), "S6002C1.s6002c1f0");
    check_field_offset(lv, s6002c1f1, ABISELECT(106264,87356), "S6002C1.s6002c1f1");
    check_field_offset(lv, s6002c1f2, ABISELECT(106272,87360), "S6002C1.s6002c1f2");
    check_field_offset(lv, s6002c1f3, ABISELECT(106288,87364), "S6002C1.s6002c1f3");
    set_bf_and_test(lv, s6002c1f4, ABISELECT(110784,91044), 0, 3, 1, "S6002C1");
    set_bf_and_test(lv, s6002c1f4, ABISELECT(110784,91044), 0, 3, hide_sll(1LL<<2), "S6002C1");
    check_field_offset(lv, s6002c1f5, ABISELECT(110792,91048), "S6002C1.s6002c1f5");
    check_field_offset(lv, s6002c1f6, ABISELECT(110936,91172), "S6002C1.s6002c1f6");
    set_bf_and_test(lv, s6002c1f7, ABISELECT(110944,91176), 0, 64, 1, "S6002C1");
    set_bf_and_test(lv, s6002c1f7, ABISELECT(110944,91176), 0, 64, hide_sll(1LL<<63), "S6002C1");
    check_field_offset(lv, s6002c1f8, ABISELECT(110952,91184), "S6002C1.s6002c1f8");
    test_class_info(&lv, &cd_S6002C1);
    dp->~S6002C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6002C1(Test_S6002C1, "S6002C1", ABISELECT(222464,182888));

#else // __cplusplus

extern void _ZN7S6002C1C1Ev();
extern void _ZN7S6002C1D1Ev();
Name_Map name_map_S6002C1[] = {
  NSPAIR(_ZN7S6002C1C1Ev),
  NSPAIR(_ZN7S6002C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19762C2;
extern VTBL_ENTRY _ZTI8S19762C2[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C8;
extern VTBL_ENTRY _ZTI7S6002C8[];
extern  VTBL_ENTRY _ZTV7S6002C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C8[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C11;
extern VTBL_ENTRY _ZTI8S6002C11[];
extern  VTBL_ENTRY _ZTV8S6002C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C11[];
extern Class_Descriptor cd_S6002C15;
extern VTBL_ENTRY _ZTI8S6002C15[];
extern  VTBL_ENTRY _ZTV8S6002C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C15[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C4;
extern VTBL_ENTRY _ZTI7S6002C4[];
extern  VTBL_ENTRY _ZTV7S6002C4[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C10;
extern VTBL_ENTRY _ZTI8S6002C10[];
extern  VTBL_ENTRY _ZTV8S6002C10[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C11;
extern VTBL_ENTRY _ZTI8S6002C11[];
extern  VTBL_ENTRY _ZTV8S6002C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C11[];
extern Class_Descriptor cd_S6002C6;
extern VTBL_ENTRY _ZTI7S6002C6[];
extern  VTBL_ENTRY _ZTV7S6002C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C6[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C9;
extern VTBL_ENTRY _ZTI7S6002C9[];
extern  VTBL_ENTRY _ZTV7S6002C9[];
extern Class_Descriptor cd_S6002C13;
extern VTBL_ENTRY _ZTI8S6002C13[];
extern  VTBL_ENTRY _ZTV8S6002C13[];
extern Class_Descriptor cd_S6002C17;
extern VTBL_ENTRY _ZTI8S6002C17[];
extern  VTBL_ENTRY _ZTV8S6002C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C17[];
extern Class_Descriptor cd_S6002C19;
extern VTBL_ENTRY _ZTI8S6002C19[];
extern  VTBL_ENTRY _ZTV8S6002C19[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C5;
extern VTBL_ENTRY _ZTI7S6002C5[];
extern  VTBL_ENTRY _ZTV7S6002C5[];
extern Class_Descriptor cd_S6002C7;
extern VTBL_ENTRY _ZTI7S6002C7[];
extern  VTBL_ENTRY _ZTV7S6002C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C7[];
extern Class_Descriptor cd_S6002C12;
extern VTBL_ENTRY _ZTI8S6002C12[];
extern  VTBL_ENTRY _ZTV8S6002C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C12[];
extern Class_Descriptor cd_S6002C22;
extern VTBL_ENTRY _ZTI8S6002C22[];
extern  VTBL_ENTRY _ZTV8S6002C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6002C22[];
static Base_Class bases_S6002C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C2,    ABISELECT(144,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C4,    ABISELECT(135384,111276), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6002C9,    ABISELECT(135856,111676), //bcp->offset
    59, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6002C4,    ABISELECT(110960,91188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6002C9,    ABISELECT(147168,120956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(147464,121200), //bcp->offset
    98, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(147928,121600), //bcp->offset
    103, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(147168,120956), //bcp->offset
    85, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(151288,124352), //bcp->offset
    106, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6002C8,    ABISELECT(151432,124476), //bcp->offset
    110, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6002C5,    ABISELECT(136160,111920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(136160,111920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6002C12,    ABISELECT(136624,112300), //bcp->offset
    77, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6002C11,    ABISELECT(136160,111920), //bcp->offset
    63, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6002C15,    ABISELECT(110960,91188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(177888,146196), //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(177888,146196), //bcp->offset
    164, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S6002C9,    ABISELECT(151600,124612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6002C4,    ABISELECT(151896,124856), //bcp->offset
    137, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(152360,125256), //bcp->offset
    142, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6002C10,    ABISELECT(151600,124612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6002C5,    ABISELECT(155728,128008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(155728,128008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6002C12,    ABISELECT(156192,128388), //bcp->offset
    156, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6002C11,    ABISELECT(155728,128008), //bcp->offset
    145, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6002C6,    ABISELECT(151600,124612), //bcp->offset
    113, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S6002C12,    ABISELECT(111440,91596), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6002C9,    ABISELECT(117840,96844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6002C13,    ABISELECT(117840,96844), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6002C17,    ABISELECT(110960,91188), //bcp->offset
    16, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C19,    ABISELECT(178352,146576), //bcp->offset
    172, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6002C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6002C5,    ABISELECT(215088,176828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S6002C7,    ABISELECT(215088,176828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    118, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6002C12,    ABISELECT(215552,177208), //bcp->offset
    192, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6002C22,    ABISELECT(215088,176828), //bcp->offset
    176, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    117, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6002C1[];
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C1D1Ev();
extern void _ZN7S6002C1D0Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void ABISELECT(_ZTv0_n112_N7S6002C1D1Ev,_ZTv0_n56_N7S6002C1D1Ev)();
extern void ABISELECT(_ZThn110960_N7S6002C1D1Ev,_ZThn91188_N7S6002C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S6002C1D0Ev,_ZTv0_n56_N7S6002C1D0Ev)();
extern void ABISELECT(_ZThn110960_N7S6002C1D0Ev,_ZThn91188_N7S6002C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn480_n112_N7S6002C1D1Ev,_ZTvn408_n56_N7S6002C1D1Ev)();
extern void ABISELECT(_ZTvn480_n112_N7S6002C1D0Ev,_ZTvn408_n56_N7S6002C1D0Ev)();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTvn6880_n112_N7S6002C1D1Ev,_ZTvn5656_n56_N7S6002C1D1Ev)();
extern void ABISELECT(_ZTvn6880_n112_N7S6002C1D0Ev,_ZTvn5656_n56_N7S6002C1D0Ev)();
extern void _ZN8S6002C133v10Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N7S6002C1D1Ev,_ZTv0_n40_N7S6002C1D1Ev)();
extern void ABISELECT(_ZThn136160_N7S6002C1D1Ev,_ZThn111920_N7S6002C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6002C1D0Ev,_ZTv0_n40_N7S6002C1D0Ev)();
extern void ABISELECT(_ZThn136160_N7S6002C1D0Ev,_ZThn111920_N7S6002C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N7S6002C1D1Ev,_ZTvn380_n40_N7S6002C1D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N7S6002C1D0Ev,_ZTvn380_n40_N7S6002C1D0Ev)();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N7S6002C1D1Ev,_ZTv0_n16_N7S6002C1D1Ev)();
extern void ABISELECT(_ZThn147168_N7S6002C1D1Ev,_ZThn120956_N7S6002C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6002C1D0Ev,_ZTv0_n16_N7S6002C1D0Ev)();
extern void ABISELECT(_ZThn147168_N7S6002C1D0Ev,_ZThn120956_N7S6002C1D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n80_N7S6002C1D1Ev,_ZTv0_n40_N7S6002C1D1Ev)();
extern void ABISELECT(_ZThn151600_N7S6002C1D1Ev,_ZThn124612_N7S6002C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6002C1D0Ev,_ZTv0_n40_N7S6002C1D0Ev)();
extern void ABISELECT(_ZThn151600_N7S6002C1D0Ev,_ZThn124612_N7S6002C1D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C62v8Ev();
extern void _ZN7S6002C62v9Ev();
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTvn4128_n80_N7S6002C1D1Ev,_ZTvn3396_n40_N7S6002C1D1Ev)();
extern void ABISELECT(_ZTvn4128_n80_N7S6002C1D0Ev,_ZTvn3396_n40_N7S6002C1D0Ev)();
extern void ABISELECT(_ZTvn4592_n80_N7S6002C1D1Ev,_ZTvn3776_n40_N7S6002C1D1Ev)();
extern void ABISELECT(_ZTvn4592_n80_N7S6002C1D0Ev,_ZTvn3776_n40_N7S6002C1D0Ev)();
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C193v11Ev();
extern void _ZN7S6002C52v5Ev();
extern void ABISELECT(_ZTv0_n72_N7S6002C1D1Ev,_ZTv0_n36_N7S6002C1D1Ev)();
extern void ABISELECT(_ZThn215088_N7S6002C1D1Ev,_ZThn176828_N7S6002C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6002C1D0Ev,_ZTv0_n36_N7S6002C1D0Ev)();
extern void ABISELECT(_ZThn215088_N7S6002C1D0Ev,_ZThn176828_N7S6002C1D0Ev)() __attribute__((weak));
extern void _ZN8S6002C223v12Ev();
extern void _ZN8S6002C223v13Ev();
extern void ABISELECT(_ZTvn464_n72_N7S6002C1D1Ev,_ZTvn380_n36_N7S6002C1D1Ev)();
extern void ABISELECT(_ZTvn464_n72_N7S6002C1D0Ev,_ZTvn380_n36_N7S6002C1D0Ev)();
static  VTBL_ENTRY vtc_S6002C1[] = {
  ABISELECT(215088,176828),
  ABISELECT(178352,146576),
  ABISELECT(177888,146196),
  ABISELECT(151600,124612),
  ABISELECT(151432,124476),
  ABISELECT(151288,124352),
  ABISELECT(147168,120956),
  ABISELECT(136160,111920),
  ABISELECT(135856,111676),
  ABISELECT(135384,111276),
  ABISELECT(110960,91188),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6002C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6002C1D0Ev,
  ABISELECT(6880,5656),
  ABISELECT(6880,5656),
  ABISELECT(-110960,-91188),
  0,
  0,
  0,
  ABISELECT(66928,55008),
  ABISELECT(40640,33424),
  ABISELECT(24424,20088),
  ABISELECT(40472,33288),
  ABISELECT(40328,33164),
  ABISELECT(36208,29768),
  ABISELECT(25200,20732),
  ABISELECT(24896,20488),
  ABISELECT(-110960,-91188),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S6002C1D1Ev,_ZTv0_n56_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S6002C1D0Ev,_ZTv0_n56_N7S6002C1D0Ev),
  ABISELECT(39992,32880),
  ABISELECT(39848,32756),
  ABISELECT(35728,29360),
  ABISELECT(24416,20080),
  ABISELECT(-111440,-91596),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n112_N7S6002C1D1Ev,_ZTvn408_n56_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn480_n112_N7S6002C1D0Ev,_ZTvn408_n56_N7S6002C1D0Ev),
  ABISELECT(-117840,-96844),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn6880_n112_N7S6002C1D1Ev,_ZTvn5656_n56_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn6880_n112_N7S6002C1D0Ev,_ZTvn5656_n56_N7S6002C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C133v10Ev,
  0,
  0,
  0,
  ABISELECT(-135384,-111276),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  0,
  ABISELECT(-135856,-111676),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  ABISELECT(-136160,-111920),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(-776,-644),
  ABISELECT(-136160,-111920),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6002C1D1Ev,_ZTv0_n40_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6002C1D0Ev,_ZTv0_n40_N7S6002C1D0Ev),
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-136624,-112300),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N7S6002C1D1Ev,_ZTvn380_n40_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N7S6002C1D0Ev,_ZTvn380_n40_N7S6002C1D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-147168,-120956),
  0,
  ABISELECT(-147168,-120956),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6002C1D1Ev,_ZTv0_n16_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6002C1D0Ev,_ZTv0_n16_N7S6002C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  ABISELECT(-147464,-121200),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-147928,-121600),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-151288,-124352),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-144,-124),
  ABISELECT(-151432,-124476),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  ABISELECT(4128,3396),
  0,
  0,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-151600,-124612),
  0,
  ABISELECT(-4432,-3656),
  ABISELECT(-15744,-12936),
  ABISELECT(-168,-136),
  ABISELECT(-16216,-13336),
  ABISELECT(26288,21584),
  ABISELECT(-312,-260),
  ABISELECT(-151600,-124612),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6002C1D1Ev,_ZTv0_n40_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6002C1D0Ev,_ZTv0_n40_N7S6002C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v8Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v9Ev,
  ABISELECT(-151896,-124856),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  ABISELECT(-152360,-125256),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  ABISELECT(-8560,-7052),
  ABISELECT(-19872,-16332),
  ABISELECT(-4440,-3656),
  ABISELECT(-4296,-3532),
  ABISELECT(-20344,-16732),
  ABISELECT(-155728,-128008),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn4128_n80_N7S6002C1D1Ev,_ZTvn3396_n40_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4128_n80_N7S6002C1D0Ev,_ZTvn3396_n40_N7S6002C1D0Ev),
  ABISELECT(-4760,-3912),
  ABISELECT(-4904,-4036),
  ABISELECT(-9024,-7432),
  ABISELECT(-20336,-16712),
  ABISELECT(-156192,-128388),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4592_n80_N7S6002C1D1Ev,_ZTvn3776_n40_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4592_n80_N7S6002C1D0Ev,_ZTvn3776_n40_N7S6002C1D0Ev),
  0,
  ABISELECT(-42032,-34520),
  ABISELECT(-26600,-21844),
  ABISELECT(-26456,-21720),
  ABISELECT(-42504,-34920),
  ABISELECT(-177888,-146196),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  0,
  ABISELECT(-178352,-146576),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN8S6002C193v11Ev,
  0,
  0,
  ABISELECT(-215088,-176828),
  0,
  ABISELECT(-67920,-55872),
  ABISELECT(-79232,-65152),
  ABISELECT(-63800,-52476),
  ABISELECT(-63656,-52352),
  ABISELECT(-79704,-65552),
  ABISELECT(-215088,-176828),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6002C1D1Ev,_ZTv0_n36_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6002C1D0Ev,_ZTv0_n36_N7S6002C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C223v12Ev,
  (VTBL_ENTRY)&_ZN8S6002C223v13Ev,
  ABISELECT(-64120,-52732),
  ABISELECT(-64264,-52856),
  ABISELECT(-68384,-56252),
  ABISELECT(-79696,-65532),
  ABISELECT(-215552,-177208),
  (VTBL_ENTRY)&(_ZTI7S6002C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n72_N7S6002C1D1Ev,_ZTvn380_n36_N7S6002C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n72_N7S6002C1D0Ev,_ZTvn380_n36_N7S6002C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6002C1[];
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN8S6002C17D1Ev();
extern void _ZN8S6002C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C17__7S6002C1[] = {
  ABISELECT(66928,55008),
  ABISELECT(40640,33424),
  ABISELECT(24424,20088),
  ABISELECT(40472,33288),
  ABISELECT(40328,33164),
  ABISELECT(36208,29768),
  ABISELECT(25200,20732),
  ABISELECT(24896,20488),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&_ZN8S6002C17D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C17D0Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
extern void _ZN8S6002C15D1Ev();
extern void _ZN8S6002C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C158S6002C17__7S6002C1[] = {
  ABISELECT(24424,20088),
  ABISELECT(40472,33288),
  ABISELECT(40328,33164),
  ABISELECT(36208,29768),
  ABISELECT(25200,20732),
  ABISELECT(24896,20488),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C15D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C158S6002C17__7S6002C1[] = {
  0,
  ABISELECT(-24896,-20488),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn25200_N8S6002C15D1Ev,_ZThn20732_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn25200_N8S6002C15D0Ev,_ZThn20732_N8S6002C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C158S6002C17__7S6002C1[] = {
  ABISELECT(-25200,-20732),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(-776,-644),
  ABISELECT(-25200,-20732),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev)();
extern void ABISELECT(_ZThn36208_N8S6002C15D1Ev,_ZThn29768_N8S6002C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev)();
extern void ABISELECT(_ZThn36208_N8S6002C15D0Ev,_ZThn29768_N8S6002C15D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C158S6002C17__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-36208,-29768),
  0,
  ABISELECT(-36208,-29768),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__A1__8S6002C158S6002C17__7S6002C1[] = {
  ABISELECT(-36504,-30012),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C158S6002C17__7S6002C1[] = {
  ABISELECT(-36968,-30412),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C158S6002C17__7S6002C1[] = {
  0,
  ABISELECT(-40328,-33164),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C158S6002C17__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(-40472,-33288),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A2__8S6002C158S6002C17__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(-24424,-20088),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C158S6002C17__7S6002C1[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-25664,-21112),
  (VTBL_ENTRY)&(_ZTI8S6002C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D1Ev,_ZTvn380_n40_N8S6002C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C15D0Ev,_ZTvn380_n40_N8S6002C15D0Ev),
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C17__A2__7S6002C1[] = {
  ABISELECT(39992,32880),
  ABISELECT(39848,32756),
  ABISELECT(35728,29360),
  ABISELECT(24416,20080),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C17__A2__7S6002C1[] = {
  0,
  ABISELECT(-24416,-20080),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn35728_N8S6002C12D1Ev,_ZThn29360_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn35728_N8S6002C12D0Ev,_ZThn29360_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C17__A2__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-35728,-29360),
  0,
  ABISELECT(-35728,-29360),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C17__A2__7S6002C1[] = {
  ABISELECT(-36024,-29604),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C17__A2__7S6002C1[] = {
  ABISELECT(-36488,-30004),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C17__A2__7S6002C1[] = {
  0,
  ABISELECT(-39848,-32756),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C17__A2__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(-39992,-32880),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__8S6002C17__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(-24424,-20088),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C17__7S6002C1[] = {
  0,
  ABISELECT(-24896,-20488),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZThn25200_N8S6002C17D1Ev,_ZThn20732_N8S6002C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev)();
extern void ABISELECT(_ZThn25200_N8S6002C17D0Ev,_ZThn20732_N8S6002C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6002C11__8S6002C17__7S6002C1[] = {
  ABISELECT(-25200,-20732),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(-776,-644),
  ABISELECT(-25200,-20732),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C17D1Ev,_ZTv0_n16_N8S6002C17D1Ev)();
extern void ABISELECT(_ZThn36208_N8S6002C17D1Ev,_ZThn29768_N8S6002C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C17D0Ev,_ZTv0_n16_N8S6002C17D0Ev)();
extern void ABISELECT(_ZThn36208_N8S6002C17D0Ev,_ZThn29768_N8S6002C17D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C17__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-36208,-29768),
  0,
  ABISELECT(-36208,-29768),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C17D1Ev,_ZTv0_n16_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C17D0Ev,_ZTv0_n16_N8S6002C17D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__A2__8S6002C17__7S6002C1[] = {
  ABISELECT(-36504,-30012),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C17__7S6002C1[] = {
  ABISELECT(-36968,-30412),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C17__7S6002C1[] = {
  0,
  ABISELECT(-40328,-33164),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C17__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(-40472,-33288),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
};
extern void ABISELECT(_ZTvn464_n80_N8S6002C17D1Ev,_ZTvn380_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S6002C17D0Ev,_ZTvn380_n40_N8S6002C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__8S6002C17__7S6002C1[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-25664,-21112),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C17D1Ev,_ZTvn380_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S6002C17D0Ev,_ZTvn380_n40_N8S6002C17D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZThn40640_N8S6002C17D1Ev,_ZThn33424_N8S6002C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev)();
extern void ABISELECT(_ZThn40640_N8S6002C17D0Ev,_ZThn33424_N8S6002C17D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C62v8Ev();
extern void _ZN7S6002C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C6__8S6002C17__7S6002C1[] = {
  ABISELECT(4128,3396),
  0,
  0,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-40640,-33424),
  0,
  ABISELECT(-4432,-3656),
  ABISELECT(-15744,-12936),
  ABISELECT(-168,-136),
  ABISELECT(-16216,-13336),
  ABISELECT(26288,21584),
  ABISELECT(-312,-260),
  ABISELECT(-40640,-33424),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v8Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v9Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__A1__8S6002C17__7S6002C1[] = {
  0,
  ABISELECT(-42032,-34520),
  ABISELECT(-26600,-21844),
  ABISELECT(-26456,-21720),
  ABISELECT(-42504,-34920),
  ABISELECT(-66928,-55008),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C107S6002C6__A3__8S6002C17__7S6002C1[] = {
  ABISELECT(-40936,-33668),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C107S6002C6__A4__8S6002C17__7S6002C1[] = {
  ABISELECT(-41400,-34068),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZTvn4128_n80_N8S6002C17D1Ev,_ZTvn3396_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZTvn4128_n80_N8S6002C17D0Ev,_ZTvn3396_n40_N8S6002C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C117S6002C6__A1__8S6002C17__7S6002C1[] = {
  ABISELECT(-8560,-7052),
  ABISELECT(-19872,-16332),
  ABISELECT(-4440,-3656),
  ABISELECT(-4296,-3532),
  ABISELECT(-20344,-16732),
  ABISELECT(-44768,-36820),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn4128_n80_N8S6002C17D1Ev,_ZTvn3396_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4128_n80_N8S6002C17D0Ev,_ZTvn3396_n40_N8S6002C17D0Ev),
};
extern void ABISELECT(_ZTvn4592_n80_N8S6002C17D1Ev,_ZTvn3776_n40_N8S6002C17D1Ev)();
extern void ABISELECT(_ZTvn4592_n80_N8S6002C17D0Ev,_ZTvn3776_n40_N8S6002C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C117S6002C6__A1__8S6002C17__7S6002C1[] = {
  ABISELECT(-4760,-3912),
  ABISELECT(-4904,-4036),
  ABISELECT(-9024,-7432),
  ABISELECT(-20336,-16712),
  ABISELECT(-45232,-37200),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4592_n80_N8S6002C17D1Ev,_ZTvn3776_n40_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4592_n80_N8S6002C17D0Ev,_ZTvn3776_n40_N8S6002C17D0Ev),
};
extern void ABISELECT(_ZThn480_N8S6002C17D1Ev,_ZThn408_N8S6002C17D1Ev)();
extern void ABISELECT(_ZThn480_N8S6002C17D0Ev,_ZThn408_N8S6002C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__A2__8S6002C17__7S6002C1[] = {
  ABISELECT(39992,32880),
  ABISELECT(39848,32756),
  ABISELECT(35728,29360),
  ABISELECT(24416,20080),
  ABISELECT(-480,-408),
  (VTBL_ENTRY)&(_ZTI8S6002C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S6002C17D1Ev,_ZThn408_N8S6002C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn480_N8S6002C17D0Ev,_ZThn408_N8S6002C17D0Ev),
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void _ZN8S6002C11D1Ev();
extern void _ZN8S6002C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C11__7S6002C1[] = {
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(-776,-644),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D0Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C11__7S6002C1[] = {
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(-776,-644),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C11__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(776,644),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C11__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C11__7S6002C1[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C11__7S6002C1[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__7S6002C1[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C11__7S6002C1[] = {
  0,
  ABISELECT(768,624),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C11__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__7S6002C1[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__7S6002C1[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C11__7S6002C1[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C11__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev)();
extern void ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev)() __attribute__((weak));
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C11__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C11__7S6002C1[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C11__7S6002C1[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C11__7S6002C1[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C11__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A1__8S6002C11__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(776,644),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__A1__8S6002C11__7S6002C1[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C11__7S6002C1[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C1[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C8__7S6002C1[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI7S6002C8[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void _ZN7S6002C6D1Ev();
extern void _ZN7S6002C6D0Ev();
extern void _ZN8S6002C102v6Ev();
extern void _ZN7S6002C62v8Ev();
extern void _ZN7S6002C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C6__7S6002C1[] = {
  ABISELECT(-4432,-3656),
  ABISELECT(-15744,-12936),
  ABISELECT(-168,-136),
  ABISELECT(-16216,-13336),
  ABISELECT(26288,21584),
  ABISELECT(-312,-260),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&_ZN7S6002C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6002C6D0Ev,
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v8Ev,
  (VTBL_ENTRY)&_ZN7S6002C62v9Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void _ZN8S6002C11D1Ev();
extern void _ZN8S6002C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(-8560,-7052),
  ABISELECT(-19872,-16332),
  ABISELECT(-4440,-3656),
  ABISELECT(-4296,-3532),
  ABISELECT(-20344,-16732),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C11D0Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C117S6002C6__A2__7S6002C1[] = {
  ABISELECT(-19872,-16332),
  ABISELECT(-4440,-3656),
  ABISELECT(-4296,-3532),
  ABISELECT(-20344,-16732),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C117S6002C6__A2__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(20344,16732),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C117S6002C6__A2__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(4296,3532),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C117S6002C6__A2__7S6002C1[] = {
  0,
  ABISELECT(4440,3656),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C117S6002C6__A2__7S6002C1[] = {
  0,
  ABISELECT(19872,16332),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(-4760,-3912),
  ABISELECT(-4904,-4036),
  ABISELECT(-9024,-7432),
  ABISELECT(-20336,-16712),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C117S6002C6__A1__7S6002C1[] = {
  0,
  ABISELECT(20336,16712),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(9024,7432),
  0,
  ABISELECT(9024,7432),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(8728,7188),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(8264,6788),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C117S6002C6__A1__7S6002C1[] = {
  0,
  ABISELECT(4904,4036),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(4760,3912),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev)();
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(8560,7052),
  0,
  ABISELECT(8560,7052),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(8264,6808),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(7800,6408),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C117S6002C6__A1__7S6002C1[] = {
  0,
  ABISELECT(4440,3656),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(4296,3532),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__A1__8S6002C117S6002C6__A1__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(20344,16732),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__A1__8S6002C117S6002C6__A1__7S6002C1[] = {
  0,
  ABISELECT(19872,16332),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C117S6002C6__A1__7S6002C1[] = {
  ABISELECT(-4760,-3912),
  ABISELECT(-4904,-4036),
  ABISELECT(-9024,-7432),
  ABISELECT(-20336,-16712),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D1Ev,_ZThn380_N8S6002C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C11D0Ev,_ZThn380_N8S6002C11D0Ev),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__7S6002C6__7S6002C1[] = {
  0,
  ABISELECT(312,260),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__7S6002C6__7S6002C1[] = {
  0,
  ABISELECT(-42032,-34520),
  ABISELECT(-26600,-21844),
  ABISELECT(-26456,-21720),
  ABISELECT(-42504,-34920),
  ABISELECT(-26288,-21584),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C6__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(16216,13336),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C6__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(168,136),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C6__7S6002C1[] = {
  0,
  ABISELECT(15744,12936),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C112v7Ev();
extern void ABISELECT(_ZThn4128_N7S6002C6D1Ev,_ZThn3396_N7S6002C6D1Ev)();
extern void ABISELECT(_ZThn4128_N7S6002C6D0Ev,_ZThn3396_N7S6002C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C11__7S6002C6__7S6002C1[] = {
  ABISELECT(-8560,-7052),
  ABISELECT(-19872,-16332),
  ABISELECT(-4440,-3656),
  ABISELECT(-4296,-3532),
  ABISELECT(-20344,-16732),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C112v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N7S6002C6D1Ev,_ZThn3396_N7S6002C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N7S6002C6D0Ev,_ZThn3396_N7S6002C6D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N7S6002C6D1Ev,_ZTv0_n16_N7S6002C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S6002C6D0Ev,_ZTv0_n16_N7S6002C6D0Ev)();
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__A1__7S6002C6__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4432,3656),
  0,
  ABISELECT(4432,3656),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6002C6D1Ev,_ZTv0_n16_N7S6002C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6002C6D0Ev,_ZTv0_n16_N7S6002C6D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__A2__7S6002C6__7S6002C1[] = {
  ABISELECT(4136,3412),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__A3__7S6002C6__7S6002C1[] = {
  ABISELECT(3672,3012),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void ABISELECT(_ZThn4592_N7S6002C6D1Ev,_ZThn3776_N7S6002C6D1Ev)();
extern void ABISELECT(_ZThn4592_N7S6002C6D0Ev,_ZThn3776_N7S6002C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C11__7S6002C6__7S6002C1[] = {
  ABISELECT(-4760,-3912),
  ABISELECT(-4904,-4036),
  ABISELECT(-9024,-7432),
  ABISELECT(-20336,-16712),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI7S6002C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N7S6002C6D1Ev,_ZThn3776_N7S6002C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N7S6002C6D0Ev,_ZThn3776_N7S6002C6D0Ev),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C7__A1__7S6002C1[] = {
  ABISELECT(-42032,-34520),
  ABISELECT(-26600,-21844),
  ABISELECT(-26456,-21720),
  ABISELECT(-42504,-34920),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C7__A1__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(42504,34920),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C7__A1__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(26456,21720),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C7__A1__7S6002C1[] = {
  0,
  ABISELECT(26600,21844),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C7__A1__7S6002C1[] = {
  0,
  ABISELECT(42032,34520),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C52v5Ev();
extern void _ZN8S6002C22D1Ev();
extern void _ZN8S6002C22D0Ev();
extern void _ZN8S6002C223v12Ev();
extern void _ZN8S6002C223v13Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C22__7S6002C1[] = {
  ABISELECT(-67920,-55872),
  ABISELECT(-79232,-65152),
  ABISELECT(-63800,-52476),
  ABISELECT(-63656,-52352),
  ABISELECT(-79704,-65552),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
  (VTBL_ENTRY)&_ZN8S6002C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C22D0Ev,
  (VTBL_ENTRY)&_ZN8S6002C223v12Ev,
  (VTBL_ENTRY)&_ZN8S6002C223v13Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C78S6002C22__A3__7S6002C1[] = {
  ABISELECT(-79232,-65152),
  ABISELECT(-63800,-52476),
  ABISELECT(-63656,-52352),
  ABISELECT(-79704,-65552),
  0,
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__7S6002C78S6002C22__A3__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(79704,65552),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__7S6002C78S6002C22__A3__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(63656,52352),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__7S6002C78S6002C22__A3__7S6002C1[] = {
  0,
  ABISELECT(63800,52476),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__7S6002C78S6002C22__A3__7S6002C1[] = {
  0,
  ABISELECT(79232,65152),
  (VTBL_ENTRY)&(_ZTI7S6002C7[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN8S6002C12D1Ev();
extern void _ZN8S6002C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C128S6002C22__A3__7S6002C1[] = {
  ABISELECT(-64120,-52732),
  ABISELECT(-64264,-52856),
  ABISELECT(-68384,-56252),
  ABISELECT(-79696,-65532),
  0,
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN8S6002C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6002C12D0Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C128S6002C22__A3__7S6002C1[] = {
  0,
  ABISELECT(79696,65532),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev)();
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C128S6002C22__A3__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(68384,56252),
  0,
  ABISELECT(68384,56252),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__8S6002C128S6002C22__A3__7S6002C1[] = {
  ABISELECT(68088,56008),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__8S6002C128S6002C22__A3__7S6002C1[] = {
  ABISELECT(67624,55608),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C128S6002C22__A3__7S6002C1[] = {
  0,
  ABISELECT(64264,52856),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C128S6002C22__A3__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(64120,52732),
  (VTBL_ENTRY)&(_ZTI8S6002C12[0]),
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C4__8S6002C22__7S6002C1[] = {
  0,
  0,
  0,
  ABISELECT(79704,65552),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6002C8__8S6002C22__7S6002C1[] = {
  ABISELECT(-144,-124),
  ABISELECT(63656,52352),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C5__A1__8S6002C22__7S6002C1[] = {
  0,
  ABISELECT(63800,52476),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
extern void _ZN7S6002C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C9__8S6002C22__7S6002C1[] = {
  0,
  ABISELECT(79232,65152),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
};
extern void ABISELECT(_ZThn464_N8S6002C22D1Ev,_ZThn380_N8S6002C22D1Ev)();
extern void ABISELECT(_ZThn464_N8S6002C22D0Ev,_ZThn380_N8S6002C22D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6002C12__8S6002C22__7S6002C1[] = {
  ABISELECT(-64120,-52732),
  ABISELECT(-64264,-52856),
  ABISELECT(-68384,-56252),
  ABISELECT(-79696,-65532),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C22D1Ev,_ZThn380_N8S6002C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S6002C22D0Ev,_ZThn380_N8S6002C22D0Ev),
};
extern void _ZN7S6002C92v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S6002C22D1Ev,_ZTv0_n16_N8S6002C22D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S6002C22D0Ev,_ZTv0_n16_N8S6002C22D0Ev)();
extern void _ZN8S6002C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6002C10__8S6002C22__7S6002C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(67920,55872),
  0,
  ABISELECT(67920,55872),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C22D1Ev,_ZTv0_n16_N8S6002C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6002C22D0Ev,_ZTv0_n16_N8S6002C22D0Ev),
  (VTBL_ENTRY)&_ZN8S6002C102v6Ev,
};
extern void _ZN7S6002C42v2Ev();
extern void _ZN7S6002C42v3Ev();
extern void _ZN7S6002C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C48S6002C10__A1__8S6002C22__7S6002C1[] = {
  ABISELECT(67624,55628),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C42v2Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v3Ev,
  (VTBL_ENTRY)&_ZN7S6002C42v4Ev,
};
extern void _ZN7S6002C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6002C58S6002C10__A2__8S6002C22__7S6002C1[] = {
  ABISELECT(67160,55228),
  (VTBL_ENTRY)&(_ZTI8S6002C22[0]),
  (VTBL_ENTRY)&_ZN7S6002C52v5Ev,
};
static  VTT_ENTRY vtt_S6002C1[] = {
  {&(_ZTV7S6002C1[13]),  13,200},
  {&(_ZTV7S6002C1[32]),  32,200},
  {&(_ZTV7S6002C1[56]),  56,200},
  {&(_ZTV7S6002C1[62]),  62,200},
  {&(_ZTV7S6002C1[73]),  73,200},
  {&(_ZTV7S6002C1[94]),  94,200},
  {&(_ZTV7S6002C1[100]),  100,200},
  {&(_ZTV7S6002C1[105]),  105,200},
  {&(_ZTV7S6002C1[109]),  109,200},
  {&(_ZTV7S6002C1[113]),  113,200},
  {&(_ZTV7S6002C1[83]),  83,200},
  {&(_ZTV7S6002C1[131]),  131,200},
  {&(_ZTV7S6002C1[171]),  171,200},
  {&(_ZTV7S6002C1[139]),  139,200},
  {&(_ZTV7S6002C1[144]),  144,200},
  {&(_ZTV7S6002C1[152]),  152,200},
  {&(_ZTV7S6002C1[162]),  162,200},
  {&(_ZTV7S6002C1[43]),  43,200},
  {&(_ZTV7S6002C1[47]),  47,200},
  {&(_ZTV7S6002C1[175]),  175,200},
  {&(_ZTV7S6002C1[187]),  187,200},
  {&(_ZTV7S6002C1[198]),  198,200},
  {&(_tg__ZTV8S6002C17__7S6002C1[10]),  10,15},
  {&(_tg__ZTV8S6002C158S6002C17__7S6002C1[8]),  8,13},
  {&(_tg__ZTV7S6002C9__8S6002C158S6002C17__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C11__8S6002C158S6002C17__7S6002C1[10]),  10,14},
  {&(_tg__ZTV8S6002C10__8S6002C158S6002C17__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__A1__8S6002C158S6002C17__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C158S6002C17__7S6002C1[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C158S6002C17__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C158S6002C17__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A2__8S6002C158S6002C17__7S6002C1[5]),  5,8},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C158S6002C17__7S6002C1[6]),  6,8},
  {&(_tg__ZTV8S6002C128S6002C17__A2__7S6002C1[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C17__A2__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C17__A2__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C17__A2__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C17__A2__7S6002C1[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C17__A2__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C17__A2__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C4__8S6002C17__7S6002C1[5]),  5,8},
  {&(_tg__ZTV7S6002C9__8S6002C17__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C11__8S6002C17__7S6002C1[10]),  10,14},
  {&(_tg__ZTV8S6002C10__8S6002C17__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__A2__8S6002C17__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C17__7S6002C1[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C17__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C17__7S6002C1[3]),  3,3},
  {&(_tg__ZTV8S6002C128S6002C11__8S6002C17__7S6002C1[6]),  6,8},
  {&(_tg__ZTV7S6002C6__8S6002C17__7S6002C1[18]),  18,24},
  {&(_tg__ZTV7S6002C7__A1__8S6002C17__7S6002C1[7]),  7,8},
  {&(_tg__ZTV7S6002C48S6002C107S6002C6__A3__8S6002C17__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C107S6002C6__A4__8S6002C17__7S6002C1[2]),  2,3},
  {&(_tg__ZTV8S6002C117S6002C6__A1__8S6002C17__7S6002C1[7]),  7,11},
  {&(_tg__ZTV8S6002C128S6002C117S6002C6__A1__8S6002C17__7S6002C1[6]),  6,8},
  {&(_tg__ZTV8S6002C12__A2__8S6002C17__7S6002C1[6]),  6,8},
  {&(_tg__ZTV8S6002C11__7S6002C1[7]),  7,11},
  {&(_tg__ZTV7S6002C78S6002C11__7S6002C1[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C11__7S6002C1[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C11__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C11__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C11__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C128S6002C11__7S6002C1[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C11__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C11__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C11__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C11__7S6002C1[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C11__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C11__7S6002C1[3]),  3,3},
  {&(_tg__ZTV8S6002C10__8S6002C11__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C11__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C11__7S6002C1[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C11__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C11__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A1__8S6002C11__7S6002C1[5]),  5,8},
  {&(_tg__ZTV7S6002C9__A1__8S6002C11__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C11__7S6002C1[6]),  6,8},
  {&(_tg__ZTV7S6002C8__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C5__7S6002C8__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C6__7S6002C1[8]),  8,14},
  {&(_tg__ZTV8S6002C117S6002C6__A1__7S6002C1[7]),  7,11},
  {&(_tg__ZTV7S6002C78S6002C117S6002C6__A2__7S6002C1[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C117S6002C6__A2__7S6002C1[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C117S6002C6__A2__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C117S6002C6__A2__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C117S6002C6__A2__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C128S6002C117S6002C6__A1__7S6002C1[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C117S6002C6__A1__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C117S6002C6__A1__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C117S6002C6__A1__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C117S6002C6__A1__7S6002C1[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C117S6002C6__A1__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C117S6002C6__A1__7S6002C1[3]),  3,3},
  {&(_tg__ZTV8S6002C10__8S6002C117S6002C6__A1__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C117S6002C6__A1__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C117S6002C6__A1__7S6002C1[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C117S6002C6__A1__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C117S6002C6__A1__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C4__A1__8S6002C117S6002C6__A1__7S6002C1[5]),  5,8},
  {&(_tg__ZTV7S6002C9__A1__8S6002C117S6002C6__A1__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C117S6002C6__A1__7S6002C1[6]),  6,8},
  {&(_tg__ZTV7S6002C5__7S6002C6__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C7__7S6002C6__7S6002C1[7]),  7,8},
  {&(_tg__ZTV7S6002C4__7S6002C6__7S6002C1[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C6__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C9__7S6002C6__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C11__7S6002C6__7S6002C1[7]),  7,11},
  {&(_tg__ZTV8S6002C10__A1__7S6002C6__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__A2__7S6002C6__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__A3__7S6002C6__7S6002C1[2]),  2,3},
  {&(_tg__ZTV8S6002C128S6002C11__7S6002C6__7S6002C1[6]),  6,8},
  {&(_tg__ZTV7S6002C7__A1__7S6002C1[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C7__A1__7S6002C1[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C7__A1__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C7__A1__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C7__A1__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C22__7S6002C1[7]),  7,12},
  {&(_tg__ZTV7S6002C78S6002C22__A3__7S6002C1[6]),  6,7},
  {&(_tg__ZTV7S6002C4__7S6002C78S6002C22__A3__7S6002C1[5]),  5,8},
  {&(_tg__ZTV7S6002C8__7S6002C78S6002C22__A3__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__7S6002C78S6002C22__A3__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C9__7S6002C78S6002C22__A3__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C128S6002C22__A3__7S6002C1[6]),  6,8},
  {&(_tg__ZTV7S6002C9__8S6002C128S6002C22__A3__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C10__8S6002C128S6002C22__A3__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__8S6002C128S6002C22__A3__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__8S6002C128S6002C22__A3__7S6002C1[2]),  2,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C128S6002C22__A3__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C8__8S6002C128S6002C22__A3__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C4__8S6002C22__7S6002C1[5]),  5,8},
  {&(_tg__ZTV7S6002C8__8S6002C22__7S6002C1[3]),  3,3},
  {&(_tg__ZTV7S6002C5__A1__8S6002C22__7S6002C1[3]),  3,4},
  {&(_tg__ZTV7S6002C9__8S6002C22__7S6002C1[3]),  3,4},
  {&(_tg__ZTV8S6002C12__8S6002C22__7S6002C1[6]),  6,8},
  {&(_tg__ZTV8S6002C10__8S6002C22__7S6002C1[9]),  9,13},
  {&(_tg__ZTV7S6002C48S6002C10__A1__8S6002C22__7S6002C1[2]),  2,5},
  {&(_tg__ZTV7S6002C58S6002C10__A2__8S6002C22__7S6002C1[2]),  2,3},
};
extern VTBL_ENTRY _ZTI7S6002C1[];
extern  VTBL_ENTRY _ZTV7S6002C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6002C1[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D0Ev,_ZTv0_n16_N8S6002C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D0Ev,_ZThn9036_N8S6002C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C11D1Ev,_ZTv0_n16_N8S6002C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S6002C11D1Ev,_ZThn9036_N8S6002C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C17D0Ev,_ZTv0_n16_N8S6002C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36208_N8S6002C17D0Ev,_ZThn29768_N8S6002C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C17D1Ev,_ZTv0_n16_N8S6002C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36208_N8S6002C17D1Ev,_ZThn29768_N8S6002C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C17D0Ev,_ZTv0_n40_N8S6002C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40640_N8S6002C17D0Ev,_ZThn33424_N8S6002C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn25200_N8S6002C17D0Ev,_ZThn20732_N8S6002C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C17D1Ev,_ZTv0_n40_N8S6002C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40640_N8S6002C17D1Ev,_ZThn33424_N8S6002C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn25200_N8S6002C17D1Ev,_ZThn20732_N8S6002C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D0Ev,_ZTv0_n16_N8S6002C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D0Ev,_ZThn8656_N8S6002C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn35728_N8S6002C12D0Ev,_ZThn29360_N8S6002C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C12D1Ev,_ZTv0_n16_N8S6002C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N8S6002C12D1Ev,_ZThn8656_N8S6002C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn35728_N8S6002C12D1Ev,_ZThn29360_N8S6002C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D0Ev,_ZTv0_n16_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36208_N8S6002C15D0Ev,_ZThn29768_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6002C15D1Ev,_ZTv0_n16_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36208_N8S6002C15D1Ev,_ZThn29768_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D0Ev,_ZTv0_n40_N8S6002C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25200_N8S6002C15D0Ev,_ZThn20732_N8S6002C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S6002C15D1Ev,_ZTv0_n40_N8S6002C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25200_N8S6002C15D1Ev,_ZThn20732_N8S6002C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6002C1D0Ev,_ZTv0_n36_N7S6002C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn215088_N7S6002C1D0Ev,_ZThn176828_N7S6002C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6002C1D1Ev,_ZTv0_n36_N7S6002C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn215088_N7S6002C1D1Ev,_ZThn176828_N7S6002C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6002C1D0Ev,_ZTv0_n16_N7S6002C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn147168_N7S6002C1D0Ev,_ZThn120956_N7S6002C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6002C1D1Ev,_ZTv0_n16_N7S6002C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn147168_N7S6002C1D1Ev,_ZThn120956_N7S6002C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6002C1D0Ev,_ZTv0_n40_N7S6002C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn151600_N7S6002C1D0Ev,_ZThn124612_N7S6002C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136160_N7S6002C1D0Ev,_ZThn111920_N7S6002C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6002C1D1Ev,_ZTv0_n40_N7S6002C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn151600_N7S6002C1D1Ev,_ZThn124612_N7S6002C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136160_N7S6002C1D1Ev,_ZThn111920_N7S6002C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S6002C1D0Ev,_ZTv0_n56_N7S6002C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn110960_N7S6002C1D0Ev,_ZThn91188_N7S6002C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S6002C1D1Ev,_ZTv0_n56_N7S6002C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn110960_N7S6002C1D1Ev,_ZThn91188_N7S6002C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6002C1 = {  "S6002C1", // class name
  bases_S6002C1, 36,
  &(vtc_S6002C1[0]), // expected_vtbl_contents
  &(vtt_S6002C1[0]), // expected_vtt_contents
  ABISELECT(222464,182888), // object size
  NSPAIRA(_ZTI7S6002C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6002C1),200, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6002C1),137, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S785C5_nt  {
  void *s785c5f0;
  int s785c5f1;
  void  mf785c5(); // _ZN9S785C5_nt7mf785c5Ev
  virtual  ~S785C5_nt(); // _ZN9S785C5_ntD1Ev
  S785C5_nt(); // tgen
};
//SIG(-1 S785C5_nt) C1{ vd m Fp Fi}


void  S785C5_nt ::mf785c5(){}
 S785C5_nt ::~S785C5_nt(){ note_dtor("S785C5_nt", this);}
S785C5_nt ::S785C5_nt(){ note_ctor("S785C5_nt", this);} // tgen

//skip512 S785C5_nt

#else // __cplusplus

extern void _ZN9S785C5_ntC1Ev();
extern void _ZN9S785C5_ntD1Ev();
Name_Map name_map_S785C5_nt[] = {
  NSPAIR(_ZN9S785C5_ntC1Ev),
  NSPAIR(_ZN9S785C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern void _ZN9S785C5_ntD1Ev();
extern void _ZN9S785C5_ntD0Ev();
static  VTBL_ENTRY vtc_S785C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S785C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S785C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S785C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI9S785C5_nt[];
VTBL_ENTRY *P__ZTI9S785C5_nt = _ZTI9S785C5_nt; 
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
Class_Descriptor cd_S785C5_nt = {  "S785C5_nt", // class name
  0,0,//no base classes
  &(vtc_S785C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S785C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S785C5_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  S785C4  : S785C5_nt {
  virtual void  v6(); // _ZN6S785C42v6Ev
  virtual void  v7(); // _ZN6S785C42v7Ev
  virtual void  v8(); // _ZN6S785C42v8Ev
  virtual void  v9(); // _ZN6S785C42v9Ev
  virtual void  v10(); // _ZN6S785C43v10Ev
  virtual void  v11(); // _ZN6S785C43v11Ev
  virtual void  v12(); // _ZN6S785C43v12Ev
  virtual void  v13(); // _ZN6S785C43v13Ev
  virtual void  v14(); // _ZN6S785C43v14Ev
  virtual void  v15(); // _ZN6S785C43v15Ev
  virtual void  v16(); // _ZN6S785C43v16Ev
  virtual void  v17(); // _ZN6S785C43v17Ev
  virtual void  v18(); // _ZN6S785C43v18Ev
  virtual void  v19(); // _ZN6S785C43v19Ev
  virtual void  v20(); // _ZN6S785C43v20Ev
  virtual void  v21(); // _ZN6S785C43v21Ev
  virtual void  v22(); // _ZN6S785C43v22Ev
  virtual void  v23(); // _ZN6S785C43v23Ev
  virtual void  v24(); // _ZN6S785C43v24Ev
  virtual void  v25(); // _ZN6S785C43v25Ev
  virtual void  v26(); // _ZN6S785C43v26Ev
  virtual void  v27(); // _ZN6S785C43v27Ev
  virtual void  v28(); // _ZN6S785C43v28Ev
  virtual void  v29(); // _ZN6S785C43v29Ev
  virtual void  v30(); // _ZN6S785C43v30Ev
  virtual void  v31(); // _ZN6S785C43v31Ev
  virtual void  v32(); // _ZN6S785C43v32Ev
  virtual void  v33(); // _ZN6S785C43v33Ev
  virtual void  v34(); // _ZN6S785C43v34Ev
  virtual void  v35(); // _ZN6S785C43v35Ev
  virtual void  v36(); // _ZN6S785C43v36Ev
  virtual void  v37(); // _ZN6S785C43v37Ev
  virtual void  v38(); // _ZN6S785C43v38Ev
  virtual void  v39(); // _ZN6S785C43v39Ev
  virtual void  v40(); // _ZN6S785C43v40Ev
  virtual void  v41(); // _ZN6S785C43v41Ev
  virtual void  v42(); // _ZN6S785C43v42Ev
  virtual void  v43(); // _ZN6S785C43v43Ev
  virtual void  v44(); // _ZN6S785C43v44Ev
  virtual void  v45(); // _ZN6S785C43v45Ev
  virtual void  v46(); // _ZN6S785C43v46Ev
  virtual void  v47(); // _ZN6S785C43v47Ev
  virtual void  v48(); // _ZN6S785C43v48Ev
  virtual void  v49(); // _ZN6S785C43v49Ev
  virtual void  v50(); // _ZN6S785C43v50Ev
  virtual void  v51(); // _ZN6S785C43v51Ev
  virtual void  v52(); // _ZN6S785C43v52Ev
  virtual void  v53(); // _ZN6S785C43v53Ev
  virtual void  v54(); // _ZN6S785C43v54Ev
  virtual void  v55(); // _ZN6S785C43v55Ev
  virtual void  v56(); // _ZN6S785C43v56Ev
  virtual void  v57(); // _ZN6S785C43v57Ev
  virtual void  v58(); // _ZN6S785C43v58Ev
  virtual void  v59(); // _ZN6S785C43v59Ev
  virtual void  v60(); // _ZN6S785C43v60Ev
  virtual void  v61(); // _ZN6S785C43v61Ev
  virtual void  v62(); // _ZN6S785C43v62Ev
  virtual void  v63(); // _ZN6S785C43v63Ev
  virtual void  v64(); // _ZN6S785C43v64Ev
  virtual void  v65(); // _ZN6S785C43v65Ev
  virtual void  v66(); // _ZN6S785C43v66Ev
  virtual void  v67(); // _ZN6S785C43v67Ev
  virtual void  v68(); // _ZN6S785C43v68Ev
  virtual void  v69(); // _ZN6S785C43v69Ev
  virtual void  v70(); // _ZN6S785C43v70Ev
  virtual void  v71(); // _ZN6S785C43v71Ev
  virtual void  v72(); // _ZN6S785C43v72Ev
  virtual void  v73(); // _ZN6S785C43v73Ev
  virtual void  v74(); // _ZN6S785C43v74Ev
  virtual void  v75(); // _ZN6S785C43v75Ev
  virtual void  v76(); // _ZN6S785C43v76Ev
  virtual void  v77(); // _ZN6S785C43v77Ev
  virtual void  v78(); // _ZN6S785C43v78Ev
  virtual void  v79(); // _ZN6S785C43v79Ev
  virtual void  v80(); // _ZN6S785C43v80Ev
  virtual void  v81(); // _ZN6S785C43v81Ev
  virtual void  v82(); // _ZN6S785C43v82Ev
  virtual void  v83(); // _ZN6S785C43v83Ev
  virtual void  v84(); // _ZN6S785C43v84Ev
  virtual void  v85(); // _ZN6S785C43v85Ev
  virtual void  v86(); // _ZN6S785C43v86Ev
  virtual void  v87(); // _ZN6S785C43v87Ev
  virtual void  v88(); // _ZN6S785C43v88Ev
  virtual void  v89(); // _ZN6S785C43v89Ev
  virtual void  v90(); // _ZN6S785C43v90Ev
  virtual void  v91(); // _ZN6S785C43v91Ev
  virtual void  v92(); // _ZN6S785C43v92Ev
  virtual void  v93(); // _ZN6S785C43v93Ev
  virtual void  v94(); // _ZN6S785C43v94Ev
  virtual void  v95(); // _ZN6S785C43v95Ev
  virtual void  v96(); // _ZN6S785C43v96Ev
  virtual void  v97(); // _ZN6S785C43v97Ev
  virtual void  v98(); // _ZN6S785C43v98Ev
  virtual void  v99(); // _ZN6S785C43v99Ev
  virtual void  v100(); // _ZN6S785C44v100Ev
  virtual void  v101(); // _ZN6S785C44v101Ev
  virtual void  v102(); // _ZN6S785C44v102Ev
  virtual void  v103(); // _ZN6S785C44v103Ev
  virtual void  v104(); // _ZN6S785C44v104Ev
  virtual void  v105(); // _ZN6S785C44v105Ev
  virtual void  v106(); // _ZN6S785C44v106Ev
  virtual void  v107(); // _ZN6S785C44v107Ev
  virtual void  v108(); // _ZN6S785C44v108Ev
  virtual void  v109(); // _ZN6S785C44v109Ev
  virtual void  v110(); // _ZN6S785C44v110Ev
  virtual void  v111(); // _ZN6S785C44v111Ev
  virtual void  v112(); // _ZN6S785C44v112Ev
  virtual void  v113(); // _ZN6S785C44v113Ev
  virtual void  v114(); // _ZN6S785C44v114Ev
  virtual void  v115(); // _ZN6S785C44v115Ev
  virtual void  v116(); // _ZN6S785C44v116Ev
  virtual void  v117(); // _ZN6S785C44v117Ev
  virtual void  v118(); // _ZN6S785C44v118Ev
  virtual void  v119(); // _ZN6S785C44v119Ev
  virtual void  v120(); // _ZN6S785C44v120Ev
  virtual void  v121(); // _ZN6S785C44v121Ev
  virtual void  v122(); // _ZN6S785C44v122Ev
  virtual void  v123(); // _ZN6S785C44v123Ev
  virtual void  v124(); // _ZN6S785C44v124Ev
  virtual void  v125(); // _ZN6S785C44v125Ev
  virtual void  v126(); // _ZN6S785C44v126Ev
  virtual void  v127(); // _ZN6S785C44v127Ev
  ~S785C4(); // tgen
  S785C4(); // tgen
};
//SIG(-1 S785C4) C1{ BC2{ vd m Fp Fi} 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}


void  S785C4 ::v6(){vfunc_called(this, "_ZN6S785C42v6Ev");}
void  S785C4 ::v7(){vfunc_called(this, "_ZN6S785C42v7Ev");}
void  S785C4 ::v8(){vfunc_called(this, "_ZN6S785C42v8Ev");}
void  S785C4 ::v9(){vfunc_called(this, "_ZN6S785C42v9Ev");}
void  S785C4 ::v10(){vfunc_called(this, "_ZN6S785C43v10Ev");}
void  S785C4 ::v11(){vfunc_called(this, "_ZN6S785C43v11Ev");}
void  S785C4 ::v12(){vfunc_called(this, "_ZN6S785C43v12Ev");}
void  S785C4 ::v13(){vfunc_called(this, "_ZN6S785C43v13Ev");}
void  S785C4 ::v14(){vfunc_called(this, "_ZN6S785C43v14Ev");}
void  S785C4 ::v15(){vfunc_called(this, "_ZN6S785C43v15Ev");}
void  S785C4 ::v16(){vfunc_called(this, "_ZN6S785C43v16Ev");}
void  S785C4 ::v17(){vfunc_called(this, "_ZN6S785C43v17Ev");}
void  S785C4 ::v18(){vfunc_called(this, "_ZN6S785C43v18Ev");}
void  S785C4 ::v19(){vfunc_called(this, "_ZN6S785C43v19Ev");}
void  S785C4 ::v20(){vfunc_called(this, "_ZN6S785C43v20Ev");}
void  S785C4 ::v21(){vfunc_called(this, "_ZN6S785C43v21Ev");}
void  S785C4 ::v22(){vfunc_called(this, "_ZN6S785C43v22Ev");}
void  S785C4 ::v23(){vfunc_called(this, "_ZN6S785C43v23Ev");}
void  S785C4 ::v24(){vfunc_called(this, "_ZN6S785C43v24Ev");}
void  S785C4 ::v25(){vfunc_called(this, "_ZN6S785C43v25Ev");}
void  S785C4 ::v26(){vfunc_called(this, "_ZN6S785C43v26Ev");}
void  S785C4 ::v27(){vfunc_called(this, "_ZN6S785C43v27Ev");}
void  S785C4 ::v28(){vfunc_called(this, "_ZN6S785C43v28Ev");}
void  S785C4 ::v29(){vfunc_called(this, "_ZN6S785C43v29Ev");}
void  S785C4 ::v30(){vfunc_called(this, "_ZN6S785C43v30Ev");}
void  S785C4 ::v31(){vfunc_called(this, "_ZN6S785C43v31Ev");}
void  S785C4 ::v32(){vfunc_called(this, "_ZN6S785C43v32Ev");}
void  S785C4 ::v33(){vfunc_called(this, "_ZN6S785C43v33Ev");}
void  S785C4 ::v34(){vfunc_called(this, "_ZN6S785C43v34Ev");}
void  S785C4 ::v35(){vfunc_called(this, "_ZN6S785C43v35Ev");}
void  S785C4 ::v36(){vfunc_called(this, "_ZN6S785C43v36Ev");}
void  S785C4 ::v37(){vfunc_called(this, "_ZN6S785C43v37Ev");}
void  S785C4 ::v38(){vfunc_called(this, "_ZN6S785C43v38Ev");}
void  S785C4 ::v39(){vfunc_called(this, "_ZN6S785C43v39Ev");}
void  S785C4 ::v40(){vfunc_called(this, "_ZN6S785C43v40Ev");}
void  S785C4 ::v41(){vfunc_called(this, "_ZN6S785C43v41Ev");}
void  S785C4 ::v42(){vfunc_called(this, "_ZN6S785C43v42Ev");}
void  S785C4 ::v43(){vfunc_called(this, "_ZN6S785C43v43Ev");}
void  S785C4 ::v44(){vfunc_called(this, "_ZN6S785C43v44Ev");}
void  S785C4 ::v45(){vfunc_called(this, "_ZN6S785C43v45Ev");}
void  S785C4 ::v46(){vfunc_called(this, "_ZN6S785C43v46Ev");}
void  S785C4 ::v47(){vfunc_called(this, "_ZN6S785C43v47Ev");}
void  S785C4 ::v48(){vfunc_called(this, "_ZN6S785C43v48Ev");}
void  S785C4 ::v49(){vfunc_called(this, "_ZN6S785C43v49Ev");}
void  S785C4 ::v50(){vfunc_called(this, "_ZN6S785C43v50Ev");}
void  S785C4 ::v51(){vfunc_called(this, "_ZN6S785C43v51Ev");}
void  S785C4 ::v52(){vfunc_called(this, "_ZN6S785C43v52Ev");}
void  S785C4 ::v53(){vfunc_called(this, "_ZN6S785C43v53Ev");}
void  S785C4 ::v54(){vfunc_called(this, "_ZN6S785C43v54Ev");}
void  S785C4 ::v55(){vfunc_called(this, "_ZN6S785C43v55Ev");}
void  S785C4 ::v56(){vfunc_called(this, "_ZN6S785C43v56Ev");}
void  S785C4 ::v57(){vfunc_called(this, "_ZN6S785C43v57Ev");}
void  S785C4 ::v58(){vfunc_called(this, "_ZN6S785C43v58Ev");}
void  S785C4 ::v59(){vfunc_called(this, "_ZN6S785C43v59Ev");}
void  S785C4 ::v60(){vfunc_called(this, "_ZN6S785C43v60Ev");}
void  S785C4 ::v61(){vfunc_called(this, "_ZN6S785C43v61Ev");}
void  S785C4 ::v62(){vfunc_called(this, "_ZN6S785C43v62Ev");}
void  S785C4 ::v63(){vfunc_called(this, "_ZN6S785C43v63Ev");}
void  S785C4 ::v64(){vfunc_called(this, "_ZN6S785C43v64Ev");}
void  S785C4 ::v65(){vfunc_called(this, "_ZN6S785C43v65Ev");}
void  S785C4 ::v66(){vfunc_called(this, "_ZN6S785C43v66Ev");}
void  S785C4 ::v67(){vfunc_called(this, "_ZN6S785C43v67Ev");}
void  S785C4 ::v68(){vfunc_called(this, "_ZN6S785C43v68Ev");}
void  S785C4 ::v69(){vfunc_called(this, "_ZN6S785C43v69Ev");}
void  S785C4 ::v70(){vfunc_called(this, "_ZN6S785C43v70Ev");}
void  S785C4 ::v71(){vfunc_called(this, "_ZN6S785C43v71Ev");}
void  S785C4 ::v72(){vfunc_called(this, "_ZN6S785C43v72Ev");}
void  S785C4 ::v73(){vfunc_called(this, "_ZN6S785C43v73Ev");}
void  S785C4 ::v74(){vfunc_called(this, "_ZN6S785C43v74Ev");}
void  S785C4 ::v75(){vfunc_called(this, "_ZN6S785C43v75Ev");}
void  S785C4 ::v76(){vfunc_called(this, "_ZN6S785C43v76Ev");}
void  S785C4 ::v77(){vfunc_called(this, "_ZN6S785C43v77Ev");}
void  S785C4 ::v78(){vfunc_called(this, "_ZN6S785C43v78Ev");}
void  S785C4 ::v79(){vfunc_called(this, "_ZN6S785C43v79Ev");}
void  S785C4 ::v80(){vfunc_called(this, "_ZN6S785C43v80Ev");}
void  S785C4 ::v81(){vfunc_called(this, "_ZN6S785C43v81Ev");}
void  S785C4 ::v82(){vfunc_called(this, "_ZN6S785C43v82Ev");}
void  S785C4 ::v83(){vfunc_called(this, "_ZN6S785C43v83Ev");}
void  S785C4 ::v84(){vfunc_called(this, "_ZN6S785C43v84Ev");}
void  S785C4 ::v85(){vfunc_called(this, "_ZN6S785C43v85Ev");}
void  S785C4 ::v86(){vfunc_called(this, "_ZN6S785C43v86Ev");}
void  S785C4 ::v87(){vfunc_called(this, "_ZN6S785C43v87Ev");}
void  S785C4 ::v88(){vfunc_called(this, "_ZN6S785C43v88Ev");}
void  S785C4 ::v89(){vfunc_called(this, "_ZN6S785C43v89Ev");}
void  S785C4 ::v90(){vfunc_called(this, "_ZN6S785C43v90Ev");}
void  S785C4 ::v91(){vfunc_called(this, "_ZN6S785C43v91Ev");}
void  S785C4 ::v92(){vfunc_called(this, "_ZN6S785C43v92Ev");}
void  S785C4 ::v93(){vfunc_called(this, "_ZN6S785C43v93Ev");}
void  S785C4 ::v94(){vfunc_called(this, "_ZN6S785C43v94Ev");}
void  S785C4 ::v95(){vfunc_called(this, "_ZN6S785C43v95Ev");}
void  S785C4 ::v96(){vfunc_called(this, "_ZN6S785C43v96Ev");}
void  S785C4 ::v97(){vfunc_called(this, "_ZN6S785C43v97Ev");}
void  S785C4 ::v98(){vfunc_called(this, "_ZN6S785C43v98Ev");}
void  S785C4 ::v99(){vfunc_called(this, "_ZN6S785C43v99Ev");}
void  S785C4 ::v100(){vfunc_called(this, "_ZN6S785C44v100Ev");}
void  S785C4 ::v101(){vfunc_called(this, "_ZN6S785C44v101Ev");}
void  S785C4 ::v102(){vfunc_called(this, "_ZN6S785C44v102Ev");}
void  S785C4 ::v103(){vfunc_called(this, "_ZN6S785C44v103Ev");}
void  S785C4 ::v104(){vfunc_called(this, "_ZN6S785C44v104Ev");}
void  S785C4 ::v105(){vfunc_called(this, "_ZN6S785C44v105Ev");}
void  S785C4 ::v106(){vfunc_called(this, "_ZN6S785C44v106Ev");}
void  S785C4 ::v107(){vfunc_called(this, "_ZN6S785C44v107Ev");}
void  S785C4 ::v108(){vfunc_called(this, "_ZN6S785C44v108Ev");}
void  S785C4 ::v109(){vfunc_called(this, "_ZN6S785C44v109Ev");}
void  S785C4 ::v110(){vfunc_called(this, "_ZN6S785C44v110Ev");}
void  S785C4 ::v111(){vfunc_called(this, "_ZN6S785C44v111Ev");}
void  S785C4 ::v112(){vfunc_called(this, "_ZN6S785C44v112Ev");}
void  S785C4 ::v113(){vfunc_called(this, "_ZN6S785C44v113Ev");}
void  S785C4 ::v114(){vfunc_called(this, "_ZN6S785C44v114Ev");}
void  S785C4 ::v115(){vfunc_called(this, "_ZN6S785C44v115Ev");}
void  S785C4 ::v116(){vfunc_called(this, "_ZN6S785C44v116Ev");}
void  S785C4 ::v117(){vfunc_called(this, "_ZN6S785C44v117Ev");}
void  S785C4 ::v118(){vfunc_called(this, "_ZN6S785C44v118Ev");}
void  S785C4 ::v119(){vfunc_called(this, "_ZN6S785C44v119Ev");}
void  S785C4 ::v120(){vfunc_called(this, "_ZN6S785C44v120Ev");}
void  S785C4 ::v121(){vfunc_called(this, "_ZN6S785C44v121Ev");}
void  S785C4 ::v122(){vfunc_called(this, "_ZN6S785C44v122Ev");}
void  S785C4 ::v123(){vfunc_called(this, "_ZN6S785C44v123Ev");}
void  S785C4 ::v124(){vfunc_called(this, "_ZN6S785C44v124Ev");}
void  S785C4 ::v125(){vfunc_called(this, "_ZN6S785C44v125Ev");}
void  S785C4 ::v126(){vfunc_called(this, "_ZN6S785C44v126Ev");}
void  S785C4 ::v127(){vfunc_called(this, "_ZN6S785C44v127Ev");}
S785C4 ::~S785C4(){ note_dtor("S785C4", this);} // tgen
S785C4 ::S785C4(){ note_ctor("S785C4", this);} // tgen

static void Test_S785C4()
{
  extern Class_Descriptor cd_S785C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S785C4, buf);
    S785C4 *dp, &lv = *(dp=new (buf) S785C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S785C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S785C4)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S785C4");
    test_class_info(&lv, &cd_S785C4);
    dp->~S785C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS785C4(Test_S785C4, "S785C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S785C4C1Ev();
extern void _ZN6S785C4D1Ev();
Name_Map name_map_S785C4[] = {
  NSPAIR(_ZN6S785C4C1Ev),
  NSPAIR(_ZN6S785C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S785C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S785C4[];
extern void _ZN6S785C4D1Ev();
extern void _ZN6S785C4D0Ev();
extern void _ZN6S785C42v6Ev();
extern void _ZN6S785C42v7Ev();
extern void _ZN6S785C42v8Ev();
extern void _ZN6S785C42v9Ev();
extern void _ZN6S785C43v10Ev();
extern void _ZN6S785C43v11Ev();
extern void _ZN6S785C43v12Ev();
extern void _ZN6S785C43v13Ev();
extern void _ZN6S785C43v14Ev();
extern void _ZN6S785C43v15Ev();
extern void _ZN6S785C43v16Ev();
extern void _ZN6S785C43v17Ev();
extern void _ZN6S785C43v18Ev();
extern void _ZN6S785C43v19Ev();
extern void _ZN6S785C43v20Ev();
extern void _ZN6S785C43v21Ev();
extern void _ZN6S785C43v22Ev();
extern void _ZN6S785C43v23Ev();
extern void _ZN6S785C43v24Ev();
extern void _ZN6S785C43v25Ev();
extern void _ZN6S785C43v26Ev();
extern void _ZN6S785C43v27Ev();
extern void _ZN6S785C43v28Ev();
extern void _ZN6S785C43v29Ev();
extern void _ZN6S785C43v30Ev();
extern void _ZN6S785C43v31Ev();
extern void _ZN6S785C43v32Ev();
extern void _ZN6S785C43v33Ev();
extern void _ZN6S785C43v34Ev();
extern void _ZN6S785C43v35Ev();
extern void _ZN6S785C43v36Ev();
extern void _ZN6S785C43v37Ev();
extern void _ZN6S785C43v38Ev();
extern void _ZN6S785C43v39Ev();
extern void _ZN6S785C43v40Ev();
extern void _ZN6S785C43v41Ev();
extern void _ZN6S785C43v42Ev();
extern void _ZN6S785C43v43Ev();
extern void _ZN6S785C43v44Ev();
extern void _ZN6S785C43v45Ev();
extern void _ZN6S785C43v46Ev();
extern void _ZN6S785C43v47Ev();
extern void _ZN6S785C43v48Ev();
extern void _ZN6S785C43v49Ev();
extern void _ZN6S785C43v50Ev();
extern void _ZN6S785C43v51Ev();
extern void _ZN6S785C43v52Ev();
extern void _ZN6S785C43v53Ev();
extern void _ZN6S785C43v54Ev();
extern void _ZN6S785C43v55Ev();
extern void _ZN6S785C43v56Ev();
extern void _ZN6S785C43v57Ev();
extern void _ZN6S785C43v58Ev();
extern void _ZN6S785C43v59Ev();
extern void _ZN6S785C43v60Ev();
extern void _ZN6S785C43v61Ev();
extern void _ZN6S785C43v62Ev();
extern void _ZN6S785C43v63Ev();
extern void _ZN6S785C43v64Ev();
extern void _ZN6S785C43v65Ev();
extern void _ZN6S785C43v66Ev();
extern void _ZN6S785C43v67Ev();
extern void _ZN6S785C43v68Ev();
extern void _ZN6S785C43v69Ev();
extern void _ZN6S785C43v70Ev();
extern void _ZN6S785C43v71Ev();
extern void _ZN6S785C43v72Ev();
extern void _ZN6S785C43v73Ev();
extern void _ZN6S785C43v74Ev();
extern void _ZN6S785C43v75Ev();
extern void _ZN6S785C43v76Ev();
extern void _ZN6S785C43v77Ev();
extern void _ZN6S785C43v78Ev();
extern void _ZN6S785C43v79Ev();
extern void _ZN6S785C43v80Ev();
extern void _ZN6S785C43v81Ev();
extern void _ZN6S785C43v82Ev();
extern void _ZN6S785C43v83Ev();
extern void _ZN6S785C43v84Ev();
extern void _ZN6S785C43v85Ev();
extern void _ZN6S785C43v86Ev();
extern void _ZN6S785C43v87Ev();
extern void _ZN6S785C43v88Ev();
extern void _ZN6S785C43v89Ev();
extern void _ZN6S785C43v90Ev();
extern void _ZN6S785C43v91Ev();
extern void _ZN6S785C43v92Ev();
extern void _ZN6S785C43v93Ev();
extern void _ZN6S785C43v94Ev();
extern void _ZN6S785C43v95Ev();
extern void _ZN6S785C43v96Ev();
extern void _ZN6S785C43v97Ev();
extern void _ZN6S785C43v98Ev();
extern void _ZN6S785C43v99Ev();
extern void _ZN6S785C44v100Ev();
extern void _ZN6S785C44v101Ev();
extern void _ZN6S785C44v102Ev();
extern void _ZN6S785C44v103Ev();
extern void _ZN6S785C44v104Ev();
extern void _ZN6S785C44v105Ev();
extern void _ZN6S785C44v106Ev();
extern void _ZN6S785C44v107Ev();
extern void _ZN6S785C44v108Ev();
extern void _ZN6S785C44v109Ev();
extern void _ZN6S785C44v110Ev();
extern void _ZN6S785C44v111Ev();
extern void _ZN6S785C44v112Ev();
extern void _ZN6S785C44v113Ev();
extern void _ZN6S785C44v114Ev();
extern void _ZN6S785C44v115Ev();
extern void _ZN6S785C44v116Ev();
extern void _ZN6S785C44v117Ev();
extern void _ZN6S785C44v118Ev();
extern void _ZN6S785C44v119Ev();
extern void _ZN6S785C44v120Ev();
extern void _ZN6S785C44v121Ev();
extern void _ZN6S785C44v122Ev();
extern void _ZN6S785C44v123Ev();
extern void _ZN6S785C44v124Ev();
extern void _ZN6S785C44v125Ev();
extern void _ZN6S785C44v126Ev();
extern void _ZN6S785C44v127Ev();
static  VTBL_ENTRY vtc_S785C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S785C4[0]),
  (VTBL_ENTRY)&_ZN6S785C4D1Ev,
  (VTBL_ENTRY)&_ZN6S785C4D0Ev,
  (VTBL_ENTRY)&_ZN6S785C42v6Ev,
  (VTBL_ENTRY)&_ZN6S785C42v7Ev,
  (VTBL_ENTRY)&_ZN6S785C42v8Ev,
  (VTBL_ENTRY)&_ZN6S785C42v9Ev,
  (VTBL_ENTRY)&_ZN6S785C43v10Ev,
  (VTBL_ENTRY)&_ZN6S785C43v11Ev,
  (VTBL_ENTRY)&_ZN6S785C43v12Ev,
  (VTBL_ENTRY)&_ZN6S785C43v13Ev,
  (VTBL_ENTRY)&_ZN6S785C43v14Ev,
  (VTBL_ENTRY)&_ZN6S785C43v15Ev,
  (VTBL_ENTRY)&_ZN6S785C43v16Ev,
  (VTBL_ENTRY)&_ZN6S785C43v17Ev,
  (VTBL_ENTRY)&_ZN6S785C43v18Ev,
  (VTBL_ENTRY)&_ZN6S785C43v19Ev,
  (VTBL_ENTRY)&_ZN6S785C43v20Ev,
  (VTBL_ENTRY)&_ZN6S785C43v21Ev,
  (VTBL_ENTRY)&_ZN6S785C43v22Ev,
  (VTBL_ENTRY)&_ZN6S785C43v23Ev,
  (VTBL_ENTRY)&_ZN6S785C43v24Ev,
  (VTBL_ENTRY)&_ZN6S785C43v25Ev,
  (VTBL_ENTRY)&_ZN6S785C43v26Ev,
  (VTBL_ENTRY)&_ZN6S785C43v27Ev,
  (VTBL_ENTRY)&_ZN6S785C43v28Ev,
  (VTBL_ENTRY)&_ZN6S785C43v29Ev,
  (VTBL_ENTRY)&_ZN6S785C43v30Ev,
  (VTBL_ENTRY)&_ZN6S785C43v31Ev,
  (VTBL_ENTRY)&_ZN6S785C43v32Ev,
  (VTBL_ENTRY)&_ZN6S785C43v33Ev,
  (VTBL_ENTRY)&_ZN6S785C43v34Ev,
  (VTBL_ENTRY)&_ZN6S785C43v35Ev,
  (VTBL_ENTRY)&_ZN6S785C43v36Ev,
  (VTBL_ENTRY)&_ZN6S785C43v37Ev,
  (VTBL_ENTRY)&_ZN6S785C43v38Ev,
  (VTBL_ENTRY)&_ZN6S785C43v39Ev,
  (VTBL_ENTRY)&_ZN6S785C43v40Ev,
  (VTBL_ENTRY)&_ZN6S785C43v41Ev,
  (VTBL_ENTRY)&_ZN6S785C43v42Ev,
  (VTBL_ENTRY)&_ZN6S785C43v43Ev,
  (VTBL_ENTRY)&_ZN6S785C43v44Ev,
  (VTBL_ENTRY)&_ZN6S785C43v45Ev,
  (VTBL_ENTRY)&_ZN6S785C43v46Ev,
  (VTBL_ENTRY)&_ZN6S785C43v47Ev,
  (VTBL_ENTRY)&_ZN6S785C43v48Ev,
  (VTBL_ENTRY)&_ZN6S785C43v49Ev,
  (VTBL_ENTRY)&_ZN6S785C43v50Ev,
  (VTBL_ENTRY)&_ZN6S785C43v51Ev,
  (VTBL_ENTRY)&_ZN6S785C43v52Ev,
  (VTBL_ENTRY)&_ZN6S785C43v53Ev,
  (VTBL_ENTRY)&_ZN6S785C43v54Ev,
  (VTBL_ENTRY)&_ZN6S785C43v55Ev,
  (VTBL_ENTRY)&_ZN6S785C43v56Ev,
  (VTBL_ENTRY)&_ZN6S785C43v57Ev,
  (VTBL_ENTRY)&_ZN6S785C43v58Ev,
  (VTBL_ENTRY)&_ZN6S785C43v59Ev,
  (VTBL_ENTRY)&_ZN6S785C43v60Ev,
  (VTBL_ENTRY)&_ZN6S785C43v61Ev,
  (VTBL_ENTRY)&_ZN6S785C43v62Ev,
  (VTBL_ENTRY)&_ZN6S785C43v63Ev,
  (VTBL_ENTRY)&_ZN6S785C43v64Ev,
  (VTBL_ENTRY)&_ZN6S785C43v65Ev,
  (VTBL_ENTRY)&_ZN6S785C43v66Ev,
  (VTBL_ENTRY)&_ZN6S785C43v67Ev,
  (VTBL_ENTRY)&_ZN6S785C43v68Ev,
  (VTBL_ENTRY)&_ZN6S785C43v69Ev,
  (VTBL_ENTRY)&_ZN6S785C43v70Ev,
  (VTBL_ENTRY)&_ZN6S785C43v71Ev,
  (VTBL_ENTRY)&_ZN6S785C43v72Ev,
  (VTBL_ENTRY)&_ZN6S785C43v73Ev,
  (VTBL_ENTRY)&_ZN6S785C43v74Ev,
  (VTBL_ENTRY)&_ZN6S785C43v75Ev,
  (VTBL_ENTRY)&_ZN6S785C43v76Ev,
  (VTBL_ENTRY)&_ZN6S785C43v77Ev,
  (VTBL_ENTRY)&_ZN6S785C43v78Ev,
  (VTBL_ENTRY)&_ZN6S785C43v79Ev,
  (VTBL_ENTRY)&_ZN6S785C43v80Ev,
  (VTBL_ENTRY)&_ZN6S785C43v81Ev,
  (VTBL_ENTRY)&_ZN6S785C43v82Ev,
  (VTBL_ENTRY)&_ZN6S785C43v83Ev,
  (VTBL_ENTRY)&_ZN6S785C43v84Ev,
  (VTBL_ENTRY)&_ZN6S785C43v85Ev,
  (VTBL_ENTRY)&_ZN6S785C43v86Ev,
  (VTBL_ENTRY)&_ZN6S785C43v87Ev,
  (VTBL_ENTRY)&_ZN6S785C43v88Ev,
  (VTBL_ENTRY)&_ZN6S785C43v89Ev,
  (VTBL_ENTRY)&_ZN6S785C43v90Ev,
  (VTBL_ENTRY)&_ZN6S785C43v91Ev,
  (VTBL_ENTRY)&_ZN6S785C43v92Ev,
  (VTBL_ENTRY)&_ZN6S785C43v93Ev,
  (VTBL_ENTRY)&_ZN6S785C43v94Ev,
  (VTBL_ENTRY)&_ZN6S785C43v95Ev,
  (VTBL_ENTRY)&_ZN6S785C43v96Ev,
  (VTBL_ENTRY)&_ZN6S785C43v97Ev,
  (VTBL_ENTRY)&_ZN6S785C43v98Ev,
  (VTBL_ENTRY)&_ZN6S785C43v99Ev,
  (VTBL_ENTRY)&_ZN6S785C44v100Ev,
  (VTBL_ENTRY)&_ZN6S785C44v101Ev,
  (VTBL_ENTRY)&_ZN6S785C44v102Ev,
  (VTBL_ENTRY)&_ZN6S785C44v103Ev,
  (VTBL_ENTRY)&_ZN6S785C44v104Ev,
  (VTBL_ENTRY)&_ZN6S785C44v105Ev,
  (VTBL_ENTRY)&_ZN6S785C44v106Ev,
  (VTBL_ENTRY)&_ZN6S785C44v107Ev,
  (VTBL_ENTRY)&_ZN6S785C44v108Ev,
  (VTBL_ENTRY)&_ZN6S785C44v109Ev,
  (VTBL_ENTRY)&_ZN6S785C44v110Ev,
  (VTBL_ENTRY)&_ZN6S785C44v111Ev,
  (VTBL_ENTRY)&_ZN6S785C44v112Ev,
  (VTBL_ENTRY)&_ZN6S785C44v113Ev,
  (VTBL_ENTRY)&_ZN6S785C44v114Ev,
  (VTBL_ENTRY)&_ZN6S785C44v115Ev,
  (VTBL_ENTRY)&_ZN6S785C44v116Ev,
  (VTBL_ENTRY)&_ZN6S785C44v117Ev,
  (VTBL_ENTRY)&_ZN6S785C44v118Ev,
  (VTBL_ENTRY)&_ZN6S785C44v119Ev,
  (VTBL_ENTRY)&_ZN6S785C44v120Ev,
  (VTBL_ENTRY)&_ZN6S785C44v121Ev,
  (VTBL_ENTRY)&_ZN6S785C44v122Ev,
  (VTBL_ENTRY)&_ZN6S785C44v123Ev,
  (VTBL_ENTRY)&_ZN6S785C44v124Ev,
  (VTBL_ENTRY)&_ZN6S785C44v125Ev,
  (VTBL_ENTRY)&_ZN6S785C44v126Ev,
  (VTBL_ENTRY)&_ZN6S785C44v127Ev,
};
extern VTBL_ENTRY _ZTI6S785C4[];
extern  VTBL_ENTRY _ZTV6S785C4[];
Class_Descriptor cd_S785C4 = {  "S785C4", // class name
  bases_S785C4, 1,
  &(vtc_S785C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S785C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S785C4),126, //virtual function table var
  2, // 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  S785C3  : S785C4 {
  virtual void  v128(); // _ZN6S785C34v128Ev
  virtual void  v129(); // _ZN6S785C34v129Ev
  virtual void  v130(); // _ZN6S785C34v130Ev
  virtual void  v131(); // _ZN6S785C34v131Ev
  virtual void  v132(); // _ZN6S785C34v132Ev
  virtual void  v133(); // _ZN6S785C34v133Ev
  virtual void  v134(); // _ZN6S785C34v134Ev
  virtual void  v135(); // _ZN6S785C34v135Ev
  virtual void  v136(); // _ZN6S785C34v136Ev
  virtual void  v137(); // _ZN6S785C34v137Ev
  virtual void  v138(); // _ZN6S785C34v138Ev
  virtual void  v139(); // _ZN6S785C34v139Ev
  virtual void  v140(); // _ZN6S785C34v140Ev
  virtual void  v141(); // _ZN6S785C34v141Ev
  virtual void  v142(); // _ZN6S785C34v142Ev
  virtual void  v143(); // _ZN6S785C34v143Ev
  virtual void  v144(); // _ZN6S785C34v144Ev
  virtual void  v145(); // _ZN6S785C34v145Ev
  ~S785C3(); // tgen
  S785C3(); // tgen
};
//SIG(-1 S785C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S785C3 ::v128(){vfunc_called(this, "_ZN6S785C34v128Ev");}
void  S785C3 ::v129(){vfunc_called(this, "_ZN6S785C34v129Ev");}
void  S785C3 ::v130(){vfunc_called(this, "_ZN6S785C34v130Ev");}
void  S785C3 ::v131(){vfunc_called(this, "_ZN6S785C34v131Ev");}
void  S785C3 ::v132(){vfunc_called(this, "_ZN6S785C34v132Ev");}
void  S785C3 ::v133(){vfunc_called(this, "_ZN6S785C34v133Ev");}
void  S785C3 ::v134(){vfunc_called(this, "_ZN6S785C34v134Ev");}
void  S785C3 ::v135(){vfunc_called(this, "_ZN6S785C34v135Ev");}
void  S785C3 ::v136(){vfunc_called(this, "_ZN6S785C34v136Ev");}
void  S785C3 ::v137(){vfunc_called(this, "_ZN6S785C34v137Ev");}
void  S785C3 ::v138(){vfunc_called(this, "_ZN6S785C34v138Ev");}
void  S785C3 ::v139(){vfunc_called(this, "_ZN6S785C34v139Ev");}
void  S785C3 ::v140(){vfunc_called(this, "_ZN6S785C34v140Ev");}
void  S785C3 ::v141(){vfunc_called(this, "_ZN6S785C34v141Ev");}
void  S785C3 ::v142(){vfunc_called(this, "_ZN6S785C34v142Ev");}
void  S785C3 ::v143(){vfunc_called(this, "_ZN6S785C34v143Ev");}
void  S785C3 ::v144(){vfunc_called(this, "_ZN6S785C34v144Ev");}
void  S785C3 ::v145(){vfunc_called(this, "_ZN6S785C34v145Ev");}
S785C3 ::~S785C3(){ note_dtor("S785C3", this);} // tgen
S785C3 ::S785C3(){ note_ctor("S785C3", this);} // tgen

static void Test_S785C3()
{
  extern Class_Descriptor cd_S785C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S785C3, buf);
    S785C3 *dp, &lv = *(dp=new (buf) S785C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S785C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S785C3)");
    check_base_class_offset(lv, (S785C5_nt*)(S785C4*), 0, "S785C3");
    check_base_class_offset(lv, (S785C4*), 0, "S785C3");
    test_class_info(&lv, &cd_S785C3);
    dp->~S785C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS785C3(Test_S785C3, "S785C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S785C3C1Ev();
extern void _ZN6S785C3D1Ev();
Name_Map name_map_S785C3[] = {
  NSPAIR(_ZN6S785C3C1Ev),
  NSPAIR(_ZN6S785C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S785C4;
extern VTBL_ENTRY _ZTI6S785C4[];
extern  VTBL_ENTRY _ZTV6S785C4[];
static Base_Class bases_S785C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S785C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S785C3[];
extern void _ZN6S785C3D1Ev();
extern void _ZN6S785C3D0Ev();
extern void _ZN6S785C42v6Ev();
extern void _ZN6S785C42v7Ev();
extern void _ZN6S785C42v8Ev();
extern void _ZN6S785C42v9Ev();
extern void _ZN6S785C43v10Ev();
extern void _ZN6S785C43v11Ev();
extern void _ZN6S785C43v12Ev();
extern void _ZN6S785C43v13Ev();
extern void _ZN6S785C43v14Ev();
extern void _ZN6S785C43v15Ev();
extern void _ZN6S785C43v16Ev();
extern void _ZN6S785C43v17Ev();
extern void _ZN6S785C43v18Ev();
extern void _ZN6S785C43v19Ev();
extern void _ZN6S785C43v20Ev();
extern void _ZN6S785C43v21Ev();
extern void _ZN6S785C43v22Ev();
extern void _ZN6S785C43v23Ev();
extern void _ZN6S785C43v24Ev();
extern void _ZN6S785C43v25Ev();
extern void _ZN6S785C43v26Ev();
extern void _ZN6S785C43v27Ev();
extern void _ZN6S785C43v28Ev();
extern void _ZN6S785C43v29Ev();
extern void _ZN6S785C43v30Ev();
extern void _ZN6S785C43v31Ev();
extern void _ZN6S785C43v32Ev();
extern void _ZN6S785C43v33Ev();
extern void _ZN6S785C43v34Ev();
extern void _ZN6S785C43v35Ev();
extern void _ZN6S785C43v36Ev();
extern void _ZN6S785C43v37Ev();
extern void _ZN6S785C43v38Ev();
extern void _ZN6S785C43v39Ev();
extern void _ZN6S785C43v40Ev();
extern void _ZN6S785C43v41Ev();
extern void _ZN6S785C43v42Ev();
extern void _ZN6S785C43v43Ev();
extern void _ZN6S785C43v44Ev();
extern void _ZN6S785C43v45Ev();
extern void _ZN6S785C43v46Ev();
extern void _ZN6S785C43v47Ev();
extern void _ZN6S785C43v48Ev();
extern void _ZN6S785C43v49Ev();
extern void _ZN6S785C43v50Ev();
extern void _ZN6S785C43v51Ev();
extern void _ZN6S785C43v52Ev();
extern void _ZN6S785C43v53Ev();
extern void _ZN6S785C43v54Ev();
extern void _ZN6S785C43v55Ev();
extern void _ZN6S785C43v56Ev();
extern void _ZN6S785C43v57Ev();
extern void _ZN6S785C43v58Ev();
extern void _ZN6S785C43v59Ev();
extern void _ZN6S785C43v60Ev();
extern void _ZN6S785C43v61Ev();
extern void _ZN6S785C43v62Ev();
extern void _ZN6S785C43v63Ev();
extern void _ZN6S785C43v64Ev();
extern void _ZN6S785C43v65Ev();
extern void _ZN6S785C43v66Ev();
extern void _ZN6S785C43v67Ev();
extern void _ZN6S785C43v68Ev();
extern void _ZN6S785C43v69Ev();
extern void _ZN6S785C43v70Ev();
extern void _ZN6S785C43v71Ev();
extern void _ZN6S785C43v72Ev();
extern void _ZN6S785C43v73Ev();
extern void _ZN6S785C43v74Ev();
extern void _ZN6S785C43v75Ev();
extern void _ZN6S785C43v76Ev();
extern void _ZN6S785C43v77Ev();
extern void _ZN6S785C43v78Ev();
extern void _ZN6S785C43v79Ev();
extern void _ZN6S785C43v80Ev();
extern void _ZN6S785C43v81Ev();
extern void _ZN6S785C43v82Ev();
extern void _ZN6S785C43v83Ev();
extern void _ZN6S785C43v84Ev();
extern void _ZN6S785C43v85Ev();
extern void _ZN6S785C43v86Ev();
extern void _ZN6S785C43v87Ev();
extern void _ZN6S785C43v88Ev();
extern void _ZN6S785C43v89Ev();
extern void _ZN6S785C43v90Ev();
extern void _ZN6S785C43v91Ev();
extern void _ZN6S785C43v92Ev();
extern void _ZN6S785C43v93Ev();
extern void _ZN6S785C43v94Ev();
extern void _ZN6S785C43v95Ev();
extern void _ZN6S785C43v96Ev();
extern void _ZN6S785C43v97Ev();
extern void _ZN6S785C43v98Ev();
extern void _ZN6S785C43v99Ev();
extern void _ZN6S785C44v100Ev();
extern void _ZN6S785C44v101Ev();
extern void _ZN6S785C44v102Ev();
extern void _ZN6S785C44v103Ev();
extern void _ZN6S785C44v104Ev();
extern void _ZN6S785C44v105Ev();
extern void _ZN6S785C44v106Ev();
extern void _ZN6S785C44v107Ev();
extern void _ZN6S785C44v108Ev();
extern void _ZN6S785C44v109Ev();
extern void _ZN6S785C44v110Ev();
extern void _ZN6S785C44v111Ev();
extern void _ZN6S785C44v112Ev();
extern void _ZN6S785C44v113Ev();
extern void _ZN6S785C44v114Ev();
extern void _ZN6S785C44v115Ev();
extern void _ZN6S785C44v116Ev();
extern void _ZN6S785C44v117Ev();
extern void _ZN6S785C44v118Ev();
extern void _ZN6S785C44v119Ev();
extern void _ZN6S785C44v120Ev();
extern void _ZN6S785C44v121Ev();
extern void _ZN6S785C44v122Ev();
extern void _ZN6S785C44v123Ev();
extern void _ZN6S785C44v124Ev();
extern void _ZN6S785C44v125Ev();
extern void _ZN6S785C44v126Ev();
extern void _ZN6S785C44v127Ev();
extern void _ZN6S785C34v128Ev();
extern void _ZN6S785C34v129Ev();
extern void _ZN6S785C34v130Ev();
extern void _ZN6S785C34v131Ev();
extern void _ZN6S785C34v132Ev();
extern void _ZN6S785C34v133Ev();
extern void _ZN6S785C34v134Ev();
extern void _ZN6S785C34v135Ev();
extern void _ZN6S785C34v136Ev();
extern void _ZN6S785C34v137Ev();
extern void _ZN6S785C34v138Ev();
extern void _ZN6S785C34v139Ev();
extern void _ZN6S785C34v140Ev();
extern void _ZN6S785C34v141Ev();
extern void _ZN6S785C34v142Ev();
extern void _ZN6S785C34v143Ev();
extern void _ZN6S785C34v144Ev();
extern void _ZN6S785C34v145Ev();
static  VTBL_ENTRY vtc_S785C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S785C3[0]),
  (VTBL_ENTRY)&_ZN6S785C3D1Ev,
  (VTBL_ENTRY)&_ZN6S785C3D0Ev,
  (VTBL_ENTRY)&_ZN6S785C42v6Ev,
  (VTBL_ENTRY)&_ZN6S785C42v7Ev,
  (VTBL_ENTRY)&_ZN6S785C42v8Ev,
  (VTBL_ENTRY)&_ZN6S785C42v9Ev,
  (VTBL_ENTRY)&_ZN6S785C43v10Ev,
  (VTBL_ENTRY)&_ZN6S785C43v11Ev,
  (VTBL_ENTRY)&_ZN6S785C43v12Ev,
  (VTBL_ENTRY)&_ZN6S785C43v13Ev,
  (VTBL_ENTRY)&_ZN6S785C43v14Ev,
  (VTBL_ENTRY)&_ZN6S785C43v15Ev,
  (VTBL_ENTRY)&_ZN6S785C43v16Ev,
  (VTBL_ENTRY)&_ZN6S785C43v17Ev,
  (VTBL_ENTRY)&_ZN6S785C43v18Ev,
  (VTBL_ENTRY)&_ZN6S785C43v19Ev,
  (VTBL_ENTRY)&_ZN6S785C43v20Ev,
  (VTBL_ENTRY)&_ZN6S785C43v21Ev,
  (VTBL_ENTRY)&_ZN6S785C43v22Ev,
  (VTBL_ENTRY)&_ZN6S785C43v23Ev,
  (VTBL_ENTRY)&_ZN6S785C43v24Ev,
  (VTBL_ENTRY)&_ZN6S785C43v25Ev,
  (VTBL_ENTRY)&_ZN6S785C43v26Ev,
  (VTBL_ENTRY)&_ZN6S785C43v27Ev,
  (VTBL_ENTRY)&_ZN6S785C43v28Ev,
  (VTBL_ENTRY)&_ZN6S785C43v29Ev,
  (VTBL_ENTRY)&_ZN6S785C43v30Ev,
  (VTBL_ENTRY)&_ZN6S785C43v31Ev,
  (VTBL_ENTRY)&_ZN6S785C43v32Ev,
  (VTBL_ENTRY)&_ZN6S785C43v33Ev,
  (VTBL_ENTRY)&_ZN6S785C43v34Ev,
  (VTBL_ENTRY)&_ZN6S785C43v35Ev,
  (VTBL_ENTRY)&_ZN6S785C43v36Ev,
  (VTBL_ENTRY)&_ZN6S785C43v37Ev,
  (VTBL_ENTRY)&_ZN6S785C43v38Ev,
  (VTBL_ENTRY)&_ZN6S785C43v39Ev,
  (VTBL_ENTRY)&_ZN6S785C43v40Ev,
  (VTBL_ENTRY)&_ZN6S785C43v41Ev,
  (VTBL_ENTRY)&_ZN6S785C43v42Ev,
  (VTBL_ENTRY)&_ZN6S785C43v43Ev,
  (VTBL_ENTRY)&_ZN6S785C43v44Ev,
  (VTBL_ENTRY)&_ZN6S785C43v45Ev,
  (VTBL_ENTRY)&_ZN6S785C43v46Ev,
  (VTBL_ENTRY)&_ZN6S785C43v47Ev,
  (VTBL_ENTRY)&_ZN6S785C43v48Ev,
  (VTBL_ENTRY)&_ZN6S785C43v49Ev,
  (VTBL_ENTRY)&_ZN6S785C43v50Ev,
  (VTBL_ENTRY)&_ZN6S785C43v51Ev,
  (VTBL_ENTRY)&_ZN6S785C43v52Ev,
  (VTBL_ENTRY)&_ZN6S785C43v53Ev,
  (VTBL_ENTRY)&_ZN6S785C43v54Ev,
  (VTBL_ENTRY)&_ZN6S785C43v55Ev,
  (VTBL_ENTRY)&_ZN6S785C43v56Ev,
  (VTBL_ENTRY)&_ZN6S785C43v57Ev,
  (VTBL_ENTRY)&_ZN6S785C43v58Ev,
  (VTBL_ENTRY)&_ZN6S785C43v59Ev,
  (VTBL_ENTRY)&_ZN6S785C43v60Ev,
  (VTBL_ENTRY)&_ZN6S785C43v61Ev,
  (VTBL_ENTRY)&_ZN6S785C43v62Ev,
  (VTBL_ENTRY)&_ZN6S785C43v63Ev,
  (VTBL_ENTRY)&_ZN6S785C43v64Ev,
  (VTBL_ENTRY)&_ZN6S785C43v65Ev,
  (VTBL_ENTRY)&_ZN6S785C43v66Ev,
  (VTBL_ENTRY)&_ZN6S785C43v67Ev,
  (VTBL_ENTRY)&_ZN6S785C43v68Ev,
  (VTBL_ENTRY)&_ZN6S785C43v69Ev,
  (VTBL_ENTRY)&_ZN6S785C43v70Ev,
  (VTBL_ENTRY)&_ZN6S785C43v71Ev,
  (VTBL_ENTRY)&_ZN6S785C43v72Ev,
  (VTBL_ENTRY)&_ZN6S785C43v73Ev,
  (VTBL_ENTRY)&_ZN6S785C43v74Ev,
  (VTBL_ENTRY)&_ZN6S785C43v75Ev,
  (VTBL_ENTRY)&_ZN6S785C43v76Ev,
  (VTBL_ENTRY)&_ZN6S785C43v77Ev,
  (VTBL_ENTRY)&_ZN6S785C43v78Ev,
  (VTBL_ENTRY)&_ZN6S785C43v79Ev,
  (VTBL_ENTRY)&_ZN6S785C43v80Ev,
  (VTBL_ENTRY)&_ZN6S785C43v81Ev,
  (VTBL_ENTRY)&_ZN6S785C43v82Ev,
  (VTBL_ENTRY)&_ZN6S785C43v83Ev,
  (VTBL_ENTRY)&_ZN6S785C43v84Ev,
  (VTBL_ENTRY)&_ZN6S785C43v85Ev,
  (VTBL_ENTRY)&_ZN6S785C43v86Ev,
  (VTBL_ENTRY)&_ZN6S785C43v87Ev,
  (VTBL_ENTRY)&_ZN6S785C43v88Ev,
  (VTBL_ENTRY)&_ZN6S785C43v89Ev,
  (VTBL_ENTRY)&_ZN6S785C43v90Ev,
  (VTBL_ENTRY)&_ZN6S785C43v91Ev,
  (VTBL_ENTRY)&_ZN6S785C43v92Ev,
  (VTBL_ENTRY)&_ZN6S785C43v93Ev,
  (VTBL_ENTRY)&_ZN6S785C43v94Ev,
  (VTBL_ENTRY)&_ZN6S785C43v95Ev,
  (VTBL_ENTRY)&_ZN6S785C43v96Ev,
  (VTBL_ENTRY)&_ZN6S785C43v97Ev,
  (VTBL_ENTRY)&_ZN6S785C43v98Ev,
  (VTBL_ENTRY)&_ZN6S785C43v99Ev,
  (VTBL_ENTRY)&_ZN6S785C44v100Ev,
  (VTBL_ENTRY)&_ZN6S785C44v101Ev,
  (VTBL_ENTRY)&_ZN6S785C44v102Ev,
  (VTBL_ENTRY)&_ZN6S785C44v103Ev,
  (VTBL_ENTRY)&_ZN6S785C44v104Ev,
  (VTBL_ENTRY)&_ZN6S785C44v105Ev,
  (VTBL_ENTRY)&_ZN6S785C44v106Ev,
  (VTBL_ENTRY)&_ZN6S785C44v107Ev,
  (VTBL_ENTRY)&_ZN6S785C44v108Ev,
  (VTBL_ENTRY)&_ZN6S785C44v109Ev,
  (VTBL_ENTRY)&_ZN6S785C44v110Ev,
  (VTBL_ENTRY)&_ZN6S785C44v111Ev,
  (VTBL_ENTRY)&_ZN6S785C44v112Ev,
  (VTBL_ENTRY)&_ZN6S785C44v113Ev,
  (VTBL_ENTRY)&_ZN6S785C44v114Ev,
  (VTBL_ENTRY)&_ZN6S785C44v115Ev,
  (VTBL_ENTRY)&_ZN6S785C44v116Ev,
  (VTBL_ENTRY)&_ZN6S785C44v117Ev,
  (VTBL_ENTRY)&_ZN6S785C44v118Ev,
  (VTBL_ENTRY)&_ZN6S785C44v119Ev,
  (VTBL_ENTRY)&_ZN6S785C44v120Ev,
  (VTBL_ENTRY)&_ZN6S785C44v121Ev,
  (VTBL_ENTRY)&_ZN6S785C44v122Ev,
  (VTBL_ENTRY)&_ZN6S785C44v123Ev,
  (VTBL_ENTRY)&_ZN6S785C44v124Ev,
  (VTBL_ENTRY)&_ZN6S785C44v125Ev,
  (VTBL_ENTRY)&_ZN6S785C44v126Ev,
  (VTBL_ENTRY)&_ZN6S785C44v127Ev,
  (VTBL_ENTRY)&_ZN6S785C34v128Ev,
  (VTBL_ENTRY)&_ZN6S785C34v129Ev,
  (VTBL_ENTRY)&_ZN6S785C34v130Ev,
  (VTBL_ENTRY)&_ZN6S785C34v131Ev,
  (VTBL_ENTRY)&_ZN6S785C34v132Ev,
  (VTBL_ENTRY)&_ZN6S785C34v133Ev,
  (VTBL_ENTRY)&_ZN6S785C34v134Ev,
  (VTBL_ENTRY)&_ZN6S785C34v135Ev,
  (VTBL_ENTRY)&_ZN6S785C34v136Ev,
  (VTBL_ENTRY)&_ZN6S785C34v137Ev,
  (VTBL_ENTRY)&_ZN6S785C34v138Ev,
  (VTBL_ENTRY)&_ZN6S785C34v139Ev,
  (VTBL_ENTRY)&_ZN6S785C34v140Ev,
  (VTBL_ENTRY)&_ZN6S785C34v141Ev,
  (VTBL_ENTRY)&_ZN6S785C34v142Ev,
  (VTBL_ENTRY)&_ZN6S785C34v143Ev,
  (VTBL_ENTRY)&_ZN6S785C34v144Ev,
  (VTBL_ENTRY)&_ZN6S785C34v145Ev,
};
extern VTBL_ENTRY _ZTI6S785C3[];
extern  VTBL_ENTRY _ZTV6S785C3[];
Class_Descriptor cd_S785C3 = {  "S785C3", // class name
  bases_S785C3, 2,
  &(vtc_S785C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S785C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S785C3),144, //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  S785C2  : S785C3 {
  virtual void  v146(); // _ZN6S785C24v146Ev
  virtual void  v147(); // _ZN6S785C24v147Ev
  virtual void  v148(); // _ZN6S785C24v148Ev
  virtual void  v149(); // _ZN6S785C24v149Ev
  virtual void  v150(); // _ZN6S785C24v150Ev
  virtual void  v151(); // _ZN6S785C24v151Ev
  virtual void  v152(); // _ZN6S785C24v152Ev
  virtual void  v153(); // _ZN6S785C24v153Ev
  virtual void  v154(); // _ZN6S785C24v154Ev
  virtual void  v155(); // _ZN6S785C24v155Ev
  virtual void  v156(); // _ZN6S785C24v156Ev
  virtual void  v157(); // _ZN6S785C24v157Ev
  virtual void  v158(); // _ZN6S785C24v158Ev
  virtual void  v159(); // _ZN6S785C24v159Ev
  virtual void  v160(); // _ZN6S785C24v160Ev
  virtual void  v161(); // _ZN6S785C24v161Ev
  virtual void  v162(); // _ZN6S785C24v162Ev
  virtual void  v163(); // _ZN6S785C24v163Ev
  virtual void  v164(); // _ZN6S785C24v164Ev
  ~S785C2(); // tgen
  S785C2(); // tgen
};
//SIG(-1 S785C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19}


void  S785C2 ::v146(){vfunc_called(this, "_ZN6S785C24v146Ev");}
void  S785C2 ::v147(){vfunc_called(this, "_ZN6S785C24v147Ev");}
void  S785C2 ::v148(){vfunc_called(this, "_ZN6S785C24v148Ev");}
void  S785C2 ::v149(){vfunc_called(this, "_ZN6S785C24v149Ev");}
void  S785C2 ::v150(){vfunc_called(this, "_ZN6S785C24v150Ev");}
void  S785C2 ::v151(){vfunc_called(this, "_ZN6S785C24v151Ev");}
void  S785C2 ::v152(){vfunc_called(this, "_ZN6S785C24v152Ev");}
void  S785C2 ::v153(){vfunc_called(this, "_ZN6S785C24v153Ev");}
void  S785C2 ::v154(){vfunc_called(this, "_ZN6S785C24v154Ev");}
void  S785C2 ::v155(){vfunc_called(this, "_ZN6S785C24v155Ev");}
void  S785C2 ::v156(){vfunc_called(this, "_ZN6S785C24v156Ev");}
void  S785C2 ::v157(){vfunc_called(this, "_ZN6S785C24v157Ev");}
void  S785C2 ::v158(){vfunc_called(this, "_ZN6S785C24v158Ev");}
void  S785C2 ::v159(){vfunc_called(this, "_ZN6S785C24v159Ev");}
void  S785C2 ::v160(){vfunc_called(this, "_ZN6S785C24v160Ev");}
void  S785C2 ::v161(){vfunc_called(this, "_ZN6S785C24v161Ev");}
void  S785C2 ::v162(){vfunc_called(this, "_ZN6S785C24v162Ev");}
void  S785C2 ::v163(){vfunc_called(this, "_ZN6S785C24v163Ev");}
void  S785C2 ::v164(){vfunc_called(this, "_ZN6S785C24v164Ev");}
S785C2 ::~S785C2(){ note_dtor("S785C2", this);} // tgen
S785C2 ::S785C2(){ note_ctor("S785C2", this);} // tgen

static void Test_S785C2()
{
  extern Class_Descriptor cd_S785C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S785C2, buf);
    S785C2 *dp, &lv = *(dp=new (buf) S785C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S785C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S785C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S785C4*)(S785C3*), 0, "S785C2");
    check_base_class_offset(lv, (S785C4*)(S785C3*), 0, "S785C2");
    check_base_class_offset(lv, (S785C3*), 0, "S785C2");
    test_class_info(&lv, &cd_S785C2);
    dp->~S785C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS785C2(Test_S785C2, "S785C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S785C2C1Ev();
extern void _ZN6S785C2D1Ev();
Name_Map name_map_S785C2[] = {
  NSPAIR(_ZN6S785C2C1Ev),
  NSPAIR(_ZN6S785C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S785C4;
extern VTBL_ENTRY _ZTI6S785C4[];
extern  VTBL_ENTRY _ZTV6S785C4[];
extern Class_Descriptor cd_S785C3;
extern VTBL_ENTRY _ZTI6S785C3[];
extern  VTBL_ENTRY _ZTV6S785C3[];
static Base_Class bases_S785C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S785C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S785C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S785C2[];
extern void _ZN6S785C2D1Ev();
extern void _ZN6S785C2D0Ev();
extern void _ZN6S785C42v6Ev();
extern void _ZN6S785C42v7Ev();
extern void _ZN6S785C42v8Ev();
extern void _ZN6S785C42v9Ev();
extern void _ZN6S785C43v10Ev();
extern void _ZN6S785C43v11Ev();
extern void _ZN6S785C43v12Ev();
extern void _ZN6S785C43v13Ev();
extern void _ZN6S785C43v14Ev();
extern void _ZN6S785C43v15Ev();
extern void _ZN6S785C43v16Ev();
extern void _ZN6S785C43v17Ev();
extern void _ZN6S785C43v18Ev();
extern void _ZN6S785C43v19Ev();
extern void _ZN6S785C43v20Ev();
extern void _ZN6S785C43v21Ev();
extern void _ZN6S785C43v22Ev();
extern void _ZN6S785C43v23Ev();
extern void _ZN6S785C43v24Ev();
extern void _ZN6S785C43v25Ev();
extern void _ZN6S785C43v26Ev();
extern void _ZN6S785C43v27Ev();
extern void _ZN6S785C43v28Ev();
extern void _ZN6S785C43v29Ev();
extern void _ZN6S785C43v30Ev();
extern void _ZN6S785C43v31Ev();
extern void _ZN6S785C43v32Ev();
extern void _ZN6S785C43v33Ev();
extern void _ZN6S785C43v34Ev();
extern void _ZN6S785C43v35Ev();
extern void _ZN6S785C43v36Ev();
extern void _ZN6S785C43v37Ev();
extern void _ZN6S785C43v38Ev();
extern void _ZN6S785C43v39Ev();
extern void _ZN6S785C43v40Ev();
extern void _ZN6S785C43v41Ev();
extern void _ZN6S785C43v42Ev();
extern void _ZN6S785C43v43Ev();
extern void _ZN6S785C43v44Ev();
extern void _ZN6S785C43v45Ev();
extern void _ZN6S785C43v46Ev();
extern void _ZN6S785C43v47Ev();
extern void _ZN6S785C43v48Ev();
extern void _ZN6S785C43v49Ev();
extern void _ZN6S785C43v50Ev();
extern void _ZN6S785C43v51Ev();
extern void _ZN6S785C43v52Ev();
extern void _ZN6S785C43v53Ev();
extern void _ZN6S785C43v54Ev();
extern void _ZN6S785C43v55Ev();
extern void _ZN6S785C43v56Ev();
extern void _ZN6S785C43v57Ev();
extern void _ZN6S785C43v58Ev();
extern void _ZN6S785C43v59Ev();
extern void _ZN6S785C43v60Ev();
extern void _ZN6S785C43v61Ev();
extern void _ZN6S785C43v62Ev();
extern void _ZN6S785C43v63Ev();
extern void _ZN6S785C43v64Ev();
extern void _ZN6S785C43v65Ev();
extern void _ZN6S785C43v66Ev();
extern void _ZN6S785C43v67Ev();
extern void _ZN6S785C43v68Ev();
extern void _ZN6S785C43v69Ev();
extern void _ZN6S785C43v70Ev();
extern void _ZN6S785C43v71Ev();
extern void _ZN6S785C43v72Ev();
extern void _ZN6S785C43v73Ev();
extern void _ZN6S785C43v74Ev();
extern void _ZN6S785C43v75Ev();
extern void _ZN6S785C43v76Ev();
extern void _ZN6S785C43v77Ev();
extern void _ZN6S785C43v78Ev();
extern void _ZN6S785C43v79Ev();
extern void _ZN6S785C43v80Ev();
extern void _ZN6S785C43v81Ev();
extern void _ZN6S785C43v82Ev();
extern void _ZN6S785C43v83Ev();
extern void _ZN6S785C43v84Ev();
extern void _ZN6S785C43v85Ev();
extern void _ZN6S785C43v86Ev();
extern void _ZN6S785C43v87Ev();
extern void _ZN6S785C43v88Ev();
extern void _ZN6S785C43v89Ev();
extern void _ZN6S785C43v90Ev();
extern void _ZN6S785C43v91Ev();
extern void _ZN6S785C43v92Ev();
extern void _ZN6S785C43v93Ev();
extern void _ZN6S785C43v94Ev();
extern void _ZN6S785C43v95Ev();
extern void _ZN6S785C43v96Ev();
extern void _ZN6S785C43v97Ev();
extern void _ZN6S785C43v98Ev();
extern void _ZN6S785C43v99Ev();
extern void _ZN6S785C44v100Ev();
extern void _ZN6S785C44v101Ev();
extern void _ZN6S785C44v102Ev();
extern void _ZN6S785C44v103Ev();
extern void _ZN6S785C44v104Ev();
extern void _ZN6S785C44v105Ev();
extern void _ZN6S785C44v106Ev();
extern void _ZN6S785C44v107Ev();
extern void _ZN6S785C44v108Ev();
extern void _ZN6S785C44v109Ev();
extern void _ZN6S785C44v110Ev();
extern void _ZN6S785C44v111Ev();
extern void _ZN6S785C44v112Ev();
extern void _ZN6S785C44v113Ev();
extern void _ZN6S785C44v114Ev();
extern void _ZN6S785C44v115Ev();
extern void _ZN6S785C44v116Ev();
extern void _ZN6S785C44v117Ev();
extern void _ZN6S785C44v118Ev();
extern void _ZN6S785C44v119Ev();
extern void _ZN6S785C44v120Ev();
extern void _ZN6S785C44v121Ev();
extern void _ZN6S785C44v122Ev();
extern void _ZN6S785C44v123Ev();
extern void _ZN6S785C44v124Ev();
extern void _ZN6S785C44v125Ev();
extern void _ZN6S785C44v126Ev();
extern void _ZN6S785C44v127Ev();
extern void _ZN6S785C34v128Ev();
extern void _ZN6S785C34v129Ev();
extern void _ZN6S785C34v130Ev();
extern void _ZN6S785C34v131Ev();
extern void _ZN6S785C34v132Ev();
extern void _ZN6S785C34v133Ev();
extern void _ZN6S785C34v134Ev();
extern void _ZN6S785C34v135Ev();
extern void _ZN6S785C34v136Ev();
extern void _ZN6S785C34v137Ev();
extern void _ZN6S785C34v138Ev();
extern void _ZN6S785C34v139Ev();
extern void _ZN6S785C34v140Ev();
extern void _ZN6S785C34v141Ev();
extern void _ZN6S785C34v142Ev();
extern void _ZN6S785C34v143Ev();
extern void _ZN6S785C34v144Ev();
extern void _ZN6S785C34v145Ev();
extern void _ZN6S785C24v146Ev();
extern void _ZN6S785C24v147Ev();
extern void _ZN6S785C24v148Ev();
extern void _ZN6S785C24v149Ev();
extern void _ZN6S785C24v150Ev();
extern void _ZN6S785C24v151Ev();
extern void _ZN6S785C24v152Ev();
extern void _ZN6S785C24v153Ev();
extern void _ZN6S785C24v154Ev();
extern void _ZN6S785C24v155Ev();
extern void _ZN6S785C24v156Ev();
extern void _ZN6S785C24v157Ev();
extern void _ZN6S785C24v158Ev();
extern void _ZN6S785C24v159Ev();
extern void _ZN6S785C24v160Ev();
extern void _ZN6S785C24v161Ev();
extern void _ZN6S785C24v162Ev();
extern void _ZN6S785C24v163Ev();
extern void _ZN6S785C24v164Ev();
static  VTBL_ENTRY vtc_S785C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S785C2[0]),
  (VTBL_ENTRY)&_ZN6S785C2D1Ev,
  (VTBL_ENTRY)&_ZN6S785C2D0Ev,
  (VTBL_ENTRY)&_ZN6S785C42v6Ev,
  (VTBL_ENTRY)&_ZN6S785C42v7Ev,
  (VTBL_ENTRY)&_ZN6S785C42v8Ev,
  (VTBL_ENTRY)&_ZN6S785C42v9Ev,
  (VTBL_ENTRY)&_ZN6S785C43v10Ev,
  (VTBL_ENTRY)&_ZN6S785C43v11Ev,
  (VTBL_ENTRY)&_ZN6S785C43v12Ev,
  (VTBL_ENTRY)&_ZN6S785C43v13Ev,
  (VTBL_ENTRY)&_ZN6S785C43v14Ev,
  (VTBL_ENTRY)&_ZN6S785C43v15Ev,
  (VTBL_ENTRY)&_ZN6S785C43v16Ev,
  (VTBL_ENTRY)&_ZN6S785C43v17Ev,
  (VTBL_ENTRY)&_ZN6S785C43v18Ev,
  (VTBL_ENTRY)&_ZN6S785C43v19Ev,
  (VTBL_ENTRY)&_ZN6S785C43v20Ev,
  (VTBL_ENTRY)&_ZN6S785C43v21Ev,
  (VTBL_ENTRY)&_ZN6S785C43v22Ev,
  (VTBL_ENTRY)&_ZN6S785C43v23Ev,
  (VTBL_ENTRY)&_ZN6S785C43v24Ev,
  (VTBL_ENTRY)&_ZN6S785C43v25Ev,
  (VTBL_ENTRY)&_ZN6S785C43v26Ev,
  (VTBL_ENTRY)&_ZN6S785C43v27Ev,
  (VTBL_ENTRY)&_ZN6S785C43v28Ev,
  (VTBL_ENTRY)&_ZN6S785C43v29Ev,
  (VTBL_ENTRY)&_ZN6S785C43v30Ev,
  (VTBL_ENTRY)&_ZN6S785C43v31Ev,
  (VTBL_ENTRY)&_ZN6S785C43v32Ev,
  (VTBL_ENTRY)&_ZN6S785C43v33Ev,
  (VTBL_ENTRY)&_ZN6S785C43v34Ev,
  (VTBL_ENTRY)&_ZN6S785C43v35Ev,
  (VTBL_ENTRY)&_ZN6S785C43v36Ev,
  (VTBL_ENTRY)&_ZN6S785C43v37Ev,
  (VTBL_ENTRY)&_ZN6S785C43v38Ev,
  (VTBL_ENTRY)&_ZN6S785C43v39Ev,
  (VTBL_ENTRY)&_ZN6S785C43v40Ev,
  (VTBL_ENTRY)&_ZN6S785C43v41Ev,
  (VTBL_ENTRY)&_ZN6S785C43v42Ev,
  (VTBL_ENTRY)&_ZN6S785C43v43Ev,
  (VTBL_ENTRY)&_ZN6S785C43v44Ev,
  (VTBL_ENTRY)&_ZN6S785C43v45Ev,
  (VTBL_ENTRY)&_ZN6S785C43v46Ev,
  (VTBL_ENTRY)&_ZN6S785C43v47Ev,
  (VTBL_ENTRY)&_ZN6S785C43v48Ev,
  (VTBL_ENTRY)&_ZN6S785C43v49Ev,
  (VTBL_ENTRY)&_ZN6S785C43v50Ev,
  (VTBL_ENTRY)&_ZN6S785C43v51Ev,
  (VTBL_ENTRY)&_ZN6S785C43v52Ev,
  (VTBL_ENTRY)&_ZN6S785C43v53Ev,
  (VTBL_ENTRY)&_ZN6S785C43v54Ev,
  (VTBL_ENTRY)&_ZN6S785C43v55Ev,
  (VTBL_ENTRY)&_ZN6S785C43v56Ev,
  (VTBL_ENTRY)&_ZN6S785C43v57Ev,
  (VTBL_ENTRY)&_ZN6S785C43v58Ev,
  (VTBL_ENTRY)&_ZN6S785C43v59Ev,
  (VTBL_ENTRY)&_ZN6S785C43v60Ev,
  (VTBL_ENTRY)&_ZN6S785C43v61Ev,
  (VTBL_ENTRY)&_ZN6S785C43v62Ev,
  (VTBL_ENTRY)&_ZN6S785C43v63Ev,
  (VTBL_ENTRY)&_ZN6S785C43v64Ev,
  (VTBL_ENTRY)&_ZN6S785C43v65Ev,
  (VTBL_ENTRY)&_ZN6S785C43v66Ev,
  (VTBL_ENTRY)&_ZN6S785C43v67Ev,
  (VTBL_ENTRY)&_ZN6S785C43v68Ev,
  (VTBL_ENTRY)&_ZN6S785C43v69Ev,
  (VTBL_ENTRY)&_ZN6S785C43v70Ev,
  (VTBL_ENTRY)&_ZN6S785C43v71Ev,
  (VTBL_ENTRY)&_ZN6S785C43v72Ev,
  (VTBL_ENTRY)&_ZN6S785C43v73Ev,
  (VTBL_ENTRY)&_ZN6S785C43v74Ev,
  (VTBL_ENTRY)&_ZN6S785C43v75Ev,
  (VTBL_ENTRY)&_ZN6S785C43v76Ev,
  (VTBL_ENTRY)&_ZN6S785C43v77Ev,
  (VTBL_ENTRY)&_ZN6S785C43v78Ev,
  (VTBL_ENTRY)&_ZN6S785C43v79Ev,
  (VTBL_ENTRY)&_ZN6S785C43v80Ev,
  (VTBL_ENTRY)&_ZN6S785C43v81Ev,
  (VTBL_ENTRY)&_ZN6S785C43v82Ev,
  (VTBL_ENTRY)&_ZN6S785C43v83Ev,
  (VTBL_ENTRY)&_ZN6S785C43v84Ev,
  (VTBL_ENTRY)&_ZN6S785C43v85Ev,
  (VTBL_ENTRY)&_ZN6S785C43v86Ev,
  (VTBL_ENTRY)&_ZN6S785C43v87Ev,
  (VTBL_ENTRY)&_ZN6S785C43v88Ev,
  (VTBL_ENTRY)&_ZN6S785C43v89Ev,
  (VTBL_ENTRY)&_ZN6S785C43v90Ev,
  (VTBL_ENTRY)&_ZN6S785C43v91Ev,
  (VTBL_ENTRY)&_ZN6S785C43v92Ev,
  (VTBL_ENTRY)&_ZN6S785C43v93Ev,
  (VTBL_ENTRY)&_ZN6S785C43v94Ev,
  (VTBL_ENTRY)&_ZN6S785C43v95Ev,
  (VTBL_ENTRY)&_ZN6S785C43v96Ev,
  (VTBL_ENTRY)&_ZN6S785C43v97Ev,
  (VTBL_ENTRY)&_ZN6S785C43v98Ev,
  (VTBL_ENTRY)&_ZN6S785C43v99Ev,
  (VTBL_ENTRY)&_ZN6S785C44v100Ev,
  (VTBL_ENTRY)&_ZN6S785C44v101Ev,
  (VTBL_ENTRY)&_ZN6S785C44v102Ev,
  (VTBL_ENTRY)&_ZN6S785C44v103Ev,
  (VTBL_ENTRY)&_ZN6S785C44v104Ev,
  (VTBL_ENTRY)&_ZN6S785C44v105Ev,
  (VTBL_ENTRY)&_ZN6S785C44v106Ev,
  (VTBL_ENTRY)&_ZN6S785C44v107Ev,
  (VTBL_ENTRY)&_ZN6S785C44v108Ev,
  (VTBL_ENTRY)&_ZN6S785C44v109Ev,
  (VTBL_ENTRY)&_ZN6S785C44v110Ev,
  (VTBL_ENTRY)&_ZN6S785C44v111Ev,
  (VTBL_ENTRY)&_ZN6S785C44v112Ev,
  (VTBL_ENTRY)&_ZN6S785C44v113Ev,
  (VTBL_ENTRY)&_ZN6S785C44v114Ev,
  (VTBL_ENTRY)&_ZN6S785C44v115Ev,
  (VTBL_ENTRY)&_ZN6S785C44v116Ev,
  (VTBL_ENTRY)&_ZN6S785C44v117Ev,
  (VTBL_ENTRY)&_ZN6S785C44v118Ev,
  (VTBL_ENTRY)&_ZN6S785C44v119Ev,
  (VTBL_ENTRY)&_ZN6S785C44v120Ev,
  (VTBL_ENTRY)&_ZN6S785C44v121Ev,
  (VTBL_ENTRY)&_ZN6S785C44v122Ev,
  (VTBL_ENTRY)&_ZN6S785C44v123Ev,
  (VTBL_ENTRY)&_ZN6S785C44v124Ev,
  (VTBL_ENTRY)&_ZN6S785C44v125Ev,
  (VTBL_ENTRY)&_ZN6S785C44v126Ev,
  (VTBL_ENTRY)&_ZN6S785C44v127Ev,
  (VTBL_ENTRY)&_ZN6S785C34v128Ev,
  (VTBL_ENTRY)&_ZN6S785C34v129Ev,
  (VTBL_ENTRY)&_ZN6S785C34v130Ev,
  (VTBL_ENTRY)&_ZN6S785C34v131Ev,
  (VTBL_ENTRY)&_ZN6S785C34v132Ev,
  (VTBL_ENTRY)&_ZN6S785C34v133Ev,
  (VTBL_ENTRY)&_ZN6S785C34v134Ev,
  (VTBL_ENTRY)&_ZN6S785C34v135Ev,
  (VTBL_ENTRY)&_ZN6S785C34v136Ev,
  (VTBL_ENTRY)&_ZN6S785C34v137Ev,
  (VTBL_ENTRY)&_ZN6S785C34v138Ev,
  (VTBL_ENTRY)&_ZN6S785C34v139Ev,
  (VTBL_ENTRY)&_ZN6S785C34v140Ev,
  (VTBL_ENTRY)&_ZN6S785C34v141Ev,
  (VTBL_ENTRY)&_ZN6S785C34v142Ev,
  (VTBL_ENTRY)&_ZN6S785C34v143Ev,
  (VTBL_ENTRY)&_ZN6S785C34v144Ev,
  (VTBL_ENTRY)&_ZN6S785C34v145Ev,
  (VTBL_ENTRY)&_ZN6S785C24v146Ev,
  (VTBL_ENTRY)&_ZN6S785C24v147Ev,
  (VTBL_ENTRY)&_ZN6S785C24v148Ev,
  (VTBL_ENTRY)&_ZN6S785C24v149Ev,
  (VTBL_ENTRY)&_ZN6S785C24v150Ev,
  (VTBL_ENTRY)&_ZN6S785C24v151Ev,
  (VTBL_ENTRY)&_ZN6S785C24v152Ev,
  (VTBL_ENTRY)&_ZN6S785C24v153Ev,
  (VTBL_ENTRY)&_ZN6S785C24v154Ev,
  (VTBL_ENTRY)&_ZN6S785C24v155Ev,
  (VTBL_ENTRY)&_ZN6S785C24v156Ev,
  (VTBL_ENTRY)&_ZN6S785C24v157Ev,
  (VTBL_ENTRY)&_ZN6S785C24v158Ev,
  (VTBL_ENTRY)&_ZN6S785C24v159Ev,
  (VTBL_ENTRY)&_ZN6S785C24v160Ev,
  (VTBL_ENTRY)&_ZN6S785C24v161Ev,
  (VTBL_ENTRY)&_ZN6S785C24v162Ev,
  (VTBL_ENTRY)&_ZN6S785C24v163Ev,
  (VTBL_ENTRY)&_ZN6S785C24v164Ev,
};
extern VTBL_ENTRY _ZTI6S785C2[];
extern  VTBL_ENTRY _ZTV6S785C2[];
Class_Descriptor cd_S785C2 = {  "S785C2", // class name
  bases_S785C2, 3,
  &(vtc_S785C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S785C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S785C2),163, //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  S785C1  : S785C2 {
  virtual void  v1(); // _ZN6S785C12v1Ev
  virtual void  v2(); // _ZN6S785C12v2Ev
  virtual void  v3(); // _ZN6S785C12v3Ev
  virtual void  v4(); // _ZN6S785C12v4Ev
  virtual void  v5(); // _ZN6S785C12v5Ev
  ~S785C1(); // tgen
  S785C1(); // tgen
};
//SIG(1 S785C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 v144 v145} v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164} v1 v2 v3 v4 v5}


void  S785C1 ::v1(){vfunc_called(this, "_ZN6S785C12v1Ev");}
void  S785C1 ::v2(){vfunc_called(this, "_ZN6S785C12v2Ev");}
void  S785C1 ::v3(){vfunc_called(this, "_ZN6S785C12v3Ev");}
void  S785C1 ::v4(){vfunc_called(this, "_ZN6S785C12v4Ev");}
void  S785C1 ::v5(){vfunc_called(this, "_ZN6S785C12v5Ev");}
S785C1 ::~S785C1(){ note_dtor("S785C1", this);} // tgen
S785C1 ::S785C1(){ note_ctor("S785C1", this);} // tgen

static void Test_S785C1()
{
  extern Class_Descriptor cd_S785C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S785C1, buf);
    S785C1 *dp, &lv = *(dp=new (buf) S785C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S785C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S785C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S785C4*)(S785C3*)(S785C2*), 0, "S785C1");
    check_base_class_offset(lv, (S785C4*)(S785C3*)(S785C2*), 0, "S785C1");
    check_base_class_offset(lv, (S785C3*)(S785C2*), 0, "S785C1");
    check_base_class_offset(lv, (S785C2*), 0, "S785C1");
    test_class_info(&lv, &cd_S785C1);
    dp->~S785C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS785C1(Test_S785C1, "S785C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S785C1C1Ev();
extern void _ZN6S785C1D1Ev();
Name_Map name_map_S785C1[] = {
  NSPAIR(_ZN6S785C1C1Ev),
  NSPAIR(_ZN6S785C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S785C4;
extern VTBL_ENTRY _ZTI6S785C4[];
extern  VTBL_ENTRY _ZTV6S785C4[];
extern Class_Descriptor cd_S785C3;
extern VTBL_ENTRY _ZTI6S785C3[];
extern  VTBL_ENTRY _ZTV6S785C3[];
extern Class_Descriptor cd_S785C2;
extern VTBL_ENTRY _ZTI6S785C2[];
extern  VTBL_ENTRY _ZTV6S785C2[];
static Base_Class bases_S785C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S785C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S785C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S785C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S785C1[];
extern void _ZN6S785C1D1Ev();
extern void _ZN6S785C1D0Ev();
extern void _ZN6S785C42v6Ev();
extern void _ZN6S785C42v7Ev();
extern void _ZN6S785C42v8Ev();
extern void _ZN6S785C42v9Ev();
extern void _ZN6S785C43v10Ev();
extern void _ZN6S785C43v11Ev();
extern void _ZN6S785C43v12Ev();
extern void _ZN6S785C43v13Ev();
extern void _ZN6S785C43v14Ev();
extern void _ZN6S785C43v15Ev();
extern void _ZN6S785C43v16Ev();
extern void _ZN6S785C43v17Ev();
extern void _ZN6S785C43v18Ev();
extern void _ZN6S785C43v19Ev();
extern void _ZN6S785C43v20Ev();
extern void _ZN6S785C43v21Ev();
extern void _ZN6S785C43v22Ev();
extern void _ZN6S785C43v23Ev();
extern void _ZN6S785C43v24Ev();
extern void _ZN6S785C43v25Ev();
extern void _ZN6S785C43v26Ev();
extern void _ZN6S785C43v27Ev();
extern void _ZN6S785C43v28Ev();
extern void _ZN6S785C43v29Ev();
extern void _ZN6S785C43v30Ev();
extern void _ZN6S785C43v31Ev();
extern void _ZN6S785C43v32Ev();
extern void _ZN6S785C43v33Ev();
extern void _ZN6S785C43v34Ev();
extern void _ZN6S785C43v35Ev();
extern void _ZN6S785C43v36Ev();
extern void _ZN6S785C43v37Ev();
extern void _ZN6S785C43v38Ev();
extern void _ZN6S785C43v39Ev();
extern void _ZN6S785C43v40Ev();
extern void _ZN6S785C43v41Ev();
extern void _ZN6S785C43v42Ev();
extern void _ZN6S785C43v43Ev();
extern void _ZN6S785C43v44Ev();
extern void _ZN6S785C43v45Ev();
extern void _ZN6S785C43v46Ev();
extern void _ZN6S785C43v47Ev();
extern void _ZN6S785C43v48Ev();
extern void _ZN6S785C43v49Ev();
extern void _ZN6S785C43v50Ev();
extern void _ZN6S785C43v51Ev();
extern void _ZN6S785C43v52Ev();
extern void _ZN6S785C43v53Ev();
extern void _ZN6S785C43v54Ev();
extern void _ZN6S785C43v55Ev();
extern void _ZN6S785C43v56Ev();
extern void _ZN6S785C43v57Ev();
extern void _ZN6S785C43v58Ev();
extern void _ZN6S785C43v59Ev();
extern void _ZN6S785C43v60Ev();
extern void _ZN6S785C43v61Ev();
extern void _ZN6S785C43v62Ev();
extern void _ZN6S785C43v63Ev();
extern void _ZN6S785C43v64Ev();
extern void _ZN6S785C43v65Ev();
extern void _ZN6S785C43v66Ev();
extern void _ZN6S785C43v67Ev();
extern void _ZN6S785C43v68Ev();
extern void _ZN6S785C43v69Ev();
extern void _ZN6S785C43v70Ev();
extern void _ZN6S785C43v71Ev();
extern void _ZN6S785C43v72Ev();
extern void _ZN6S785C43v73Ev();
extern void _ZN6S785C43v74Ev();
extern void _ZN6S785C43v75Ev();
extern void _ZN6S785C43v76Ev();
extern void _ZN6S785C43v77Ev();
extern void _ZN6S785C43v78Ev();
extern void _ZN6S785C43v79Ev();
extern void _ZN6S785C43v80Ev();
extern void _ZN6S785C43v81Ev();
extern void _ZN6S785C43v82Ev();
extern void _ZN6S785C43v83Ev();
extern void _ZN6S785C43v84Ev();
extern void _ZN6S785C43v85Ev();
extern void _ZN6S785C43v86Ev();
extern void _ZN6S785C43v87Ev();
extern void _ZN6S785C43v88Ev();
extern void _ZN6S785C43v89Ev();
extern void _ZN6S785C43v90Ev();
extern void _ZN6S785C43v91Ev();
extern void _ZN6S785C43v92Ev();
extern void _ZN6S785C43v93Ev();
extern void _ZN6S785C43v94Ev();
extern void _ZN6S785C43v95Ev();
extern void _ZN6S785C43v96Ev();
extern void _ZN6S785C43v97Ev();
extern void _ZN6S785C43v98Ev();
extern void _ZN6S785C43v99Ev();
extern void _ZN6S785C44v100Ev();
extern void _ZN6S785C44v101Ev();
extern void _ZN6S785C44v102Ev();
extern void _ZN6S785C44v103Ev();
extern void _ZN6S785C44v104Ev();
extern void _ZN6S785C44v105Ev();
extern void _ZN6S785C44v106Ev();
extern void _ZN6S785C44v107Ev();
extern void _ZN6S785C44v108Ev();
extern void _ZN6S785C44v109Ev();
extern void _ZN6S785C44v110Ev();
extern void _ZN6S785C44v111Ev();
extern void _ZN6S785C44v112Ev();
extern void _ZN6S785C44v113Ev();
extern void _ZN6S785C44v114Ev();
extern void _ZN6S785C44v115Ev();
extern void _ZN6S785C44v116Ev();
extern void _ZN6S785C44v117Ev();
extern void _ZN6S785C44v118Ev();
extern void _ZN6S785C44v119Ev();
extern void _ZN6S785C44v120Ev();
extern void _ZN6S785C44v121Ev();
extern void _ZN6S785C44v122Ev();
extern void _ZN6S785C44v123Ev();
extern void _ZN6S785C44v124Ev();
extern void _ZN6S785C44v125Ev();
extern void _ZN6S785C44v126Ev();
extern void _ZN6S785C44v127Ev();
extern void _ZN6S785C34v128Ev();
extern void _ZN6S785C34v129Ev();
extern void _ZN6S785C34v130Ev();
extern void _ZN6S785C34v131Ev();
extern void _ZN6S785C34v132Ev();
extern void _ZN6S785C34v133Ev();
extern void _ZN6S785C34v134Ev();
extern void _ZN6S785C34v135Ev();
extern void _ZN6S785C34v136Ev();
extern void _ZN6S785C34v137Ev();
extern void _ZN6S785C34v138Ev();
extern void _ZN6S785C34v139Ev();
extern void _ZN6S785C34v140Ev();
extern void _ZN6S785C34v141Ev();
extern void _ZN6S785C34v142Ev();
extern void _ZN6S785C34v143Ev();
extern void _ZN6S785C34v144Ev();
extern void _ZN6S785C34v145Ev();
extern void _ZN6S785C24v146Ev();
extern void _ZN6S785C24v147Ev();
extern void _ZN6S785C24v148Ev();
extern void _ZN6S785C24v149Ev();
extern void _ZN6S785C24v150Ev();
extern void _ZN6S785C24v151Ev();
extern void _ZN6S785C24v152Ev();
extern void _ZN6S785C24v153Ev();
extern void _ZN6S785C24v154Ev();
extern void _ZN6S785C24v155Ev();
extern void _ZN6S785C24v156Ev();
extern void _ZN6S785C24v157Ev();
extern void _ZN6S785C24v158Ev();
extern void _ZN6S785C24v159Ev();
extern void _ZN6S785C24v160Ev();
extern void _ZN6S785C24v161Ev();
extern void _ZN6S785C24v162Ev();
extern void _ZN6S785C24v163Ev();
extern void _ZN6S785C24v164Ev();
extern void _ZN6S785C12v1Ev();
extern void _ZN6S785C12v2Ev();
extern void _ZN6S785C12v3Ev();
extern void _ZN6S785C12v4Ev();
extern void _ZN6S785C12v5Ev();
static  VTBL_ENTRY vtc_S785C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S785C1[0]),
  (VTBL_ENTRY)&_ZN6S785C1D1Ev,
  (VTBL_ENTRY)&_ZN6S785C1D0Ev,
  (VTBL_ENTRY)&_ZN6S785C42v6Ev,
  (VTBL_ENTRY)&_ZN6S785C42v7Ev,
  (VTBL_ENTRY)&_ZN6S785C42v8Ev,
  (VTBL_ENTRY)&_ZN6S785C42v9Ev,
  (VTBL_ENTRY)&_ZN6S785C43v10Ev,
  (VTBL_ENTRY)&_ZN6S785C43v11Ev,
  (VTBL_ENTRY)&_ZN6S785C43v12Ev,
  (VTBL_ENTRY)&_ZN6S785C43v13Ev,
  (VTBL_ENTRY)&_ZN6S785C43v14Ev,
  (VTBL_ENTRY)&_ZN6S785C43v15Ev,
  (VTBL_ENTRY)&_ZN6S785C43v16Ev,
  (VTBL_ENTRY)&_ZN6S785C43v17Ev,
  (VTBL_ENTRY)&_ZN6S785C43v18Ev,
  (VTBL_ENTRY)&_ZN6S785C43v19Ev,
  (VTBL_ENTRY)&_ZN6S785C43v20Ev,
  (VTBL_ENTRY)&_ZN6S785C43v21Ev,
  (VTBL_ENTRY)&_ZN6S785C43v22Ev,
  (VTBL_ENTRY)&_ZN6S785C43v23Ev,
  (VTBL_ENTRY)&_ZN6S785C43v24Ev,
  (VTBL_ENTRY)&_ZN6S785C43v25Ev,
  (VTBL_ENTRY)&_ZN6S785C43v26Ev,
  (VTBL_ENTRY)&_ZN6S785C43v27Ev,
  (VTBL_ENTRY)&_ZN6S785C43v28Ev,
  (VTBL_ENTRY)&_ZN6S785C43v29Ev,
  (VTBL_ENTRY)&_ZN6S785C43v30Ev,
  (VTBL_ENTRY)&_ZN6S785C43v31Ev,
  (VTBL_ENTRY)&_ZN6S785C43v32Ev,
  (VTBL_ENTRY)&_ZN6S785C43v33Ev,
  (VTBL_ENTRY)&_ZN6S785C43v34Ev,
  (VTBL_ENTRY)&_ZN6S785C43v35Ev,
  (VTBL_ENTRY)&_ZN6S785C43v36Ev,
  (VTBL_ENTRY)&_ZN6S785C43v37Ev,
  (VTBL_ENTRY)&_ZN6S785C43v38Ev,
  (VTBL_ENTRY)&_ZN6S785C43v39Ev,
  (VTBL_ENTRY)&_ZN6S785C43v40Ev,
  (VTBL_ENTRY)&_ZN6S785C43v41Ev,
  (VTBL_ENTRY)&_ZN6S785C43v42Ev,
  (VTBL_ENTRY)&_ZN6S785C43v43Ev,
  (VTBL_ENTRY)&_ZN6S785C43v44Ev,
  (VTBL_ENTRY)&_ZN6S785C43v45Ev,
  (VTBL_ENTRY)&_ZN6S785C43v46Ev,
  (VTBL_ENTRY)&_ZN6S785C43v47Ev,
  (VTBL_ENTRY)&_ZN6S785C43v48Ev,
  (VTBL_ENTRY)&_ZN6S785C43v49Ev,
  (VTBL_ENTRY)&_ZN6S785C43v50Ev,
  (VTBL_ENTRY)&_ZN6S785C43v51Ev,
  (VTBL_ENTRY)&_ZN6S785C43v52Ev,
  (VTBL_ENTRY)&_ZN6S785C43v53Ev,
  (VTBL_ENTRY)&_ZN6S785C43v54Ev,
  (VTBL_ENTRY)&_ZN6S785C43v55Ev,
  (VTBL_ENTRY)&_ZN6S785C43v56Ev,
  (VTBL_ENTRY)&_ZN6S785C43v57Ev,
  (VTBL_ENTRY)&_ZN6S785C43v58Ev,
  (VTBL_ENTRY)&_ZN6S785C43v59Ev,
  (VTBL_ENTRY)&_ZN6S785C43v60Ev,
  (VTBL_ENTRY)&_ZN6S785C43v61Ev,
  (VTBL_ENTRY)&_ZN6S785C43v62Ev,
  (VTBL_ENTRY)&_ZN6S785C43v63Ev,
  (VTBL_ENTRY)&_ZN6S785C43v64Ev,
  (VTBL_ENTRY)&_ZN6S785C43v65Ev,
  (VTBL_ENTRY)&_ZN6S785C43v66Ev,
  (VTBL_ENTRY)&_ZN6S785C43v67Ev,
  (VTBL_ENTRY)&_ZN6S785C43v68Ev,
  (VTBL_ENTRY)&_ZN6S785C43v69Ev,
  (VTBL_ENTRY)&_ZN6S785C43v70Ev,
  (VTBL_ENTRY)&_ZN6S785C43v71Ev,
  (VTBL_ENTRY)&_ZN6S785C43v72Ev,
  (VTBL_ENTRY)&_ZN6S785C43v73Ev,
  (VTBL_ENTRY)&_ZN6S785C43v74Ev,
  (VTBL_ENTRY)&_ZN6S785C43v75Ev,
  (VTBL_ENTRY)&_ZN6S785C43v76Ev,
  (VTBL_ENTRY)&_ZN6S785C43v77Ev,
  (VTBL_ENTRY)&_ZN6S785C43v78Ev,
  (VTBL_ENTRY)&_ZN6S785C43v79Ev,
  (VTBL_ENTRY)&_ZN6S785C43v80Ev,
  (VTBL_ENTRY)&_ZN6S785C43v81Ev,
  (VTBL_ENTRY)&_ZN6S785C43v82Ev,
  (VTBL_ENTRY)&_ZN6S785C43v83Ev,
  (VTBL_ENTRY)&_ZN6S785C43v84Ev,
  (VTBL_ENTRY)&_ZN6S785C43v85Ev,
  (VTBL_ENTRY)&_ZN6S785C43v86Ev,
  (VTBL_ENTRY)&_ZN6S785C43v87Ev,
  (VTBL_ENTRY)&_ZN6S785C43v88Ev,
  (VTBL_ENTRY)&_ZN6S785C43v89Ev,
  (VTBL_ENTRY)&_ZN6S785C43v90Ev,
  (VTBL_ENTRY)&_ZN6S785C43v91Ev,
  (VTBL_ENTRY)&_ZN6S785C43v92Ev,
  (VTBL_ENTRY)&_ZN6S785C43v93Ev,
  (VTBL_ENTRY)&_ZN6S785C43v94Ev,
  (VTBL_ENTRY)&_ZN6S785C43v95Ev,
  (VTBL_ENTRY)&_ZN6S785C43v96Ev,
  (VTBL_ENTRY)&_ZN6S785C43v97Ev,
  (VTBL_ENTRY)&_ZN6S785C43v98Ev,
  (VTBL_ENTRY)&_ZN6S785C43v99Ev,
  (VTBL_ENTRY)&_ZN6S785C44v100Ev,
  (VTBL_ENTRY)&_ZN6S785C44v101Ev,
  (VTBL_ENTRY)&_ZN6S785C44v102Ev,
  (VTBL_ENTRY)&_ZN6S785C44v103Ev,
  (VTBL_ENTRY)&_ZN6S785C44v104Ev,
  (VTBL_ENTRY)&_ZN6S785C44v105Ev,
  (VTBL_ENTRY)&_ZN6S785C44v106Ev,
  (VTBL_ENTRY)&_ZN6S785C44v107Ev,
  (VTBL_ENTRY)&_ZN6S785C44v108Ev,
  (VTBL_ENTRY)&_ZN6S785C44v109Ev,
  (VTBL_ENTRY)&_ZN6S785C44v110Ev,
  (VTBL_ENTRY)&_ZN6S785C44v111Ev,
  (VTBL_ENTRY)&_ZN6S785C44v112Ev,
  (VTBL_ENTRY)&_ZN6S785C44v113Ev,
  (VTBL_ENTRY)&_ZN6S785C44v114Ev,
  (VTBL_ENTRY)&_ZN6S785C44v115Ev,
  (VTBL_ENTRY)&_ZN6S785C44v116Ev,
  (VTBL_ENTRY)&_ZN6S785C44v117Ev,
  (VTBL_ENTRY)&_ZN6S785C44v118Ev,
  (VTBL_ENTRY)&_ZN6S785C44v119Ev,
  (VTBL_ENTRY)&_ZN6S785C44v120Ev,
  (VTBL_ENTRY)&_ZN6S785C44v121Ev,
  (VTBL_ENTRY)&_ZN6S785C44v122Ev,
  (VTBL_ENTRY)&_ZN6S785C44v123Ev,
  (VTBL_ENTRY)&_ZN6S785C44v124Ev,
  (VTBL_ENTRY)&_ZN6S785C44v125Ev,
  (VTBL_ENTRY)&_ZN6S785C44v126Ev,
  (VTBL_ENTRY)&_ZN6S785C44v127Ev,
  (VTBL_ENTRY)&_ZN6S785C34v128Ev,
  (VTBL_ENTRY)&_ZN6S785C34v129Ev,
  (VTBL_ENTRY)&_ZN6S785C34v130Ev,
  (VTBL_ENTRY)&_ZN6S785C34v131Ev,
  (VTBL_ENTRY)&_ZN6S785C34v132Ev,
  (VTBL_ENTRY)&_ZN6S785C34v133Ev,
  (VTBL_ENTRY)&_ZN6S785C34v134Ev,
  (VTBL_ENTRY)&_ZN6S785C34v135Ev,
  (VTBL_ENTRY)&_ZN6S785C34v136Ev,
  (VTBL_ENTRY)&_ZN6S785C34v137Ev,
  (VTBL_ENTRY)&_ZN6S785C34v138Ev,
  (VTBL_ENTRY)&_ZN6S785C34v139Ev,
  (VTBL_ENTRY)&_ZN6S785C34v140Ev,
  (VTBL_ENTRY)&_ZN6S785C34v141Ev,
  (VTBL_ENTRY)&_ZN6S785C34v142Ev,
  (VTBL_ENTRY)&_ZN6S785C34v143Ev,
  (VTBL_ENTRY)&_ZN6S785C34v144Ev,
  (VTBL_ENTRY)&_ZN6S785C34v145Ev,
  (VTBL_ENTRY)&_ZN6S785C24v146Ev,
  (VTBL_ENTRY)&_ZN6S785C24v147Ev,
  (VTBL_ENTRY)&_ZN6S785C24v148Ev,
  (VTBL_ENTRY)&_ZN6S785C24v149Ev,
  (VTBL_ENTRY)&_ZN6S785C24v150Ev,
  (VTBL_ENTRY)&_ZN6S785C24v151Ev,
  (VTBL_ENTRY)&_ZN6S785C24v152Ev,
  (VTBL_ENTRY)&_ZN6S785C24v153Ev,
  (VTBL_ENTRY)&_ZN6S785C24v154Ev,
  (VTBL_ENTRY)&_ZN6S785C24v155Ev,
  (VTBL_ENTRY)&_ZN6S785C24v156Ev,
  (VTBL_ENTRY)&_ZN6S785C24v157Ev,
  (VTBL_ENTRY)&_ZN6S785C24v158Ev,
  (VTBL_ENTRY)&_ZN6S785C24v159Ev,
  (VTBL_ENTRY)&_ZN6S785C24v160Ev,
  (VTBL_ENTRY)&_ZN6S785C24v161Ev,
  (VTBL_ENTRY)&_ZN6S785C24v162Ev,
  (VTBL_ENTRY)&_ZN6S785C24v163Ev,
  (VTBL_ENTRY)&_ZN6S785C24v164Ev,
  (VTBL_ENTRY)&_ZN6S785C12v1Ev,
  (VTBL_ENTRY)&_ZN6S785C12v2Ev,
  (VTBL_ENTRY)&_ZN6S785C12v3Ev,
  (VTBL_ENTRY)&_ZN6S785C12v4Ev,
  (VTBL_ENTRY)&_ZN6S785C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S785C1[];
extern  VTBL_ENTRY _ZTV6S785C1[];
Class_Descriptor cd_S785C1 = {  "S785C1", // class name
  bases_S785C1, 4,
  &(vtc_S785C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S785C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S785C1),168, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C4  {
  short s18574c4f0:6;
  long s18574c4f1;
  short s18574c4f2:4;
  __tsi64 s18574c4f3[13];
  void *s18574c4f4;
  virtual void  v3(); // _ZN8S18574C42v3Ev
  ~S18574C4(); // tgen
  S18574C4(); // tgen
};
//SIG(-1 S18574C4) C1{ v1 Fs:6 Fl Fs:4 FL[13] Fp}


void  S18574C4 ::v3(){vfunc_called(this, "_ZN8S18574C42v3Ev");}
S18574C4 ::~S18574C4(){ note_dtor("S18574C4", this);} // tgen
S18574C4 ::S18574C4(){ note_ctor("S18574C4", this);} // tgen

static void Test_S18574C4()
{
  extern Class_Descriptor cd_S18574C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,32)];
    init_test(&cd_S18574C4, buf);
    S18574C4 *dp, &lv = *(dp=new (buf) S18574C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,124), "sizeof(S18574C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18574C4)");
    set_bf_and_test(lv, s18574c4f0, ABISELECT(8,4), 0, 6, 1, "S18574C4");
    set_bf_and_test(lv, s18574c4f0, ABISELECT(8,4), 0, 6, hide_sll(1LL<<5), "S18574C4");
    check_field_offset(lv, s18574c4f1, ABISELECT(16,8), "S18574C4.s18574c4f1");
    set_bf_and_test(lv, s18574c4f2, ABISELECT(24,12), 0, 4, 1, "S18574C4");
    set_bf_and_test(lv, s18574c4f2, ABISELECT(24,12), 0, 4, hide_sll(1LL<<3), "S18574C4");
    check_field_offset(lv, s18574c4f3, ABISELECT(32,16), "S18574C4.s18574c4f3");
    check_field_offset(lv, s18574c4f4, ABISELECT(136,120), "S18574C4.s18574c4f4");
    test_class_info(&lv, &cd_S18574C4);
    dp->~S18574C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C4(Test_S18574C4, "S18574C4", ABISELECT(144,124));

#else // __cplusplus

extern void _ZN8S18574C4C1Ev();
extern void _ZN8S18574C4D1Ev();
Name_Map name_map_S18574C4[] = {
  NSPAIR(_ZN8S18574C4C1Ev),
  NSPAIR(_ZN8S18574C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18574C4[];
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY vtc_S18574C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C4[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
Class_Descriptor cd_S18574C4 = {  "S18574C4", // class name
  0,0,//no base classes
  &(vtc_S18574C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,124), // object size
  NSPAIRA(_ZTI8S18574C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18574C4),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  S18574C5  {
  int s18574c5f0[2];
  __tsi64 s18574c5f1[2];
  ::S18574C4 s18574c5f2[3];
  virtual void  v4(); // _ZN8S18574C52v4Ev
  virtual void  v5(); // _ZN8S18574C52v5Ev
  virtual void  v6(); // _ZN8S18574C52v6Ev
  ~S18574C5(); // tgen
  S18574C5(); // tgen
};
//SIG(-1 S18574C5) C1{ v1 v2 v3 Fi[2] FL[2] FC2{ v4 Fs:6 Fl Fs:4 FL[13] Fp}[3]}


void  S18574C5 ::v4(){vfunc_called(this, "_ZN8S18574C52v4Ev");}
void  S18574C5 ::v5(){vfunc_called(this, "_ZN8S18574C52v5Ev");}
void  S18574C5 ::v6(){vfunc_called(this, "_ZN8S18574C52v6Ev");}
S18574C5 ::~S18574C5(){ note_dtor("S18574C5", this);} // tgen
S18574C5 ::S18574C5(){ note_ctor("S18574C5", this);} // tgen

static void Test_S18574C5()
{
  extern Class_Descriptor cd_S18574C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(59,101)];
    init_test(&cd_S18574C5, buf);
    S18574C5 *dp, &lv = *(dp=new (buf) S18574C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,400), "sizeof(S18574C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18574C5)");
    check_field_offset(lv, s18574c5f0, ABISELECT(8,4), "S18574C5.s18574c5f0");
    check_field_offset(lv, s18574c5f1, ABISELECT(16,12), "S18574C5.s18574c5f1");
    check_field_offset(lv, s18574c5f2, ABISELECT(32,28), "S18574C5.s18574c5f2");
    test_class_info(&lv, &cd_S18574C5);
    dp->~S18574C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C5(Test_S18574C5, "S18574C5", ABISELECT(464,400));

#else // __cplusplus

extern void _ZN8S18574C5C1Ev();
extern void _ZN8S18574C5D1Ev();
Name_Map name_map_S18574C5[] = {
  NSPAIR(_ZN8S18574C5C1Ev),
  NSPAIR(_ZN8S18574C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18574C5[];
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY vtc_S18574C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C5[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
Class_Descriptor cd_S18574C5 = {  "S18574C5", // class name
  0,0,//no base classes
  &(vtc_S18574C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,400), // object size
  NSPAIRA(_ZTI8S18574C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18574C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C6  : virtual S18574C4 {
  void *s18574c6f0;
  ::S18574C4 s18574c6f1;
  int s18574c6f2:3;
  ~S18574C6(); // tgen
  S18574C6(); // tgen
};
//SIG(-1 S18574C6) C1{ VBC2{ v1 Fs:6 Fl Fs:4 FL[13] Fp} Fp FC2 Fi:3}


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

static void Test_S18574C6()
{
  extern Class_Descriptor cd_S18574C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,66)];
    init_test(&cd_S18574C6, buf);
    S18574C6 *dp, &lv = *(dp=new (buf) S18574C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,260), "sizeof(S18574C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18574C6)");
    check_base_class_offset(lv, (S18574C4*), ABISELECT(168,136), "S18574C6");
    check_field_offset(lv, s18574c6f0, ABISELECT(8,4), "S18574C6.s18574c6f0");
    check_field_offset(lv, s18574c6f1, ABISELECT(16,8), "S18574C6.s18574c6f1");
    set_bf_and_test(lv, s18574c6f2, ABISELECT(160,132), 0, 3, 1, "S18574C6");
    set_bf_and_test(lv, s18574c6f2, ABISELECT(160,132), 0, 3, hide_sll(1LL<<2), "S18574C6");
    test_class_info(&lv, &cd_S18574C6);
    dp->~S18574C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C6(Test_S18574C6, "S18574C6", ABISELECT(312,260));

#else // __cplusplus

extern void _ZN8S18574C6C1Ev();
extern void _ZN8S18574C6D1Ev();
Name_Map name_map_S18574C6[] = {
  NSPAIR(_ZN8S18574C6C1Ev),
  NSPAIR(_ZN8S18574C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
static Base_Class bases_S18574C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C4,    ABISELECT(168,136), //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 _ZTI8S18574C6[];
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY vtc_S18574C6[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S18574C6[];
static  VTT_ENTRY vtt_S18574C6[] = {
  {&(_ZTV8S18574C6[3]),  3,7},
  {&(_ZTV8S18574C6[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
Class_Descriptor cd_S18574C6 = {  "S18574C6", // class name
  bases_S18574C6, 1,
  &(vtc_S18574C6[0]), // expected_vtbl_contents
  &(vtt_S18574C6[0]), // expected_vtt_contents
  ABISELECT(312,260), // object size
  NSPAIRA(_ZTI8S18574C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18574C6),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18574C6),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  S18574C7  {
  __tsi64 s18574c7f0;
  long double s18574c7f1;
  void *s18574c7f2;
  char s18574c7f3;
  ::S18574C4 s18574c7f4;
  void *s18574c7f5[2];
  __tsi64 s18574c7f6[8];
  short s18574c7f7;
  void *s18574c7f8;
  __tsi64 s18574c7f9:64;
  virtual void  v7(); // _ZN8S18574C72v7Ev
  ~S18574C7(); // tgen
  S18574C7(); // tgen
};
//SIG(-1 S18574C7) C1{ v1 FL FD Fp Fc FC2{ v2 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64}


void  S18574C7 ::v7(){vfunc_called(this, "_ZN8S18574C72v7Ev");}
S18574C7 ::~S18574C7(){ note_dtor("S18574C7", this);} // tgen
S18574C7 ::S18574C7(){ note_ctor("S18574C7", this);} // tgen

static void Test_S18574C7()
{
  extern Class_Descriptor cd_S18574C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,62)];
    init_test(&cd_S18574C7, buf);
    S18574C7 *dp, &lv = *(dp=new (buf) S18574C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,244), "sizeof(S18574C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C7)");
    check_field_offset(lv, s18574c7f0, ABISELECT(8,4), "S18574C7.s18574c7f0");
    check_field_offset(lv, s18574c7f1, ABISELECT(16,12), "S18574C7.s18574c7f1");
    check_field_offset(lv, s18574c7f2, ABISELECT(32,24), "S18574C7.s18574c7f2");
    check_field_offset(lv, s18574c7f3, ABISELECT(40,28), "S18574C7.s18574c7f3");
    check_field_offset(lv, s18574c7f4, ABISELECT(48,32), "S18574C7.s18574c7f4");
    check_field_offset(lv, s18574c7f5, ABISELECT(192,156), "S18574C7.s18574c7f5");
    check_field_offset(lv, s18574c7f6, ABISELECT(208,164), "S18574C7.s18574c7f6");
    check_field_offset(lv, s18574c7f7, ABISELECT(272,228), "S18574C7.s18574c7f7");
    check_field_offset(lv, s18574c7f8, ABISELECT(280,232), "S18574C7.s18574c7f8");
    set_bf_and_test(lv, s18574c7f9, ABISELECT(288,236), 0, 64, 1, "S18574C7");
    set_bf_and_test(lv, s18574c7f9, ABISELECT(288,236), 0, 64, hide_sll(1LL<<63), "S18574C7");
    test_class_info(&lv, &cd_S18574C7);
    dp->~S18574C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C7(Test_S18574C7, "S18574C7", ABISELECT(304,244));

#else // __cplusplus

extern void _ZN8S18574C7C1Ev();
extern void _ZN8S18574C7D1Ev();
Name_Map name_map_S18574C7[] = {
  NSPAIR(_ZN8S18574C7C1Ev),
  NSPAIR(_ZN8S18574C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18574C7[];
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY vtc_S18574C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C7[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
Class_Descriptor cd_S18574C7 = {  "S18574C7", // class name
  0,0,//no base classes
  &(vtc_S18574C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,244), // object size
  NSPAIRA(_ZTI8S18574C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18574C7),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C3  : S18574C4 , virtual S18574C5 , virtual S18574C6 , virtual S18574C7 {
  ::S18574C7 s18574c3f0;
  short s18574c3f1;
  int s18574c3f2[2];
  ~S18574C3(); // tgen
  S18574C3(); // tgen
};
//SIG(-1 S18574C3) C1{ BC2{ v1 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ v2 v3 v4 Fi[2] FL[2] FC2[3]} VBC4{ VBC2 Fp FC2 Fi:3} VBC5{ v5 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} FC5 Fs Fi[2]}


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

static void Test_S18574C3()
{
  extern Class_Descriptor cd_S18574C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(98,322)];
    init_test(&cd_S18574C3, buf);
    S18574C3 *dp, &lv = *(dp=new (buf) S18574C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1552,1284), "sizeof(S18574C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C3)");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*), 0, "S18574C3");
    check_base_class_offset(lv, (S18574C5*), ABISELECT(464,380), "S18574C3");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(1096,916), "S18574C3");
    check_base_class_offset(lv, (S18574C6*), ABISELECT(928,780), "S18574C3");
    check_base_class_offset(lv, (S18574C7*), ABISELECT(1248,1040), "S18574C3");
    check_field_offset(lv, s18574c3f0, ABISELECT(144,124), "S18574C3.s18574c3f0");
    check_field_offset(lv, s18574c3f1, ABISELECT(448,368), "S18574C3.s18574c3f1");
    check_field_offset(lv, s18574c3f2, ABISELECT(452,372), "S18574C3.s18574c3f2");
    test_class_info(&lv, &cd_S18574C3);
    dp->~S18574C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C3(Test_S18574C3, "S18574C3", ABISELECT(1552,1284));

#else // __cplusplus

extern void _ZN8S18574C3C1Ev();
extern void _ZN8S18574C3D1Ev();
Name_Map name_map_S18574C3[] = {
  NSPAIR(_ZN8S18574C3C1Ev),
  NSPAIR(_ZN8S18574C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
static Base_Class bases_S18574C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C5,    ABISELECT(464,380), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C4,    ABISELECT(1096,916), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S18574C6,    ABISELECT(928,780), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C7,    ABISELECT(1248,1040), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18574C3[];
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY vtc_S18574C3[] = {
  ABISELECT(1248,1040),
  ABISELECT(1096,916),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(168,136),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  0,
  ABISELECT(-1096,-916),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(-1248,-1040),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern VTBL_ENTRY _ZTV8S18574C3[];
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C3[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__8S18574C3[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C3[] = {
  {&(_ZTV8S18574C3[6]),  6,26},
  {&(_ZTV8S18574C3[12]),  12,26},
  {&(_ZTV8S18574C3[18]),  18,26},
  {&(_ZTV8S18574C3[21]),  21,26},
  {&(_ZTV8S18574C3[25]),  25,26},
  {&(_tg__ZTV8S18574C6__8S18574C3[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__8S18574C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
Class_Descriptor cd_S18574C3 = {  "S18574C3", // class name
  bases_S18574C3, 5,
  &(vtc_S18574C3[0]), // expected_vtbl_contents
  &(vtt_S18574C3[0]), // expected_vtt_contents
  ABISELECT(1552,1284), // object size
  NSPAIRA(_ZTI8S18574C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S18574C3),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18574C3),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C9  : S18574C7 , S18574C5 , S18574C4 {
  __tsi64 s18574c9f0[2];
  void *s18574c9f1[8];
  ::S18574C3 s18574c9f2;
  void *s18574c9f3;
  int s18574c9f4;
  ::S18574C3 s18574c9f5;
  int s18574c9f6;
  virtual  ~S18574C9(); // _ZN8S18574C9D1Ev
  virtual void  v8(); // _ZN8S18574C92v8Ev
  S18574C9(); // tgen
};
//SIG(-1 S18574C9) C1{ BC2{ v2 FL FD Fp Fc FC3{ v6 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC4{ v3 v4 v5 Fi[2] FL[2] FC3[3]} BC3 vd v1 FL[2] Fp[8] FC5{ BC3 VBC4 VBC6{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC5 Fi}


 S18574C9 ::~S18574C9(){ note_dtor("S18574C9", this);}
void  S18574C9 ::v8(){vfunc_called(this, "_ZN8S18574C92v8Ev");}
S18574C9 ::S18574C9(){ note_ctor("S18574C9", this);} // tgen

static void Test_S18574C9()
{
  extern Class_Descriptor cd_S18574C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(259,850)];
    init_test(&cd_S18574C9, buf);
    S18574C9 *dp, &lv = *(dp=new (buf) S18574C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4128,3396), "sizeof(S18574C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C9)");
    check_base_class_offset(lv, (S18574C7*), 0, "S18574C9");
    check_base_class_offset(lv, (S18574C5*), ABISELECT(296,244), "S18574C9");
    check_base_class_offset(lv, (S18574C4*), ABISELECT(760,644), "S18574C9");
    check_field_offset(lv, s18574c9f0, ABISELECT(904,768), "S18574C9.s18574c9f0");
    check_field_offset(lv, s18574c9f1, ABISELECT(920,784), "S18574C9.s18574c9f1");
    check_field_offset(lv, s18574c9f2, ABISELECT(992,816), "S18574C9.s18574c9f2");
    check_field_offset(lv, s18574c9f3, ABISELECT(2544,2100), "S18574C9.s18574c9f3");
    check_field_offset(lv, s18574c9f4, ABISELECT(2552,2104), "S18574C9.s18574c9f4");
    check_field_offset(lv, s18574c9f5, ABISELECT(2560,2108), "S18574C9.s18574c9f5");
    check_field_offset(lv, s18574c9f6, ABISELECT(4112,3392), "S18574C9.s18574c9f6");
    test_class_info(&lv, &cd_S18574C9);
    dp->~S18574C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C9(Test_S18574C9, "S18574C9", ABISELECT(4128,3396));

#else // __cplusplus

extern void _ZN8S18574C9C1Ev();
extern void _ZN8S18574C9D1Ev();
Name_Map name_map_S18574C9[] = {
  NSPAIR(_ZN8S18574C9C1Ev),
  NSPAIR(_ZN8S18574C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
static Base_Class bases_S18574C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S18574C5,    ABISELECT(296,244), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C4,    ABISELECT(760,644), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18574C9[];
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C9D1Ev();
extern void _ZN8S18574C9D0Ev();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY vtc_S18574C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C9[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18574C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18574C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI8S18574C9[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI8S18574C9[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
Class_Descriptor cd_S18574C9 = {  "S18574C9", // class name
  bases_S18574C9, 3,
  &(vtc_S18574C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4128,3396), // object size
  NSPAIRA(_ZTI8S18574C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S18574C9),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C12  : S18574C7 {
  ::S18574C6 s18574c12f0;
  int s18574c12f1;
  void *s18574c12f2;
  int s18574c12f3;
  virtual  ~S18574C12(); // _ZN9S18574C12D1Ev
  virtual void  v12(); // _ZN9S18574C123v12Ev
  S18574C12(); // tgen
};
//SIG(-1 S18574C12) C1{ BC2{ v2 FL FD Fp Fc FC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v1 FC4{ VBC3 Fp FC3 Fi:3} Fi Fp Fi}


 S18574C12 ::~S18574C12(){ note_dtor("S18574C12", this);}
void  S18574C12 ::v12(){vfunc_called(this, "_ZN9S18574C123v12Ev");}
S18574C12 ::S18574C12(){ note_ctor("S18574C12", this);} // tgen

static void Test_S18574C12()
{
  extern Class_Descriptor cd_S18574C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,130)];
    init_test(&cd_S18574C12, buf);
    S18574C12 *dp, &lv = *(dp=new (buf) S18574C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,516), "sizeof(S18574C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C12)");
    check_base_class_offset(lv, (S18574C7*), 0, "S18574C12");
    check_field_offset(lv, s18574c12f0, ABISELECT(296,244), "S18574C12.s18574c12f0");
    check_field_offset(lv, s18574c12f1, ABISELECT(608,504), "S18574C12.s18574c12f1");
    check_field_offset(lv, s18574c12f2, ABISELECT(616,508), "S18574C12.s18574c12f2");
    check_field_offset(lv, s18574c12f3, ABISELECT(624,512), "S18574C12.s18574c12f3");
    test_class_info(&lv, &cd_S18574C12);
    dp->~S18574C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C12(Test_S18574C12, "S18574C12", ABISELECT(640,516));

#else // __cplusplus

extern void _ZN9S18574C12C1Ev();
extern void _ZN9S18574C12D1Ev();
Name_Map name_map_S18574C12[] = {
  NSPAIR(_ZN9S18574C12C1Ev),
  NSPAIR(_ZN9S18574C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
static Base_Class bases_S18574C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S18574C12[];
extern void _ZN8S18574C72v7Ev();
extern void _ZN9S18574C12D1Ev();
extern void _ZN9S18574C12D0Ev();
extern void _ZN9S18574C123v12Ev();
static  VTBL_ENTRY vtc_S18574C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C12[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN9S18574C12D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C12D0Ev,
  (VTBL_ENTRY)&_ZN9S18574C123v12Ev,
};
extern VTBL_ENTRY _ZTI9S18574C12[];
extern  VTBL_ENTRY _ZTV9S18574C12[];
Class_Descriptor cd_S18574C12 = {  "S18574C12", // class name
  bases_S18574C12, 1,
  &(vtc_S18574C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(640,516), // object size
  NSPAIRA(_ZTI9S18574C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S18574C12),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  S18574C11  : virtual S18574C7 , virtual S18574C9 , virtual S18574C4 , virtual S18574C6 {
  __tsi64 s18574c11f0:44;
  void *s18574c11f1;
  int s18574c11f2;
  ::S18574C3 s18574c11f3;
  __tsi64 s18574c11f4[2];
  int s18574c11f5[3];
  ::S18574C9 s18574c11f6;
  char s18574c11f7:7;
  ::S18574C12 s18574c11f8;
  ~S18574C11(); // tgen
  S18574C11(); // tgen
};
//SIG(-1 S18574C11) C1{ VBC2{ v1 FL FD Fp Fc FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} VBC4{ BC2 BC5{ v2 v3 v4 Fi[2] FL[2] FC3[3]} BC3 vd v6 FL[2] Fp[8] FC6{ BC3 VBC5 VBC7{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC6 Fi} VBC3 VBC7 FL:44 Fp Fi FC6 FL[2] Fi[3] FC4 Fc:7 FC8{ BC2 vd v7 FC7 Fi Fp Fi}}


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

static void Test_S18574C11()
{
  extern Class_Descriptor cd_S18574C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(697,2288)];
    init_test(&cd_S18574C11, buf);
    S18574C11 *dp, &lv = *(dp=new (buf) S18574C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11136,9148), "sizeof(S18574C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C11)");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*), ABISELECT(6400,5248), "S18574C11");
    check_base_class_offset(lv, (S18574C7*)(S18574C9*), ABISELECT(6704,5492), "S18574C11");
    check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(7000,5736), "S18574C11");
    check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(7464,6136), "S18574C11");
    check_base_class_offset(lv, (S18574C9*), ABISELECT(6704,5492), "S18574C11");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*), ABISELECT(10824,8888), "S18574C11");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(10824,8888), "S18574C11");
    check_base_class_offset(lv, (S18574C6*), ABISELECT(10968,9012), "S18574C11");
    set_bf_and_test(lv, s18574c11f0, ABISELECT(8,4), 0, 44, 1, "S18574C11");
    set_bf_and_test(lv, s18574c11f0, ABISELECT(8,4), 0, 44, hide_sll(1LL<<43), "S18574C11");
    check_field_offset(lv, s18574c11f1, ABISELECT(16,12), "S18574C11.s18574c11f1");
    check_field_offset(lv, s18574c11f2, ABISELECT(24,16), "S18574C11.s18574c11f2");
    check_field_offset(lv, s18574c11f3, ABISELECT(32,20), "S18574C11.s18574c11f3");
    check_field_offset(lv, s18574c11f4, ABISELECT(1584,1304), "S18574C11.s18574c11f4");
    check_field_offset(lv, s18574c11f5, ABISELECT(1600,1320), "S18574C11.s18574c11f5");
    check_field_offset(lv, s18574c11f6, ABISELECT(1616,1332), "S18574C11.s18574c11f6");
    set_bf_and_test(lv, s18574c11f7, ABISELECT(5744,4728), 0, 7, 1, "S18574C11");
    set_bf_and_test(lv, s18574c11f7, ABISELECT(5744,4728), 0, 7, hide_sll(1LL<<6), "S18574C11");
    check_field_offset(lv, s18574c11f8, ABISELECT(5760,4732), "S18574C11.s18574c11f8");
    test_class_info(&lv, &cd_S18574C11);
    dp->~S18574C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C11(Test_S18574C11, "S18574C11", ABISELECT(11136,9148));

#else // __cplusplus

extern void _ZN9S18574C11C1Ev();
extern void _ZN9S18574C11D1Ev();
Name_Map name_map_S18574C11[] = {
  NSPAIR(_ZN9S18574C11C1Ev),
  NSPAIR(_ZN9S18574C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
static Base_Class bases_S18574C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C7,    ABISELECT(6400,5248), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C7,    ABISELECT(6704,5492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(7000,5736), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(7464,6136), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(6704,5492), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C4,    ABISELECT(10824,8888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C6,    ABISELECT(10968,9012), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18574C11[];
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn6704_N9S18574C11D1Ev,_ZThn5492_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn6704_N9S18574C11D0Ev,_ZThn5492_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY vtc_S18574C11[] = {
  ABISELECT(10968,9012),
  ABISELECT(10824,8888),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-144,-124),
  ABISELECT(-10968,-9012),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern VTBL_ENTRY _ZTV9S18574C11[];
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C11[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__9S18574C11[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C11[] = {
  {&(_ZTV9S18574C11[6]),  6,40},
  {&(_ZTV9S18574C11[11]),  11,40},
  {&(_ZTV9S18574C11[21]),  21,40},
  {&(_ZTV9S18574C11[27]),  27,40},
  {&(_ZTV9S18574C11[32]),  32,40},
  {&(_ZTV9S18574C11[36]),  36,40},
  {&(_ZTV9S18574C11[40]),  40,40},
  {&(_tg__ZTV8S18574C6__9S18574C11[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__9S18574C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S18574C11D0Ev,_ZThn5492_N9S18574C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S18574C11D1Ev,_ZThn5492_N9S18574C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18574C11 = {  "S18574C11", // class name
  bases_S18574C11, 7,
  &(vtc_S18574C11[0]), // expected_vtbl_contents
  &(vtt_S18574C11[0]), // expected_vtt_contents
  ABISELECT(11136,9148), // object size
  NSPAIRA(_ZTI9S18574C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S18574C11),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18574C11),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C10  : virtual S18574C9 , virtual S18574C4 , virtual S18574C6 , S18574C3 , S18574C11 {
  ::S18574C9 s18574c10f0;
  __tsi64 s18574c10f1;
  char s18574c10f2:7;
  virtual void  v9(); // _ZN9S18574C102v9Ev
  ~S18574C10(); // tgen
  S18574C10(); // tgen
};
//SIG(-1 S18574C10) C1{ VBC2{ BC3{ v2 FL FD Fp Fc FC4{ v6 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC5{ v3 v4 v5 Fi[2] FL[2] FC4[3]} BC4 vd v7 FL[2] Fp[8] FC6{ BC4 VBC5 VBC7{ VBC4 Fp FC4 Fi:3} VBC3 FC3 Fs Fi[2]} Fp Fi FC6 Fi} VBC4 VBC7 BC6 BC8{ VBC3 VBC2 VBC4 VBC7 FL:44 Fp Fi FC6 FL[2] Fi[3] FC2 Fc:7 FC9{ BC3 vd v8 FC7 Fi Fp Fi}} v1 FC2 FL Fc:7}


void  S18574C10 ::v9(){vfunc_called(this, "_ZN9S18574C102v9Ev");}
S18574C10 ::~S18574C10(){ note_dtor("S18574C10", this);} // tgen
S18574C10 ::S18574C10(){ note_ctor("S18574C10", this);} // tgen

static void Test_S18574C10()
{
  extern Class_Descriptor cd_S18574C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1014,3335)];
    init_test(&cd_S18574C10, buf);
    S18574C10 *dp, &lv = *(dp=new (buf) S18574C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16208,13336), "sizeof(S18574C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C10)");
    check_base_class_offset(lv, (S18574C7*)(S18574C9*), ABISELECT(11008,9036), "S18574C10");
    check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(11304,9280), "S18574C10");
    check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(11768,9680), "S18574C10");
    check_base_class_offset(lv, (S18574C9*), ABISELECT(11008,9036), "S18574C10");
    check_base_class_offset(lv, (S18574C9*)(S18574C11*), ABISELECT(11008,9036), "S18574C10");
    /*is_ambiguous_... S18574C10::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*), ABISELECT(15128,12432), "S18574C10");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(15128,12432), "S18574C10");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*), ABISELECT(15128,12432), "S18574C10");
    check_base_class_offset(lv, (S18574C6*), ABISELECT(15272,12556), "S18574C10");
    check_base_class_offset(lv, (S18574C6*)(S18574C3*), ABISELECT(15272,12556), "S18574C10");
    check_base_class_offset(lv, (S18574C6*)(S18574C11*), ABISELECT(15272,12556), "S18574C10");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*), 0, "S18574C10");
    check_base_class_offset(lv, (S18574C5*)(S18574C3*), ABISELECT(15440,12692), "S18574C10");
    check_base_class_offset(lv, (S18574C7*)(S18574C3*), ABISELECT(15904,13092), "S18574C10");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*), ABISELECT(15904,13092), "S18574C10");
    check_base_class_offset(lv, (S18574C3*), 0, "S18574C10");
    check_base_class_offset(lv, (S18574C11*), ABISELECT(464,380), "S18574C10");
    check_field_offset(lv, s18574c10f0, ABISELECT(6864,5628), "S18574C10.s18574c10f0");
    check_field_offset(lv, s18574c10f1, ABISELECT(10992,9024), "S18574C10.s18574c10f1");
    set_bf_and_test(lv, s18574c10f2, ABISELECT(11000,9032), 0, 7, 1, "S18574C10");
    set_bf_and_test(lv, s18574c10f2, ABISELECT(11000,9032), 0, 7, hide_sll(1LL<<6), "S18574C10");
    test_class_info(&lv, &cd_S18574C10);
    dp->~S18574C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C10(Test_S18574C10, "S18574C10", ABISELECT(16208,13336));

#else // __cplusplus

extern void _ZN9S18574C10C1Ev();
extern void _ZN9S18574C10D1Ev();
Name_Map name_map_S18574C10[] = {
  NSPAIR(_ZN9S18574C10C1Ev),
  NSPAIR(_ZN9S18574C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
static Base_Class bases_S18574C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C7,    ABISELECT(11008,9036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18574C5,    ABISELECT(11304,9280), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(11768,9680), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(11008,9036), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C4,    ABISELECT(15128,12432), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C6,    ABISELECT(15272,12556), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(15440,12692), //bcp->offset
    47, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S18574C7,    ABISELECT(15904,13092), //bcp->offset
    55, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S18574C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C11,    ABISELECT(464,380), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S18574C10[];
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn11008_N9S18574C10D1Ev,_ZThn9036_N9S18574C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void ABISELECT(_ZThn11008_N9S18574C10D0Ev,_ZThn9036_N9S18574C10D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY vtc_S18574C10[] = {
  ABISELECT(11008,9036),
  ABISELECT(15904,13092),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(15440,12712),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  0,
  ABISELECT(-15904,-13092),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern VTBL_ENTRY _ZTV9S18574C10[];
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__9S18574C10[] = {
  ABISELECT(15904,13092),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C3__9S18574C10[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C3__9S18574C10[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C3__9S18574C10[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C3__9S18574C10[] = {
  0,
  ABISELECT(-15904,-13092),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C10[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(15440,12712),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C11__9S18574C10[] = {
  0,
  ABISELECT(-15440,-12712),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn10544_N9S18574C11D1Ev,_ZThn8656_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn10544_N9S18574C11D0Ev,_ZThn8656_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C11__9S18574C10[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C11__9S18574C10[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C11__9S18574C10[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C11__9S18574C10[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C11__9S18574C10[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C10[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__9S18574C10[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C10[] = {
  {&(_ZTV9S18574C10[7]),  7,59},
  {&(_tg__ZTV8S18574C3__9S18574C10[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C3__9S18574C10[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C3__9S18574C10[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C3__9S18574C10[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C3__9S18574C10[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C10[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C11__9S18574C10[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C11__9S18574C10[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C11__9S18574C10[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C11__9S18574C10[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C11__9S18574C10[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C11__9S18574C10[3]),  3,3},
  {&(_ZTV9S18574C10[28]),  28,59},
  {&(_ZTV9S18574C10[34]),  34,59},
  {&(_ZTV9S18574C10[39]),  39,59},
  {&(_ZTV9S18574C10[43]),  43,59},
  {&(_ZTV9S18574C10[47]),  47,59},
  {&(_ZTV9S18574C10[52]),  52,59},
  {&(_ZTV9S18574C10[58]),  58,59},
  {&(_ZTV9S18574C10[17]),  17,59},
  {&(_tg__ZTV8S18574C6__9S18574C10[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__9S18574C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S18574C11D0Ev,_ZThn8656_N9S18574C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S18574C11D1Ev,_ZThn8656_N9S18574C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S18574C10D0Ev,_ZThn9036_N9S18574C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S18574C10D1Ev,_ZThn9036_N9S18574C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18574C10 = {  "S18574C10", // class name
  bases_S18574C10, 11,
  &(vtc_S18574C10[0]), // expected_vtbl_contents
  &(vtt_S18574C10[0]), // expected_vtt_contents
  ABISELECT(16208,13336), // object size
  NSPAIRA(_ZTI9S18574C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S18574C10),59, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18574C10),23, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C8  : virtual S18574C4 , virtual S18574C3 , S18574C9 , S18574C10 {
  ::S18574C11 s18574c8f0;
  short s18574c8f1;
  int s18574c8f2:8;
  virtual void  v10(); // _ZN8S18574C83v10Ev
  virtual void  v11(); // _ZN8S18574C83v11Ev
  ~S18574C8(); // tgen
  S18574C8(); // tgen
};
//SIG(-1 S18574C8) C1{ VBC2{ v3 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ BC2 VBC4{ v4 v5 v6 Fi[2] FL[2] FC2[3]} VBC5{ VBC2 Fp FC2 Fi:3} VBC6{ v7 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} FC6 Fs Fi[2]} BC7{ BC6 BC4 BC2 vd v8 FL[2] Fp[8] FC3 Fp Fi FC3 Fi} BC8{ VBC7 VBC2 VBC5 BC3 BC9{ VBC6 VBC7 VBC2 VBC5 FL:44 Fp Fi FC3 FL[2] Fi[3] FC7 Fc:7 FC10{ BC6 vd v10 FC5 Fi Fp Fi}} v9 FC7 FL Fc:7} v1 v2 FC9 Fs Fi:8}


void  S18574C8 ::v10(){vfunc_called(this, "_ZN8S18574C83v10Ev");}
void  S18574C8 ::v11(){vfunc_called(this, "_ZN8S18574C83v11Ev");}
S18574C8 ::~S18574C8(){ note_dtor("S18574C8", this);} // tgen
S18574C8 ::S18574C8(){ note_ctor("S18574C8", this);} // tgen

static void Test_S18574C8()
{
  extern Class_Descriptor cd_S18574C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1999,6567)];
    init_test(&cd_S18574C8, buf);
    S18574C8 *dp, &lv = *(dp=new (buf) S18574C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31968,26264), "sizeof(S18574C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C8)");
    /*is_ambiguous_... S18574C8::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*), ABISELECT(26280,21584), "S18574C8");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(26280,21584), "S18574C8");
    /*is_ambiguous_... S18574C10::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C10*), ABISELECT(26280,21584), "S18574C8");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C10*), ABISELECT(26280,21584), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*), ABISELECT(26432,21708), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*), ABISELECT(26896,22088), "S18574C8");
    check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C10*), ABISELECT(26896,22088), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*), ABISELECT(27360,22488), "S18574C8");
    check_base_class_offset(lv, (S18574C6*)(S18574C10*), ABISELECT(27360,22488), "S18574C8");
    check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C10*), ABISELECT(27360,22488), "S18574C8");
    check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C10*), ABISELECT(27360,22488), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*), ABISELECT(27536,22624), "S18574C8");
    check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C10*), ABISELECT(27536,22624), "S18574C8");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C10*), ABISELECT(27536,22624), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C3*), ABISELECT(26432,21708), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C9*), 0, "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(296,244), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(760,644), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C9*), 0, "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C9*), ABISELECT(27840,22868), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(28136,23112), "S18574C8");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(28600,23512), "S18574C8");
    check_base_class_offset(lv, (S18574C9*)(S18574C10*), ABISELECT(27840,22868), "S18574C8");
    check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C10*), ABISELECT(27840,22868), "S18574C8");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C10*), ABISELECT(4128,3396), "S18574C8");
    check_base_class_offset(lv, (S18574C3*)(S18574C10*), ABISELECT(4128,3396), "S18574C8");
    check_base_class_offset(lv, (S18574C11*)(S18574C10*), ABISELECT(4592,3776), "S18574C8");
    check_base_class_offset(lv, (S18574C10*), ABISELECT(4128,3396), "S18574C8");
    check_field_offset(lv, s18574c8f0, ABISELECT(15136,12432), "S18574C8.s18574c8f0");
    check_field_offset(lv, s18574c8f1, ABISELECT(26272,21580), "S18574C8.s18574c8f1");
    set_bf_and_test(lv, s18574c8f2, ABISELECT(26274,21582), 0, 8, 1, "S18574C8");
    set_bf_and_test(lv, s18574c8f2, ABISELECT(26274,21582), 0, 8, hide_sll(1LL<<7), "S18574C8");
    test_class_info(&lv, &cd_S18574C8);
    dp->~S18574C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C8(Test_S18574C8, "S18574C8", ABISELECT(31968,26264));

#else // __cplusplus

extern void _ZN8S18574C8C1Ev();
extern void _ZN8S18574C8D1Ev();
Name_Map name_map_S18574C8[] = {
  NSPAIR(_ZN8S18574C8C1Ev),
  NSPAIR(_ZN8S18574C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C10;
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
static Base_Class bases_S18574C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C4,    ABISELECT(26280,21584), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C4,    ABISELECT(26432,21708), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18574C5,    ABISELECT(26896,22088), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C6,    ABISELECT(27360,22488), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C7,    ABISELECT(27536,22624), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C3,    ABISELECT(26432,21708), //bcp->offset
    45, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(296,244), //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
    12, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(760,644), //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
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C7,    ABISELECT(27840,22868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(28136,23112), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(28600,23512), //bcp->offset
    86, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(27840,22868), //bcp->offset
    68, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(4592,3776), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S18574C10,    ABISELECT(4128,3396), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18574C8[];
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C8D1Ev();
extern void _ZN8S18574C8D0Ev();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev)();
extern void ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev)();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn27840_N8S18574C8D1Ev,_ZThn22868_N8S18574C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev)();
extern void ABISELECT(_ZThn27840_N8S18574C8D0Ev,_ZThn22868_N8S18574C8D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY vtc_S18574C8[] = {
  ABISELECT(27840,22868),
  ABISELECT(27536,22624),
  ABISELECT(27360,22488),
  ABISELECT(26896,22088),
  ABISELECT(26432,21708),
  ABISELECT(26280,21584),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D0Ev,
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(23712,19472),
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev),
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev),
  0,
  ABISELECT(-26280,-21584),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-26432,-21708),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  0,
  0,
  ABISELECT(-26896,-22088),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-1080,-904),
  ABISELECT(-27360,-22488),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  0,
  ABISELECT(-27536,-22624),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-27840,-22868),
  0,
  ABISELECT(-27840,-22868),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-28136,-23112),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-28600,-23512),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S18574C8[];
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C10__8S18574C8[] = {
  ABISELECT(23712,19472),
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C10__A1__8S18574C8[] = {
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C10__A1__8S18574C8[] = {
  0,
  0,
  0,
  ABISELECT(-22768,-18692),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C10__A1__8S18574C8[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-23232,-19092),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C10__A1__8S18574C8[] = {
  0,
  ABISELECT(-22152,-18188),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C10__A1__8S18574C8[] = {
  0,
  ABISELECT(-23408,-19228),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__8S18574C8[] = {
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C10__8S18574C8[] = {
  0,
  ABISELECT(-22944,-18848),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn23248_N9S18574C11D1Ev,_ZThn19092_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn23248_N9S18574C11D0Ev,_ZThn19092_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C10__8S18574C8[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-23248,-19092),
  0,
  ABISELECT(-23248,-19092),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__8S18574C8[] = {
  ABISELECT(-23544,-19336),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__8S18574C8[] = {
  ABISELECT(-24008,-19736),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C10__8S18574C8[] = {
  0,
  ABISELECT(-21688,-17808),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C10__8S18574C8[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-22768,-18712),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn23712_N9S18574C10D1Ev,_ZThn19472_N9S18574C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void ABISELECT(_ZThn23712_N9S18574C10D0Ev,_ZThn19472_N9S18574C10D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C10__8S18574C8[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-23712,-19472),
  0,
  ABISELECT(-23712,-19472),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C10__8S18574C8[] = {
  ABISELECT(-24008,-19716),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C10__8S18574C8[] = {
  ABISELECT(-24472,-20116),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C10__8S18574C8[] = {
  0,
  ABISELECT(-22152,-18188),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C10__8S18574C8[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-23232,-19092),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A1__9S18574C10__8S18574C8[] = {
  0,
  0,
  0,
  ABISELECT(-22768,-18692),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__A1__9S18574C10__8S18574C8[] = {
  0,
  ABISELECT(-23408,-19228),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C10__8S18574C8[] = {
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__8S18574C8[] = {
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C3__8S18574C8[] = {
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C3__8S18574C8[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C3__8S18574C8[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C3__8S18574C8[] = {
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C8[] = {
  ABISELECT(-1080,-904),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__8S18574C8[] = {
  0,
  ABISELECT(1080,904),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C8[] = {
  {&(_ZTV8S18574C8[8]),  8,89},
  {&(_tg__ZTV9S18574C10__8S18574C8[7]),  7,11},
  {&(_tg__ZTV8S18574C39S18574C10__A1__8S18574C8[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C10__A1__8S18574C8[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C10__A1__8S18574C8[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C10__A1__8S18574C8[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C10__A1__8S18574C8[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C10__8S18574C8[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C10__8S18574C8[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C10__8S18574C8[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__8S18574C8[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__8S18574C8[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C10__8S18574C8[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C10__8S18574C8[3]),  3,3},
  {&(_tg__ZTV8S18574C9__9S18574C10__8S18574C8[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C10__8S18574C8[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C10__8S18574C8[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C10__8S18574C8[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C10__8S18574C8[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A1__9S18574C10__8S18574C8[5]),  5,8},
  {&(_tg__ZTV8S18574C7__A1__9S18574C10__8S18574C8[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C10__8S18574C8[6]),  6,8},
  {&(_ZTV8S18574C8[44]),  44,89},
  {&(_ZTV8S18574C8[52]),  52,89},
  {&(_ZTV8S18574C8[58]),  58,89},
  {&(_ZTV8S18574C8[64]),  64,89},
  {&(_ZTV8S18574C8[67]),  67,89},
  {&(_ZTV8S18574C8[29]),  29,89},
  {&(_ZTV8S18574C8[77]),  77,89},
  {&(_ZTV8S18574C8[83]),  83,89},
  {&(_ZTV8S18574C8[88]),  88,89},
  {&(_ZTV8S18574C8[39]),  39,89},
  {&(_tg__ZTV8S18574C3__8S18574C8[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C3__8S18574C8[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C3__8S18574C8[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C3__8S18574C8[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C3__8S18574C8[3]),  3,4},
  {&(_tg__ZTV8S18574C6__8S18574C8[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__8S18574C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S18574C8[];
extern  VTBL_ENTRY _ZTV8S18574C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C8[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23712_N9S18574C10D0Ev,_ZThn19472_N9S18574C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23712_N9S18574C10D1Ev,_ZThn19472_N9S18574C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23248_N9S18574C11D0Ev,_ZThn19092_N9S18574C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23248_N9S18574C11D1Ev,_ZThn19092_N9S18574C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27840_N8S18574C8D0Ev,_ZThn22868_N8S18574C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27840_N8S18574C8D1Ev,_ZThn22868_N8S18574C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18574C8 = {  "S18574C8", // class name
  bases_S18574C8, 18,
  &(vtc_S18574C8[0]), // expected_vtbl_contents
  &(vtt_S18574C8[0]), // expected_vtt_contents
  ABISELECT(31968,26264), // object size
  NSPAIRA(_ZTI8S18574C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S18574C8),89, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18574C8),39, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C14  : virtual S18574C6 {
  ::S18574C11 s18574c14f0;
  int s18574c14f1:6;
  int s18574c14f2;
  __tsi64 s18574c14f3;
  ~S18574C14(); // tgen
  S18574C14(); // tgen
};
//SIG(-1 S18574C14) C1{ VBC2{ VBC3{ v1 Fs:6 Fl Fs:4 FL[13] Fp} Fp FC3 Fi:3} FC4{ VBC5{ v2 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} VBC6{ BC5 BC7{ v3 v4 v5 Fi[2] FL[2] FC3[3]} BC3 vd v6 FL[2] Fp[8] FC8{ BC3 VBC7 VBC2 VBC5 FC5 Fs Fi[2]} Fp Fi FC8 Fi} VBC3 VBC2 FL:44 Fp Fi FC8 FL[2] Fi[3] FC6 Fc:7 FC9{ BC5 vd v7 FC2 Fi Fp Fi}} Fi:6 Fi FL}


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

static void Test_S18574C14()
{
  extern Class_Descriptor cd_S18574C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(719,2358)];
    init_test(&cd_S18574C14, buf);
    S18574C14 *dp, &lv = *(dp=new (buf) S18574C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11488,9428), "sizeof(S18574C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C14)");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(11336,9304), "S18574C14");
    check_base_class_offset(lv, (S18574C6*), ABISELECT(11168,9168), "S18574C14");
    check_field_offset(lv, s18574c14f0, ABISELECT(16,4), "S18574C14.s18574c14f0");
    set_bf_and_test(lv, s18574c14f1, ABISELECT(11152,9152), 0, 6, 1, "S18574C14");
    set_bf_and_test(lv, s18574c14f1, ABISELECT(11152,9152), 0, 6, hide_sll(1LL<<5), "S18574C14");
    check_field_offset(lv, s18574c14f2, ABISELECT(11156,9156), "S18574C14.s18574c14f2");
    check_field_offset(lv, s18574c14f3, ABISELECT(11160,9160), "S18574C14.s18574c14f3");
    test_class_info(&lv, &cd_S18574C14);
    dp->~S18574C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C14(Test_S18574C14, "S18574C14", ABISELECT(11488,9428));

#else // __cplusplus

extern void _ZN9S18574C14C1Ev();
extern void _ZN9S18574C14D1Ev();
Name_Map name_map_S18574C14[] = {
  NSPAIR(_ZN9S18574C14C1Ev),
  NSPAIR(_ZN9S18574C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
static Base_Class bases_S18574C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C4,    ABISELECT(11336,9304), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S18574C6,    ABISELECT(11168,9168), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18574C14[];
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY vtc_S18574C14[] = {
  ABISELECT(11336,9304),
  ABISELECT(11168,9168),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C14[0]),
  ABISELECT(168,136),
  ABISELECT(-11168,-9168),
  (VTBL_ENTRY)&(_ZTI9S18574C14[0]),
  0,
  ABISELECT(-11336,-9304),
  (VTBL_ENTRY)&(_ZTI9S18574C14[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern VTBL_ENTRY _ZTV9S18574C14[];
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C14[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__9S18574C14[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C14[] = {
  {&(_ZTV9S18574C14[4]),  4,11},
  {&(_ZTV9S18574C14[7]),  7,11},
  {&(_ZTV9S18574C14[10]),  10,11},
  {&(_tg__ZTV8S18574C6__9S18574C14[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__9S18574C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S18574C14[];
extern  VTBL_ENTRY _ZTV9S18574C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C14[];
Class_Descriptor cd_S18574C14 = {  "S18574C14", // class name
  bases_S18574C14, 2,
  &(vtc_S18574C14[0]), // expected_vtbl_contents
  &(vtt_S18574C14[0]), // expected_vtt_contents
  ABISELECT(11488,9428), // object size
  NSPAIRA(_ZTI9S18574C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S18574C14),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18574C14),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  S18574C15  : virtual S18574C7 , S18574C5 , virtual S18574C10 {
  char s18574c15f0:8;
  int s18574c15f1;
  ~S18574C15(); // tgen
  S18574C15(); // tgen
};
//SIG(-1 S18574C15) C1{ VBC2{ v1 FL FD Fp Fc FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC4{ v2 v3 v4 Fi[2] FL[2] FC3[3]} VBC5{ VBC6{ BC2 BC4 BC3 vd v6 FL[2] Fp[8] FC7{ BC3 VBC4 VBC8{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC7 Fi} VBC3 VBC8 BC7 BC9{ VBC2 VBC6 VBC3 VBC8 FL:44 Fp Fi FC7 FL[2] Fi[3] FC6 Fc:7 FC10{ BC2 vd v8 FC8 Fi Fp Fi}} v7 FC6 FL Fc:7} Fc:8 Fi}


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

static void Test_S18574C15()
{
  extern Class_Descriptor cd_S18574C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1044,3437)];
    init_test(&cd_S18574C15, buf);
    S18574C15 *dp, &lv = *(dp=new (buf) S18574C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16688,13744), "sizeof(S18574C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C15)");
    /*is_ambiguous_... S18574C15::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*), ABISELECT(480,408), "S18574C15");
    check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C10*), ABISELECT(480,408), "S18574C15");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C10*), ABISELECT(480,408), "S18574C15");
    /*is_ambiguous_... S18574C15::S18574C5 */ AMB_check_base_class_offset(lv, (S18574C5*), 0, "S18574C15");
    check_base_class_offset(lv, (S18574C7*)(S18574C9*), ABISELECT(11792,9688), "S18574C15");
    check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(12088,9932), "S18574C15");
    check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(12552,10332), "S18574C15");
    check_base_class_offset(lv, (S18574C9*)(S18574C10*), ABISELECT(11792,9688), "S18574C15");
    check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C10*), ABISELECT(11792,9688), "S18574C15");
    /*is_ambiguous_... S18574C10::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C10*), ABISELECT(15912,13084), "S18574C15");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(15912,13084), "S18574C15");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C10*), ABISELECT(15912,13084), "S18574C15");
    check_base_class_offset(lv, (S18574C6*)(S18574C10*), ABISELECT(16056,13208), "S18574C15");
    check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C10*), ABISELECT(16056,13208), "S18574C15");
    check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C10*), ABISELECT(16056,13208), "S18574C15");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C10*), ABISELECT(784,652), "S18574C15");
    check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C10*), ABISELECT(16224,13344), "S18574C15");
    check_base_class_offset(lv, (S18574C3*)(S18574C10*), ABISELECT(784,652), "S18574C15");
    check_base_class_offset(lv, (S18574C11*)(S18574C10*), ABISELECT(1248,1032), "S18574C15");
    check_base_class_offset(lv, (S18574C10*), ABISELECT(784,652), "S18574C15");
    set_bf_and_test(lv, s18574c15f0, ABISELECT(464,400), 0, 8, 1, "S18574C15");
    set_bf_and_test(lv, s18574c15f0, ABISELECT(464,400), 0, 8, hide_sll(1LL<<7), "S18574C15");
    check_field_offset(lv, s18574c15f1, ABISELECT(468,404), "S18574C15.s18574c15f1");
    test_class_info(&lv, &cd_S18574C15);
    dp->~S18574C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C15(Test_S18574C15, "S18574C15", ABISELECT(16688,13744));

#else // __cplusplus

extern void _ZN9S18574C15C1Ev();
extern void _ZN9S18574C15D1Ev();
Name_Map name_map_S18574C15[] = {
  NSPAIR(_ZN9S18574C15C1Ev),
  NSPAIR(_ZN9S18574C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C10;
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
static Base_Class bases_S18574C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C7,    ABISELECT(480,408), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S18574C7,    ABISELECT(11792,9688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(12088,9932), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(12552,10332), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(11792,9688), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(15912,13084), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S18574C6,    ABISELECT(16056,13208), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(784,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(16224,13344), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S18574C3,    ABISELECT(784,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(1248,1032), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S18574C10,    ABISELECT(784,652), //bcp->offset
    17, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18574C15[];
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN9S18574C15D1Ev();
extern void _ZN9S18574C15D0Ev();
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev)();
extern void ABISELECT(_ZThn784_N9S18574C15D1Ev,_ZThn652_N9S18574C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev)();
extern void ABISELECT(_ZThn784_N9S18574C15D0Ev,_ZThn652_N9S18574C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N9S18574C15D1Ev,_ZTvn380_n40_N9S18574C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S18574C15D0Ev,_ZTvn380_n40_N9S18574C15D0Ev)();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev)();
extern void ABISELECT(_ZThn11792_N9S18574C15D1Ev,_ZThn9688_N9S18574C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev)();
extern void ABISELECT(_ZThn11792_N9S18574C15D0Ev,_ZThn9688_N9S18574C15D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY vtc_S18574C15[] = {
  ABISELECT(16224,13344),
  ABISELECT(16056,13208),
  ABISELECT(15912,13084),
  ABISELECT(11792,9688),
  ABISELECT(784,652),
  ABISELECT(480,408),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&_ZN9S18574C15D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C15D0Ev,
  0,
  ABISELECT(-480,-408),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  ABISELECT(-784,-652),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-784,-652),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev),
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-1248,-1032),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C15D1Ev,_ZTvn380_n40_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C15D0Ev,_ZTvn380_n40_N9S18574C15D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11792,-9688),
  0,
  ABISELECT(-11792,-9688),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-12088,-9932),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-12552,-10332),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(-15912,-13084),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-144,-124),
  ABISELECT(-16056,-13208),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  0,
  0,
  0,
  ABISELECT(-16224,-13344),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern VTBL_ENTRY _ZTV9S18574C15[];
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C10__9S18574C15[] = {
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C10__9S18574C15[] = {
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C10__9S18574C15[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C10__9S18574C15[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C10__9S18574C15[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C10__9S18574C15[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__9S18574C15[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C10__9S18574C15[] = {
  0,
  ABISELECT(768,624),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn10544_N9S18574C11D1Ev,_ZThn8656_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn10544_N9S18574C11D0Ev,_ZThn8656_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C10__9S18574C15[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__9S18574C15[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__9S18574C15[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C10__9S18574C15[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C10__9S18574C15[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn11008_N9S18574C10D1Ev,_ZThn9036_N9S18574C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void ABISELECT(_ZThn11008_N9S18574C10D0Ev,_ZThn9036_N9S18574C10D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C10__9S18574C15[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C10__9S18574C15[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C10__9S18574C15[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C10__9S18574C15[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C10__9S18574C15[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A1__9S18574C10__9S18574C15[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__A1__9S18574C10__9S18574C15[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C10__9S18574C15[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C15[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__9S18574C15[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C15[] = {
  {&(_ZTV9S18574C15[8]),  8,75},
  {&(_ZTV9S18574C15[16]),  16,75},
  {&(_ZTV9S18574C15[27]),  27,75},
  {&(_ZTV9S18574C15[48]),  48,75},
  {&(_ZTV9S18574C15[54]),  54,75},
  {&(_ZTV9S18574C15[59]),  59,75},
  {&(_ZTV9S18574C15[63]),  63,75},
  {&(_ZTV9S18574C15[67]),  67,75},
  {&(_ZTV9S18574C15[72]),  72,75},
  {&(_ZTV9S18574C15[37]),  37,75},
  {&(_tg__ZTV9S18574C10__9S18574C15[7]),  7,11},
  {&(_tg__ZTV8S18574C39S18574C10__9S18574C15[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C10__9S18574C15[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C10__9S18574C15[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C10__9S18574C15[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C10__9S18574C15[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C10__9S18574C15[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C10__9S18574C15[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C10__9S18574C15[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__9S18574C15[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__9S18574C15[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C10__9S18574C15[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C10__9S18574C15[3]),  3,3},
  {&(_tg__ZTV8S18574C9__9S18574C10__9S18574C15[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C10__9S18574C15[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C10__9S18574C15[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C10__9S18574C15[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C10__9S18574C15[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A1__9S18574C10__9S18574C15[5]),  5,8},
  {&(_tg__ZTV8S18574C7__A1__9S18574C10__9S18574C15[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C10__9S18574C15[6]),  6,8},
  {&(_tg__ZTV8S18574C6__9S18574C15[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__9S18574C15[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S18574C15[];
extern  VTBL_ENTRY _ZTV9S18574C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C15[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S18574C10D0Ev,_ZThn9036_N9S18574C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S18574C10D1Ev,_ZThn9036_N9S18574C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S18574C11D0Ev,_ZThn8656_N9S18574C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S18574C11D1Ev,_ZThn8656_N9S18574C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N9S18574C15D0Ev,_ZThn9688_N9S18574C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N9S18574C15D1Ev,_ZThn9688_N9S18574C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S18574C15D0Ev,_ZThn652_N9S18574C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S18574C15D1Ev,_ZThn652_N9S18574C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18574C15 = {  "S18574C15", // class name
  bases_S18574C15, 13,
  &(vtc_S18574C15[0]), // expected_vtbl_contents
  &(vtt_S18574C15[0]), // expected_vtt_contents
  ABISELECT(16688,13744), // object size
  NSPAIRA(_ZTI9S18574C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S18574C15),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18574C15),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C16  : S18574C4 , virtual S18574C7 , virtual S18574C15 , S18574C3 , S18574C12 {
  int s18574c16f0;
  ::S18574C3 s18574c16f1;
  int s18574c16f2;
  short s18574c16f3;
  __tsi64 s18574c16f4:8;
  int s18574c16f5;
  virtual  ~S18574C16(); // _ZN9S18574C16D2Ev
  virtual void  v13(); // _ZN9S18574C163v13Ev
  S18574C16(); // tgen
};
//SIG(-1 S18574C16) C1{ BC2{ v2 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ v3 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} VBC4{ VBC3 BC5{ v4 v5 v6 Fi[2] FL[2] FC2[3]} VBC6{ VBC7{ BC3 BC5 BC2 vd v7 FL[2] Fp[8] FC8{ BC2 VBC5 VBC9{ VBC2 Fp FC2 Fi:3} VBC3 FC3 Fs Fi[2]} Fp Fi FC8 Fi} VBC2 VBC9 BC8 BC10{ VBC3 VBC7 VBC2 VBC9 FL:44 Fp Fi FC8 FL[2] Fi[3] FC7 Fc:7 FC11{ BC3 vd v9 FC9 Fi Fp Fi}} v8 FC7 FL Fc:7} Fc:8 Fi} BC8 BC11 vd v1 Fi FC8 Fi Fs FL:8 Fi}


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

static void Test_S18574C16()
{
  extern Class_Descriptor cd_S18574C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1219,4017)];
    init_test(&cd_S18574C16, buf);
    S18574C16 *dp, &lv = *(dp=new (buf) S18574C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(19488,16064), "sizeof(S18574C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C16)");
    /*is_ambiguous_... S18574C16::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*), 0, "S18574C16");
    /*is_ambiguous_... S18574C16::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*), ABISELECT(2816,2320), "S18574C16");
    /*is_ambiguous_... S18574C15::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C15*), ABISELECT(2816,2320), "S18574C16");
    check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C10*), ABISELECT(2816,2320), "S18574C16");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C10*), ABISELECT(2816,2320), "S18574C16");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*), ABISELECT(2816,2320), "S18574C16");
    /*is_ambiguous_... S18574C15::S18574C5 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C15*), ABISELECT(3112,2564), "S18574C16");
    check_base_class_offset(lv, (S18574C7*)(S18574C9*), ABISELECT(14592,12008), "S18574C16");
    check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(14888,12252), "S18574C16");
    check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(15352,12652), "S18574C16");
    check_base_class_offset(lv, (S18574C9*)(S18574C10*), ABISELECT(14592,12008), "S18574C16");
    check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C10*), ABISELECT(14592,12008), "S18574C16");
    /*is_ambiguous_... S18574C10::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C10*), ABISELECT(18712,15404), "S18574C16");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(18712,15404), "S18574C16");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C10*), ABISELECT(18712,15404), "S18574C16");
    check_base_class_offset(lv, (S18574C6*)(S18574C10*), ABISELECT(18856,15528), "S18574C16");
    check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C10*), ABISELECT(18856,15528), "S18574C16");
    check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C10*), ABISELECT(18856,15528), "S18574C16");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*), ABISELECT(18856,15528), "S18574C16");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C10*), ABISELECT(3584,2972), "S18574C16");
    check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C10*), ABISELECT(19024,15664), "S18574C16");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*), ABISELECT(19024,15664), "S18574C16");
    check_base_class_offset(lv, (S18574C3*)(S18574C10*), ABISELECT(3584,2972), "S18574C16");
    check_base_class_offset(lv, (S18574C11*)(S18574C10*), ABISELECT(4048,3352), "S18574C16");
    check_base_class_offset(lv, (S18574C10*)(S18574C15*), ABISELECT(3584,2972), "S18574C16");
    check_base_class_offset(lv, (S18574C15*), ABISELECT(3112,2564), "S18574C16");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*), ABISELECT(144,124), "S18574C16");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C3*), ABISELECT(144,124), "S18574C16");
    check_base_class_offset(lv, (S18574C7*)(S18574C12*), ABISELECT(608,504), "S18574C16");
    check_base_class_offset(lv, (S18574C12*), ABISELECT(608,504), "S18574C16");
    check_field_offset(lv, s18574c16f0, ABISELECT(1236,1020), "S18574C16.s18574c16f0");
    check_field_offset(lv, s18574c16f1, ABISELECT(1248,1024), "S18574C16.s18574c16f1");
    check_field_offset(lv, s18574c16f2, ABISELECT(2800,2308), "S18574C16.s18574c16f2");
    check_field_offset(lv, s18574c16f3, ABISELECT(2804,2312), "S18574C16.s18574c16f3");
    set_bf_and_test(lv, s18574c16f4, ABISELECT(2806,2314), 0, 8, 1, "S18574C16");
    set_bf_and_test(lv, s18574c16f4, ABISELECT(2806,2314), 0, 8, hide_sll(1LL<<7), "S18574C16");
    check_field_offset(lv, s18574c16f5, ABISELECT(2808,2316), "S18574C16.s18574c16f5");
    test_class_info(&lv, &cd_S18574C16);
    dp->~S18574C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C16(Test_S18574C16, "S18574C16", ABISELECT(19488,16064));

#else // __cplusplus

extern void _ZN9S18574C16C1Ev();
extern void _ZN9S18574C16D2Ev();
Name_Map name_map_S18574C16[] = {
  NSPAIR(_ZN9S18574C16C1Ev),
  NSPAIR(_ZN9S18574C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C10;
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
extern Class_Descriptor cd_S18574C15;
extern VTBL_ENTRY _ZTI9S18574C15[];
extern  VTBL_ENTRY _ZTV9S18574C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C15[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C12;
extern VTBL_ENTRY _ZTI9S18574C12[];
extern  VTBL_ENTRY _ZTV9S18574C12[];
static Base_Class bases_S18574C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C7,    ABISELECT(2816,2320), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C5,    ABISELECT(3112,2564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18574C7,    ABISELECT(14592,12008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(14888,12252), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(15352,12652), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(14592,12008), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(18712,15404), //bcp->offset
    90, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S18574C6,    ABISELECT(18856,15528), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(3584,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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(19024,15664), //bcp->offset
    97, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S18574C3,    ABISELECT(3584,2972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(4048,3352), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C10,    ABISELECT(3584,2972), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S18574C15,    ABISELECT(3112,2564), //bcp->offset
    30, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C4,    ABISELECT(144,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(144,124), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C7,    ABISELECT(608,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S18574C12,    ABISELECT(608,504), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S18574C16[];
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C16D1Ev();
extern void _ZN9S18574C16D0Ev();
extern void _ZN9S18574C163v13Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZThn608_N9S18574C16D1Ev,_ZThn504_N9S18574C16D1Ev)();
extern void ABISELECT(_ZThn608_N9S18574C16D0Ev,_ZThn504_N9S18574C16D0Ev)();
extern void _ZN9S18574C123v12Ev();
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S18574C16D1Ev,_ZTv0_n48_N9S18574C16D1Ev)();
extern void ABISELECT(_ZThn3112_N9S18574C16D1Ev,_ZThn2564_N9S18574C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S18574C16D0Ev,_ZTv0_n48_N9S18574C16D0Ev)();
extern void ABISELECT(_ZThn3112_N9S18574C16D0Ev,_ZThn2564_N9S18574C16D0Ev)() __attribute__((weak));
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C16D1Ev,_ZTv0_n40_N9S18574C16D1Ev)();
extern void ABISELECT(_ZThn3584_N9S18574C16D1Ev,_ZThn2972_N9S18574C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S18574C16D0Ev,_ZTv0_n40_N9S18574C16D0Ev)();
extern void ABISELECT(_ZThn3584_N9S18574C16D0Ev,_ZThn2972_N9S18574C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N9S18574C16D1Ev,_ZTvn380_n40_N9S18574C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S18574C16D0Ev,_ZTvn380_n40_N9S18574C16D0Ev)();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C16D1Ev,_ZTv0_n16_N9S18574C16D1Ev)();
extern void ABISELECT(_ZThn14592_N9S18574C16D1Ev,_ZThn12008_N9S18574C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C16D0Ev,_ZTv0_n16_N9S18574C16D0Ev)();
extern void ABISELECT(_ZThn14592_N9S18574C16D0Ev,_ZThn12008_N9S18574C16D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY vtc_S18574C16[] = {
  ABISELECT(19024,15664),
  ABISELECT(18856,15528),
  ABISELECT(18712,15404),
  ABISELECT(14592,12008),
  ABISELECT(3584,2972),
  ABISELECT(3112,2564),
  ABISELECT(2816,2320),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C16D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C16D0Ev,
  (VTBL_ENTRY)&_ZN9S18574C163v13Ev,
  ABISELECT(2672,2196),
  ABISELECT(18568,15280),
  ABISELECT(18712,15404),
  ABISELECT(18880,15540),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-608,-504),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N9S18574C16D1Ev,_ZThn504_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn608_N9S18574C16D0Ev,_ZThn504_N9S18574C16D0Ev),
  (VTBL_ENTRY)&_ZN9S18574C123v12Ev,
  0,
  ABISELECT(-2816,-2320),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  ABISELECT(-3112,-2564),
  0,
  0,
  0,
  ABISELECT(15912,13100),
  ABISELECT(15744,12964),
  ABISELECT(15600,12840),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  ABISELECT(-3112,-2564),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C16D1Ev,_ZTv0_n48_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C16D0Ev,_ZTv0_n48_N9S18574C16D0Ev),
  ABISELECT(-3584,-2972),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-3584,-2972),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C16D1Ev,_ZTv0_n40_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C16D0Ev,_ZTv0_n40_N9S18574C16D0Ev),
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-4048,-3352),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C16D1Ev,_ZTvn380_n40_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C16D0Ev,_ZTvn380_n40_N9S18574C16D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-14592,-12008),
  0,
  ABISELECT(-14592,-12008),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C16D1Ev,_ZTv0_n16_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C16D0Ev,_ZTv0_n16_N9S18574C16D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-14888,-12252),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-15352,-12652),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(-18712,-15404),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-144,-124),
  ABISELECT(-18856,-15528),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  0,
  0,
  0,
  ABISELECT(-19024,-15664),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern VTBL_ENTRY _ZTV9S18574C16[];
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__A1__9S18574C16[] = {
  ABISELECT(2672,2196),
  ABISELECT(18568,15280),
  ABISELECT(18712,15404),
  ABISELECT(18880,15540),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C3__A1__9S18574C16[] = {
  0,
  0,
  0,
  ABISELECT(-18880,-15540),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C3__A1__9S18574C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-18712,-15404),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C3__A1__9S18574C16[] = {
  0,
  ABISELECT(-18568,-15280),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C3__A1__9S18574C16[] = {
  0,
  ABISELECT(-2672,-2196),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN9S18574C15D1Ev();
extern void _ZN9S18574C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C15__9S18574C16[] = {
  ABISELECT(15912,13100),
  ABISELECT(15744,12964),
  ABISELECT(15600,12840),
  ABISELECT(11480,9444),
  ABISELECT(472,408),
  ABISELECT(-296,-244),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&_ZN9S18574C15D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C15D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C15__9S18574C16[] = {
  0,
  ABISELECT(296,244),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S18574C15D1Ev,_ZThn408_N9S18574C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S18574C15D0Ev,_ZThn408_N9S18574C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18574C10__9S18574C15__9S18574C16[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev)();
extern void ABISELECT(_ZThn11480_N9S18574C15D1Ev,_ZThn9444_N9S18574C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev)();
extern void ABISELECT(_ZThn11480_N9S18574C15D0Ev,_ZThn9444_N9S18574C15D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C15__9S18574C16[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11480,-9444),
  0,
  ABISELECT(-11480,-9444),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A1__9S18574C15__9S18574C16[] = {
  ABISELECT(-11776,-9688),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C15__9S18574C16[] = {
  ABISELECT(-12240,-10088),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C15__9S18574C16[] = {
  0,
  ABISELECT(-15600,-12840),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C15__9S18574C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15744,-12964),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A2__9S18574C15__9S18574C16[] = {
  0,
  0,
  0,
  ABISELECT(-15912,-13100),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S18574C15D1Ev,_ZTvn380_n40_N9S18574C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S18574C15D0Ev,_ZTvn380_n40_N9S18574C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__9S18574C15__9S18574C16[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C15D1Ev,_ZTvn380_n40_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C15D0Ev,_ZTvn380_n40_N9S18574C15D0Ev),
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C10__9S18574C16[] = {
  ABISELECT(11008,9036),
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C10__9S18574C16[] = {
  ABISELECT(-768,-652),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C10__9S18574C16[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C10__9S18574C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C10__9S18574C16[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C10__9S18574C16[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__9S18574C16[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C10__9S18574C16[] = {
  0,
  ABISELECT(1232,1032),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn10544_N9S18574C11D1Ev,_ZThn8656_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn10544_N9S18574C11D0Ev,_ZThn8656_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C10__9S18574C16[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__9S18574C16[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__9S18574C16[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C10__9S18574C16[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C10__9S18574C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn11008_N9S18574C10D1Ev,_ZThn9036_N9S18574C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void ABISELECT(_ZThn11008_N9S18574C10D0Ev,_ZThn9036_N9S18574C10D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C10__9S18574C16[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C10__9S18574C16[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C10__9S18574C16[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C10__9S18574C16[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C10__9S18574C16[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A1__9S18574C10__9S18574C16[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__A1__9S18574C10__9S18574C16[] = {
  0,
  ABISELECT(768,652),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C10__9S18574C16[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-1232,-1032),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C16[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__9S18574C16[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C16[] = {
  {&(_ZTV9S18574C16[9]),  9,105},
  {&(_tg__ZTV8S18574C3__A1__9S18574C16[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C3__A1__9S18574C16[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C3__A1__9S18574C16[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C3__A1__9S18574C16[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C3__A1__9S18574C16[3]),  3,4},
  {&(_ZTV9S18574C16[29]),  29,105},
  {&(_ZTV9S18574C16[42]),  42,105},
  {&(_ZTV9S18574C16[57]),  57,105},
  {&(_ZTV9S18574C16[78]),  78,105},
  {&(_ZTV9S18574C16[84]),  84,105},
  {&(_ZTV9S18574C16[89]),  89,105},
  {&(_ZTV9S18574C16[93]),  93,105},
  {&(_ZTV9S18574C16[97]),  97,105},
  {&(_ZTV9S18574C16[102]),  102,105},
  {&(_ZTV9S18574C16[67]),  67,105},
  {&(_ZTV9S18574C16[19]),  19,105},
  {&(_tg__ZTV9S18574C15__9S18574C16[8]),  8,13},
  {&(_tg__ZTV8S18574C7__9S18574C15__9S18574C16[3]),  3,4},
  {&(_tg__ZTV9S18574C10__9S18574C15__9S18574C16[10]),  10,14},
  {&(_tg__ZTV8S18574C9__9S18574C15__9S18574C16[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A1__9S18574C15__9S18574C16[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C15__9S18574C16[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C15__9S18574C16[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C15__9S18574C16[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A2__9S18574C15__9S18574C16[5]),  5,8},
  {&(_tg__ZTV9S18574C119S18574C10__9S18574C15__9S18574C16[6]),  6,8},
  {&(_tg__ZTV9S18574C10__9S18574C16[7]),  7,11},
  {&(_tg__ZTV8S18574C39S18574C10__9S18574C16[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C10__9S18574C16[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C10__9S18574C16[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C10__9S18574C16[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C10__9S18574C16[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C10__9S18574C16[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C10__9S18574C16[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C10__9S18574C16[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__9S18574C16[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__9S18574C16[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C10__9S18574C16[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C10__9S18574C16[3]),  3,3},
  {&(_tg__ZTV8S18574C9__9S18574C10__9S18574C16[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C10__9S18574C16[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C10__9S18574C16[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C10__9S18574C16[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C10__9S18574C16[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A1__9S18574C10__9S18574C16[5]),  5,8},
  {&(_tg__ZTV8S18574C7__A1__9S18574C10__9S18574C16[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C10__9S18574C16[6]),  6,8},
  {&(_tg__ZTV8S18574C6__9S18574C16[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__9S18574C16[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S18574C16[];
extern  VTBL_ENTRY _ZTV9S18574C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C16[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S18574C10D0Ev,_ZThn9036_N9S18574C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N9S18574C10D1Ev,_ZThn9036_N9S18574C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S18574C11D0Ev,_ZThn8656_N9S18574C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S18574C11D1Ev,_ZThn8656_N9S18574C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N9S18574C15D0Ev,_ZThn9444_N9S18574C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11480_N9S18574C15D1Ev,_ZThn9444_N9S18574C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S18574C15D0Ev,_ZThn408_N9S18574C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S18574C15D1Ev,_ZThn408_N9S18574C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C16D0Ev,_ZTv0_n16_N9S18574C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14592_N9S18574C16D0Ev,_ZThn12008_N9S18574C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C16D1Ev,_ZTv0_n16_N9S18574C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14592_N9S18574C16D1Ev,_ZThn12008_N9S18574C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C16D0Ev,_ZTv0_n40_N9S18574C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N9S18574C16D0Ev,_ZThn2972_N9S18574C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C16D1Ev,_ZTv0_n40_N9S18574C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N9S18574C16D1Ev,_ZThn2972_N9S18574C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S18574C16D0Ev,_ZTv0_n48_N9S18574C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3112_N9S18574C16D0Ev,_ZThn2564_N9S18574C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S18574C16D1Ev,_ZTv0_n48_N9S18574C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3112_N9S18574C16D1Ev,_ZThn2564_N9S18574C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18574C16 = {  "S18574C16", // class name
  bases_S18574C16, 19,
  &(vtc_S18574C16[0]), // expected_vtbl_contents
  &(vtt_S18574C16[0]), // expected_vtt_contents
  ABISELECT(19488,16064), // object size
  NSPAIRA(_ZTI9S18574C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S18574C16),105, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18574C16),50, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C13  : virtual S18574C5 , S18574C8 , S18574C14 , virtual S18574C15 , virtual S18574C16 {
  ::S18574C15 s18574c13f0;
  ::S18574C8 s18574c13f1;
  virtual void  v14(); // _ZN9S18574C133v14Ev
  ~S18574C13(); // tgen
  S18574C13(); // tgen
};
//SIG(-1 S18574C13) C1{ VBC2{ v2 v3 v4 Fi[2] FL[2] FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp}[3]} BC4{ VBC3 VBC5{ BC3 VBC2 VBC6{ VBC3 Fp FC3 Fi:3} VBC7{ v6 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} FC7 Fs Fi[2]} BC8{ BC7 BC2 BC3 vd v7 FL[2] Fp[8] FC5 Fp Fi FC5 Fi} BC9{ VBC8 VBC3 VBC6 BC5 BC10{ VBC7 VBC8 VBC3 VBC6 FL:44 Fp Fi FC5 FL[2] Fi[3] FC8 Fc:7 FC11{ BC7 vd v11 FC6 Fi Fp Fi}} v8 FC8 FL Fc:7} v9 v10 FC10 Fs Fi:8} BC12{ VBC6 FC10 Fi:6 Fi FL} VBC13{ VBC7 BC2 VBC9 Fc:8 Fi} VBC14{ BC3 VBC7 VBC13 BC5 BC11 vd v12 Fi FC5 Fi Fs FL:8 Fi} v1 FC13 FC4}


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

static void Test_S18574C13()
{
  extern Class_Descriptor cd_S18574C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6631,21802)];
    init_test(&cd_S18574C13, buf);
    S18574C13 *dp, &lv = *(dp=new (buf) S18574C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(106080,87204), "sizeof(S18574C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C13)");
    /*is_ambiguous_... S18574C13::S18574C5 */ AMB_check_base_class_offset(lv, (S18574C5*), ABISELECT(86112,70760), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*), ABISELECT(86112,70760), "S18574C13");
    check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(86112,70760), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C10*), ABISELECT(86112,70760), "S18574C13");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C16*), ABISELECT(86112,70760), "S18574C13");
    /*is_ambiguous_... S18574C8::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C8*), ABISELECT(86576,71160), "S18574C13");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(86576,71160), "S18574C13");
    /*is_ambiguous_... S18574C10::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C10*)(S18574C8*), ABISELECT(86576,71160), "S18574C13");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(86576,71160), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C10*), ABISELECT(86576,71160), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C10*), ABISELECT(86576,71160), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*), ABISELECT(86720,71284), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*), ABISELECT(87184,71664), "S18574C13");
    check_base_class_offset(lv, (S18574C6*)(S18574C10*)(S18574C8*), ABISELECT(87184,71664), "S18574C13");
    check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(87184,71664), "S18574C13");
    check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(87184,71664), "S18574C13");
    check_base_class_offset(lv, (S18574C6*)(S18574C14*), ABISELECT(87184,71664), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C10*), ABISELECT(87184,71664), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C10*), ABISELECT(87184,71664), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C10*), ABISELECT(87184,71664), "S18574C13");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C16*), ABISELECT(87184,71664), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*), ABISELECT(87360,71800), "S18574C13");
    check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(87360,71800), "S18574C13");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(87360,71800), "S18574C13");
    /*is_ambiguous_... S18574C15::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C15*), ABISELECT(87360,71800), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C10*), ABISELECT(87360,71800), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C10*), ABISELECT(87360,71800), "S18574C13");
    /*is_ambiguous_... S18574C16::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C16*), ABISELECT(87360,71800), "S18574C13");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C16*), ABISELECT(87360,71800), "S18574C13");
    /*is_ambiguous_... S18574C8::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C3*)(S18574C8*), ABISELECT(86720,71284), "S18574C13");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C9*)(S18574C8*), 0, "S18574C13");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C9*)(S18574C8*), ABISELECT(296,244), "S18574C13");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C9*)(S18574C8*), ABISELECT(760,644), "S18574C13");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C8*), 0, "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C9*), ABISELECT(87664,72044), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(87960,72288), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(88424,72688), "S18574C13");
    check_base_class_offset(lv, (S18574C9*)(S18574C10*)(S18574C8*), ABISELECT(87664,72044), "S18574C13");
    check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(87664,72044), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C10*), ABISELECT(87664,72044), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C10*), ABISELECT(87664,72044), "S18574C13");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(4128,3396), "S18574C13");
    check_base_class_offset(lv, (S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(4128,3396), "S18574C13");
    check_base_class_offset(lv, (S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(4592,3776), "S18574C13");
    check_base_class_offset(lv, (S18574C10*)(S18574C8*), ABISELECT(4128,3396), "S18574C13");
    check_base_class_offset(lv, (S18574C8*), 0, "S18574C13");
    check_base_class_offset(lv, (S18574C14*), ABISELECT(26288,21584), "S18574C13");
    /*is_ambiguous_... S18574C15::S18574C5 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C15*), ABISELECT(91784,75440), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C10*), ABISELECT(92256,75848), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C3*)(S18574C10*), ABISELECT(92256,75848), "S18574C13");
    /*is_ambiguous_... S18574C13::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C11*)(S18574C10*), ABISELECT(92720,76228), "S18574C13");
    check_base_class_offset(lv, (S18574C10*)(S18574C15*), ABISELECT(92256,75848), "S18574C13");
    check_base_class_offset(lv, (S18574C15*), ABISELECT(91784,75440), "S18574C13");
    check_base_class_offset(lv, (S18574C15*)(S18574C16*), ABISELECT(91784,75440), "S18574C13");
    /*is_ambiguous_... S18574C16::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C16*), ABISELECT(103264,84884), "S18574C13");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C16*), ABISELECT(103408,85008), "S18574C13");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C3*)(S18574C16*), ABISELECT(103408,85008), "S18574C13");
    check_base_class_offset(lv, (S18574C7*)(S18574C12*)(S18574C16*), ABISELECT(103872,85388), "S18574C13");
    check_base_class_offset(lv, (S18574C12*)(S18574C16*), ABISELECT(103872,85388), "S18574C13");
    check_base_class_offset(lv, (S18574C16*), ABISELECT(103264,84884), "S18574C13");
    check_field_offset(lv, s18574c13f0, ABISELECT(37456,30752), "S18574C13.s18574c13f0");
    check_field_offset(lv, s18574c13f1, ABISELECT(54144,44496), "S18574C13.s18574c13f1");
    test_class_info(&lv, &cd_S18574C13);
    dp->~S18574C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C13(Test_S18574C13, "S18574C13", ABISELECT(106080,87204));

#else // __cplusplus

extern void _ZN9S18574C13C1Ev();
extern void _ZN9S18574C13D1Ev();
Name_Map name_map_S18574C13[] = {
  NSPAIR(_ZN9S18574C13C1Ev),
  NSPAIR(_ZN9S18574C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C10;
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
extern Class_Descriptor cd_S18574C8;
extern VTBL_ENTRY _ZTI8S18574C8[];
extern  VTBL_ENTRY _ZTV8S18574C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C8[];
extern Class_Descriptor cd_S18574C14;
extern VTBL_ENTRY _ZTI9S18574C14[];
extern  VTBL_ENTRY _ZTV9S18574C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C14[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C10;
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
extern Class_Descriptor cd_S18574C15;
extern VTBL_ENTRY _ZTI9S18574C15[];
extern  VTBL_ENTRY _ZTV9S18574C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C15[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C12;
extern VTBL_ENTRY _ZTI9S18574C12[];
extern  VTBL_ENTRY _ZTV9S18574C12[];
extern Class_Descriptor cd_S18574C16;
extern VTBL_ENTRY _ZTI9S18574C16[];
extern  VTBL_ENTRY _ZTV9S18574C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C16[];
static Base_Class bases_S18574C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C5,    ABISELECT(86112,70760), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C4,    ABISELECT(86576,71160), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(86720,71284), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18574C6,    ABISELECT(87184,71664), //bcp->offset
    69, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C7,    ABISELECT(87360,71800), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C3,    ABISELECT(86720,71284), //bcp->offset
    61, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S18574C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(296,244), //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
    24, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(760,644), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S18574C7,    ABISELECT(87664,72044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(87960,72288), //bcp->offset
    89, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(88424,72688), //bcp->offset
    94, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(87664,72044), //bcp->offset
    76, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(4592,3776), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S18574C10,    ABISELECT(4128,3396), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S18574C8,    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
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C14,    ABISELECT(26288,21584), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C5,    ABISELECT(91784,75440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(92256,75848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(92256,75848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(92720,76228), //bcp->offset
    128, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S18574C10,    ABISELECT(92256,75848), //bcp->offset
    114, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S18574C15,    ABISELECT(91784,75440), //bcp->offset
    97, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C4,    ABISELECT(103264,84884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(103408,85008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(103408,85008), //bcp->offset
    154, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S18574C7,    ABISELECT(103872,85388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S18574C12,    ABISELECT(103872,85388), //bcp->offset
    161, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S18574C16,    ABISELECT(103264,84884), //bcp->offset
    136, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S18574C13[];
extern void _ZN8S18574C72v7Ev();
extern void _ZN9S18574C13D1Ev();
extern void _ZN9S18574C13D0Ev();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
extern void _ZN9S18574C133v14Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZThn4128_N9S18574C13D1Ev,_ZThn3396_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn4128_N9S18574C13D0Ev,_ZThn3396_N9S18574C13D0Ev)();
extern void ABISELECT(_ZThn4592_N9S18574C13D1Ev,_ZThn3776_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn4592_N9S18574C13D0Ev,_ZThn3776_N9S18574C13D0Ev)();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C13D1Ev,_ZTv0_n16_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn87664_N9S18574C13D1Ev,_ZThn72044_N9S18574C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C13D0Ev,_ZTv0_n16_N9S18574C13D0Ev)();
extern void ABISELECT(_ZThn87664_N9S18574C13D0Ev,_ZThn72044_N9S18574C13D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S18574C13D1Ev,_ZTv0_n48_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn91784_N9S18574C13D1Ev,_ZThn75440_N9S18574C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S18574C13D0Ev,_ZTv0_n48_N9S18574C13D0Ev)();
extern void ABISELECT(_ZThn91784_N9S18574C13D0Ev,_ZThn75440_N9S18574C13D0Ev)() __attribute__((weak));
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C13D1Ev,_ZTv0_n40_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn92256_N9S18574C13D1Ev,_ZThn75848_N9S18574C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S18574C13D0Ev,_ZTv0_n40_N9S18574C13D0Ev)();
extern void ABISELECT(_ZThn92256_N9S18574C13D0Ev,_ZThn75848_N9S18574C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N9S18574C13D1Ev,_ZTvn380_n40_N9S18574C13D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S18574C13D0Ev,_ZTvn380_n40_N9S18574C13D0Ev)();
extern void _ZN8S18574C42v3Ev();
extern void ABISELECT(_ZTv0_n88_N9S18574C13D1Ev,_ZTv0_n44_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn103264_N9S18574C13D1Ev,_ZThn84884_N9S18574C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N9S18574C13D0Ev,_ZTv0_n44_N9S18574C13D0Ev)();
extern void ABISELECT(_ZThn103264_N9S18574C13D0Ev,_ZThn84884_N9S18574C13D0Ev)() __attribute__((weak));
extern void _ZN9S18574C163v13Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTvn608_n88_N9S18574C13D1Ev,_ZTvn504_n44_N9S18574C13D1Ev)();
extern void ABISELECT(_ZTvn608_n88_N9S18574C13D0Ev,_ZTvn504_n44_N9S18574C13D0Ev)();
extern void _ZN9S18574C123v12Ev();
static  VTBL_ENTRY vtc_S18574C13[] = {
  ABISELECT(103264,84884),
  ABISELECT(92256,75848),
  ABISELECT(91784,75440),
  ABISELECT(87664,72044),
  ABISELECT(87360,71800),
  ABISELECT(87184,71664),
  ABISELECT(86112,70760),
  ABISELECT(86720,71284),
  ABISELECT(86576,71160),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN9S18574C13D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C13D0Ev,
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
  (VTBL_ENTRY)&_ZN9S18574C133v14Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(83536,68648),
  ABISELECT(83232,68404),
  ABISELECT(82448,67764),
  ABISELECT(83056,68268),
  ABISELECT(81984,67364),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N9S18574C13D1Ev,_ZThn3396_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N9S18574C13D0Ev,_ZThn3396_N9S18574C13D0Ev),
  ABISELECT(82592,67888),
  ABISELECT(81984,67384),
  ABISELECT(83072,68268),
  ABISELECT(82768,68024),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N9S18574C13D1Ev,_ZThn3776_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N9S18574C13D0Ev,_ZThn3776_N9S18574C13D0Ev),
  ABISELECT(60288,49576),
  ABISELECT(60896,50080),
  ABISELECT(-26288,-21584),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  0,
  0,
  0,
  ABISELECT(-86112,-70760),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  0,
  ABISELECT(-86576,-71160),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(640,516),
  ABISELECT(-144,-124),
  ABISELECT(464,380),
  ABISELECT(-608,-524),
  ABISELECT(-86720,-71284),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-608,-504),
  ABISELECT(-87184,-71664),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  0,
  ABISELECT(-87360,-71800),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-87664,-72044),
  0,
  ABISELECT(-87664,-72044),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C13D1Ev,_ZTv0_n16_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C13D0Ev,_ZTv0_n16_N9S18574C13D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-87960,-72288),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-88424,-72688),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-91784,-75440),
  0,
  0,
  0,
  ABISELECT(-5672,-4680),
  ABISELECT(-4600,-3776),
  ABISELECT(-5208,-4280),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  ABISELECT(-91784,-75440),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C13D1Ev,_ZTv0_n48_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C13D0Ev,_ZTv0_n48_N9S18574C13D0Ev),
  ABISELECT(-92256,-75848),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  ABISELECT(-92256,-75848),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C13D1Ev,_ZTv0_n40_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C13D0Ev,_ZTv0_n40_N9S18574C13D0Ev),
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-92720,-76228),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C13D1Ev,_ZTvn380_n40_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C13D0Ev,_ZTvn380_n40_N9S18574C13D0Ev),
  ABISELECT(608,504),
  ABISELECT(608,504),
  0,
  ABISELECT(-103264,-84884),
  0,
  ABISELECT(-17152,-14124),
  ABISELECT(-16080,-13220),
  ABISELECT(-16688,-13724),
  ABISELECT(-15600,-12840),
  ABISELECT(-11008,-9036),
  ABISELECT(-11480,-9444),
  ABISELECT(-15904,-13084),
  ABISELECT(-103264,-84884),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18574C13D1Ev,_ZTv0_n44_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18574C13D0Ev,_ZTv0_n44_N9S18574C13D0Ev),
  (VTBL_ENTRY)&_ZN9S18574C163v13Ev,
  ABISELECT(-16048,-13208),
  ABISELECT(-16832,-13848),
  ABISELECT(-16224,-13344),
  ABISELECT(-17296,-14248),
  ABISELECT(-103408,-85008),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-103872,-85388),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n88_N9S18574C13D1Ev,_ZTvn504_n44_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n88_N9S18574C13D0Ev,_ZTvn504_n44_N9S18574C13D0Ev),
  (VTBL_ENTRY)&_ZN9S18574C123v12Ev,
};
extern VTBL_ENTRY _ZTV9S18574C13[];
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C8D1Ev();
extern void _ZN8S18574C8D0Ev();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C8__9S18574C13[] = {
  ABISELECT(87664,72044),
  ABISELECT(87360,71800),
  ABISELECT(87184,71664),
  ABISELECT(86112,70760),
  ABISELECT(86720,71284),
  ABISELECT(86576,71160),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D0Ev,
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(83536,68648),
  ABISELECT(83232,68404),
  ABISELECT(82448,67764),
  ABISELECT(83056,68268),
  ABISELECT(81984,67364),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C108S18574C8__A1__9S18574C13[] = {
  ABISELECT(83232,68404),
  ABISELECT(82448,67764),
  ABISELECT(83056,68268),
  ABISELECT(81984,67364),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C108S18574C8__A1__9S18574C13[] = {
  0,
  0,
  0,
  ABISELECT(-81984,-67364),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C108S18574C8__A1__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(-83056,-68268),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C108S18574C8__A1__9S18574C13[] = {
  0,
  ABISELECT(-82448,-67764),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C108S18574C8__A1__9S18574C13[] = {
  0,
  ABISELECT(-83232,-68404),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(82592,67888),
  ABISELECT(81984,67384),
  ABISELECT(83072,68268),
  ABISELECT(82768,68024),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C108S18574C8__9S18574C13[] = {
  0,
  ABISELECT(-82768,-68024),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn83072_N9S18574C11D1Ev,_ZThn68268_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn83072_N9S18574C11D0Ev,_ZThn68268_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-83072,-68268),
  0,
  ABISELECT(-83072,-68268),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(-83368,-68512),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(-83832,-68912),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C108S18574C8__9S18574C13[] = {
  0,
  ABISELECT(-81984,-67384),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(-82592,-67888),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn83536_N9S18574C10D1Ev,_ZThn68648_N9S18574C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void ABISELECT(_ZThn83536_N9S18574C10D0Ev,_ZThn68648_N9S18574C10D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-83536,-68648),
  0,
  ABISELECT(-83536,-68648),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(-83832,-68892),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(-84296,-69292),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C108S18574C8__9S18574C13[] = {
  0,
  ABISELECT(-82448,-67764),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(-83056,-68268),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A1__9S18574C108S18574C8__9S18574C13[] = {
  0,
  0,
  0,
  ABISELECT(-81984,-67364),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__A1__9S18574C108S18574C8__9S18574C13[] = {
  0,
  ABISELECT(-83232,-68404),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C108S18574C8__9S18574C13[] = {
  ABISELECT(82592,67888),
  ABISELECT(81984,67384),
  ABISELECT(83072,68268),
  ABISELECT(82768,68024),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C8__9S18574C13[] = {
  0,
  ABISELECT(-86576,-71160),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__8S18574C8__9S18574C13[] = {
  0,
  ABISELECT(640,516),
  ABISELECT(-144,-124),
  ABISELECT(464,380),
  ABISELECT(-608,-524),
  ABISELECT(-86720,-71284),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C8__9S18574C13[] = {
  0,
  0,
  0,
  ABISELECT(-86112,-70760),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C8__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(-87184,-71664),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C8__9S18574C13[] = {
  0,
  ABISELECT(-87360,-71800),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C10__8S18574C8__9S18574C13[] = {
  ABISELECT(83536,68648),
  ABISELECT(83232,68404),
  ABISELECT(82448,67764),
  ABISELECT(83056,68268),
  ABISELECT(81984,67364),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn87664_N8S18574C8D1Ev,_ZThn72044_N8S18574C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev)();
extern void ABISELECT(_ZThn87664_N8S18574C8D0Ev,_ZThn72044_N8S18574C8D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__A1__8S18574C8__9S18574C13[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-87664,-72044),
  0,
  ABISELECT(-87664,-72044),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A2__8S18574C8__9S18574C13[] = {
  ABISELECT(-87960,-72288),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__A3__8S18574C8__9S18574C13[] = {
  ABISELECT(-88424,-72688),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__8S18574C8__9S18574C13[] = {
  ABISELECT(82592,67888),
  ABISELECT(81984,67384),
  ABISELECT(83072,68268),
  ABISELECT(82768,68024),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S18574C14__9S18574C13[] = {
  ABISELECT(60288,49576),
  ABISELECT(60896,50080),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C14__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(-60896,-50080),
  (VTBL_ENTRY)&(_ZTI9S18574C14[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__9S18574C14__9S18574C13[] = {
  0,
  ABISELECT(-60288,-49576),
  (VTBL_ENTRY)&(_ZTI9S18574C14[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__9S18574C13[] = {
  ABISELECT(640,516),
  ABISELECT(-144,-124),
  ABISELECT(464,380),
  ABISELECT(-608,-524),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C3__9S18574C13[] = {
  0,
  0,
  0,
  ABISELECT(608,524),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C3__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C3__9S18574C13[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C3__9S18574C13[] = {
  0,
  ABISELECT(-640,-516),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C13[] = {
  ABISELECT(-608,-504),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__9S18574C13[] = {
  0,
  ABISELECT(608,504),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN9S18574C15D1Ev();
extern void _ZN9S18574C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C15__9S18574C13[] = {
  ABISELECT(-5672,-4680),
  ABISELECT(-4600,-3776),
  ABISELECT(-5208,-4280),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&_ZN9S18574C15D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C15D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C15__9S18574C13[] = {
  0,
  ABISELECT(4424,3640),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S18574C15D1Ev,_ZThn408_N9S18574C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S18574C15D0Ev,_ZThn408_N9S18574C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18574C10__9S18574C15__9S18574C13[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C15__9S18574C13[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4120,3396),
  0,
  ABISELECT(4120,3396),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A1__9S18574C15__9S18574C13[] = {
  ABISELECT(3824,3152),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C15__9S18574C13[] = {
  ABISELECT(3360,2752),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C15__9S18574C13[] = {
  0,
  ABISELECT(5208,4280),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C15__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(4600,3776),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A2__9S18574C15__9S18574C13[] = {
  0,
  0,
  0,
  ABISELECT(5672,4680),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S18574C15D1Ev,_ZTvn380_n40_N9S18574C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S18574C15D0Ev,_ZTvn380_n40_N9S18574C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__9S18574C15__9S18574C13[] = {
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C15D1Ev,_ZTvn380_n40_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C15D0Ev,_ZTvn380_n40_N9S18574C15D0Ev),
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C10__A1__9S18574C13[] = {
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C10__A2__9S18574C13[] = {
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C10__A2__9S18574C13[] = {
  0,
  0,
  0,
  ABISELECT(6144,5088),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C10__A2__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(5072,4184),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C10__A2__9S18574C13[] = {
  0,
  ABISELECT(5680,4688),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C10__A2__9S18574C13[] = {
  0,
  ABISELECT(4896,4048),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__A1__9S18574C13[] = {
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C10__A1__9S18574C13[] = {
  0,
  ABISELECT(5360,4428),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C10__A1__9S18574C13[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(5056,4184),
  0,
  ABISELECT(5056,4184),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__A1__9S18574C13[] = {
  ABISELECT(4760,3940),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__A1__9S18574C13[] = {
  ABISELECT(4296,3540),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C10__A1__9S18574C13[] = {
  0,
  ABISELECT(6144,5068),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C10__A1__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(5536,4564),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C10__A1__9S18574C13[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4592,3804),
  0,
  ABISELECT(4592,3804),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C10__A1__9S18574C13[] = {
  ABISELECT(4296,3560),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C10__A1__9S18574C13[] = {
  ABISELECT(3832,3160),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C10__A1__9S18574C13[] = {
  0,
  ABISELECT(5680,4688),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C10__A1__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(5072,4184),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A1__9S18574C10__A1__9S18574C13[] = {
  0,
  0,
  0,
  ABISELECT(6144,5088),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__A1__9S18574C10__A1__9S18574C13[] = {
  0,
  ABISELECT(4896,4048),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C10__A1__9S18574C13[] = {
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C16D1Ev();
extern void _ZN9S18574C16D0Ev();
extern void _ZN9S18574C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C16__9S18574C13[] = {
  ABISELECT(-17152,-14124),
  ABISELECT(-16080,-13220),
  ABISELECT(-16688,-13724),
  ABISELECT(-15600,-12840),
  ABISELECT(-11008,-9036),
  ABISELECT(-11480,-9444),
  ABISELECT(-15904,-13084),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C16D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C16D0Ev,
  (VTBL_ENTRY)&_ZN9S18574C163v13Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C16__A3__9S18574C13[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-16832,-13848),
  ABISELECT(-16224,-13344),
  ABISELECT(-17296,-14248),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C16__A3__9S18574C13[] = {
  0,
  0,
  0,
  ABISELECT(17296,14248),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C16__A3__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(16224,13344),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C16__A3__9S18574C13[] = {
  0,
  ABISELECT(16832,13848),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C16__A3__9S18574C13[] = {
  0,
  ABISELECT(16048,13208),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C16__9S18574C13[] = {
  0,
  ABISELECT(15904,13084),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S18574C16D1Ev,_ZTv0_n48_N9S18574C16D1Ev)();
extern void ABISELECT(_ZTv0_n96_N9S18574C16D0Ev,_ZTv0_n48_N9S18574C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C15__9S18574C16__9S18574C13[] = {
  ABISELECT(11480,9444),
  0,
  0,
  0,
  ABISELECT(-5672,-4680),
  ABISELECT(-4600,-3776),
  ABISELECT(-5208,-4280),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  ABISELECT(11480,9444),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C16D1Ev,_ZTv0_n48_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C16D0Ev,_ZTv0_n48_N9S18574C16D0Ev),
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C16D1Ev,_ZTv0_n40_N9S18574C16D1Ev)();
extern void ABISELECT(_ZTv0_n80_N9S18574C16D0Ev,_ZTv0_n40_N9S18574C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C10__9S18574C16__9S18574C13[] = {
  ABISELECT(11008,9036),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5680,-4688),
  ABISELECT(-5072,-4184),
  ABISELECT(-6144,-5088),
  ABISELECT(11008,9036),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C16D1Ev,_ZTv0_n40_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C16D0Ev,_ZTv0_n40_N9S18574C16D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C16D1Ev,_ZTv0_n16_N9S18574C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C16D0Ev,_ZTv0_n16_N9S18574C16D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C16__9S18574C13[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(15600,12840),
  0,
  ABISELECT(15600,12840),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C16D1Ev,_ZTv0_n16_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C16D0Ev,_ZTv0_n16_N9S18574C16D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A1__9S18574C16__9S18574C13[] = {
  ABISELECT(15304,12596),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__A1__9S18574C16__9S18574C13[] = {
  ABISELECT(14840,12196),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A2__9S18574C16__9S18574C13[] = {
  0,
  ABISELECT(16688,13724),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C16__9S18574C13[] = {
  ABISELECT(-608,-504),
  ABISELECT(16080,13220),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A2__9S18574C16__9S18574C13[] = {
  0,
  0,
  0,
  ABISELECT(17152,14124),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S18574C16D1Ev,_ZTvn380_n40_N9S18574C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S18574C16D0Ev,_ZTvn380_n40_N9S18574C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__9S18574C16__9S18574C13[] = {
  ABISELECT(-5536,-4564),
  ABISELECT(-6144,-5068),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(10544,8656),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C16D1Ev,_ZTvn380_n40_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C16D0Ev,_ZTvn380_n40_N9S18574C16D0Ev),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__A1__9S18574C16__9S18574C13[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-16832,-13848),
  ABISELECT(-16224,-13344),
  ABISELECT(-17296,-14248),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C13[] = {
  {&(_ZTV9S18574C13[11]),  11,167},
  {&(_tg__ZTV8S18574C8__9S18574C13[8]),  8,14},
  {&(_tg__ZTV9S18574C108S18574C8__9S18574C13[7]),  7,11},
  {&(_tg__ZTV8S18574C39S18574C108S18574C8__A1__9S18574C13[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C108S18574C8__A1__9S18574C13[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C108S18574C8__A1__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C108S18574C8__A1__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C108S18574C8__A1__9S18574C13[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C108S18574C8__9S18574C13[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C108S18574C8__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C108S18574C8__9S18574C13[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C108S18574C8__9S18574C13[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C108S18574C8__9S18574C13[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C108S18574C8__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C108S18574C8__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C9__9S18574C108S18574C8__9S18574C13[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C108S18574C8__9S18574C13[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C108S18574C8__9S18574C13[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C108S18574C8__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C108S18574C8__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A1__9S18574C108S18574C8__9S18574C13[5]),  5,8},
  {&(_tg__ZTV8S18574C7__A1__9S18574C108S18574C8__9S18574C13[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C108S18574C8__9S18574C13[6]),  6,8},
  {&(_tg__ZTV8S18574C4__8S18574C8__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C3__8S18574C8__9S18574C13[7]),  7,8},
  {&(_tg__ZTV8S18574C5__8S18574C8__9S18574C13[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C8__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C7__8S18574C8__9S18574C13[3]),  3,4},
  {&(_tg__ZTV9S18574C10__8S18574C8__9S18574C13[7]),  7,11},
  {&(_tg__ZTV8S18574C9__A1__8S18574C8__9S18574C13[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A2__8S18574C8__9S18574C13[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__A3__8S18574C8__9S18574C13[2]),  2,3},
  {&(_tg__ZTV9S18574C119S18574C10__8S18574C8__9S18574C13[6]),  6,8},
  {&(_tg__ZTV9S18574C14__9S18574C13[4]),  4,4},
  {&(_tg__ZTV8S18574C6__9S18574C14__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C4__9S18574C14__9S18574C13[3]),  3,4},
  {&(_ZTV9S18574C13[54]),  54,167},
  {&(_ZTV9S18574C13[60]),  60,167},
  {&(_ZTV9S18574C13[68]),  68,167},
  {&(_ZTV9S18574C13[72]),  72,167},
  {&(_ZTV9S18574C13[75]),  75,167},
  {&(_ZTV9S18574C13[33]),  33,167},
  {&(_ZTV9S18574C13[85]),  85,167},
  {&(_ZTV9S18574C13[91]),  91,167},
  {&(_ZTV9S18574C13[96]),  96,167},
  {&(_ZTV9S18574C13[43]),  43,167},
  {&(_ZTV9S18574C13[49]),  49,167},
  {&(_ZTV9S18574C13[109]),  109,167},
  {&(_ZTV9S18574C13[124]),  124,167},
  {&(_ZTV9S18574C13[134]),  134,167},
  {&(_ZTV9S18574C13[150]),  150,167},
  {&(_ZTV9S18574C13[160]),  160,167},
  {&(_ZTV9S18574C13[163]),  163,167},
  {&(_tg__ZTV8S18574C3__9S18574C13[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C3__9S18574C13[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C3__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C3__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C3__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__9S18574C13[3]),  3,4},
  {&(_tg__ZTV9S18574C15__9S18574C13[8]),  8,13},
  {&(_tg__ZTV8S18574C7__9S18574C15__9S18574C13[3]),  3,4},
  {&(_tg__ZTV9S18574C10__9S18574C15__9S18574C13[10]),  10,14},
  {&(_tg__ZTV8S18574C9__9S18574C15__9S18574C13[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A1__9S18574C15__9S18574C13[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C15__9S18574C13[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C15__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C15__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A2__9S18574C15__9S18574C13[5]),  5,8},
  {&(_tg__ZTV9S18574C119S18574C10__9S18574C15__9S18574C13[6]),  6,8},
  {&(_tg__ZTV9S18574C10__A1__9S18574C13[7]),  7,11},
  {&(_tg__ZTV8S18574C39S18574C10__A2__9S18574C13[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C10__A2__9S18574C13[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C10__A2__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C10__A2__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C10__A2__9S18574C13[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C10__A1__9S18574C13[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C10__A1__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C10__A1__9S18574C13[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__A1__9S18574C13[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__A1__9S18574C13[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C10__A1__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C10__A1__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C9__9S18574C10__A1__9S18574C13[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C10__A1__9S18574C13[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C10__A1__9S18574C13[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C10__A1__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C10__A1__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A1__9S18574C10__A1__9S18574C13[5]),  5,8},
  {&(_tg__ZTV8S18574C7__A1__9S18574C10__A1__9S18574C13[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C10__A1__9S18574C13[6]),  6,8},
  {&(_tg__ZTV9S18574C16__9S18574C13[9]),  9,13},
  {&(_tg__ZTV8S18574C39S18574C16__A3__9S18574C13[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C16__A3__9S18574C13[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C16__A3__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C16__A3__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C16__A3__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C7__9S18574C16__9S18574C13[3]),  3,4},
  {&(_tg__ZTV9S18574C15__9S18574C16__9S18574C13[12]),  12,17},
  {&(_tg__ZTV9S18574C10__9S18574C16__9S18574C13[10]),  10,14},
  {&(_tg__ZTV8S18574C9__9S18574C16__9S18574C13[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A1__9S18574C16__9S18574C13[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__A1__9S18574C16__9S18574C13[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A2__9S18574C16__9S18574C13[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C16__9S18574C13[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A2__9S18574C16__9S18574C13[5]),  5,8},
  {&(_tg__ZTV9S18574C119S18574C10__9S18574C16__9S18574C13[6]),  6,8},
  {&(_tg__ZTV8S18574C3__A1__9S18574C16__9S18574C13[6]),  6,7},
};
extern VTBL_ENTRY _ZTI9S18574C13[];
extern  VTBL_ENTRY _ZTV9S18574C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C13[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S18574C15D0Ev,_ZThn408_N9S18574C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S18574C15D1Ev,_ZThn408_N9S18574C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87664_N8S18574C8D0Ev,_ZThn72044_N8S18574C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87664_N8S18574C8D1Ev,_ZThn72044_N8S18574C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83536_N9S18574C10D0Ev,_ZThn68648_N9S18574C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83536_N9S18574C10D1Ev,_ZThn68648_N9S18574C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83072_N9S18574C11D0Ev,_ZThn68268_N9S18574C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn83072_N9S18574C11D1Ev,_ZThn68268_N9S18574C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18574C13D0Ev,_ZTv0_n44_N9S18574C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn103264_N9S18574C13D0Ev,_ZThn84884_N9S18574C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18574C13D1Ev,_ZTv0_n44_N9S18574C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn103264_N9S18574C13D1Ev,_ZThn84884_N9S18574C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C13D0Ev,_ZTv0_n40_N9S18574C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn92256_N9S18574C13D0Ev,_ZThn75848_N9S18574C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C13D1Ev,_ZTv0_n40_N9S18574C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn92256_N9S18574C13D1Ev,_ZThn75848_N9S18574C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S18574C13D0Ev,_ZTv0_n48_N9S18574C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn91784_N9S18574C13D0Ev,_ZThn75440_N9S18574C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S18574C13D1Ev,_ZTv0_n48_N9S18574C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn91784_N9S18574C13D1Ev,_ZThn75440_N9S18574C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C13D0Ev,_ZTv0_n16_N9S18574C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87664_N9S18574C13D0Ev,_ZThn72044_N9S18574C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C13D1Ev,_ZTv0_n16_N9S18574C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn87664_N9S18574C13D1Ev,_ZThn72044_N9S18574C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18574C13 = {  "S18574C13", // class name
  bases_S18574C13, 32,
  &(vtc_S18574C13[0]), // expected_vtbl_contents
  &(vtt_S18574C13[0]), // expected_vtt_contents
  ABISELECT(106080,87204), // object size
  NSPAIRA(_ZTI9S18574C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S18574C13),167, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18574C13),108, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C17  : S18574C3 , S18574C11 {
  int s18574c17f0:13;
  __tsi64 s18574c17f1;
  int s18574c17f2;
  void *s18574c17f3[2];
  __tsi64 s18574c17f4;
  ::S18574C5 s18574c17f5;
  virtual  ~S18574C17(); // _ZN9S18574C17D2Ev
  virtual void  v15(); // _ZN9S18574C173v15Ev
  virtual void  v16(); // _ZN9S18574C173v16Ev
  S18574C17(); // tgen
};
//SIG(-1 S18574C17) C1{ BC2{ BC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} VBC4{ v4 v5 v6 Fi[2] FL[2] FC3[3]} VBC5{ VBC3 Fp FC3 Fi:3} VBC6{ v7 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} FC6 Fs Fi[2]} BC7{ VBC6 VBC8{ BC6 BC4 BC3 vd v8 FL[2] Fp[8] FC2 Fp Fi FC2 Fi} VBC3 VBC5 FL:44 Fp Fi FC2 FL[2] Fi[3] FC8 Fc:7 FC9{ BC6 vd v9 FC5 Fi Fp Fi}} vd v1 v2 Fi:13 FL Fi Fp[2] FL FC4}


 S18574C17 ::~S18574C17(){ note_dtor("S18574C17", this);}
void  S18574C17 ::v15(){vfunc_called(this, "_ZN9S18574C173v15Ev");}
void  S18574C17 ::v16(){vfunc_called(this, "_ZN9S18574C173v16Ev");}
S18574C17 ::S18574C17(){ note_ctor("S18574C17", this);} // tgen

static void Test_S18574C17()
{
  extern Class_Descriptor cd_S18574C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(788,2591)];
    init_test(&cd_S18574C17, buf);
    S18574C17 *dp, &lv = *(dp=new (buf) S18574C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12592,10360), "sizeof(S18574C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C17)");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*), 0, "S18574C17");
    check_base_class_offset(lv, (S18574C5*)(S18574C3*), ABISELECT(7376,6060), "S18574C17");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(8008,6596), "S18574C17");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*), ABISELECT(8008,6596), "S18574C17");
    check_base_class_offset(lv, (S18574C6*)(S18574C3*), ABISELECT(7840,6460), "S18574C17");
    check_base_class_offset(lv, (S18574C6*)(S18574C11*), ABISELECT(7840,6460), "S18574C17");
    check_base_class_offset(lv, (S18574C7*)(S18574C3*), ABISELECT(8160,6720), "S18574C17");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*), ABISELECT(8160,6720), "S18574C17");
    check_base_class_offset(lv, (S18574C3*), 0, "S18574C17");
    check_base_class_offset(lv, (S18574C7*)(S18574C9*), ABISELECT(8464,6964), "S18574C17");
    check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(8760,7208), "S18574C17");
    check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(9224,7608), "S18574C17");
    check_base_class_offset(lv, (S18574C9*)(S18574C11*), ABISELECT(8464,6964), "S18574C17");
    check_base_class_offset(lv, (S18574C11*), ABISELECT(464,380), "S18574C17");
    set_bf_and_test(lv, s18574c17f0, ABISELECT(6864,5628), 0, 13, 1, "S18574C17");
    set_bf_and_test(lv, s18574c17f0, ABISELECT(6864,5628), 0, 13, hide_sll(1LL<<12), "S18574C17");
    check_field_offset(lv, s18574c17f1, ABISELECT(6872,5632), "S18574C17.s18574c17f1");
    check_field_offset(lv, s18574c17f2, ABISELECT(6880,5640), "S18574C17.s18574c17f2");
    check_field_offset(lv, s18574c17f3, ABISELECT(6888,5644), "S18574C17.s18574c17f3");
    check_field_offset(lv, s18574c17f4, ABISELECT(6904,5652), "S18574C17.s18574c17f4");
    check_field_offset(lv, s18574c17f5, ABISELECT(6912,5660), "S18574C17.s18574c17f5");
    test_class_info(&lv, &cd_S18574C17);
    dp->~S18574C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C17(Test_S18574C17, "S18574C17", ABISELECT(12592,10360));

#else // __cplusplus

extern void _ZN9S18574C17C1Ev();
extern void _ZN9S18574C17D2Ev();
Name_Map name_map_S18574C17[] = {
  NSPAIR(_ZN9S18574C17C1Ev),
  NSPAIR(_ZN9S18574C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
static Base_Class bases_S18574C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(7376,6060), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(8008,6596), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S18574C6,    ABISELECT(7840,6460), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C7,    ABISELECT(8160,6720), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C7,    ABISELECT(8464,6964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(8760,7208), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(9224,7608), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(8464,6964), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S18574C11,    ABISELECT(464,380), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S18574C17[];
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C17D1Ev();
extern void _ZN9S18574C17D0Ev();
extern void _ZN9S18574C173v15Ev();
extern void _ZN9S18574C173v16Ev();
extern void ABISELECT(_ZThn464_N9S18574C17D1Ev,_ZThn380_N9S18574C17D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C17D0Ev,_ZThn380_N9S18574C17D0Ev)();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C17D1Ev,_ZTv0_n16_N9S18574C17D1Ev)();
extern void ABISELECT(_ZThn8464_N9S18574C17D1Ev,_ZThn6964_N9S18574C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C17D0Ev,_ZTv0_n16_N9S18574C17D0Ev)();
extern void ABISELECT(_ZThn8464_N9S18574C17D0Ev,_ZThn6964_N9S18574C17D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY vtc_S18574C17[] = {
  ABISELECT(8464,6964),
  ABISELECT(8160,6720),
  ABISELECT(8008,6596),
  ABISELECT(7840,6460),
  ABISELECT(7376,6060),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C17D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C17D0Ev,
  (VTBL_ENTRY)&_ZN9S18574C173v15Ev,
  (VTBL_ENTRY)&_ZN9S18574C173v16Ev,
  ABISELECT(7376,6080),
  ABISELECT(7544,6216),
  ABISELECT(8000,6584),
  ABISELECT(7696,6340),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C17D1Ev,_ZThn380_N9S18574C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C17D0Ev,_ZThn380_N9S18574C17D0Ev),
  0,
  0,
  0,
  ABISELECT(-7376,-6060),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(168,136),
  ABISELECT(-7840,-6460),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  0,
  ABISELECT(-8008,-6596),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(-8160,-6720),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-8464,-6964),
  0,
  ABISELECT(-8464,-6964),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C17D1Ev,_ZTv0_n16_N9S18574C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C17D0Ev,_ZTv0_n16_N9S18574C17D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-8760,-7208),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-9224,-7608),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern VTBL_ENTRY _ZTV9S18574C17[];
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__9S18574C17[] = {
  ABISELECT(8160,6720),
  ABISELECT(8008,6596),
  ABISELECT(7840,6460),
  ABISELECT(7376,6060),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C3__9S18574C17[] = {
  0,
  0,
  0,
  ABISELECT(-7376,-6060),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C3__9S18574C17[] = {
  ABISELECT(168,136),
  ABISELECT(-7840,-6460),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C3__9S18574C17[] = {
  0,
  ABISELECT(-8008,-6596),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C3__9S18574C17[] = {
  0,
  ABISELECT(-8160,-6720),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C17[] = {
  ABISELECT(7376,6080),
  ABISELECT(7544,6216),
  ABISELECT(8000,6584),
  ABISELECT(7696,6340),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C11__9S18574C17[] = {
  0,
  ABISELECT(-7696,-6340),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn8000_N9S18574C11D1Ev,_ZThn6584_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn8000_N9S18574C11D0Ev,_ZThn6584_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C11__9S18574C17[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-8000,-6584),
  0,
  ABISELECT(-8000,-6584),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C11__9S18574C17[] = {
  ABISELECT(-8296,-6828),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C11__9S18574C17[] = {
  ABISELECT(-8760,-7228),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C11__9S18574C17[] = {
  0,
  ABISELECT(-7544,-6216),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C11__9S18574C17[] = {
  ABISELECT(168,136),
  ABISELECT(-7376,-6080),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C17[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__9S18574C17[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C17[] = {
  {&(_ZTV9S18574C17[7]),  7,60},
  {&(_tg__ZTV8S18574C3__9S18574C17[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C3__9S18574C17[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C3__9S18574C17[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C3__9S18574C17[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C3__9S18574C17[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C17[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C11__9S18574C17[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C11__9S18574C17[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C11__9S18574C17[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C11__9S18574C17[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C11__9S18574C17[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C11__9S18574C17[3]),  3,3},
  {&(_ZTV9S18574C17[25]),  25,60},
  {&(_ZTV9S18574C17[31]),  31,60},
  {&(_ZTV9S18574C17[34]),  34,60},
  {&(_ZTV9S18574C17[38]),  38,60},
  {&(_ZTV9S18574C17[18]),  18,60},
  {&(_ZTV9S18574C17[48]),  48,60},
  {&(_ZTV9S18574C17[54]),  54,60},
  {&(_ZTV9S18574C17[59]),  59,60},
  {&(_tg__ZTV8S18574C6__9S18574C17[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__9S18574C17[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S18574C17[];
extern  VTBL_ENTRY _ZTV9S18574C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C17[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8000_N9S18574C11D0Ev,_ZThn6584_N9S18574C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8000_N9S18574C11D1Ev,_ZThn6584_N9S18574C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C17D0Ev,_ZTv0_n16_N9S18574C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N9S18574C17D0Ev,_ZThn6964_N9S18574C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C17D1Ev,_ZTv0_n16_N9S18574C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N9S18574C17D1Ev,_ZThn6964_N9S18574C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18574C17 = {  "S18574C17", // class name
  bases_S18574C17, 11,
  &(vtc_S18574C17[0]), // expected_vtbl_contents
  &(vtt_S18574C17[0]), // expected_vtt_contents
  ABISELECT(12592,10360), // object size
  NSPAIRA(_ZTI9S18574C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S18574C17),60, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18574C17),23, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S18574C19_nt  {
  char s18574c19f0:8;
  void *s18574c19f1;
  short s18574c19f2;
  long double s18574c19f3;
  void *s18574c19f4;
  void *s18574c19f5;
  long s18574c19f6[5];
  void  mf18574c19(); // _ZN12S18574C19_nt10mf18574c19Ev
};
//SIG(1 S18574C19_nt) U1{ m Fc:8 Fp Fs FD Fp Fp Fl[5]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S18574C18  : S18574C5 , virtual S18574C8 , S18574C4 {
  int s18574c18f0;
  ::S18574C19_nt s18574c18f1;
  int s18574c18f2;
  ::S18574C8 s18574c18f3;
  char s18574c18f4[6];
  __tsi64 s18574c18f5;
  int s18574c18f6;
  int  :0;
  virtual  ~S18574C18(); // _ZN9S18574C18D2Ev
  S18574C18(); // tgen
};
//SIG(-1 S18574C18) C1{ BC2{ v1 v2 v3 Fi[2] FL[2] FC3{ v4 Fs:6 Fl Fs:4 FL[13] Fp}[3]} VBC4{ VBC3 VBC5{ BC3 VBC2 VBC6{ VBC3 Fp FC3 Fi:3} VBC7{ v5 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} FC7 Fs Fi[2]} BC8{ BC7 BC2 BC3 vd v6 FL[2] Fp[8] FC5 Fp Fi FC5 Fi} BC9{ VBC8 VBC3 VBC6 BC5 BC10{ VBC7 VBC8 VBC3 VBC6 FL:44 Fp Fi FC5 FL[2] Fi[3] FC8 Fc:7 FC11{ BC7 vd v10 FC6 Fi Fp Fi}} v7 FC8 FL Fc:7} v8 v9 FC10 Fs Fi:8} BC3 vd Fi FU12{ m Fc:8 Fp Fs FD Fp Fp Fl[5]} Fi FC4 Fc[6] FL Fi Fi:0}


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

static void Test_S18574C18()
{
  extern Class_Descriptor cd_S18574C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4042,13276)];
    init_test(&cd_S18574C18, buf);
    S18574C18 *dp, &lv = *(dp=new (buf) S18574C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64656,53100), "sizeof(S18574C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C18)");
    /*is_ambiguous_... S18574C18::S18574C5 */ AMB_check_base_class_offset(lv, (S18574C5*), 0, "S18574C18");
    /*is_ambiguous_... S18574C8::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C8*), ABISELECT(58968,48420), "S18574C18");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(58968,48420), "S18574C18");
    /*is_ambiguous_... S18574C10::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C10*)(S18574C8*), ABISELECT(58968,48420), "S18574C18");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(58968,48420), "S18574C18");
    /*is_ambiguous_... S18574C18::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*), ABISELECT(59120,48544), "S18574C18");
    /*is_ambiguous_... S18574C18::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*), ABISELECT(59584,48924), "S18574C18");
    check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(59584,48924), "S18574C18");
    /*is_ambiguous_... S18574C18::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*), ABISELECT(60048,49324), "S18574C18");
    check_base_class_offset(lv, (S18574C6*)(S18574C10*)(S18574C8*), ABISELECT(60048,49324), "S18574C18");
    check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(60048,49324), "S18574C18");
    check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(60048,49324), "S18574C18");
    /*is_ambiguous_... S18574C18::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*), ABISELECT(60224,49460), "S18574C18");
    check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(60224,49460), "S18574C18");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(60224,49460), "S18574C18");
    /*is_ambiguous_... S18574C8::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C3*)(S18574C8*), ABISELECT(59120,48544), "S18574C18");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C9*)(S18574C8*), ABISELECT(32688,26836), "S18574C18");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C9*)(S18574C8*), ABISELECT(32984,27080), "S18574C18");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C9*)(S18574C8*), ABISELECT(33448,27480), "S18574C18");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C8*), ABISELECT(32688,26836), "S18574C18");
    /*is_ambiguous_... S18574C18::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C9*), ABISELECT(60528,49704), "S18574C18");
    /*is_ambiguous_... S18574C18::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(60824,49948), "S18574C18");
    /*is_ambiguous_... S18574C18::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(61288,50348), "S18574C18");
    check_base_class_offset(lv, (S18574C9*)(S18574C10*)(S18574C8*), ABISELECT(60528,49704), "S18574C18");
    check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(60528,49704), "S18574C18");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(36816,30232), "S18574C18");
    check_base_class_offset(lv, (S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(36816,30232), "S18574C18");
    check_base_class_offset(lv, (S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(37280,30612), "S18574C18");
    check_base_class_offset(lv, (S18574C10*)(S18574C8*), ABISELECT(36816,30232), "S18574C18");
    check_base_class_offset(lv, (S18574C8*), ABISELECT(32688,26836), "S18574C18");
    /*is_ambiguous_... S18574C18::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*), ABISELECT(464,400), "S18574C18");
    check_field_offset(lv, s18574c18f0, ABISELECT(608,524), "S18574C18.s18574c18f0");
    check_field_offset(lv, s18574c18f1, ABISELECT(624,528), "S18574C18.s18574c18f1");
    check_field_offset(lv, s18574c18f2, ABISELECT(672,548), "S18574C18.s18574c18f2");
    check_field_offset(lv, s18574c18f3, ABISELECT(688,552), "S18574C18.s18574c18f3");
    check_field_offset(lv, s18574c18f4, ABISELECT(32656,26816), "S18574C18.s18574c18f4");
    check_field_offset(lv, s18574c18f5, ABISELECT(32664,26824), "S18574C18.s18574c18f5");
    check_field_offset(lv, s18574c18f6, ABISELECT(32672,26832), "S18574C18.s18574c18f6");
    test_class_info(&lv, &cd_S18574C18);
    dp->~S18574C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C18(Test_S18574C18, "S18574C18", ABISELECT(64656,53100));

#else // __cplusplus

extern void _ZN9S18574C18C1Ev();
extern void _ZN9S18574C18D2Ev();
Name_Map name_map_S18574C18[] = {
  NSPAIR(_ZN9S18574C18C1Ev),
  NSPAIR(_ZN9S18574C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C10;
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
extern Class_Descriptor cd_S18574C8;
extern VTBL_ENTRY _ZTI8S18574C8[];
extern  VTBL_ENTRY _ZTV8S18574C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C8[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
static Base_Class bases_S18574C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C4,    ABISELECT(58968,48420), //bcp->offset
    68, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(59120,48544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(59584,48924), //bcp->offset
    80, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S18574C6,    ABISELECT(60048,49324), //bcp->offset
    88, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S18574C7,    ABISELECT(60224,49460), //bcp->offset
    91, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S18574C3,    ABISELECT(59120,48544), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S18574C7,    ABISELECT(32688,26836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(32984,27080), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(33448,27480), //bcp->offset
    46, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(32688,26836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S18574C7,    ABISELECT(60528,49704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(60824,49948), //bcp->offset
    108, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(61288,50348), //bcp->offset
    113, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(60528,49704), //bcp->offset
    95, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(36816,30232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(36816,30232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(37280,30612), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S18574C10,    ABISELECT(36816,30232), //bcp->offset
    49, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S18574C8,    ABISELECT(32688,26836), //bcp->offset
    17, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C4,    ABISELECT(464,400), //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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S18574C18[];
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN9S18574C18D1Ev();
extern void _ZN9S18574C18D0Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C18D1Ev,_ZTv0_n40_N9S18574C18D1Ev)();
extern void ABISELECT(_ZThn32688_N9S18574C18D1Ev,_ZThn26836_N9S18574C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S18574C18D0Ev,_ZTv0_n40_N9S18574C18D0Ev)();
extern void ABISELECT(_ZThn32688_N9S18574C18D0Ev,_ZThn26836_N9S18574C18D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTvn4128_n80_N9S18574C18D1Ev,_ZTvn3396_n40_N9S18574C18D1Ev)();
extern void ABISELECT(_ZTvn4128_n80_N9S18574C18D0Ev,_ZTvn3396_n40_N9S18574C18D0Ev)();
extern void ABISELECT(_ZTvn4592_n80_N9S18574C18D1Ev,_ZTvn3776_n40_N9S18574C18D1Ev)();
extern void ABISELECT(_ZTvn4592_n80_N9S18574C18D0Ev,_ZTvn3776_n40_N9S18574C18D0Ev)();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C18D1Ev,_ZTv0_n16_N9S18574C18D1Ev)();
extern void ABISELECT(_ZThn60528_N9S18574C18D1Ev,_ZThn49704_N9S18574C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C18D0Ev,_ZTv0_n16_N9S18574C18D0Ev)();
extern void ABISELECT(_ZThn60528_N9S18574C18D0Ev,_ZThn49704_N9S18574C18D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY vtc_S18574C18[] = {
  ABISELECT(60528,49704),
  ABISELECT(60224,49460),
  ABISELECT(60048,49324),
  ABISELECT(59584,48924),
  ABISELECT(59120,48544),
  ABISELECT(58968,48420),
  ABISELECT(32688,26836),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&_ZN9S18574C18D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C18D0Ev,
  ABISELECT(-464,-400),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(4128,3396),
  0,
  0,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-32688,-26836),
  0,
  ABISELECT(27840,22868),
  ABISELECT(27536,22624),
  ABISELECT(27360,22488),
  ABISELECT(26896,22088),
  ABISELECT(26432,21708),
  ABISELECT(26280,21584),
  ABISELECT(-32688,-26836),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C18D1Ev,_ZTv0_n40_N9S18574C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C18D0Ev,_ZTv0_n40_N9S18574C18D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
  ABISELECT(-32984,-27080),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-33448,-27480),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(23712,19472),
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  ABISELECT(-36816,-30232),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn4128_n80_N9S18574C18D1Ev,_ZTvn3396_n40_N9S18574C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4128_n80_N9S18574C18D0Ev,_ZTvn3396_n40_N9S18574C18D0Ev),
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  ABISELECT(-37280,-30612),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4592_n80_N9S18574C18D1Ev,_ZTvn3776_n40_N9S18574C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4592_n80_N9S18574C18D0Ev,_ZTvn3776_n40_N9S18574C18D0Ev),
  0,
  ABISELECT(-58968,-48420),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-59120,-48544),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  0,
  0,
  ABISELECT(-59584,-48924),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-1080,-904),
  ABISELECT(-60048,-49324),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  0,
  ABISELECT(-60224,-49460),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-60528,-49704),
  0,
  ABISELECT(-60528,-49704),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C18D1Ev,_ZTv0_n16_N9S18574C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C18D0Ev,_ZTv0_n16_N9S18574C18D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-60824,-49948),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-61288,-50348),
  (VTBL_ENTRY)&(_ZTI9S18574C18[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern VTBL_ENTRY _ZTV9S18574C18[];
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C8D1Ev();
extern void _ZN8S18574C8D0Ev();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C8__9S18574C18[] = {
  ABISELECT(27840,22868),
  ABISELECT(27536,22624),
  ABISELECT(27360,22488),
  ABISELECT(26896,22088),
  ABISELECT(26432,21708),
  ABISELECT(26280,21584),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D0Ev,
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(23712,19472),
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C108S18574C8__A1__9S18574C18[] = {
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C108S18574C8__A1__9S18574C18[] = {
  0,
  0,
  0,
  ABISELECT(-22768,-18692),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C108S18574C8__A1__9S18574C18[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-23232,-19092),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C108S18574C8__A1__9S18574C18[] = {
  0,
  ABISELECT(-22152,-18188),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C108S18574C8__A1__9S18574C18[] = {
  0,
  ABISELECT(-23408,-19228),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C108S18574C8__9S18574C18[] = {
  0,
  ABISELECT(-22944,-18848),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn23248_N9S18574C11D1Ev,_ZThn19092_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn23248_N9S18574C11D0Ev,_ZThn19092_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-23248,-19092),
  0,
  ABISELECT(-23248,-19092),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(-23544,-19336),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(-24008,-19736),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C108S18574C8__9S18574C18[] = {
  0,
  ABISELECT(-21688,-17808),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-22768,-18712),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn23712_N9S18574C10D1Ev,_ZThn19472_N9S18574C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void ABISELECT(_ZThn23712_N9S18574C10D0Ev,_ZThn19472_N9S18574C10D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-23712,-19472),
  0,
  ABISELECT(-23712,-19472),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(-24008,-19716),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(-24472,-20116),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C108S18574C8__9S18574C18[] = {
  0,
  ABISELECT(-22152,-18188),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-23232,-19092),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A1__9S18574C108S18574C8__9S18574C18[] = {
  0,
  0,
  0,
  ABISELECT(-22768,-18692),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__A1__9S18574C108S18574C8__9S18574C18[] = {
  0,
  ABISELECT(-23408,-19228),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C108S18574C8__9S18574C18[] = {
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C8__9S18574C18[] = {
  0,
  ABISELECT(-26280,-21584),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__8S18574C8__9S18574C18[] = {
  0,
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-26432,-21708),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C8__9S18574C18[] = {
  0,
  0,
  0,
  ABISELECT(-26896,-22088),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C8__9S18574C18[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-27360,-22488),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C8__9S18574C18[] = {
  0,
  ABISELECT(-27536,-22624),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C10__8S18574C8__9S18574C18[] = {
  ABISELECT(23712,19472),
  ABISELECT(23408,19228),
  ABISELECT(22152,18188),
  ABISELECT(23232,19092),
  ABISELECT(22768,18692),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn27840_N8S18574C8D1Ev,_ZThn22868_N8S18574C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev)();
extern void ABISELECT(_ZThn27840_N8S18574C8D0Ev,_ZThn22868_N8S18574C8D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__A1__8S18574C8__9S18574C18[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-27840,-22868),
  0,
  ABISELECT(-27840,-22868),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A2__8S18574C8__9S18574C18[] = {
  ABISELECT(-28136,-23112),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__A3__8S18574C8__9S18574C18[] = {
  ABISELECT(-28600,-23512),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__8S18574C8__9S18574C18[] = {
  ABISELECT(22768,18712),
  ABISELECT(21688,17808),
  ABISELECT(23248,19092),
  ABISELECT(22944,18848),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__9S18574C18[] = {
  ABISELECT(1104,916),
  ABISELECT(-152,-124),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C3__9S18574C18[] = {
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C3__9S18574C18[] = {
  ABISELECT(-1080,-904),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C3__9S18574C18[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C3__9S18574C18[] = {
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C18[] = {
  ABISELECT(-1080,-904),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__9S18574C18[] = {
  0,
  ABISELECT(1080,904),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C18[] = {
  {&(_ZTV9S18574C18[9]),  9,116},
  {&(_ZTV9S18574C18[35]),  35,116},
  {&(_ZTV9S18574C18[71]),  71,116},
  {&(_ZTV9S18574C18[79]),  79,116},
  {&(_ZTV9S18574C18[85]),  85,116},
  {&(_ZTV9S18574C18[91]),  91,116},
  {&(_ZTV9S18574C18[94]),  94,116},
  {&(_ZTV9S18574C18[43]),  43,116},
  {&(_ZTV9S18574C18[48]),  48,116},
  {&(_ZTV9S18574C18[56]),  56,116},
  {&(_ZTV9S18574C18[104]),  104,116},
  {&(_ZTV9S18574C18[110]),  110,116},
  {&(_ZTV9S18574C18[115]),  115,116},
  {&(_ZTV9S18574C18[66]),  66,116},
  {&(_tg__ZTV8S18574C8__9S18574C18[8]),  8,14},
  {&(_tg__ZTV9S18574C108S18574C8__9S18574C18[7]),  7,11},
  {&(_tg__ZTV8S18574C39S18574C108S18574C8__A1__9S18574C18[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C108S18574C8__A1__9S18574C18[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C108S18574C8__A1__9S18574C18[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C108S18574C8__A1__9S18574C18[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C108S18574C8__A1__9S18574C18[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C108S18574C8__9S18574C18[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C108S18574C8__9S18574C18[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C108S18574C8__9S18574C18[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C108S18574C8__9S18574C18[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C108S18574C8__9S18574C18[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C108S18574C8__9S18574C18[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C108S18574C8__9S18574C18[3]),  3,3},
  {&(_tg__ZTV8S18574C9__9S18574C108S18574C8__9S18574C18[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C108S18574C8__9S18574C18[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C108S18574C8__9S18574C18[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C108S18574C8__9S18574C18[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C108S18574C8__9S18574C18[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A1__9S18574C108S18574C8__9S18574C18[5]),  5,8},
  {&(_tg__ZTV8S18574C7__A1__9S18574C108S18574C8__9S18574C18[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C108S18574C8__9S18574C18[6]),  6,8},
  {&(_tg__ZTV8S18574C4__8S18574C8__9S18574C18[3]),  3,4},
  {&(_tg__ZTV8S18574C3__8S18574C8__9S18574C18[7]),  7,8},
  {&(_tg__ZTV8S18574C5__8S18574C8__9S18574C18[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C8__9S18574C18[3]),  3,3},
  {&(_tg__ZTV8S18574C7__8S18574C8__9S18574C18[3]),  3,4},
  {&(_tg__ZTV9S18574C10__8S18574C8__9S18574C18[7]),  7,11},
  {&(_tg__ZTV8S18574C9__A1__8S18574C8__9S18574C18[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A2__8S18574C8__9S18574C18[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__A3__8S18574C8__9S18574C18[2]),  2,3},
  {&(_tg__ZTV9S18574C119S18574C10__8S18574C8__9S18574C18[6]),  6,8},
  {&(_tg__ZTV8S18574C3__9S18574C18[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C3__9S18574C18[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C3__9S18574C18[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C3__9S18574C18[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C3__9S18574C18[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C18[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__9S18574C18[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S18574C18[];
extern  VTBL_ENTRY _ZTV9S18574C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C18[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27840_N8S18574C8D0Ev,_ZThn22868_N8S18574C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27840_N8S18574C8D1Ev,_ZThn22868_N8S18574C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23712_N9S18574C10D0Ev,_ZThn19472_N9S18574C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23712_N9S18574C10D1Ev,_ZThn19472_N9S18574C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23248_N9S18574C11D0Ev,_ZThn19092_N9S18574C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23248_N9S18574C11D1Ev,_ZThn19092_N9S18574C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C18D0Ev,_ZTv0_n16_N9S18574C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60528_N9S18574C18D0Ev,_ZThn49704_N9S18574C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C18D1Ev,_ZTv0_n16_N9S18574C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn60528_N9S18574C18D1Ev,_ZThn49704_N9S18574C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C18D0Ev,_ZTv0_n40_N9S18574C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32688_N9S18574C18D0Ev,_ZThn26836_N9S18574C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C18D1Ev,_ZTv0_n40_N9S18574C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32688_N9S18574C18D1Ev,_ZThn26836_N9S18574C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18574C18 = {  "S18574C18", // class name
  bases_S18574C18, 21,
  &(vtc_S18574C18[0]), // expected_vtbl_contents
  &(vtt_S18574C18[0]), // expected_vtt_contents
  ABISELECT(64656,53100), // object size
  NSPAIRA(_ZTI9S18574C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S18574C18),116, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18574C18),53, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C2  : virtual S18574C3 , S18574C8 , S18574C13 , virtual S18574C17 {
  ::S18574C18 s18574c2f0;
  int s18574c2f1;
  int s18574c2f2;
  int s18574c2f3;
  int s18574c2f4;
  int s18574c2f5;
  char s18574c2f6;
  int s18574c2f7;
  void *s18574c2f8;
  void *s18574c2f9;
  int s18574c2f10;
  ::S18574C6 s18574c2f11;
  ~S18574C2(); // tgen
  S18574C2(); // tgen
};
//SIG(-1 S18574C2) C1{ VBC2{ BC3{ v1 Fs:6 Fl Fs:4 FL[13] Fp} VBC4{ v2 v3 v4 Fi[2] FL[2] FC3[3]} VBC5{ VBC3 Fp FC3 Fi:3} VBC6{ v5 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} FC6 Fs Fi[2]} BC7{ VBC3 VBC2 BC8{ BC6 BC4 BC3 vd v6 FL[2] Fp[8] FC2 Fp Fi FC2 Fi} BC9{ VBC8 VBC3 VBC5 BC2 BC10{ VBC6 VBC8 VBC3 VBC5 FL:44 Fp Fi FC2 FL[2] Fi[3] FC8 Fc:7 FC11{ BC6 vd v10 FC5 Fi Fp Fi}} v7 FC8 FL Fc:7} v8 v9 FC10 Fs Fi:8} BC12{ VBC4 BC7 BC13{ VBC5 FC10 Fi:6 Fi FL} VBC14{ VBC6 BC4 VBC9 Fc:8 Fi} VBC15{ BC3 VBC6 VBC14 BC2 BC11 vd v11 Fi FC2 Fi Fs FL:8 Fi} v12 FC14 FC7} VBC16{ BC2 BC10 vd v13 v14 Fi:13 FL Fi Fp[2] FL FC4} FC17{ BC4 VBC7 BC3 vd Fi FU18{ m Fc:8 Fp Fs FD Fp Fp Fl[5]} Fi FC7 Fc[6] FL Fi Fi:0} Fi Fi Fi Fi Fi Fc Fi Fp Fp Fi FC5}


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

static void Test_S18574C2()
{
  extern Class_Descriptor cd_S18574C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12799,42063)];
    init_test(&cd_S18574C2, buf);
    S18574C2 *dp, &lv = *(dp=new (buf) S18574C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(204768,168248), "sizeof(S18574C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C2)");
    /*is_ambiguous_... S18574C2::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*), ABISELECT(177424,145744), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*), ABISELECT(177888,146124), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(177888,146124), "S18574C2");
    /*is_ambiguous_... S18574C13::S18574C5 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C13*), ABISELECT(177888,146124), "S18574C2");
    check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(177888,146124), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C10*), ABISELECT(177888,146124), "S18574C2");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C16*), ABISELECT(177888,146124), "S18574C2");
    check_base_class_offset(lv, (S18574C5*)(S18574C3*)(S18574C17*), ABISELECT(177888,146124), "S18574C2");
    check_base_class_offset(lv, (S18574C4*)(S18574C6*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C8*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C10*)(S18574C8*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C8::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C8*)(S18574C13*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C10::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C10*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C10*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C11::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C11*)(S18574C17*), ABISELECT(178520,146660), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*), ABISELECT(178352,146524), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C10*)(S18574C8*), ABISELECT(178352,146524), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(178352,146524), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(178352,146524), "S18574C2");
    check_base_class_offset(lv, (S18574C6*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(178352,146524), "S18574C2");
    check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(178352,146524), "S18574C2");
    check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(178352,146524), "S18574C2");
    check_base_class_offset(lv, (S18574C6*)(S18574C14*)(S18574C13*), ABISELECT(178352,146524), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C10*), ABISELECT(178352,146524), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C10*), ABISELECT(178352,146524), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C10*), ABISELECT(178352,146524), "S18574C2");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C16*), ABISELECT(178352,146524), "S18574C2");
    check_base_class_offset(lv, (S18574C6*)(S18574C3*)(S18574C17*), ABISELECT(178352,146524), "S18574C2");
    check_base_class_offset(lv, (S18574C6*)(S18574C11*)(S18574C17*), ABISELECT(178352,146524), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(178672,146784), "S18574C2");
    check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C15::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C15*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C10*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C10*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C16::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C16*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C16*), ABISELECT(178672,146784), "S18574C2");
    check_base_class_offset(lv, (S18574C7*)(S18574C3*)(S18574C17*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C11::S18574C7 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C11*)(S18574C17*), ABISELECT(178672,146784), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C3*), ABISELECT(177424,145744), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C3*)(S18574C8*), ABISELECT(177424,145744), "S18574C2");
    /*is_ambiguous_... S18574C8::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C3*)(S18574C8*)(S18574C13*), ABISELECT(177424,145744), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C9*)(S18574C8*), 0, "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C9*)(S18574C8*), ABISELECT(296,244), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C9*)(S18574C8*), ABISELECT(760,644), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C8*), 0, "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C9*), ABISELECT(178976,147028), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C9*), ABISELECT(179272,147272), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C9*), ABISELECT(179736,147672), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C10*)(S18574C8*), ABISELECT(178976,147028), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(178976,147028), "S18574C2");
    check_base_class_offset(lv, (S18574C9*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(178976,147028), "S18574C2");
    check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(178976,147028), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C10*), ABISELECT(178976,147028), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C10*), ABISELECT(178976,147028), "S18574C2");
    check_base_class_offset(lv, (S18574C9*)(S18574C11*)(S18574C17*), ABISELECT(178976,147028), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(4128,3396), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C3*)(S18574C10*)(S18574C8*), ABISELECT(4128,3396), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C11*)(S18574C10*)(S18574C8*), ABISELECT(4592,3776), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C10*)(S18574C8*), ABISELECT(4128,3396), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C8 */ AMB_check_base_class_offset(lv, (S18574C8*), 0, "S18574C2");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C7*)(S18574C9*)(S18574C8*)(S18574C13*), ABISELECT(26288,21584), "S18574C2");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C9*)(S18574C8*)(S18574C13*), ABISELECT(26584,21828), "S18574C2");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C9*)(S18574C8*)(S18574C13*), ABISELECT(27048,22228), "S18574C2");
    /*is_ambiguous_... S18574C8::S18574C9 */ AMB_check_base_class_offset(lv, (S18574C9*)(S18574C8*)(S18574C13*), ABISELECT(26288,21584), "S18574C2");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(30416,24980), "S18574C2");
    check_base_class_offset(lv, (S18574C3*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(30416,24980), "S18574C2");
    check_base_class_offset(lv, (S18574C11*)(S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(30880,25360), "S18574C2");
    check_base_class_offset(lv, (S18574C10*)(S18574C8*)(S18574C13*), ABISELECT(30416,24980), "S18574C2");
    check_base_class_offset(lv, (S18574C8*)(S18574C13*), ABISELECT(26288,21584), "S18574C2");
    check_base_class_offset(lv, (S18574C14*)(S18574C13*), ABISELECT(52576,43168), "S18574C2");
    /*is_ambiguous_... S18574C15::S18574C5 */ AMB_check_base_class_offset(lv, (S18574C5*)(S18574C15*), ABISELECT(183096,150424), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C10*), ABISELECT(183568,150832), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C3*)(S18574C10*), ABISELECT(183568,150832), "S18574C2");
    /*is_ambiguous_... S18574C2::S18574C10 */ AMB_check_base_class_offset(lv, (S18574C11*)(S18574C10*), ABISELECT(184032,151212), "S18574C2");
    check_base_class_offset(lv, (S18574C10*)(S18574C15*), ABISELECT(183568,150832), "S18574C2");
    check_base_class_offset(lv, (S18574C15*)(S18574C13*), ABISELECT(183096,150424), "S18574C2");
    check_base_class_offset(lv, (S18574C15*)(S18574C16*), ABISELECT(183096,150424), "S18574C2");
    /*is_ambiguous_... S18574C16::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C16*), ABISELECT(194576,159868), "S18574C2");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C16*), ABISELECT(194720,159992), "S18574C2");
    /*is_ambiguous_... S18574C16::S18574C3 */ AMB_check_base_class_offset(lv, (S18574C3*)(S18574C16*), ABISELECT(194720,159992), "S18574C2");
    check_base_class_offset(lv, (S18574C7*)(S18574C12*)(S18574C16*), ABISELECT(195184,160372), "S18574C2");
    check_base_class_offset(lv, (S18574C12*)(S18574C16*), ABISELECT(195184,160372), "S18574C2");
    check_base_class_offset(lv, (S18574C16*)(S18574C13*), ABISELECT(194576,159868), "S18574C2");
    check_base_class_offset(lv, (S18574C13*), ABISELECT(26288,21584), "S18574C2");
    /*is_ambiguous_... S18574C3::S18574C4 */ AMB_check_base_class_offset(lv, (S18574C4*)(S18574C3*)(S18574C17*), ABISELECT(197392,162188), "S18574C2");
    check_base_class_offset(lv, (S18574C3*)(S18574C17*), ABISELECT(197392,162188), "S18574C2");
    check_base_class_offset(lv, (S18574C11*)(S18574C17*), ABISELECT(197856,162568), "S18574C2");
    check_base_class_offset(lv, (S18574C17*), ABISELECT(197392,162188), "S18574C2");
    check_field_offset(lv, s18574c2f0, ABISELECT(112400,92344), "S18574C2.s18574c2f0");
    check_field_offset(lv, s18574c2f1, ABISELECT(177056,145444), "S18574C2.s18574c2f1");
    check_field_offset(lv, s18574c2f2, ABISELECT(177060,145448), "S18574C2.s18574c2f2");
    check_field_offset(lv, s18574c2f3, ABISELECT(177064,145452), "S18574C2.s18574c2f3");
    check_field_offset(lv, s18574c2f4, ABISELECT(177068,145456), "S18574C2.s18574c2f4");
    check_field_offset(lv, s18574c2f5, ABISELECT(177072,145460), "S18574C2.s18574c2f5");
    check_field_offset(lv, s18574c2f6, ABISELECT(177076,145464), "S18574C2.s18574c2f6");
    check_field_offset(lv, s18574c2f7, ABISELECT(177080,145468), "S18574C2.s18574c2f7");
    check_field_offset(lv, s18574c2f8, ABISELECT(177088,145472), "S18574C2.s18574c2f8");
    check_field_offset(lv, s18574c2f9, ABISELECT(177096,145476), "S18574C2.s18574c2f9");
    check_field_offset(lv, s18574c2f10, ABISELECT(177104,145480), "S18574C2.s18574c2f10");
    check_field_offset(lv, s18574c2f11, ABISELECT(177112,145484), "S18574C2.s18574c2f11");
    test_class_info(&lv, &cd_S18574C2);
    dp->~S18574C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C2(Test_S18574C2, "S18574C2", ABISELECT(204768,168248));

#else // __cplusplus

extern void _ZN8S18574C2C1Ev();
extern void _ZN8S18574C2D1Ev();
Name_Map name_map_S18574C2[] = {
  NSPAIR(_ZN8S18574C2C1Ev),
  NSPAIR(_ZN8S18574C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C6;
extern VTBL_ENTRY _ZTI8S18574C6[];
extern  VTBL_ENTRY _ZTV8S18574C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C6[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C10;
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
extern Class_Descriptor cd_S18574C8;
extern VTBL_ENTRY _ZTI8S18574C8[];
extern  VTBL_ENTRY _ZTV8S18574C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C8[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C9;
extern VTBL_ENTRY _ZTI8S18574C9[];
extern  VTBL_ENTRY _ZTV8S18574C9[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C10;
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
extern Class_Descriptor cd_S18574C8;
extern VTBL_ENTRY _ZTI8S18574C8[];
extern  VTBL_ENTRY _ZTV8S18574C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C8[];
extern Class_Descriptor cd_S18574C14;
extern VTBL_ENTRY _ZTI9S18574C14[];
extern  VTBL_ENTRY _ZTV9S18574C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C14[];
extern Class_Descriptor cd_S18574C5;
extern VTBL_ENTRY _ZTI8S18574C5[];
extern  VTBL_ENTRY _ZTV8S18574C5[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C10;
extern VTBL_ENTRY _ZTI9S18574C10[];
extern  VTBL_ENTRY _ZTV9S18574C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C10[];
extern Class_Descriptor cd_S18574C15;
extern VTBL_ENTRY _ZTI9S18574C15[];
extern  VTBL_ENTRY _ZTV9S18574C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C15[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C7;
extern VTBL_ENTRY _ZTI8S18574C7[];
extern  VTBL_ENTRY _ZTV8S18574C7[];
extern Class_Descriptor cd_S18574C12;
extern VTBL_ENTRY _ZTI9S18574C12[];
extern  VTBL_ENTRY _ZTV9S18574C12[];
extern Class_Descriptor cd_S18574C16;
extern VTBL_ENTRY _ZTI9S18574C16[];
extern  VTBL_ENTRY _ZTV9S18574C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C16[];
extern Class_Descriptor cd_S18574C13;
extern VTBL_ENTRY _ZTI9S18574C13[];
extern  VTBL_ENTRY _ZTV9S18574C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C13[];
extern Class_Descriptor cd_S18574C4;
extern VTBL_ENTRY _ZTI8S18574C4[];
extern  VTBL_ENTRY _ZTV8S18574C4[];
extern Class_Descriptor cd_S18574C3;
extern VTBL_ENTRY _ZTI8S18574C3[];
extern  VTBL_ENTRY _ZTV8S18574C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C3[];
extern Class_Descriptor cd_S18574C11;
extern VTBL_ENTRY _ZTI9S18574C11[];
extern  VTBL_ENTRY _ZTV9S18574C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C11[];
extern Class_Descriptor cd_S18574C17;
extern VTBL_ENTRY _ZTI9S18574C17[];
extern  VTBL_ENTRY _ZTV9S18574C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18574C17[];
static Base_Class bases_S18574C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18574C4,    ABISELECT(177424,145744), //bcp->offset
    -1, //bcp->virtual_function_table_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_S18574C5,    ABISELECT(177888,146124), //bcp->offset
    102, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    88, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(178520,146660), //bcp->offset
    113, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    90, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S18574C6,    ABISELECT(178352,146524), //bcp->offset
    110, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    89, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C7,    ABISELECT(178672,146784), //bcp->offset
    117, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    91, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S18574C3,    ABISELECT(177424,145744), //bcp->offset
    94, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    87, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18574C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(296,244), //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
    28, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(760,644), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18574C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S18574C7,    ABISELECT(178976,147028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(179272,147272), //bcp->offset
    134, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    94, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(179736,147672), //bcp->offset
    139, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    95, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(178976,147028), //bcp->offset
    121, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    93, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(4128,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(4592,3776), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    96, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S18574C10,    ABISELECT(4128,3396), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    92, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S18574C8,    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
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C7,    ABISELECT(26288,21584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(26584,21828), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(27048,22228), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S18574C9,    ABISELECT(26288,21584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(30416,24980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(30416,24980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(30880,25360), //bcp->offset
    82, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    99, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S18574C10,    ABISELECT(30416,24980), //bcp->offset
    71, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    98, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S18574C8,    ABISELECT(26288,21584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S18574C14,    ABISELECT(52576,43168), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    100, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S18574C5,    ABISELECT(183096,150424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(183568,150832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(183568,150832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    127, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(184032,151212), //bcp->offset
    173, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    103, //bcp->index_in_construction_vtbl_array
    132, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S18574C10,    ABISELECT(183568,150832), //bcp->offset
    159, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    102, //bcp->index_in_construction_vtbl_array
    126, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    34, //immediately_derived
  0, 1},
  {&cd_S18574C15,    ABISELECT(183096,150424), //bcp->offset
    142, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    101, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S18574C4,    ABISELECT(194576,159868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S18574C4,    ABISELECT(194720,159992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(194720,159992), //bcp->offset
    199, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    105, //bcp->index_in_construction_vtbl_array
    148, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S18574C7,    ABISELECT(195184,160372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S18574C12,    ABISELECT(195184,160372), //bcp->offset
    206, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    106, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S18574C16,    ABISELECT(194576,159868), //bcp->offset
    181, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    104, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S18574C13,    ABISELECT(26288,21584), //bcp->offset
    45, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    97, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18574C4,    ABISELECT(197392,162188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S18574C3,    ABISELECT(197392,162188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    165, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S18574C11,    ABISELECT(197856,162568), //bcp->offset
    228, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    108, //bcp->index_in_construction_vtbl_array
    170, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S18574C17,    ABISELECT(197392,162188), //bcp->offset
    212, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    107, //bcp->index_in_construction_vtbl_array
    164, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18574C2[];
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C2D1Ev();
extern void _ZN8S18574C2D0Ev();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZThn4128_N8S18574C2D1Ev,_ZThn3396_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn4128_N8S18574C2D0Ev,_ZThn3396_N8S18574C2D0Ev)();
extern void ABISELECT(_ZThn4592_N8S18574C2D1Ev,_ZThn3776_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn4592_N8S18574C2D0Ev,_ZThn3776_N8S18574C2D0Ev)();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZThn26288_N8S18574C2D1Ev,_ZThn21584_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn26288_N8S18574C2D0Ev,_ZThn21584_N8S18574C2D0Ev)();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
extern void _ZN9S18574C133v14Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZThn30416_N8S18574C2D1Ev,_ZThn24980_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn30416_N8S18574C2D0Ev,_ZThn24980_N8S18574C2D0Ev)();
extern void ABISELECT(_ZThn30880_N8S18574C2D1Ev,_ZThn25360_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn30880_N8S18574C2D0Ev,_ZThn25360_N8S18574C2D0Ev)();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S18574C2D1Ev,_ZTv0_n16_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn178976_N8S18574C2D1Ev,_ZThn147028_N8S18574C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S18574C2D0Ev,_ZTv0_n16_N8S18574C2D0Ev)();
extern void ABISELECT(_ZThn178976_N8S18574C2D0Ev,_ZThn147028_N8S18574C2D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void ABISELECT(_ZTv0_n96_N8S18574C2D1Ev,_ZTv0_n48_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn183096_N8S18574C2D1Ev,_ZThn150424_N8S18574C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S18574C2D0Ev,_ZTv0_n48_N8S18574C2D0Ev)();
extern void ABISELECT(_ZThn183096_N8S18574C2D0Ev,_ZThn150424_N8S18574C2D0Ev)() __attribute__((weak));
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N8S18574C2D1Ev,_ZTv0_n40_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn183568_N8S18574C2D1Ev,_ZThn150832_N8S18574C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S18574C2D0Ev,_ZTv0_n40_N8S18574C2D0Ev)();
extern void ABISELECT(_ZThn183568_N8S18574C2D0Ev,_ZThn150832_N8S18574C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N8S18574C2D1Ev,_ZTvn380_n40_N8S18574C2D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S18574C2D0Ev,_ZTvn380_n40_N8S18574C2D0Ev)();
extern void _ZN8S18574C42v3Ev();
extern void ABISELECT(_ZTv0_n88_N8S18574C2D1Ev,_ZTv0_n44_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn194576_N8S18574C2D1Ev,_ZThn159868_N8S18574C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18574C2D0Ev,_ZTv0_n44_N8S18574C2D0Ev)();
extern void ABISELECT(_ZThn194576_N8S18574C2D0Ev,_ZThn159868_N8S18574C2D0Ev)() __attribute__((weak));
extern void _ZN9S18574C163v13Ev();
extern void _ZN8S18574C42v3Ev();
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTvn608_n88_N8S18574C2D1Ev,_ZTvn504_n44_N8S18574C2D1Ev)();
extern void ABISELECT(_ZTvn608_n88_N8S18574C2D0Ev,_ZTvn504_n44_N8S18574C2D0Ev)();
extern void _ZN9S18574C123v12Ev();
extern void _ZN8S18574C42v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S18574C2D1Ev,_ZTv0_n36_N8S18574C2D1Ev)();
extern void ABISELECT(_ZThn197392_N8S18574C2D1Ev,_ZThn162188_N8S18574C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S18574C2D0Ev,_ZTv0_n36_N8S18574C2D0Ev)();
extern void ABISELECT(_ZThn197392_N8S18574C2D0Ev,_ZThn162188_N8S18574C2D0Ev)() __attribute__((weak));
extern void _ZN9S18574C173v15Ev();
extern void _ZN9S18574C173v16Ev();
extern void ABISELECT(_ZTvn464_n72_N8S18574C2D1Ev,_ZTvn380_n36_N8S18574C2D1Ev)();
extern void ABISELECT(_ZTvn464_n72_N8S18574C2D0Ev,_ZTvn380_n36_N8S18574C2D0Ev)();
static  VTBL_ENTRY vtc_S18574C2[] = {
  ABISELECT(197392,162188),
  ABISELECT(194576,159868),
  ABISELECT(183568,150832),
  ABISELECT(183096,150424),
  ABISELECT(178976,147028),
  ABISELECT(178672,146784),
  ABISELECT(178352,146524),
  ABISELECT(177888,146124),
  ABISELECT(177424,145744),
  ABISELECT(178520,146660),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18574C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18574C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(174848,143632),
  ABISELECT(174544,143388),
  ABISELECT(174392,143264),
  ABISELECT(174224,143128),
  ABISELECT(173760,142728),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C2D1Ev,_ZThn3396_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C2D0Ev,_ZThn3396_N8S18574C2D0Ev),
  ABISELECT(173760,142748),
  ABISELECT(173928,142884),
  ABISELECT(174384,143252),
  ABISELECT(174080,143008),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C2D1Ev,_ZThn3776_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C2D0Ev,_ZThn3776_N8S18574C2D0Ev),
  ABISELECT(168288,138284),
  ABISELECT(157280,129248),
  ABISELECT(156808,128840),
  ABISELECT(152688,125444),
  ABISELECT(152384,125200),
  ABISELECT(152064,124940),
  ABISELECT(151600,124540),
  ABISELECT(151136,124160),
  ABISELECT(152232,125076),
  ABISELECT(-26288,-21584),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn26288_N8S18574C2D1Ev,_ZThn21584_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn26288_N8S18574C2D0Ev,_ZThn21584_N8S18574C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
  (VTBL_ENTRY)&_ZN9S18574C133v14Ev,
  ABISELECT(-26584,-21828),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-27048,-22228),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(148560,122048),
  ABISELECT(148256,121804),
  ABISELECT(148104,121680),
  ABISELECT(147936,121544),
  ABISELECT(147472,121144),
  ABISELECT(-30416,-24980),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn30416_N8S18574C2D1Ev,_ZThn24980_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn30416_N8S18574C2D0Ev,_ZThn24980_N8S18574C2D0Ev),
  ABISELECT(147472,121164),
  ABISELECT(147640,121300),
  ABISELECT(148096,121668),
  ABISELECT(147792,121424),
  ABISELECT(-30880,-25360),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn30880_N8S18574C2D1Ev,_ZThn25360_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn30880_N8S18574C2D0Ev,_ZThn25360_N8S18574C2D0Ev),
  ABISELECT(125944,103492),
  ABISELECT(125776,103356),
  ABISELECT(-52576,-43168),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  0,
  ABISELECT(1248,1040),
  ABISELECT(1096,916),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-177424,-145744),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  0,
  0,
  ABISELECT(-177888,-146124),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(168,136),
  ABISELECT(-178352,-146524),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  0,
  ABISELECT(-178520,-146660),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  0,
  ABISELECT(-178672,-146784),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-178976,-147028),
  0,
  ABISELECT(-178976,-147028),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C2D1Ev,_ZTv0_n16_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C2D0Ev,_ZTv0_n16_N8S18574C2D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  ABISELECT(-179272,-147272),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  ABISELECT(-179736,-147672),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-183096,-150424),
  0,
  0,
  0,
  ABISELECT(-5208,-4300),
  ABISELECT(-4744,-3900),
  ABISELECT(-4576,-3764),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  ABISELECT(-183096,-150424),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S18574C2D1Ev,_ZTv0_n48_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S18574C2D0Ev,_ZTv0_n48_N8S18574C2D0Ev),
  ABISELECT(-183568,-150832),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5048,-4172),
  ABISELECT(-5216,-4308),
  ABISELECT(-5680,-4708),
  ABISELECT(-183568,-150832),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18574C2D1Ev,_ZTv0_n40_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S18574C2D0Ev,_ZTv0_n40_N8S18574C2D0Ev),
  ABISELECT(-5680,-4688),
  ABISELECT(-5512,-4552),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-184032,-151212),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S18574C2D1Ev,_ZTvn380_n40_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S18574C2D0Ev,_ZTvn380_n40_N8S18574C2D0Ev),
  ABISELECT(608,504),
  ABISELECT(608,504),
  0,
  ABISELECT(-194576,-159868),
  0,
  ABISELECT(-16688,-13744),
  ABISELECT(-16224,-13344),
  ABISELECT(-16056,-13208),
  ABISELECT(-15600,-12840),
  ABISELECT(-11008,-9036),
  ABISELECT(-11480,-9444),
  ABISELECT(-15904,-13084),
  ABISELECT(-194576,-159868),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18574C2D1Ev,_ZTv0_n44_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18574C2D0Ev,_ZTv0_n44_N8S18574C2D0Ev),
  (VTBL_ENTRY)&_ZN9S18574C163v13Ev,
  ABISELECT(-16048,-13208),
  ABISELECT(-16200,-13332),
  ABISELECT(-16368,-13468),
  ABISELECT(-16832,-13868),
  ABISELECT(-194720,-159992),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  ABISELECT(-195184,-160372),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n88_N8S18574C2D1Ev,_ZTvn504_n44_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n88_N8S18574C2D0Ev,_ZTvn504_n44_N8S18574C2D0Ev),
  (VTBL_ENTRY)&_ZN9S18574C123v12Ev,
  0,
  0,
  ABISELECT(-197392,-162188),
  0,
  ABISELECT(-18416,-15160),
  ABISELECT(-18720,-15404),
  ABISELECT(-18872,-15528),
  ABISELECT(-19040,-15664),
  ABISELECT(-19504,-16064),
  ABISELECT(-197392,-162188),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S18574C2D1Ev,_ZTv0_n36_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S18574C2D0Ev,_ZTv0_n36_N8S18574C2D0Ev),
  (VTBL_ENTRY)&_ZN9S18574C173v15Ev,
  (VTBL_ENTRY)&_ZN9S18574C173v16Ev,
  ABISELECT(-19504,-16044),
  ABISELECT(-19336,-15908),
  ABISELECT(-18880,-15540),
  ABISELECT(-19184,-15784),
  ABISELECT(-197856,-162568),
  (VTBL_ENTRY)&(_ZTI8S18574C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n72_N8S18574C2D1Ev,_ZTvn380_n36_N8S18574C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n72_N8S18574C2D0Ev,_ZTvn380_n36_N8S18574C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S18574C2[];
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C8D1Ev();
extern void _ZN8S18574C8D0Ev();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C8__8S18574C2[] = {
  ABISELECT(178976,147028),
  ABISELECT(178672,146784),
  ABISELECT(178352,146524),
  ABISELECT(177888,146124),
  ABISELECT(177424,145744),
  ABISELECT(178520,146660),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D0Ev,
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(174848,143632),
  ABISELECT(174544,143388),
  ABISELECT(174392,143264),
  ABISELECT(174224,143128),
  ABISELECT(173760,142728),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C108S18574C8__A1__8S18574C2[] = {
  ABISELECT(174544,143388),
  ABISELECT(174392,143264),
  ABISELECT(174224,143128),
  ABISELECT(173760,142728),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C108S18574C8__A1__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(-173760,-142728),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C108S18574C8__A1__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-174224,-143128),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C108S18574C8__A1__8S18574C2[] = {
  0,
  ABISELECT(-174392,-143264),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C108S18574C8__A1__8S18574C2[] = {
  0,
  ABISELECT(-174544,-143388),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(173760,142748),
  ABISELECT(173928,142884),
  ABISELECT(174384,143252),
  ABISELECT(174080,143008),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C108S18574C8__8S18574C2[] = {
  0,
  ABISELECT(-174080,-143008),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn174384_N9S18574C11D1Ev,_ZThn143252_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn174384_N9S18574C11D0Ev,_ZThn143252_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-174384,-143252),
  0,
  ABISELECT(-174384,-143252),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(-174680,-143496),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(-175144,-143896),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C108S18574C8__8S18574C2[] = {
  0,
  ABISELECT(-173928,-142884),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-173760,-142748),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn174848_N9S18574C10D1Ev,_ZThn143632_N9S18574C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void ABISELECT(_ZThn174848_N9S18574C10D0Ev,_ZThn143632_N9S18574C10D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-174848,-143632),
  0,
  ABISELECT(-174848,-143632),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(-175144,-143876),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(-175608,-144276),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C108S18574C8__8S18574C2[] = {
  0,
  ABISELECT(-174392,-143264),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-174224,-143128),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A1__9S18574C108S18574C8__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(-173760,-142728),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__A1__9S18574C108S18574C8__8S18574C2[] = {
  0,
  ABISELECT(-174544,-143388),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C108S18574C8__8S18574C2[] = {
  ABISELECT(173760,142748),
  ABISELECT(173928,142884),
  ABISELECT(174384,143252),
  ABISELECT(174080,143008),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C8__8S18574C2[] = {
  0,
  ABISELECT(-178520,-146660),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__8S18574C8__8S18574C2[] = {
  0,
  ABISELECT(1248,1040),
  ABISELECT(1096,916),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-177424,-145744),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C8__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(-177888,-146124),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C8__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-178352,-146524),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C8__8S18574C2[] = {
  0,
  ABISELECT(-178672,-146784),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C10__8S18574C8__8S18574C2[] = {
  ABISELECT(174848,143632),
  ABISELECT(174544,143388),
  ABISELECT(174392,143264),
  ABISELECT(174224,143128),
  ABISELECT(173760,142728),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn178976_N8S18574C8D1Ev,_ZThn147028_N8S18574C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev)();
extern void ABISELECT(_ZThn178976_N8S18574C8D0Ev,_ZThn147028_N8S18574C8D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__A1__8S18574C8__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-178976,-147028),
  0,
  ABISELECT(-178976,-147028),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A2__8S18574C8__8S18574C2[] = {
  ABISELECT(-179272,-147272),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__A3__8S18574C8__8S18574C2[] = {
  ABISELECT(-179736,-147672),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__8S18574C8__8S18574C2[] = {
  ABISELECT(173760,142748),
  ABISELECT(173928,142884),
  ABISELECT(174384,143252),
  ABISELECT(174080,143008),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void _ZN9S18574C13D1Ev();
extern void _ZN9S18574C13D0Ev();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
extern void _ZN9S18574C133v14Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C13__8S18574C2[] = {
  ABISELECT(168288,138284),
  ABISELECT(157280,129248),
  ABISELECT(156808,128840),
  ABISELECT(152688,125444),
  ABISELECT(152384,125200),
  ABISELECT(152064,124940),
  ABISELECT(151600,124540),
  ABISELECT(151136,124160),
  ABISELECT(152232,125076),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN9S18574C13D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C13D0Ev,
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
  (VTBL_ENTRY)&_ZN9S18574C133v14Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void _ZN8S18574C8D1Ev();
extern void _ZN8S18574C8D0Ev();
extern void _ZN8S18574C92v8Ev();
extern void _ZN8S18574C83v10Ev();
extern void _ZN8S18574C83v11Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(152688,125444),
  ABISELECT(152384,125200),
  ABISELECT(152064,124940),
  ABISELECT(151600,124540),
  ABISELECT(151136,124160),
  ABISELECT(152232,125076),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D1Ev,
  (VTBL_ENTRY)&_ZN8S18574C8D0Ev,
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v10Ev,
  (VTBL_ENTRY)&_ZN8S18574C83v11Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(148560,122048),
  ABISELECT(148256,121804),
  ABISELECT(148104,121680),
  ABISELECT(147936,121544),
  ABISELECT(147472,121144),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[] = {
  ABISELECT(148256,121804),
  ABISELECT(148104,121680),
  ABISELECT(147936,121544),
  ABISELECT(147472,121144),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(-147472,-121144),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-147936,-121544),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[] = {
  0,
  ABISELECT(-148104,-121680),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[] = {
  0,
  ABISELECT(-148256,-121804),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(147472,121164),
  ABISELECT(147640,121300),
  ABISELECT(148096,121668),
  ABISELECT(147792,121424),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  0,
  ABISELECT(-147792,-121424),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZThn148096_N9S18574C11D1Ev,_ZThn121668_N9S18574C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void ABISELECT(_ZThn148096_N9S18574C11D0Ev,_ZThn121668_N9S18574C11D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-148096,-121668),
  0,
  ABISELECT(-148096,-121668),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(-148392,-121912),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(-148856,-122312),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  0,
  ABISELECT(-147640,-121300),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-147472,-121164),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn148560_N9S18574C10D1Ev,_ZThn122048_N9S18574C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void ABISELECT(_ZThn148560_N9S18574C10D0Ev,_ZThn122048_N9S18574C10D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-148560,-122048),
  0,
  ABISELECT(-148560,-122048),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(-148856,-122292),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(-149320,-122692),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  0,
  ABISELECT(-148104,-121680),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-147936,-121544),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A1__9S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(-147472,-121144),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__A1__9S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  0,
  ABISELECT(-148256,-121804),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C108S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(147472,121164),
  ABISELECT(147640,121300),
  ABISELECT(148096,121668),
  ABISELECT(147792,121424),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C89S18574C13__A1__8S18574C2[] = {
  0,
  ABISELECT(-152232,-125076),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__8S18574C89S18574C13__A1__8S18574C2[] = {
  0,
  ABISELECT(1248,1040),
  ABISELECT(1096,916),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-151136,-124160),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C89S18574C13__A1__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(-151600,-124540),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-152064,-124940),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C89S18574C13__A1__8S18574C2[] = {
  0,
  ABISELECT(-152384,-125200),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C10__8S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(148560,122048),
  ABISELECT(148256,121804),
  ABISELECT(148104,121680),
  ABISELECT(147936,121544),
  ABISELECT(147472,121144),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D1Ev,_ZThn3396_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N8S18574C8D0Ev,_ZThn3396_N8S18574C8D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn152688_N8S18574C8D1Ev,_ZThn125444_N8S18574C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev)();
extern void ABISELECT(_ZThn152688_N8S18574C8D0Ev,_ZThn125444_N8S18574C8D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__A1__8S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-152688,-125444),
  0,
  ABISELECT(-152688,-125444),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A2__8S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(-152984,-125688),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__A3__8S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(-153448,-126088),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev)();
extern void ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__8S18574C89S18574C13__A1__8S18574C2[] = {
  ABISELECT(147472,121164),
  ABISELECT(147640,121300),
  ABISELECT(148096,121668),
  ABISELECT(147792,121424),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI8S18574C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D1Ev,_ZThn3776_N8S18574C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N8S18574C8D0Ev,_ZThn3776_N8S18574C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S18574C149S18574C13__8S18574C2[] = {
  ABISELECT(125944,103492),
  ABISELECT(125776,103356),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C149S18574C13__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-125776,-103356),
  (VTBL_ENTRY)&(_ZTI9S18574C14[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__9S18574C149S18574C13__8S18574C2[] = {
  0,
  ABISELECT(-125944,-103492),
  (VTBL_ENTRY)&(_ZTI9S18574C14[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__9S18574C13__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(-151600,-124540),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__9S18574C13__8S18574C2[] = {
  0,
  ABISELECT(-152232,-125076),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__9S18574C13__8S18574C2[] = {
  0,
  ABISELECT(1248,1040),
  ABISELECT(1096,916),
  ABISELECT(928,780),
  ABISELECT(464,380),
  ABISELECT(-151136,-124160),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C13__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-152064,-124940),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C13__8S18574C2[] = {
  0,
  ABISELECT(-152384,-125200),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZThn4128_N9S18574C13D1Ev,_ZThn3396_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn4128_N9S18574C13D0Ev,_ZThn3396_N9S18574C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C108S18574C8__9S18574C13__8S18574C2[] = {
  ABISELECT(148560,122048),
  ABISELECT(148256,121804),
  ABISELECT(148104,121680),
  ABISELECT(147936,121544),
  ABISELECT(147472,121144),
  ABISELECT(-4128,-3396),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N9S18574C13D1Ev,_ZThn3396_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4128_N9S18574C13D0Ev,_ZThn3396_N9S18574C13D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C13D1Ev,_ZTv0_n16_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn152688_N9S18574C13D1Ev,_ZThn125444_N9S18574C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S18574C13D0Ev,_ZTv0_n16_N9S18574C13D0Ev)();
extern void ABISELECT(_ZThn152688_N9S18574C13D0Ev,_ZThn125444_N9S18574C13D0Ev)() __attribute__((weak));
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__A1__9S18574C13__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-152688,-125444),
  0,
  ABISELECT(-152688,-125444),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C13D1Ev,_ZTv0_n16_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C13D0Ev,_ZTv0_n16_N9S18574C13D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A2__9S18574C13__8S18574C2[] = {
  ABISELECT(-152984,-125688),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__A3__9S18574C13__8S18574C2[] = {
  ABISELECT(-153448,-126088),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void ABISELECT(_ZThn4592_N9S18574C13D1Ev,_ZThn3776_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn4592_N9S18574C13D0Ev,_ZThn3776_N9S18574C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C108S18574C8__9S18574C13__8S18574C2[] = {
  ABISELECT(147472,121164),
  ABISELECT(147640,121300),
  ABISELECT(148096,121668),
  ABISELECT(147792,121424),
  ABISELECT(-4592,-3776),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N9S18574C13D1Ev,_ZThn3776_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4592_N9S18574C13D0Ev,_ZThn3776_N9S18574C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S18574C14__9S18574C13__8S18574C2[] = {
  ABISELECT(125944,103492),
  ABISELECT(125776,103356),
  ABISELECT(-26288,-21584),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S18574C13D1Ev,_ZTv0_n48_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn156808_N9S18574C13D1Ev,_ZThn128840_N9S18574C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S18574C13D0Ev,_ZTv0_n48_N9S18574C13D0Ev)();
extern void ABISELECT(_ZThn156808_N9S18574C13D0Ev,_ZThn128840_N9S18574C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18574C15__9S18574C13__8S18574C2[] = {
  ABISELECT(-156808,-128840),
  0,
  0,
  0,
  ABISELECT(-5208,-4300),
  ABISELECT(-4744,-3900),
  ABISELECT(-4576,-3764),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  ABISELECT(-156808,-128840),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C13D1Ev,_ZTv0_n48_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C13D0Ev,_ZTv0_n48_N9S18574C13D0Ev),
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C13D1Ev,_ZTv0_n40_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn157280_N9S18574C13D1Ev,_ZThn129248_N9S18574C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S18574C13D0Ev,_ZTv0_n40_N9S18574C13D0Ev)();
extern void ABISELECT(_ZThn157280_N9S18574C13D0Ev,_ZThn129248_N9S18574C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18574C10__A1__9S18574C13__8S18574C2[] = {
  ABISELECT(-157280,-129248),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5048,-4172),
  ABISELECT(-5216,-4308),
  ABISELECT(-5680,-4708),
  ABISELECT(-157280,-129248),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C13D1Ev,_ZTv0_n40_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C13D0Ev,_ZTv0_n40_N9S18574C13D0Ev),
};
extern void ABISELECT(_ZTvn464_n80_N9S18574C13D1Ev,_ZTvn380_n40_N9S18574C13D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S18574C13D0Ev,_ZTvn380_n40_N9S18574C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__A1__9S18574C13__8S18574C2[] = {
  ABISELECT(-5680,-4688),
  ABISELECT(-5512,-4552),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-157744,-129628),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C13D1Ev,_ZTvn380_n40_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C13D0Ev,_ZTvn380_n40_N9S18574C13D0Ev),
};
extern void _ZN8S18574C42v3Ev();
extern void ABISELECT(_ZTv0_n88_N9S18574C13D1Ev,_ZTv0_n44_N9S18574C13D1Ev)();
extern void ABISELECT(_ZThn168288_N9S18574C13D1Ev,_ZThn138284_N9S18574C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N9S18574C13D0Ev,_ZTv0_n44_N9S18574C13D0Ev)();
extern void ABISELECT(_ZThn168288_N9S18574C13D0Ev,_ZThn138284_N9S18574C13D0Ev)() __attribute__((weak));
extern void _ZN9S18574C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C16__9S18574C13__8S18574C2[] = {
  ABISELECT(608,504),
  ABISELECT(608,504),
  0,
  ABISELECT(-168288,-138284),
  0,
  ABISELECT(-16688,-13744),
  ABISELECT(-16224,-13344),
  ABISELECT(-16056,-13208),
  ABISELECT(-15600,-12840),
  ABISELECT(-11008,-9036),
  ABISELECT(-11480,-9444),
  ABISELECT(-15904,-13084),
  ABISELECT(-168288,-138284),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18574C13D1Ev,_ZTv0_n44_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18574C13D0Ev,_ZTv0_n44_N9S18574C13D0Ev),
  (VTBL_ENTRY)&_ZN9S18574C163v13Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C16__A3__9S18574C13__8S18574C2[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-16200,-13332),
  ABISELECT(-16368,-13468),
  ABISELECT(-16832,-13868),
  ABISELECT(-168432,-138408),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTvn608_n88_N9S18574C13D1Ev,_ZTvn504_n44_N9S18574C13D1Ev)();
extern void ABISELECT(_ZTvn608_n88_N9S18574C13D0Ev,_ZTvn504_n44_N9S18574C13D0Ev)();
extern void _ZN9S18574C123v12Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C129S18574C16__9S18574C13__8S18574C2[] = {
  ABISELECT(-168896,-138788),
  (VTBL_ENTRY)&(_ZTI9S18574C13[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n88_N9S18574C13D1Ev,_ZTvn504_n44_N9S18574C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn608_n88_N9S18574C13D0Ev,_ZTvn504_n44_N9S18574C13D0Ev),
  (VTBL_ENTRY)&_ZN9S18574C123v12Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__8S18574C2[] = {
  ABISELECT(1248,1040),
  ABISELECT(1096,916),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C3__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C3__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C3__8S18574C2[] = {
  0,
  ABISELECT(-1096,-916),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C3__8S18574C2[] = {
  0,
  ABISELECT(-1248,-1040),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C2[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__8S18574C6__8S18574C2[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S18574C6[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void _ZN9S18574C15D1Ev();
extern void _ZN9S18574C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C15__8S18574C2[] = {
  ABISELECT(-5208,-4300),
  ABISELECT(-4744,-3900),
  ABISELECT(-4576,-3764),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&_ZN9S18574C15D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C15D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C15__8S18574C2[] = {
  0,
  ABISELECT(4424,3640),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S18574C15D1Ev,_ZThn408_N9S18574C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S18574C15D0Ev,_ZThn408_N9S18574C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S18574C10__9S18574C15__8S18574C2[] = {
  ABISELECT(-472,-408),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5048,-4172),
  ABISELECT(-5216,-4308),
  ABISELECT(-5680,-4708),
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C15__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4120,3396),
  0,
  ABISELECT(4120,3396),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C15D1Ev,_ZTv0_n16_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C15D0Ev,_ZTv0_n16_N9S18574C15D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A1__9S18574C15__8S18574C2[] = {
  ABISELECT(3824,3152),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C15__8S18574C2[] = {
  ABISELECT(3360,2752),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C15__8S18574C2[] = {
  0,
  ABISELECT(4576,3764),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C15__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(4744,3900),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A2__9S18574C15__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(5208,4300),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S18574C15D1Ev,_ZTvn380_n40_N9S18574C15D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S18574C15D0Ev,_ZTvn380_n40_N9S18574C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__9S18574C15__8S18574C2[] = {
  ABISELECT(-5680,-4688),
  ABISELECT(-5512,-4552),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-936,-788),
  (VTBL_ENTRY)&(_ZTI9S18574C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C15D1Ev,_ZTvn380_n40_N9S18574C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C15D0Ev,_ZTvn380_n40_N9S18574C15D0Ev),
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void _ZN9S18574C10D1Ev();
extern void _ZN9S18574C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C10__A2__8S18574C2[] = {
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5048,-4172),
  ABISELECT(-5216,-4308),
  ABISELECT(-5680,-4708),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C10D0Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C10__A3__8S18574C2[] = {
  ABISELECT(-4896,-4048),
  ABISELECT(-5048,-4172),
  ABISELECT(-5216,-4308),
  ABISELECT(-5680,-4708),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C10__A3__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(5680,4708),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C10__A3__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(5216,4308),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C10__A3__8S18574C2[] = {
  0,
  ABISELECT(5048,4172),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C10__A3__8S18574C2[] = {
  0,
  ABISELECT(4896,4048),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__A2__8S18574C2[] = {
  ABISELECT(-5680,-4688),
  ABISELECT(-5512,-4552),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C10__A2__8S18574C2[] = {
  0,
  ABISELECT(5360,4428),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C10__A2__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(5056,4184),
  0,
  ABISELECT(5056,4184),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__A2__8S18574C2[] = {
  ABISELECT(4760,3940),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__A2__8S18574C2[] = {
  ABISELECT(4296,3540),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C10__A2__8S18574C2[] = {
  0,
  ABISELECT(5512,4552),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C10__A2__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(5680,4688),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C10__A2__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4592,3804),
  0,
  ABISELECT(4592,3804),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C10__A2__8S18574C2[] = {
  ABISELECT(4296,3560),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C10__A2__8S18574C2[] = {
  ABISELECT(3832,3160),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C10__A2__8S18574C2[] = {
  0,
  ABISELECT(5048,4172),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C10__A2__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(5216,4308),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A1__9S18574C10__A2__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(5680,4708),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__A1__9S18574C10__A2__8S18574C2[] = {
  0,
  ABISELECT(4896,4048),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C10__A2__8S18574C2[] = {
  ABISELECT(-5680,-4688),
  ABISELECT(-5512,-4552),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D1Ev,_ZThn380_N9S18574C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C10D0Ev,_ZThn380_N9S18574C10D0Ev),
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C16D1Ev();
extern void _ZN9S18574C16D0Ev();
extern void _ZN9S18574C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C16__8S18574C2[] = {
  ABISELECT(-16688,-13744),
  ABISELECT(-16224,-13344),
  ABISELECT(-16056,-13208),
  ABISELECT(-15600,-12840),
  ABISELECT(-11008,-9036),
  ABISELECT(-11480,-9444),
  ABISELECT(-15904,-13084),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C16D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C16D0Ev,
  (VTBL_ENTRY)&_ZN9S18574C163v13Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C16__A4__8S18574C2[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-16200,-13332),
  ABISELECT(-16368,-13468),
  ABISELECT(-16832,-13868),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C16__A4__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(16832,13868),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C16__A4__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(16368,13468),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C16__A4__8S18574C2[] = {
  0,
  ABISELECT(16200,13332),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C16__A4__8S18574C2[] = {
  0,
  ABISELECT(16048,13208),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C16__8S18574C2[] = {
  0,
  ABISELECT(15904,13084),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
extern void ABISELECT(_ZTv0_n96_N9S18574C16D1Ev,_ZTv0_n48_N9S18574C16D1Ev)();
extern void ABISELECT(_ZTv0_n96_N9S18574C16D0Ev,_ZTv0_n48_N9S18574C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C15__9S18574C16__8S18574C2[] = {
  ABISELECT(11480,9444),
  0,
  0,
  0,
  ABISELECT(-5208,-4300),
  ABISELECT(-4744,-3900),
  ABISELECT(-4576,-3764),
  ABISELECT(-4120,-3396),
  ABISELECT(472,408),
  ABISELECT(-4424,-3640),
  ABISELECT(11480,9444),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C16D1Ev,_ZTv0_n48_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S18574C16D0Ev,_ZTv0_n48_N9S18574C16D0Ev),
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C102v9Ev();
extern void ABISELECT(_ZTv0_n80_N9S18574C16D1Ev,_ZTv0_n40_N9S18574C16D1Ev)();
extern void ABISELECT(_ZTv0_n80_N9S18574C16D0Ev,_ZTv0_n40_N9S18574C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C10__9S18574C16__8S18574C2[] = {
  ABISELECT(11008,9036),
  0,
  0,
  ABISELECT(-4592,-3804),
  ABISELECT(-4896,-4048),
  ABISELECT(-5048,-4172),
  ABISELECT(-5216,-4308),
  ABISELECT(-5680,-4708),
  ABISELECT(11008,9036),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C102v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C16D1Ev,_ZTv0_n40_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S18574C16D0Ev,_ZTv0_n40_N9S18574C16D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C16D1Ev,_ZTv0_n16_N9S18574C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C16D0Ev,_ZTv0_n16_N9S18574C16D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C16__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(15600,12840),
  0,
  ABISELECT(15600,12840),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C16D1Ev,_ZTv0_n16_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C16D0Ev,_ZTv0_n16_N9S18574C16D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A1__9S18574C16__8S18574C2[] = {
  ABISELECT(15304,12596),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__A1__9S18574C16__8S18574C2[] = {
  ABISELECT(14840,12196),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A2__9S18574C16__8S18574C2[] = {
  0,
  ABISELECT(16056,13208),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C16__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(16224,13344),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__A2__9S18574C16__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(16688,13744),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void ABISELECT(_ZTvn464_n80_N9S18574C16D1Ev,_ZTvn380_n40_N9S18574C16D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N9S18574C16D0Ev,_ZTvn380_n40_N9S18574C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C10__9S18574C16__8S18574C2[] = {
  ABISELECT(-5680,-4688),
  ABISELECT(-5512,-4552),
  ABISELECT(-5056,-4184),
  ABISELECT(-5360,-4428),
  ABISELECT(10544,8656),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C16D1Ev,_ZTvn380_n40_N9S18574C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N9S18574C16D0Ev,_ZTvn380_n40_N9S18574C16D0Ev),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C3__A1__9S18574C16__8S18574C2[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-16200,-13332),
  ABISELECT(-16368,-13468),
  ABISELECT(-16832,-13868),
  ABISELECT(-144,-124),
  (VTBL_ENTRY)&(_ZTI9S18574C16[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
extern void _ZN9S18574C17D1Ev();
extern void _ZN9S18574C17D0Ev();
extern void _ZN9S18574C173v15Ev();
extern void _ZN9S18574C173v16Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C17__8S18574C2[] = {
  ABISELECT(-18416,-15160),
  ABISELECT(-18720,-15404),
  ABISELECT(-18872,-15528),
  ABISELECT(-19040,-15664),
  ABISELECT(-19504,-16064),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
  (VTBL_ENTRY)&_ZN9S18574C17D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C17D0Ev,
  (VTBL_ENTRY)&_ZN9S18574C173v15Ev,
  (VTBL_ENTRY)&_ZN9S18574C173v16Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C39S18574C17__A5__8S18574C2[] = {
  ABISELECT(-18720,-15404),
  ABISELECT(-18872,-15528),
  ABISELECT(-19040,-15664),
  ABISELECT(-19504,-16064),
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__8S18574C39S18574C17__A5__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(19504,16064),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__8S18574C39S18574C17__A5__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(19040,15664),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__8S18574C39S18574C17__A5__8S18574C2[] = {
  0,
  ABISELECT(18872,15528),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__8S18574C39S18574C17__A5__8S18574C2[] = {
  0,
  ABISELECT(18720,15404),
  (VTBL_ENTRY)&(_ZTI8S18574C3[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN9S18574C11D1Ev();
extern void _ZN9S18574C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18574C119S18574C17__A3__8S18574C2[] = {
  ABISELECT(-19504,-16044),
  ABISELECT(-19336,-15908),
  ABISELECT(-18880,-15540),
  ABISELECT(-19184,-15784),
  0,
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN9S18574C11D1Ev,
  (VTBL_ENTRY)&_ZN9S18574C11D0Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C119S18574C17__A3__8S18574C2[] = {
  0,
  ABISELECT(19184,15784),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C119S18574C17__A3__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(18880,15540),
  0,
  ABISELECT(18880,15540),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__9S18574C119S18574C17__A3__8S18574C2[] = {
  ABISELECT(18584,15296),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__9S18574C119S18574C17__A3__8S18574C2[] = {
  ABISELECT(18120,14896),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C119S18574C17__A3__8S18574C2[] = {
  0,
  ABISELECT(19336,15908),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C119S18574C17__A3__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(19504,16044),
  (VTBL_ENTRY)&(_ZTI9S18574C11[0]),
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C5__9S18574C17__8S18574C2[] = {
  0,
  0,
  0,
  ABISELECT(19504,16064),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S18574C6__9S18574C17__8S18574C2[] = {
  ABISELECT(168,136),
  ABISELECT(19040,15664),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C4__A1__9S18574C17__8S18574C2[] = {
  0,
  ABISELECT(18872,15528),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
extern void _ZN8S18574C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C7__9S18574C17__8S18574C2[] = {
  0,
  ABISELECT(18720,15404),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
};
extern void ABISELECT(_ZThn464_N9S18574C17D1Ev,_ZThn380_N9S18574C17D1Ev)();
extern void ABISELECT(_ZThn464_N9S18574C17D0Ev,_ZThn380_N9S18574C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S18574C11__9S18574C17__8S18574C2[] = {
  ABISELECT(-19504,-16044),
  ABISELECT(-19336,-15908),
  ABISELECT(-18880,-15540),
  ABISELECT(-19184,-15784),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C17D1Ev,_ZThn380_N9S18574C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N9S18574C17D0Ev,_ZThn380_N9S18574C17D0Ev),
};
extern void _ZN8S18574C72v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S18574C17D1Ev,_ZTv0_n16_N9S18574C17D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S18574C17D0Ev,_ZTv0_n16_N9S18574C17D0Ev)();
extern void _ZN8S18574C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C9__9S18574C17__8S18574C2[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(18416,15160),
  0,
  ABISELECT(18416,15160),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C72v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C17D1Ev,_ZTv0_n16_N9S18574C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S18574C17D0Ev,_ZTv0_n16_N9S18574C17D0Ev),
  (VTBL_ENTRY)&_ZN8S18574C92v8Ev,
};
extern void _ZN8S18574C52v4Ev();
extern void _ZN8S18574C52v5Ev();
extern void _ZN8S18574C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C58S18574C9__A1__9S18574C17__8S18574C2[] = {
  ABISELECT(18120,14916),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C52v4Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v5Ev,
  (VTBL_ENTRY)&_ZN8S18574C52v6Ev,
};
extern void _ZN8S18574C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S18574C48S18574C9__A2__9S18574C17__8S18574C2[] = {
  ABISELECT(17656,14516),
  (VTBL_ENTRY)&(_ZTI9S18574C17[0]),
  (VTBL_ENTRY)&_ZN8S18574C42v3Ev,
};
static  VTT_ENTRY vtt_S18574C2[] = {
  {&(_ZTV8S18574C2[12]),  12,236},
  {&(_tg__ZTV8S18574C8__8S18574C2[8]),  8,14},
  {&(_tg__ZTV9S18574C108S18574C8__8S18574C2[7]),  7,11},
  {&(_tg__ZTV8S18574C39S18574C108S18574C8__A1__8S18574C2[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C108S18574C8__A1__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C108S18574C8__A1__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C108S18574C8__A1__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C108S18574C8__A1__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C108S18574C8__8S18574C2[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C108S18574C8__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C108S18574C8__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C108S18574C8__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C108S18574C8__8S18574C2[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C108S18574C8__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C108S18574C8__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C9__9S18574C108S18574C8__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C108S18574C8__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C108S18574C8__8S18574C2[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C108S18574C8__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C108S18574C8__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A1__9S18574C108S18574C8__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C7__A1__9S18574C108S18574C8__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C108S18574C8__8S18574C2[6]),  6,8},
  {&(_tg__ZTV8S18574C4__8S18574C8__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C3__8S18574C8__8S18574C2[7]),  7,8},
  {&(_tg__ZTV8S18574C5__8S18574C8__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C8__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C7__8S18574C8__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C10__8S18574C8__8S18574C2[7]),  7,11},
  {&(_tg__ZTV8S18574C9__A1__8S18574C8__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A2__8S18574C8__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__A3__8S18574C8__8S18574C2[2]),  2,3},
  {&(_tg__ZTV9S18574C119S18574C10__8S18574C8__8S18574C2[6]),  6,8},
  {&(_tg__ZTV9S18574C13__8S18574C2[11]),  11,18},
  {&(_tg__ZTV8S18574C89S18574C13__A1__8S18574C2[8]),  8,14},
  {&(_tg__ZTV9S18574C108S18574C89S18574C13__A1__8S18574C2[7]),  7,11},
  {&(_tg__ZTV8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C108S18574C89S18574C13__A2__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C108S18574C89S18574C13__A1__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C9__9S18574C108S18574C89S18574C13__A1__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C108S18574C89S18574C13__A1__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C108S18574C89S18574C13__A1__8S18574C2[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C108S18574C89S18574C13__A1__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C108S18574C89S18574C13__A1__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A1__9S18574C108S18574C89S18574C13__A1__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C7__A1__9S18574C108S18574C89S18574C13__A1__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C108S18574C89S18574C13__A1__8S18574C2[6]),  6,8},
  {&(_tg__ZTV8S18574C4__8S18574C89S18574C13__A1__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C3__8S18574C89S18574C13__A1__8S18574C2[7]),  7,8},
  {&(_tg__ZTV8S18574C5__8S18574C89S18574C13__A1__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C89S18574C13__A1__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C7__8S18574C89S18574C13__A1__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C10__8S18574C89S18574C13__A1__8S18574C2[7]),  7,11},
  {&(_tg__ZTV8S18574C9__A1__8S18574C89S18574C13__A1__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A2__8S18574C89S18574C13__A1__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__A3__8S18574C89S18574C13__A1__8S18574C2[2]),  2,3},
  {&(_tg__ZTV9S18574C119S18574C10__8S18574C89S18574C13__A1__8S18574C2[6]),  6,8},
  {&(_tg__ZTV9S18574C149S18574C13__8S18574C2[4]),  4,4},
  {&(_tg__ZTV8S18574C6__9S18574C149S18574C13__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C4__9S18574C149S18574C13__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C5__9S18574C13__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C4__9S18574C13__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C3__9S18574C13__8S18574C2[7]),  7,8},
  {&(_tg__ZTV8S18574C6__9S18574C13__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C7__9S18574C13__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C108S18574C8__9S18574C13__8S18574C2[7]),  7,11},
  {&(_tg__ZTV8S18574C9__A1__9S18574C13__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A2__9S18574C13__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__A3__9S18574C13__8S18574C2[2]),  2,3},
  {&(_tg__ZTV9S18574C119S18574C108S18574C8__9S18574C13__8S18574C2[6]),  6,8},
  {&(_tg__ZTV9S18574C14__9S18574C13__8S18574C2[4]),  4,4},
  {&(_tg__ZTV9S18574C15__9S18574C13__8S18574C2[12]),  12,17},
  {&(_tg__ZTV9S18574C10__A1__9S18574C13__8S18574C2[10]),  10,14},
  {&(_tg__ZTV9S18574C119S18574C10__A1__9S18574C13__8S18574C2[6]),  6,8},
  {&(_tg__ZTV9S18574C16__9S18574C13__8S18574C2[14]),  14,18},
  {&(_tg__ZTV8S18574C39S18574C16__A3__9S18574C13__8S18574C2[6]),  6,7},
  {&(_tg__ZTV9S18574C129S18574C16__9S18574C13__8S18574C2[2]),  2,6},
  {&(_ZTV8S18574C2[101]),  101,236},
  {&(_ZTV8S18574C2[107]),  107,236},
  {&(_ZTV8S18574C2[113]),  113,236},
  {&(_ZTV8S18574C2[116]),  116,236},
  {&(_ZTV8S18574C2[120]),  120,236},
  {&(_ZTV8S18574C2[33]),  33,236},
  {&(_ZTV8S18574C2[130]),  130,236},
  {&(_ZTV8S18574C2[136]),  136,236},
  {&(_ZTV8S18574C2[141]),  141,236},
  {&(_ZTV8S18574C2[43]),  43,236},
  {&(_ZTV8S18574C2[56]),  56,236},
  {&(_ZTV8S18574C2[78]),  78,236},
  {&(_ZTV8S18574C2[88]),  88,236},
  {&(_ZTV8S18574C2[94]),  94,236},
  {&(_ZTV8S18574C2[154]),  154,236},
  {&(_ZTV8S18574C2[169]),  169,236},
  {&(_ZTV8S18574C2[179]),  179,236},
  {&(_ZTV8S18574C2[195]),  195,236},
  {&(_ZTV8S18574C2[205]),  205,236},
  {&(_ZTV8S18574C2[208]),  208,236},
  {&(_ZTV8S18574C2[223]),  223,236},
  {&(_ZTV8S18574C2[234]),  234,236},
  {&(_tg__ZTV8S18574C3__8S18574C2[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C3__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C3__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C3__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C3__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C4__8S18574C6__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C15__8S18574C2[8]),  8,13},
  {&(_tg__ZTV8S18574C7__9S18574C15__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C10__9S18574C15__8S18574C2[10]),  10,14},
  {&(_tg__ZTV8S18574C9__9S18574C15__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A1__9S18574C15__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C15__8S18574C2[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C15__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C15__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A2__9S18574C15__8S18574C2[5]),  5,8},
  {&(_tg__ZTV9S18574C119S18574C10__9S18574C15__8S18574C2[6]),  6,8},
  {&(_tg__ZTV9S18574C10__A2__8S18574C2[7]),  7,11},
  {&(_tg__ZTV8S18574C39S18574C10__A3__8S18574C2[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C10__A3__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C10__A3__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C10__A3__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C10__A3__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C10__A2__8S18574C2[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C10__A2__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C10__A2__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C10__A2__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C10__A2__8S18574C2[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C10__A2__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C10__A2__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C9__9S18574C10__A2__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C10__A2__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C10__A2__8S18574C2[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C10__A2__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C10__A2__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A1__9S18574C10__A2__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C7__A1__9S18574C10__A2__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C10__A2__8S18574C2[6]),  6,8},
  {&(_tg__ZTV9S18574C16__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C39S18574C16__A4__8S18574C2[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C16__A4__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C16__A4__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C16__A4__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C16__A4__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C7__9S18574C16__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C15__9S18574C16__8S18574C2[12]),  12,17},
  {&(_tg__ZTV9S18574C10__9S18574C16__8S18574C2[10]),  10,14},
  {&(_tg__ZTV8S18574C9__9S18574C16__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A1__9S18574C16__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__A1__9S18574C16__8S18574C2[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A2__9S18574C16__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C16__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C5__A2__9S18574C16__8S18574C2[5]),  5,8},
  {&(_tg__ZTV9S18574C119S18574C10__9S18574C16__8S18574C2[6]),  6,8},
  {&(_tg__ZTV8S18574C3__A1__9S18574C16__8S18574C2[6]),  6,7},
  {&(_tg__ZTV9S18574C17__8S18574C2[7]),  7,12},
  {&(_tg__ZTV8S18574C39S18574C17__A5__8S18574C2[6]),  6,7},
  {&(_tg__ZTV8S18574C5__8S18574C39S18574C17__A5__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C6__8S18574C39S18574C17__A5__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__8S18574C39S18574C17__A5__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C7__8S18574C39S18574C17__A5__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C119S18574C17__A3__8S18574C2[6]),  6,8},
  {&(_tg__ZTV8S18574C7__9S18574C119S18574C17__A3__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C9__9S18574C119S18574C17__A3__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__9S18574C119S18574C17__A3__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__9S18574C119S18574C17__A3__8S18574C2[2]),  2,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C119S18574C17__A3__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C6__9S18574C119S18574C17__A3__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C5__9S18574C17__8S18574C2[5]),  5,8},
  {&(_tg__ZTV8S18574C6__9S18574C17__8S18574C2[3]),  3,3},
  {&(_tg__ZTV8S18574C4__A1__9S18574C17__8S18574C2[3]),  3,4},
  {&(_tg__ZTV8S18574C7__9S18574C17__8S18574C2[3]),  3,4},
  {&(_tg__ZTV9S18574C11__9S18574C17__8S18574C2[6]),  6,8},
  {&(_tg__ZTV8S18574C9__9S18574C17__8S18574C2[9]),  9,13},
  {&(_tg__ZTV8S18574C58S18574C9__A1__9S18574C17__8S18574C2[2]),  2,5},
  {&(_tg__ZTV8S18574C48S18574C9__A2__9S18574C17__8S18574C2[2]),  2,3},
};
extern VTBL_ENTRY _ZTI8S18574C2[];
extern  VTBL_ENTRY _ZTV8S18574C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18574C2[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C15D0Ev,_ZTv0_n40_N9S18574C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S18574C15D0Ev,_ZThn408_N9S18574C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C15D1Ev,_ZTv0_n40_N9S18574C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S18574C15D1Ev,_ZThn408_N9S18574C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18574C13D0Ev,_ZTv0_n44_N9S18574C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168288_N9S18574C13D0Ev,_ZThn138284_N9S18574C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18574C13D1Ev,_ZTv0_n44_N9S18574C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168288_N9S18574C13D1Ev,_ZThn138284_N9S18574C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C13D0Ev,_ZTv0_n40_N9S18574C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn157280_N9S18574C13D0Ev,_ZThn129248_N9S18574C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S18574C13D1Ev,_ZTv0_n40_N9S18574C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn157280_N9S18574C13D1Ev,_ZThn129248_N9S18574C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S18574C13D0Ev,_ZTv0_n48_N9S18574C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn156808_N9S18574C13D0Ev,_ZThn128840_N9S18574C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S18574C13D1Ev,_ZTv0_n48_N9S18574C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn156808_N9S18574C13D1Ev,_ZThn128840_N9S18574C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C13D0Ev,_ZTv0_n16_N9S18574C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152688_N9S18574C13D0Ev,_ZThn125444_N9S18574C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C13D1Ev,_ZTv0_n16_N9S18574C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152688_N9S18574C13D1Ev,_ZThn125444_N9S18574C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C8D0Ev,_ZTv0_n16_N8S18574C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152688_N8S18574C8D0Ev,_ZThn125444_N8S18574C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn178976_N8S18574C8D0Ev,_ZThn147028_N8S18574C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C8D1Ev,_ZTv0_n16_N8S18574C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152688_N8S18574C8D1Ev,_ZThn125444_N8S18574C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn178976_N8S18574C8D1Ev,_ZThn147028_N8S18574C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D0Ev,_ZTv0_n16_N9S18574C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn148560_N9S18574C10D0Ev,_ZThn122048_N9S18574C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn174848_N9S18574C10D0Ev,_ZThn143632_N9S18574C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C10D1Ev,_ZTv0_n16_N9S18574C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn148560_N9S18574C10D1Ev,_ZThn122048_N9S18574C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn174848_N9S18574C10D1Ev,_ZThn143632_N9S18574C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D0Ev,_ZTv0_n16_N9S18574C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn148096_N9S18574C11D0Ev,_ZThn121668_N9S18574C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn174384_N9S18574C11D0Ev,_ZThn143252_N9S18574C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S18574C11D1Ev,_ZTv0_n16_N9S18574C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn148096_N9S18574C11D1Ev,_ZThn121668_N9S18574C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn174384_N9S18574C11D1Ev,_ZThn143252_N9S18574C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S18574C2D0Ev,_ZTv0_n36_N8S18574C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn197392_N8S18574C2D0Ev,_ZThn162188_N8S18574C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S18574C2D1Ev,_ZTv0_n36_N8S18574C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn197392_N8S18574C2D1Ev,_ZThn162188_N8S18574C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18574C2D0Ev,_ZTv0_n44_N8S18574C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn194576_N8S18574C2D0Ev,_ZThn159868_N8S18574C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18574C2D1Ev,_ZTv0_n44_N8S18574C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn194576_N8S18574C2D1Ev,_ZThn159868_N8S18574C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18574C2D0Ev,_ZTv0_n40_N8S18574C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn183568_N8S18574C2D0Ev,_ZThn150832_N8S18574C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S18574C2D1Ev,_ZTv0_n40_N8S18574C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn183568_N8S18574C2D1Ev,_ZThn150832_N8S18574C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S18574C2D0Ev,_ZTv0_n48_N8S18574C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn183096_N8S18574C2D0Ev,_ZThn150424_N8S18574C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S18574C2D1Ev,_ZTv0_n48_N8S18574C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn183096_N8S18574C2D1Ev,_ZThn150424_N8S18574C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C2D0Ev,_ZTv0_n16_N8S18574C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn178976_N8S18574C2D0Ev,_ZThn147028_N8S18574C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S18574C2D1Ev,_ZTv0_n16_N8S18574C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn178976_N8S18574C2D1Ev,_ZThn147028_N8S18574C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18574C2 = {  "S18574C2", // class name
  bases_S18574C2, 46,
  &(vtc_S18574C2[0]), // expected_vtbl_contents
  &(vtt_S18574C2[0]), // expected_vtt_contents
  ABISELECT(204768,168248), // object size
  NSPAIRA(_ZTI8S18574C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S18574C2),236, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18574C2),184, //virtual table table var
  46, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18574C1  {
  int s18574c1f0;
  ::S18574C2 s18574c1f1;
  short s18574c1f2;
  ::S19762C23_nt s18574c1f3;
  ::S18574C7 s18574c1f4;
  int s18574c1f5;
  virtual void  v1(); // _ZN8S18574C12v1Ev
  virtual void  v2(); // _ZN8S18574C12v2Ev
  ~S18574C1(); // tgen
  S18574C1(); // tgen
};
//SIG(1 S18574C1) C1{ v1 v2 Fi FC2{ VBC3{ BC4{ v3 Fs:6 Fl Fs:4 FL[13] Fp} VBC5{ v4 v5 v6 Fi[2] FL[2] FC4[3]} VBC6{ VBC4 Fp FC4 Fi:3} VBC7{ v7 FL FD Fp Fc FC4 Fp[2] FL[8] Fs Fp FL:64} FC7 Fs Fi[2]} BC8{ VBC4 VBC3 BC9{ BC7 BC5 BC4 vd v8 FL[2] Fp[8] FC3 Fp Fi FC3 Fi} BC10{ VBC9 VBC4 VBC6 BC3 BC11{ VBC7 VBC9 VBC4 VBC6 FL:44 Fp Fi FC3 FL[2] Fi[3] FC9 Fc:7 FC12{ BC7 vd v12 FC6 Fi Fp Fi}} v9 FC9 FL Fc:7} v10 v11 FC11 Fs Fi:8} BC13{ VBC5 BC8 BC14{ VBC6 FC11 Fi:6 Fi FL} VBC15{ VBC7 BC5 VBC10 Fc:8 Fi} VBC16{ BC4 VBC7 VBC15 BC3 BC12 vd v13 Fi FC3 Fi Fs FL:8 Fi} v14 FC15 FC8} VBC17{ BC3 BC11 vd v15 v16 Fi:13 FL Fi Fp[2] FL FC5} FC18{ BC5 VBC8 BC4 vd Fi FU19{ m Fc:8 Fp Fs FD Fp Fp Fl[5]} Fi FC8 Fc[6] FL Fi Fi:0} Fi Fi Fi Fi Fi Fc Fi Fp Fp Fi FC6} Fs FU20{ m Fi:8 Fi Fp FL Fp Fp Fi} FC7 Fi}


void  S18574C1 ::v1(){vfunc_called(this, "_ZN8S18574C12v1Ev");}
void  S18574C1 ::v2(){vfunc_called(this, "_ZN8S18574C12v2Ev");}
S18574C1 ::~S18574C1(){ note_dtor("S18574C1", this);} // tgen
S18574C1 ::S18574C1(){ note_ctor("S18574C1", this);} // tgen

static void Test_S18574C1()
{
  extern Class_Descriptor cd_S18574C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12821,42130)];
    init_test(&cd_S18574C1, buf);
    S18574C1 *dp, &lv = *(dp=new (buf) S18574C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(205120,168516), "sizeof(S18574C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18574C1)");
    check_field_offset(lv, s18574c1f0, ABISELECT(8,4), "S18574C1.s18574c1f0");
    check_field_offset(lv, s18574c1f1, ABISELECT(16,8), "S18574C1.s18574c1f1");
    check_field_offset(lv, s18574c1f2, ABISELECT(204784,168256), "S18574C1.s18574c1f2");
    check_field_offset(lv, s18574c1f3, ABISELECT(204792,168260), "S18574C1.s18574c1f3");
    check_field_offset(lv, s18574c1f4, ABISELECT(204800,168268), "S18574C1.s18574c1f4");
    check_field_offset(lv, s18574c1f5, ABISELECT(205104,168512), "S18574C1.s18574c1f5");
    test_class_info(&lv, &cd_S18574C1);
    dp->~S18574C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18574C1(Test_S18574C1, "S18574C1", ABISELECT(205120,168516));

#else // __cplusplus

extern void _ZN8S18574C1C1Ev();
extern void _ZN8S18574C1D1Ev();
Name_Map name_map_S18574C1[] = {
  NSPAIR(_ZN8S18574C1C1Ev),
  NSPAIR(_ZN8S18574C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18574C1[];
extern void _ZN8S18574C12v1Ev();
extern void _ZN8S18574C12v2Ev();
static  VTBL_ENTRY vtc_S18574C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18574C1[0]),
  (VTBL_ENTRY)&_ZN8S18574C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18574C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18574C1[];
extern  VTBL_ENTRY _ZTV8S18574C1[];
Class_Descriptor cd_S18574C1 = {  "S18574C1", // class name
  0,0,//no base classes
  &(vtc_S18574C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(205120,168516), // object size
  NSPAIRA(_ZTI8S18574C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18574C1),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  S778C4  : S785C5_nt {
  virtual void  v12(); // _ZN6S778C43v12Ev
  virtual void  v13(); // _ZN6S778C43v13Ev
  virtual void  v14(); // _ZN6S778C43v14Ev
  virtual void  v15(); // _ZN6S778C43v15Ev
  virtual void  v16(); // _ZN6S778C43v16Ev
  virtual void  v17(); // _ZN6S778C43v17Ev
  virtual void  v18(); // _ZN6S778C43v18Ev
  virtual void  v19(); // _ZN6S778C43v19Ev
  virtual void  v20(); // _ZN6S778C43v20Ev
  virtual void  v21(); // _ZN6S778C43v21Ev
  virtual void  v22(); // _ZN6S778C43v22Ev
  virtual void  v23(); // _ZN6S778C43v23Ev
  virtual void  v24(); // _ZN6S778C43v24Ev
  virtual void  v25(); // _ZN6S778C43v25Ev
  virtual void  v26(); // _ZN6S778C43v26Ev
  virtual void  v27(); // _ZN6S778C43v27Ev
  virtual void  v28(); // _ZN6S778C43v28Ev
  virtual void  v29(); // _ZN6S778C43v29Ev
  virtual void  v30(); // _ZN6S778C43v30Ev
  virtual void  v31(); // _ZN6S778C43v31Ev
  virtual void  v32(); // _ZN6S778C43v32Ev
  virtual void  v33(); // _ZN6S778C43v33Ev
  virtual void  v34(); // _ZN6S778C43v34Ev
  virtual void  v35(); // _ZN6S778C43v35Ev
  virtual void  v36(); // _ZN6S778C43v36Ev
  virtual void  v37(); // _ZN6S778C43v37Ev
  virtual void  v38(); // _ZN6S778C43v38Ev
  virtual void  v39(); // _ZN6S778C43v39Ev
  virtual void  v40(); // _ZN6S778C43v40Ev
  virtual void  v41(); // _ZN6S778C43v41Ev
  virtual void  v42(); // _ZN6S778C43v42Ev
  virtual void  v43(); // _ZN6S778C43v43Ev
  virtual void  v44(); // _ZN6S778C43v44Ev
  virtual void  v45(); // _ZN6S778C43v45Ev
  virtual void  v46(); // _ZN6S778C43v46Ev
  virtual void  v47(); // _ZN6S778C43v47Ev
  virtual void  v48(); // _ZN6S778C43v48Ev
  virtual void  v49(); // _ZN6S778C43v49Ev
  virtual void  v50(); // _ZN6S778C43v50Ev
  virtual void  v51(); // _ZN6S778C43v51Ev
  virtual void  v52(); // _ZN6S778C43v52Ev
  virtual void  v53(); // _ZN6S778C43v53Ev
  virtual void  v54(); // _ZN6S778C43v54Ev
  virtual void  v55(); // _ZN6S778C43v55Ev
  virtual void  v56(); // _ZN6S778C43v56Ev
  virtual void  v57(); // _ZN6S778C43v57Ev
  virtual void  v58(); // _ZN6S778C43v58Ev
  virtual void  v59(); // _ZN6S778C43v59Ev
  virtual void  v60(); // _ZN6S778C43v60Ev
  virtual void  v61(); // _ZN6S778C43v61Ev
  virtual void  v62(); // _ZN6S778C43v62Ev
  virtual void  v63(); // _ZN6S778C43v63Ev
  virtual void  v64(); // _ZN6S778C43v64Ev
  virtual void  v65(); // _ZN6S778C43v65Ev
  virtual void  v66(); // _ZN6S778C43v66Ev
  virtual void  v67(); // _ZN6S778C43v67Ev
  virtual void  v68(); // _ZN6S778C43v68Ev
  virtual void  v69(); // _ZN6S778C43v69Ev
  virtual void  v70(); // _ZN6S778C43v70Ev
  virtual void  v71(); // _ZN6S778C43v71Ev
  virtual void  v72(); // _ZN6S778C43v72Ev
  virtual void  v73(); // _ZN6S778C43v73Ev
  virtual void  v74(); // _ZN6S778C43v74Ev
  virtual void  v75(); // _ZN6S778C43v75Ev
  virtual void  v76(); // _ZN6S778C43v76Ev
  virtual void  v77(); // _ZN6S778C43v77Ev
  virtual void  v78(); // _ZN6S778C43v78Ev
  virtual void  v79(); // _ZN6S778C43v79Ev
  virtual void  v80(); // _ZN6S778C43v80Ev
  virtual void  v81(); // _ZN6S778C43v81Ev
  virtual void  v82(); // _ZN6S778C43v82Ev
  virtual void  v83(); // _ZN6S778C43v83Ev
  virtual void  v84(); // _ZN6S778C43v84Ev
  virtual void  v85(); // _ZN6S778C43v85Ev
  virtual void  v86(); // _ZN6S778C43v86Ev
  virtual void  v87(); // _ZN6S778C43v87Ev
  virtual void  v88(); // _ZN6S778C43v88Ev
  virtual void  v89(); // _ZN6S778C43v89Ev
  virtual void  v90(); // _ZN6S778C43v90Ev
  virtual void  v91(); // _ZN6S778C43v91Ev
  virtual void  v92(); // _ZN6S778C43v92Ev
  virtual void  v93(); // _ZN6S778C43v93Ev
  virtual void  v94(); // _ZN6S778C43v94Ev
  virtual void  v95(); // _ZN6S778C43v95Ev
  virtual void  v96(); // _ZN6S778C43v96Ev
  virtual void  v97(); // _ZN6S778C43v97Ev
  virtual void  v98(); // _ZN6S778C43v98Ev
  virtual void  v99(); // _ZN6S778C43v99Ev
  virtual void  v100(); // _ZN6S778C44v100Ev
  virtual void  v101(); // _ZN6S778C44v101Ev
  virtual void  v102(); // _ZN6S778C44v102Ev
  virtual void  v103(); // _ZN6S778C44v103Ev
  virtual void  v104(); // _ZN6S778C44v104Ev
  virtual void  v105(); // _ZN6S778C44v105Ev
  virtual void  v106(); // _ZN6S778C44v106Ev
  virtual void  v107(); // _ZN6S778C44v107Ev
  virtual void  v108(); // _ZN6S778C44v108Ev
  virtual void  v109(); // _ZN6S778C44v109Ev
  virtual void  v110(); // _ZN6S778C44v110Ev
  virtual void  v111(); // _ZN6S778C44v111Ev
  virtual void  v112(); // _ZN6S778C44v112Ev
  virtual void  v113(); // _ZN6S778C44v113Ev
  virtual void  v114(); // _ZN6S778C44v114Ev
  virtual void  v115(); // _ZN6S778C44v115Ev
  virtual void  v116(); // _ZN6S778C44v116Ev
  virtual void  v117(); // _ZN6S778C44v117Ev
  virtual void  v118(); // _ZN6S778C44v118Ev
  virtual void  v119(); // _ZN6S778C44v119Ev
  virtual void  v120(); // _ZN6S778C44v120Ev
  virtual void  v121(); // _ZN6S778C44v121Ev
  virtual void  v122(); // _ZN6S778C44v122Ev
  virtual void  v123(); // _ZN6S778C44v123Ev
  virtual void  v124(); // _ZN6S778C44v124Ev
  virtual void  v125(); // _ZN6S778C44v125Ev
  virtual void  v126(); // _ZN6S778C44v126Ev
  virtual void  v127(); // _ZN6S778C44v127Ev
  virtual void  v128(); // _ZN6S778C44v128Ev
  virtual void  v129(); // _ZN6S778C44v129Ev
  virtual void  v130(); // _ZN6S778C44v130Ev
  virtual void  v131(); // _ZN6S778C44v131Ev
  virtual void  v132(); // _ZN6S778C44v132Ev
  virtual void  v133(); // _ZN6S778C44v133Ev
  ~S778C4(); // tgen
  S778C4(); // tgen
};
//SIG(-1 S778C4) C1{ BC2{ vd m Fp Fi} 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}


void  S778C4 ::v12(){vfunc_called(this, "_ZN6S778C43v12Ev");}
void  S778C4 ::v13(){vfunc_called(this, "_ZN6S778C43v13Ev");}
void  S778C4 ::v14(){vfunc_called(this, "_ZN6S778C43v14Ev");}
void  S778C4 ::v15(){vfunc_called(this, "_ZN6S778C43v15Ev");}
void  S778C4 ::v16(){vfunc_called(this, "_ZN6S778C43v16Ev");}
void  S778C4 ::v17(){vfunc_called(this, "_ZN6S778C43v17Ev");}
void  S778C4 ::v18(){vfunc_called(this, "_ZN6S778C43v18Ev");}
void  S778C4 ::v19(){vfunc_called(this, "_ZN6S778C43v19Ev");}
void  S778C4 ::v20(){vfunc_called(this, "_ZN6S778C43v20Ev");}
void  S778C4 ::v21(){vfunc_called(this, "_ZN6S778C43v21Ev");}
void  S778C4 ::v22(){vfunc_called(this, "_ZN6S778C43v22Ev");}
void  S778C4 ::v23(){vfunc_called(this, "_ZN6S778C43v23Ev");}
void  S778C4 ::v24(){vfunc_called(this, "_ZN6S778C43v24Ev");}
void  S778C4 ::v25(){vfunc_called(this, "_ZN6S778C43v25Ev");}
void  S778C4 ::v26(){vfunc_called(this, "_ZN6S778C43v26Ev");}
void  S778C4 ::v27(){vfunc_called(this, "_ZN6S778C43v27Ev");}
void  S778C4 ::v28(){vfunc_called(this, "_ZN6S778C43v28Ev");}
void  S778C4 ::v29(){vfunc_called(this, "_ZN6S778C43v29Ev");}
void  S778C4 ::v30(){vfunc_called(this, "_ZN6S778C43v30Ev");}
void  S778C4 ::v31(){vfunc_called(this, "_ZN6S778C43v31Ev");}
void  S778C4 ::v32(){vfunc_called(this, "_ZN6S778C43v32Ev");}
void  S778C4 ::v33(){vfunc_called(this, "_ZN6S778C43v33Ev");}
void  S778C4 ::v34(){vfunc_called(this, "_ZN6S778C43v34Ev");}
void  S778C4 ::v35(){vfunc_called(this, "_ZN6S778C43v35Ev");}
void  S778C4 ::v36(){vfunc_called(this, "_ZN6S778C43v36Ev");}
void  S778C4 ::v37(){vfunc_called(this, "_ZN6S778C43v37Ev");}
void  S778C4 ::v38(){vfunc_called(this, "_ZN6S778C43v38Ev");}
void  S778C4 ::v39(){vfunc_called(this, "_ZN6S778C43v39Ev");}
void  S778C4 ::v40(){vfunc_called(this, "_ZN6S778C43v40Ev");}
void  S778C4 ::v41(){vfunc_called(this, "_ZN6S778C43v41Ev");}
void  S778C4 ::v42(){vfunc_called(this, "_ZN6S778C43v42Ev");}
void  S778C4 ::v43(){vfunc_called(this, "_ZN6S778C43v43Ev");}
void  S778C4 ::v44(){vfunc_called(this, "_ZN6S778C43v44Ev");}
void  S778C4 ::v45(){vfunc_called(this, "_ZN6S778C43v45Ev");}
void  S778C4 ::v46(){vfunc_called(this, "_ZN6S778C43v46Ev");}
void  S778C4 ::v47(){vfunc_called(this, "_ZN6S778C43v47Ev");}
void  S778C4 ::v48(){vfunc_called(this, "_ZN6S778C43v48Ev");}
void  S778C4 ::v49(){vfunc_called(this, "_ZN6S778C43v49Ev");}
void  S778C4 ::v50(){vfunc_called(this, "_ZN6S778C43v50Ev");}
void  S778C4 ::v51(){vfunc_called(this, "_ZN6S778C43v51Ev");}
void  S778C4 ::v52(){vfunc_called(this, "_ZN6S778C43v52Ev");}
void  S778C4 ::v53(){vfunc_called(this, "_ZN6S778C43v53Ev");}
void  S778C4 ::v54(){vfunc_called(this, "_ZN6S778C43v54Ev");}
void  S778C4 ::v55(){vfunc_called(this, "_ZN6S778C43v55Ev");}
void  S778C4 ::v56(){vfunc_called(this, "_ZN6S778C43v56Ev");}
void  S778C4 ::v57(){vfunc_called(this, "_ZN6S778C43v57Ev");}
void  S778C4 ::v58(){vfunc_called(this, "_ZN6S778C43v58Ev");}
void  S778C4 ::v59(){vfunc_called(this, "_ZN6S778C43v59Ev");}
void  S778C4 ::v60(){vfunc_called(this, "_ZN6S778C43v60Ev");}
void  S778C4 ::v61(){vfunc_called(this, "_ZN6S778C43v61Ev");}
void  S778C4 ::v62(){vfunc_called(this, "_ZN6S778C43v62Ev");}
void  S778C4 ::v63(){vfunc_called(this, "_ZN6S778C43v63Ev");}
void  S778C4 ::v64(){vfunc_called(this, "_ZN6S778C43v64Ev");}
void  S778C4 ::v65(){vfunc_called(this, "_ZN6S778C43v65Ev");}
void  S778C4 ::v66(){vfunc_called(this, "_ZN6S778C43v66Ev");}
void  S778C4 ::v67(){vfunc_called(this, "_ZN6S778C43v67Ev");}
void  S778C4 ::v68(){vfunc_called(this, "_ZN6S778C43v68Ev");}
void  S778C4 ::v69(){vfunc_called(this, "_ZN6S778C43v69Ev");}
void  S778C4 ::v70(){vfunc_called(this, "_ZN6S778C43v70Ev");}
void  S778C4 ::v71(){vfunc_called(this, "_ZN6S778C43v71Ev");}
void  S778C4 ::v72(){vfunc_called(this, "_ZN6S778C43v72Ev");}
void  S778C4 ::v73(){vfunc_called(this, "_ZN6S778C43v73Ev");}
void  S778C4 ::v74(){vfunc_called(this, "_ZN6S778C43v74Ev");}
void  S778C4 ::v75(){vfunc_called(this, "_ZN6S778C43v75Ev");}
void  S778C4 ::v76(){vfunc_called(this, "_ZN6S778C43v76Ev");}
void  S778C4 ::v77(){vfunc_called(this, "_ZN6S778C43v77Ev");}
void  S778C4 ::v78(){vfunc_called(this, "_ZN6S778C43v78Ev");}
void  S778C4 ::v79(){vfunc_called(this, "_ZN6S778C43v79Ev");}
void  S778C4 ::v80(){vfunc_called(this, "_ZN6S778C43v80Ev");}
void  S778C4 ::v81(){vfunc_called(this, "_ZN6S778C43v81Ev");}
void  S778C4 ::v82(){vfunc_called(this, "_ZN6S778C43v82Ev");}
void  S778C4 ::v83(){vfunc_called(this, "_ZN6S778C43v83Ev");}
void  S778C4 ::v84(){vfunc_called(this, "_ZN6S778C43v84Ev");}
void  S778C4 ::v85(){vfunc_called(this, "_ZN6S778C43v85Ev");}
void  S778C4 ::v86(){vfunc_called(this, "_ZN6S778C43v86Ev");}
void  S778C4 ::v87(){vfunc_called(this, "_ZN6S778C43v87Ev");}
void  S778C4 ::v88(){vfunc_called(this, "_ZN6S778C43v88Ev");}
void  S778C4 ::v89(){vfunc_called(this, "_ZN6S778C43v89Ev");}
void  S778C4 ::v90(){vfunc_called(this, "_ZN6S778C43v90Ev");}
void  S778C4 ::v91(){vfunc_called(this, "_ZN6S778C43v91Ev");}
void  S778C4 ::v92(){vfunc_called(this, "_ZN6S778C43v92Ev");}
void  S778C4 ::v93(){vfunc_called(this, "_ZN6S778C43v93Ev");}
void  S778C4 ::v94(){vfunc_called(this, "_ZN6S778C43v94Ev");}
void  S778C4 ::v95(){vfunc_called(this, "_ZN6S778C43v95Ev");}
void  S778C4 ::v96(){vfunc_called(this, "_ZN6S778C43v96Ev");}
void  S778C4 ::v97(){vfunc_called(this, "_ZN6S778C43v97Ev");}
void  S778C4 ::v98(){vfunc_called(this, "_ZN6S778C43v98Ev");}
void  S778C4 ::v99(){vfunc_called(this, "_ZN6S778C43v99Ev");}
void  S778C4 ::v100(){vfunc_called(this, "_ZN6S778C44v100Ev");}
void  S778C4 ::v101(){vfunc_called(this, "_ZN6S778C44v101Ev");}
void  S778C4 ::v102(){vfunc_called(this, "_ZN6S778C44v102Ev");}
void  S778C4 ::v103(){vfunc_called(this, "_ZN6S778C44v103Ev");}
void  S778C4 ::v104(){vfunc_called(this, "_ZN6S778C44v104Ev");}
void  S778C4 ::v105(){vfunc_called(this, "_ZN6S778C44v105Ev");}
void  S778C4 ::v106(){vfunc_called(this, "_ZN6S778C44v106Ev");}
void  S778C4 ::v107(){vfunc_called(this, "_ZN6S778C44v107Ev");}
void  S778C4 ::v108(){vfunc_called(this, "_ZN6S778C44v108Ev");}
void  S778C4 ::v109(){vfunc_called(this, "_ZN6S778C44v109Ev");}
void  S778C4 ::v110(){vfunc_called(this, "_ZN6S778C44v110Ev");}
void  S778C4 ::v111(){vfunc_called(this, "_ZN6S778C44v111Ev");}
void  S778C4 ::v112(){vfunc_called(this, "_ZN6S778C44v112Ev");}
void  S778C4 ::v113(){vfunc_called(this, "_ZN6S778C44v113Ev");}
void  S778C4 ::v114(){vfunc_called(this, "_ZN6S778C44v114Ev");}
void  S778C4 ::v115(){vfunc_called(this, "_ZN6S778C44v115Ev");}
void  S778C4 ::v116(){vfunc_called(this, "_ZN6S778C44v116Ev");}
void  S778C4 ::v117(){vfunc_called(this, "_ZN6S778C44v117Ev");}
void  S778C4 ::v118(){vfunc_called(this, "_ZN6S778C44v118Ev");}
void  S778C4 ::v119(){vfunc_called(this, "_ZN6S778C44v119Ev");}
void  S778C4 ::v120(){vfunc_called(this, "_ZN6S778C44v120Ev");}
void  S778C4 ::v121(){vfunc_called(this, "_ZN6S778C44v121Ev");}
void  S778C4 ::v122(){vfunc_called(this, "_ZN6S778C44v122Ev");}
void  S778C4 ::v123(){vfunc_called(this, "_ZN6S778C44v123Ev");}
void  S778C4 ::v124(){vfunc_called(this, "_ZN6S778C44v124Ev");}
void  S778C4 ::v125(){vfunc_called(this, "_ZN6S778C44v125Ev");}
void  S778C4 ::v126(){vfunc_called(this, "_ZN6S778C44v126Ev");}
void  S778C4 ::v127(){vfunc_called(this, "_ZN6S778C44v127Ev");}
void  S778C4 ::v128(){vfunc_called(this, "_ZN6S778C44v128Ev");}
void  S778C4 ::v129(){vfunc_called(this, "_ZN6S778C44v129Ev");}
void  S778C4 ::v130(){vfunc_called(this, "_ZN6S778C44v130Ev");}
void  S778C4 ::v131(){vfunc_called(this, "_ZN6S778C44v131Ev");}
void  S778C4 ::v132(){vfunc_called(this, "_ZN6S778C44v132Ev");}
void  S778C4 ::v133(){vfunc_called(this, "_ZN6S778C44v133Ev");}
S778C4 ::~S778C4(){ note_dtor("S778C4", this);} // tgen
S778C4 ::S778C4(){ note_ctor("S778C4", this);} // tgen

static void Test_S778C4()
{
  extern Class_Descriptor cd_S778C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S778C4, buf);
    S778C4 *dp, &lv = *(dp=new (buf) S778C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S778C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S778C4)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S778C4");
    test_class_info(&lv, &cd_S778C4);
    dp->~S778C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS778C4(Test_S778C4, "S778C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S778C4C1Ev();
extern void _ZN6S778C4D1Ev();
Name_Map name_map_S778C4[] = {
  NSPAIR(_ZN6S778C4C1Ev),
  NSPAIR(_ZN6S778C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S778C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S778C4[];
extern void _ZN6S778C4D1Ev();
extern void _ZN6S778C4D0Ev();
extern void _ZN6S778C43v12Ev();
extern void _ZN6S778C43v13Ev();
extern void _ZN6S778C43v14Ev();
extern void _ZN6S778C43v15Ev();
extern void _ZN6S778C43v16Ev();
extern void _ZN6S778C43v17Ev();
extern void _ZN6S778C43v18Ev();
extern void _ZN6S778C43v19Ev();
extern void _ZN6S778C43v20Ev();
extern void _ZN6S778C43v21Ev();
extern void _ZN6S778C43v22Ev();
extern void _ZN6S778C43v23Ev();
extern void _ZN6S778C43v24Ev();
extern void _ZN6S778C43v25Ev();
extern void _ZN6S778C43v26Ev();
extern void _ZN6S778C43v27Ev();
extern void _ZN6S778C43v28Ev();
extern void _ZN6S778C43v29Ev();
extern void _ZN6S778C43v30Ev();
extern void _ZN6S778C43v31Ev();
extern void _ZN6S778C43v32Ev();
extern void _ZN6S778C43v33Ev();
extern void _ZN6S778C43v34Ev();
extern void _ZN6S778C43v35Ev();
extern void _ZN6S778C43v36Ev();
extern void _ZN6S778C43v37Ev();
extern void _ZN6S778C43v38Ev();
extern void _ZN6S778C43v39Ev();
extern void _ZN6S778C43v40Ev();
extern void _ZN6S778C43v41Ev();
extern void _ZN6S778C43v42Ev();
extern void _ZN6S778C43v43Ev();
extern void _ZN6S778C43v44Ev();
extern void _ZN6S778C43v45Ev();
extern void _ZN6S778C43v46Ev();
extern void _ZN6S778C43v47Ev();
extern void _ZN6S778C43v48Ev();
extern void _ZN6S778C43v49Ev();
extern void _ZN6S778C43v50Ev();
extern void _ZN6S778C43v51Ev();
extern void _ZN6S778C43v52Ev();
extern void _ZN6S778C43v53Ev();
extern void _ZN6S778C43v54Ev();
extern void _ZN6S778C43v55Ev();
extern void _ZN6S778C43v56Ev();
extern void _ZN6S778C43v57Ev();
extern void _ZN6S778C43v58Ev();
extern void _ZN6S778C43v59Ev();
extern void _ZN6S778C43v60Ev();
extern void _ZN6S778C43v61Ev();
extern void _ZN6S778C43v62Ev();
extern void _ZN6S778C43v63Ev();
extern void _ZN6S778C43v64Ev();
extern void _ZN6S778C43v65Ev();
extern void _ZN6S778C43v66Ev();
extern void _ZN6S778C43v67Ev();
extern void _ZN6S778C43v68Ev();
extern void _ZN6S778C43v69Ev();
extern void _ZN6S778C43v70Ev();
extern void _ZN6S778C43v71Ev();
extern void _ZN6S778C43v72Ev();
extern void _ZN6S778C43v73Ev();
extern void _ZN6S778C43v74Ev();
extern void _ZN6S778C43v75Ev();
extern void _ZN6S778C43v76Ev();
extern void _ZN6S778C43v77Ev();
extern void _ZN6S778C43v78Ev();
extern void _ZN6S778C43v79Ev();
extern void _ZN6S778C43v80Ev();
extern void _ZN6S778C43v81Ev();
extern void _ZN6S778C43v82Ev();
extern void _ZN6S778C43v83Ev();
extern void _ZN6S778C43v84Ev();
extern void _ZN6S778C43v85Ev();
extern void _ZN6S778C43v86Ev();
extern void _ZN6S778C43v87Ev();
extern void _ZN6S778C43v88Ev();
extern void _ZN6S778C43v89Ev();
extern void _ZN6S778C43v90Ev();
extern void _ZN6S778C43v91Ev();
extern void _ZN6S778C43v92Ev();
extern void _ZN6S778C43v93Ev();
extern void _ZN6S778C43v94Ev();
extern void _ZN6S778C43v95Ev();
extern void _ZN6S778C43v96Ev();
extern void _ZN6S778C43v97Ev();
extern void _ZN6S778C43v98Ev();
extern void _ZN6S778C43v99Ev();
extern void _ZN6S778C44v100Ev();
extern void _ZN6S778C44v101Ev();
extern void _ZN6S778C44v102Ev();
extern void _ZN6S778C44v103Ev();
extern void _ZN6S778C44v104Ev();
extern void _ZN6S778C44v105Ev();
extern void _ZN6S778C44v106Ev();
extern void _ZN6S778C44v107Ev();
extern void _ZN6S778C44v108Ev();
extern void _ZN6S778C44v109Ev();
extern void _ZN6S778C44v110Ev();
extern void _ZN6S778C44v111Ev();
extern void _ZN6S778C44v112Ev();
extern void _ZN6S778C44v113Ev();
extern void _ZN6S778C44v114Ev();
extern void _ZN6S778C44v115Ev();
extern void _ZN6S778C44v116Ev();
extern void _ZN6S778C44v117Ev();
extern void _ZN6S778C44v118Ev();
extern void _ZN6S778C44v119Ev();
extern void _ZN6S778C44v120Ev();
extern void _ZN6S778C44v121Ev();
extern void _ZN6S778C44v122Ev();
extern void _ZN6S778C44v123Ev();
extern void _ZN6S778C44v124Ev();
extern void _ZN6S778C44v125Ev();
extern void _ZN6S778C44v126Ev();
extern void _ZN6S778C44v127Ev();
extern void _ZN6S778C44v128Ev();
extern void _ZN6S778C44v129Ev();
extern void _ZN6S778C44v130Ev();
extern void _ZN6S778C44v131Ev();
extern void _ZN6S778C44v132Ev();
extern void _ZN6S778C44v133Ev();
static  VTBL_ENTRY vtc_S778C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S778C4[0]),
  (VTBL_ENTRY)&_ZN6S778C4D1Ev,
  (VTBL_ENTRY)&_ZN6S778C4D0Ev,
  (VTBL_ENTRY)&_ZN6S778C43v12Ev,
  (VTBL_ENTRY)&_ZN6S778C43v13Ev,
  (VTBL_ENTRY)&_ZN6S778C43v14Ev,
  (VTBL_ENTRY)&_ZN6S778C43v15Ev,
  (VTBL_ENTRY)&_ZN6S778C43v16Ev,
  (VTBL_ENTRY)&_ZN6S778C43v17Ev,
  (VTBL_ENTRY)&_ZN6S778C43v18Ev,
  (VTBL_ENTRY)&_ZN6S778C43v19Ev,
  (VTBL_ENTRY)&_ZN6S778C43v20Ev,
  (VTBL_ENTRY)&_ZN6S778C43v21Ev,
  (VTBL_ENTRY)&_ZN6S778C43v22Ev,
  (VTBL_ENTRY)&_ZN6S778C43v23Ev,
  (VTBL_ENTRY)&_ZN6S778C43v24Ev,
  (VTBL_ENTRY)&_ZN6S778C43v25Ev,
  (VTBL_ENTRY)&_ZN6S778C43v26Ev,
  (VTBL_ENTRY)&_ZN6S778C43v27Ev,
  (VTBL_ENTRY)&_ZN6S778C43v28Ev,
  (VTBL_ENTRY)&_ZN6S778C43v29Ev,
  (VTBL_ENTRY)&_ZN6S778C43v30Ev,
  (VTBL_ENTRY)&_ZN6S778C43v31Ev,
  (VTBL_ENTRY)&_ZN6S778C43v32Ev,
  (VTBL_ENTRY)&_ZN6S778C43v33Ev,
  (VTBL_ENTRY)&_ZN6S778C43v34Ev,
  (VTBL_ENTRY)&_ZN6S778C43v35Ev,
  (VTBL_ENTRY)&_ZN6S778C43v36Ev,
  (VTBL_ENTRY)&_ZN6S778C43v37Ev,
  (VTBL_ENTRY)&_ZN6S778C43v38Ev,
  (VTBL_ENTRY)&_ZN6S778C43v39Ev,
  (VTBL_ENTRY)&_ZN6S778C43v40Ev,
  (VTBL_ENTRY)&_ZN6S778C43v41Ev,
  (VTBL_ENTRY)&_ZN6S778C43v42Ev,
  (VTBL_ENTRY)&_ZN6S778C43v43Ev,
  (VTBL_ENTRY)&_ZN6S778C43v44Ev,
  (VTBL_ENTRY)&_ZN6S778C43v45Ev,
  (VTBL_ENTRY)&_ZN6S778C43v46Ev,
  (VTBL_ENTRY)&_ZN6S778C43v47Ev,
  (VTBL_ENTRY)&_ZN6S778C43v48Ev,
  (VTBL_ENTRY)&_ZN6S778C43v49Ev,
  (VTBL_ENTRY)&_ZN6S778C43v50Ev,
  (VTBL_ENTRY)&_ZN6S778C43v51Ev,
  (VTBL_ENTRY)&_ZN6S778C43v52Ev,
  (VTBL_ENTRY)&_ZN6S778C43v53Ev,
  (VTBL_ENTRY)&_ZN6S778C43v54Ev,
  (VTBL_ENTRY)&_ZN6S778C43v55Ev,
  (VTBL_ENTRY)&_ZN6S778C43v56Ev,
  (VTBL_ENTRY)&_ZN6S778C43v57Ev,
  (VTBL_ENTRY)&_ZN6S778C43v58Ev,
  (VTBL_ENTRY)&_ZN6S778C43v59Ev,
  (VTBL_ENTRY)&_ZN6S778C43v60Ev,
  (VTBL_ENTRY)&_ZN6S778C43v61Ev,
  (VTBL_ENTRY)&_ZN6S778C43v62Ev,
  (VTBL_ENTRY)&_ZN6S778C43v63Ev,
  (VTBL_ENTRY)&_ZN6S778C43v64Ev,
  (VTBL_ENTRY)&_ZN6S778C43v65Ev,
  (VTBL_ENTRY)&_ZN6S778C43v66Ev,
  (VTBL_ENTRY)&_ZN6S778C43v67Ev,
  (VTBL_ENTRY)&_ZN6S778C43v68Ev,
  (VTBL_ENTRY)&_ZN6S778C43v69Ev,
  (VTBL_ENTRY)&_ZN6S778C43v70Ev,
  (VTBL_ENTRY)&_ZN6S778C43v71Ev,
  (VTBL_ENTRY)&_ZN6S778C43v72Ev,
  (VTBL_ENTRY)&_ZN6S778C43v73Ev,
  (VTBL_ENTRY)&_ZN6S778C43v74Ev,
  (VTBL_ENTRY)&_ZN6S778C43v75Ev,
  (VTBL_ENTRY)&_ZN6S778C43v76Ev,
  (VTBL_ENTRY)&_ZN6S778C43v77Ev,
  (VTBL_ENTRY)&_ZN6S778C43v78Ev,
  (VTBL_ENTRY)&_ZN6S778C43v79Ev,
  (VTBL_ENTRY)&_ZN6S778C43v80Ev,
  (VTBL_ENTRY)&_ZN6S778C43v81Ev,
  (VTBL_ENTRY)&_ZN6S778C43v82Ev,
  (VTBL_ENTRY)&_ZN6S778C43v83Ev,
  (VTBL_ENTRY)&_ZN6S778C43v84Ev,
  (VTBL_ENTRY)&_ZN6S778C43v85Ev,
  (VTBL_ENTRY)&_ZN6S778C43v86Ev,
  (VTBL_ENTRY)&_ZN6S778C43v87Ev,
  (VTBL_ENTRY)&_ZN6S778C43v88Ev,
  (VTBL_ENTRY)&_ZN6S778C43v89Ev,
  (VTBL_ENTRY)&_ZN6S778C43v90Ev,
  (VTBL_ENTRY)&_ZN6S778C43v91Ev,
  (VTBL_ENTRY)&_ZN6S778C43v92Ev,
  (VTBL_ENTRY)&_ZN6S778C43v93Ev,
  (VTBL_ENTRY)&_ZN6S778C43v94Ev,
  (VTBL_ENTRY)&_ZN6S778C43v95Ev,
  (VTBL_ENTRY)&_ZN6S778C43v96Ev,
  (VTBL_ENTRY)&_ZN6S778C43v97Ev,
  (VTBL_ENTRY)&_ZN6S778C43v98Ev,
  (VTBL_ENTRY)&_ZN6S778C43v99Ev,
  (VTBL_ENTRY)&_ZN6S778C44v100Ev,
  (VTBL_ENTRY)&_ZN6S778C44v101Ev,
  (VTBL_ENTRY)&_ZN6S778C44v102Ev,
  (VTBL_ENTRY)&_ZN6S778C44v103Ev,
  (VTBL_ENTRY)&_ZN6S778C44v104Ev,
  (VTBL_ENTRY)&_ZN6S778C44v105Ev,
  (VTBL_ENTRY)&_ZN6S778C44v106Ev,
  (VTBL_ENTRY)&_ZN6S778C44v107Ev,
  (VTBL_ENTRY)&_ZN6S778C44v108Ev,
  (VTBL_ENTRY)&_ZN6S778C44v109Ev,
  (VTBL_ENTRY)&_ZN6S778C44v110Ev,
  (VTBL_ENTRY)&_ZN6S778C44v111Ev,
  (VTBL_ENTRY)&_ZN6S778C44v112Ev,
  (VTBL_ENTRY)&_ZN6S778C44v113Ev,
  (VTBL_ENTRY)&_ZN6S778C44v114Ev,
  (VTBL_ENTRY)&_ZN6S778C44v115Ev,
  (VTBL_ENTRY)&_ZN6S778C44v116Ev,
  (VTBL_ENTRY)&_ZN6S778C44v117Ev,
  (VTBL_ENTRY)&_ZN6S778C44v118Ev,
  (VTBL_ENTRY)&_ZN6S778C44v119Ev,
  (VTBL_ENTRY)&_ZN6S778C44v120Ev,
  (VTBL_ENTRY)&_ZN6S778C44v121Ev,
  (VTBL_ENTRY)&_ZN6S778C44v122Ev,
  (VTBL_ENTRY)&_ZN6S778C44v123Ev,
  (VTBL_ENTRY)&_ZN6S778C44v124Ev,
  (VTBL_ENTRY)&_ZN6S778C44v125Ev,
  (VTBL_ENTRY)&_ZN6S778C44v126Ev,
  (VTBL_ENTRY)&_ZN6S778C44v127Ev,
  (VTBL_ENTRY)&_ZN6S778C44v128Ev,
  (VTBL_ENTRY)&_ZN6S778C44v129Ev,
  (VTBL_ENTRY)&_ZN6S778C44v130Ev,
  (VTBL_ENTRY)&_ZN6S778C44v131Ev,
  (VTBL_ENTRY)&_ZN6S778C44v132Ev,
  (VTBL_ENTRY)&_ZN6S778C44v133Ev,
};
extern VTBL_ENTRY _ZTI6S778C4[];
extern  VTBL_ENTRY _ZTV6S778C4[];
Class_Descriptor cd_S778C4 = {  "S778C4", // class name
  bases_S778C4, 1,
  &(vtc_S778C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S778C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S778C4),126, //virtual function table var
  2, // 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  S778C3  : S778C4 {
  virtual void  v134(); // _ZN6S778C34v134Ev
  virtual void  v135(); // _ZN6S778C34v135Ev
  virtual void  v136(); // _ZN6S778C34v136Ev
  virtual void  v137(); // _ZN6S778C34v137Ev
  virtual void  v138(); // _ZN6S778C34v138Ev
  virtual void  v139(); // _ZN6S778C34v139Ev
  virtual void  v140(); // _ZN6S778C34v140Ev
  virtual void  v141(); // _ZN6S778C34v141Ev
  virtual void  v142(); // _ZN6S778C34v142Ev
  virtual void  v143(); // _ZN6S778C34v143Ev
  virtual void  v144(); // _ZN6S778C34v144Ev
  virtual void  v145(); // _ZN6S778C34v145Ev
  virtual void  v146(); // _ZN6S778C34v146Ev
  virtual void  v147(); // _ZN6S778C34v147Ev
  virtual void  v148(); // _ZN6S778C34v148Ev
  virtual void  v149(); // _ZN6S778C34v149Ev
  virtual void  v150(); // _ZN6S778C34v150Ev
  virtual void  v151(); // _ZN6S778C34v151Ev
  ~S778C3(); // tgen
  S778C3(); // tgen
};
//SIG(-1 S778C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S778C3 ::v134(){vfunc_called(this, "_ZN6S778C34v134Ev");}
void  S778C3 ::v135(){vfunc_called(this, "_ZN6S778C34v135Ev");}
void  S778C3 ::v136(){vfunc_called(this, "_ZN6S778C34v136Ev");}
void  S778C3 ::v137(){vfunc_called(this, "_ZN6S778C34v137Ev");}
void  S778C3 ::v138(){vfunc_called(this, "_ZN6S778C34v138Ev");}
void  S778C3 ::v139(){vfunc_called(this, "_ZN6S778C34v139Ev");}
void  S778C3 ::v140(){vfunc_called(this, "_ZN6S778C34v140Ev");}
void  S778C3 ::v141(){vfunc_called(this, "_ZN6S778C34v141Ev");}
void  S778C3 ::v142(){vfunc_called(this, "_ZN6S778C34v142Ev");}
void  S778C3 ::v143(){vfunc_called(this, "_ZN6S778C34v143Ev");}
void  S778C3 ::v144(){vfunc_called(this, "_ZN6S778C34v144Ev");}
void  S778C3 ::v145(){vfunc_called(this, "_ZN6S778C34v145Ev");}
void  S778C3 ::v146(){vfunc_called(this, "_ZN6S778C34v146Ev");}
void  S778C3 ::v147(){vfunc_called(this, "_ZN6S778C34v147Ev");}
void  S778C3 ::v148(){vfunc_called(this, "_ZN6S778C34v148Ev");}
void  S778C3 ::v149(){vfunc_called(this, "_ZN6S778C34v149Ev");}
void  S778C3 ::v150(){vfunc_called(this, "_ZN6S778C34v150Ev");}
void  S778C3 ::v151(){vfunc_called(this, "_ZN6S778C34v151Ev");}
S778C3 ::~S778C3(){ note_dtor("S778C3", this);} // tgen
S778C3 ::S778C3(){ note_ctor("S778C3", this);} // tgen

static void Test_S778C3()
{
  extern Class_Descriptor cd_S778C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S778C3, buf);
    S778C3 *dp, &lv = *(dp=new (buf) S778C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S778C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S778C3)");
    check_base_class_offset(lv, (S785C5_nt*)(S778C4*), 0, "S778C3");
    check_base_class_offset(lv, (S778C4*), 0, "S778C3");
    test_class_info(&lv, &cd_S778C3);
    dp->~S778C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS778C3(Test_S778C3, "S778C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S778C3C1Ev();
extern void _ZN6S778C3D1Ev();
Name_Map name_map_S778C3[] = {
  NSPAIR(_ZN6S778C3C1Ev),
  NSPAIR(_ZN6S778C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S778C4;
extern VTBL_ENTRY _ZTI6S778C4[];
extern  VTBL_ENTRY _ZTV6S778C4[];
static Base_Class bases_S778C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S778C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S778C3[];
extern void _ZN6S778C3D1Ev();
extern void _ZN6S778C3D0Ev();
extern void _ZN6S778C43v12Ev();
extern void _ZN6S778C43v13Ev();
extern void _ZN6S778C43v14Ev();
extern void _ZN6S778C43v15Ev();
extern void _ZN6S778C43v16Ev();
extern void _ZN6S778C43v17Ev();
extern void _ZN6S778C43v18Ev();
extern void _ZN6S778C43v19Ev();
extern void _ZN6S778C43v20Ev();
extern void _ZN6S778C43v21Ev();
extern void _ZN6S778C43v22Ev();
extern void _ZN6S778C43v23Ev();
extern void _ZN6S778C43v24Ev();
extern void _ZN6S778C43v25Ev();
extern void _ZN6S778C43v26Ev();
extern void _ZN6S778C43v27Ev();
extern void _ZN6S778C43v28Ev();
extern void _ZN6S778C43v29Ev();
extern void _ZN6S778C43v30Ev();
extern void _ZN6S778C43v31Ev();
extern void _ZN6S778C43v32Ev();
extern void _ZN6S778C43v33Ev();
extern void _ZN6S778C43v34Ev();
extern void _ZN6S778C43v35Ev();
extern void _ZN6S778C43v36Ev();
extern void _ZN6S778C43v37Ev();
extern void _ZN6S778C43v38Ev();
extern void _ZN6S778C43v39Ev();
extern void _ZN6S778C43v40Ev();
extern void _ZN6S778C43v41Ev();
extern void _ZN6S778C43v42Ev();
extern void _ZN6S778C43v43Ev();
extern void _ZN6S778C43v44Ev();
extern void _ZN6S778C43v45Ev();
extern void _ZN6S778C43v46Ev();
extern void _ZN6S778C43v47Ev();
extern void _ZN6S778C43v48Ev();
extern void _ZN6S778C43v49Ev();
extern void _ZN6S778C43v50Ev();
extern void _ZN6S778C43v51Ev();
extern void _ZN6S778C43v52Ev();
extern void _ZN6S778C43v53Ev();
extern void _ZN6S778C43v54Ev();
extern void _ZN6S778C43v55Ev();
extern void _ZN6S778C43v56Ev();
extern void _ZN6S778C43v57Ev();
extern void _ZN6S778C43v58Ev();
extern void _ZN6S778C43v59Ev();
extern void _ZN6S778C43v60Ev();
extern void _ZN6S778C43v61Ev();
extern void _ZN6S778C43v62Ev();
extern void _ZN6S778C43v63Ev();
extern void _ZN6S778C43v64Ev();
extern void _ZN6S778C43v65Ev();
extern void _ZN6S778C43v66Ev();
extern void _ZN6S778C43v67Ev();
extern void _ZN6S778C43v68Ev();
extern void _ZN6S778C43v69Ev();
extern void _ZN6S778C43v70Ev();
extern void _ZN6S778C43v71Ev();
extern void _ZN6S778C43v72Ev();
extern void _ZN6S778C43v73Ev();
extern void _ZN6S778C43v74Ev();
extern void _ZN6S778C43v75Ev();
extern void _ZN6S778C43v76Ev();
extern void _ZN6S778C43v77Ev();
extern void _ZN6S778C43v78Ev();
extern void _ZN6S778C43v79Ev();
extern void _ZN6S778C43v80Ev();
extern void _ZN6S778C43v81Ev();
extern void _ZN6S778C43v82Ev();
extern void _ZN6S778C43v83Ev();
extern void _ZN6S778C43v84Ev();
extern void _ZN6S778C43v85Ev();
extern void _ZN6S778C43v86Ev();
extern void _ZN6S778C43v87Ev();
extern void _ZN6S778C43v88Ev();
extern void _ZN6S778C43v89Ev();
extern void _ZN6S778C43v90Ev();
extern void _ZN6S778C43v91Ev();
extern void _ZN6S778C43v92Ev();
extern void _ZN6S778C43v93Ev();
extern void _ZN6S778C43v94Ev();
extern void _ZN6S778C43v95Ev();
extern void _ZN6S778C43v96Ev();
extern void _ZN6S778C43v97Ev();
extern void _ZN6S778C43v98Ev();
extern void _ZN6S778C43v99Ev();
extern void _ZN6S778C44v100Ev();
extern void _ZN6S778C44v101Ev();
extern void _ZN6S778C44v102Ev();
extern void _ZN6S778C44v103Ev();
extern void _ZN6S778C44v104Ev();
extern void _ZN6S778C44v105Ev();
extern void _ZN6S778C44v106Ev();
extern void _ZN6S778C44v107Ev();
extern void _ZN6S778C44v108Ev();
extern void _ZN6S778C44v109Ev();
extern void _ZN6S778C44v110Ev();
extern void _ZN6S778C44v111Ev();
extern void _ZN6S778C44v112Ev();
extern void _ZN6S778C44v113Ev();
extern void _ZN6S778C44v114Ev();
extern void _ZN6S778C44v115Ev();
extern void _ZN6S778C44v116Ev();
extern void _ZN6S778C44v117Ev();
extern void _ZN6S778C44v118Ev();
extern void _ZN6S778C44v119Ev();
extern void _ZN6S778C44v120Ev();
extern void _ZN6S778C44v121Ev();
extern void _ZN6S778C44v122Ev();
extern void _ZN6S778C44v123Ev();
extern void _ZN6S778C44v124Ev();
extern void _ZN6S778C44v125Ev();
extern void _ZN6S778C44v126Ev();
extern void _ZN6S778C44v127Ev();
extern void _ZN6S778C44v128Ev();
extern void _ZN6S778C44v129Ev();
extern void _ZN6S778C44v130Ev();
extern void _ZN6S778C44v131Ev();
extern void _ZN6S778C44v132Ev();
extern void _ZN6S778C44v133Ev();
extern void _ZN6S778C34v134Ev();
extern void _ZN6S778C34v135Ev();
extern void _ZN6S778C34v136Ev();
extern void _ZN6S778C34v137Ev();
extern void _ZN6S778C34v138Ev();
extern void _ZN6S778C34v139Ev();
extern void _ZN6S778C34v140Ev();
extern void _ZN6S778C34v141Ev();
extern void _ZN6S778C34v142Ev();
extern void _ZN6S778C34v143Ev();
extern void _ZN6S778C34v144Ev();
extern void _ZN6S778C34v145Ev();
extern void _ZN6S778C34v146Ev();
extern void _ZN6S778C34v147Ev();
extern void _ZN6S778C34v148Ev();
extern void _ZN6S778C34v149Ev();
extern void _ZN6S778C34v150Ev();
extern void _ZN6S778C34v151Ev();
static  VTBL_ENTRY vtc_S778C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S778C3[0]),
  (VTBL_ENTRY)&_ZN6S778C3D1Ev,
  (VTBL_ENTRY)&_ZN6S778C3D0Ev,
  (VTBL_ENTRY)&_ZN6S778C43v12Ev,
  (VTBL_ENTRY)&_ZN6S778C43v13Ev,
  (VTBL_ENTRY)&_ZN6S778C43v14Ev,
  (VTBL_ENTRY)&_ZN6S778C43v15Ev,
  (VTBL_ENTRY)&_ZN6S778C43v16Ev,
  (VTBL_ENTRY)&_ZN6S778C43v17Ev,
  (VTBL_ENTRY)&_ZN6S778C43v18Ev,
  (VTBL_ENTRY)&_ZN6S778C43v19Ev,
  (VTBL_ENTRY)&_ZN6S778C43v20Ev,
  (VTBL_ENTRY)&_ZN6S778C43v21Ev,
  (VTBL_ENTRY)&_ZN6S778C43v22Ev,
  (VTBL_ENTRY)&_ZN6S778C43v23Ev,
  (VTBL_ENTRY)&_ZN6S778C43v24Ev,
  (VTBL_ENTRY)&_ZN6S778C43v25Ev,
  (VTBL_ENTRY)&_ZN6S778C43v26Ev,
  (VTBL_ENTRY)&_ZN6S778C43v27Ev,
  (VTBL_ENTRY)&_ZN6S778C43v28Ev,
  (VTBL_ENTRY)&_ZN6S778C43v29Ev,
  (VTBL_ENTRY)&_ZN6S778C43v30Ev,
  (VTBL_ENTRY)&_ZN6S778C43v31Ev,
  (VTBL_ENTRY)&_ZN6S778C43v32Ev,
  (VTBL_ENTRY)&_ZN6S778C43v33Ev,
  (VTBL_ENTRY)&_ZN6S778C43v34Ev,
  (VTBL_ENTRY)&_ZN6S778C43v35Ev,
  (VTBL_ENTRY)&_ZN6S778C43v36Ev,
  (VTBL_ENTRY)&_ZN6S778C43v37Ev,
  (VTBL_ENTRY)&_ZN6S778C43v38Ev,
  (VTBL_ENTRY)&_ZN6S778C43v39Ev,
  (VTBL_ENTRY)&_ZN6S778C43v40Ev,
  (VTBL_ENTRY)&_ZN6S778C43v41Ev,
  (VTBL_ENTRY)&_ZN6S778C43v42Ev,
  (VTBL_ENTRY)&_ZN6S778C43v43Ev,
  (VTBL_ENTRY)&_ZN6S778C43v44Ev,
  (VTBL_ENTRY)&_ZN6S778C43v45Ev,
  (VTBL_ENTRY)&_ZN6S778C43v46Ev,
  (VTBL_ENTRY)&_ZN6S778C43v47Ev,
  (VTBL_ENTRY)&_ZN6S778C43v48Ev,
  (VTBL_ENTRY)&_ZN6S778C43v49Ev,
  (VTBL_ENTRY)&_ZN6S778C43v50Ev,
  (VTBL_ENTRY)&_ZN6S778C43v51Ev,
  (VTBL_ENTRY)&_ZN6S778C43v52Ev,
  (VTBL_ENTRY)&_ZN6S778C43v53Ev,
  (VTBL_ENTRY)&_ZN6S778C43v54Ev,
  (VTBL_ENTRY)&_ZN6S778C43v55Ev,
  (VTBL_ENTRY)&_ZN6S778C43v56Ev,
  (VTBL_ENTRY)&_ZN6S778C43v57Ev,
  (VTBL_ENTRY)&_ZN6S778C43v58Ev,
  (VTBL_ENTRY)&_ZN6S778C43v59Ev,
  (VTBL_ENTRY)&_ZN6S778C43v60Ev,
  (VTBL_ENTRY)&_ZN6S778C43v61Ev,
  (VTBL_ENTRY)&_ZN6S778C43v62Ev,
  (VTBL_ENTRY)&_ZN6S778C43v63Ev,
  (VTBL_ENTRY)&_ZN6S778C43v64Ev,
  (VTBL_ENTRY)&_ZN6S778C43v65Ev,
  (VTBL_ENTRY)&_ZN6S778C43v66Ev,
  (VTBL_ENTRY)&_ZN6S778C43v67Ev,
  (VTBL_ENTRY)&_ZN6S778C43v68Ev,
  (VTBL_ENTRY)&_ZN6S778C43v69Ev,
  (VTBL_ENTRY)&_ZN6S778C43v70Ev,
  (VTBL_ENTRY)&_ZN6S778C43v71Ev,
  (VTBL_ENTRY)&_ZN6S778C43v72Ev,
  (VTBL_ENTRY)&_ZN6S778C43v73Ev,
  (VTBL_ENTRY)&_ZN6S778C43v74Ev,
  (VTBL_ENTRY)&_ZN6S778C43v75Ev,
  (VTBL_ENTRY)&_ZN6S778C43v76Ev,
  (VTBL_ENTRY)&_ZN6S778C43v77Ev,
  (VTBL_ENTRY)&_ZN6S778C43v78Ev,
  (VTBL_ENTRY)&_ZN6S778C43v79Ev,
  (VTBL_ENTRY)&_ZN6S778C43v80Ev,
  (VTBL_ENTRY)&_ZN6S778C43v81Ev,
  (VTBL_ENTRY)&_ZN6S778C43v82Ev,
  (VTBL_ENTRY)&_ZN6S778C43v83Ev,
  (VTBL_ENTRY)&_ZN6S778C43v84Ev,
  (VTBL_ENTRY)&_ZN6S778C43v85Ev,
  (VTBL_ENTRY)&_ZN6S778C43v86Ev,
  (VTBL_ENTRY)&_ZN6S778C43v87Ev,
  (VTBL_ENTRY)&_ZN6S778C43v88Ev,
  (VTBL_ENTRY)&_ZN6S778C43v89Ev,
  (VTBL_ENTRY)&_ZN6S778C43v90Ev,
  (VTBL_ENTRY)&_ZN6S778C43v91Ev,
  (VTBL_ENTRY)&_ZN6S778C43v92Ev,
  (VTBL_ENTRY)&_ZN6S778C43v93Ev,
  (VTBL_ENTRY)&_ZN6S778C43v94Ev,
  (VTBL_ENTRY)&_ZN6S778C43v95Ev,
  (VTBL_ENTRY)&_ZN6S778C43v96Ev,
  (VTBL_ENTRY)&_ZN6S778C43v97Ev,
  (VTBL_ENTRY)&_ZN6S778C43v98Ev,
  (VTBL_ENTRY)&_ZN6S778C43v99Ev,
  (VTBL_ENTRY)&_ZN6S778C44v100Ev,
  (VTBL_ENTRY)&_ZN6S778C44v101Ev,
  (VTBL_ENTRY)&_ZN6S778C44v102Ev,
  (VTBL_ENTRY)&_ZN6S778C44v103Ev,
  (VTBL_ENTRY)&_ZN6S778C44v104Ev,
  (VTBL_ENTRY)&_ZN6S778C44v105Ev,
  (VTBL_ENTRY)&_ZN6S778C44v106Ev,
  (VTBL_ENTRY)&_ZN6S778C44v107Ev,
  (VTBL_ENTRY)&_ZN6S778C44v108Ev,
  (VTBL_ENTRY)&_ZN6S778C44v109Ev,
  (VTBL_ENTRY)&_ZN6S778C44v110Ev,
  (VTBL_ENTRY)&_ZN6S778C44v111Ev,
  (VTBL_ENTRY)&_ZN6S778C44v112Ev,
  (VTBL_ENTRY)&_ZN6S778C44v113Ev,
  (VTBL_ENTRY)&_ZN6S778C44v114Ev,
  (VTBL_ENTRY)&_ZN6S778C44v115Ev,
  (VTBL_ENTRY)&_ZN6S778C44v116Ev,
  (VTBL_ENTRY)&_ZN6S778C44v117Ev,
  (VTBL_ENTRY)&_ZN6S778C44v118Ev,
  (VTBL_ENTRY)&_ZN6S778C44v119Ev,
  (VTBL_ENTRY)&_ZN6S778C44v120Ev,
  (VTBL_ENTRY)&_ZN6S778C44v121Ev,
  (VTBL_ENTRY)&_ZN6S778C44v122Ev,
  (VTBL_ENTRY)&_ZN6S778C44v123Ev,
  (VTBL_ENTRY)&_ZN6S778C44v124Ev,
  (VTBL_ENTRY)&_ZN6S778C44v125Ev,
  (VTBL_ENTRY)&_ZN6S778C44v126Ev,
  (VTBL_ENTRY)&_ZN6S778C44v127Ev,
  (VTBL_ENTRY)&_ZN6S778C44v128Ev,
  (VTBL_ENTRY)&_ZN6S778C44v129Ev,
  (VTBL_ENTRY)&_ZN6S778C44v130Ev,
  (VTBL_ENTRY)&_ZN6S778C44v131Ev,
  (VTBL_ENTRY)&_ZN6S778C44v132Ev,
  (VTBL_ENTRY)&_ZN6S778C44v133Ev,
  (VTBL_ENTRY)&_ZN6S778C34v134Ev,
  (VTBL_ENTRY)&_ZN6S778C34v135Ev,
  (VTBL_ENTRY)&_ZN6S778C34v136Ev,
  (VTBL_ENTRY)&_ZN6S778C34v137Ev,
  (VTBL_ENTRY)&_ZN6S778C34v138Ev,
  (VTBL_ENTRY)&_ZN6S778C34v139Ev,
  (VTBL_ENTRY)&_ZN6S778C34v140Ev,
  (VTBL_ENTRY)&_ZN6S778C34v141Ev,
  (VTBL_ENTRY)&_ZN6S778C34v142Ev,
  (VTBL_ENTRY)&_ZN6S778C34v143Ev,
  (VTBL_ENTRY)&_ZN6S778C34v144Ev,
  (VTBL_ENTRY)&_ZN6S778C34v145Ev,
  (VTBL_ENTRY)&_ZN6S778C34v146Ev,
  (VTBL_ENTRY)&_ZN6S778C34v147Ev,
  (VTBL_ENTRY)&_ZN6S778C34v148Ev,
  (VTBL_ENTRY)&_ZN6S778C34v149Ev,
  (VTBL_ENTRY)&_ZN6S778C34v150Ev,
  (VTBL_ENTRY)&_ZN6S778C34v151Ev,
};
extern VTBL_ENTRY _ZTI6S778C3[];
extern  VTBL_ENTRY _ZTV6S778C3[];
Class_Descriptor cd_S778C3 = {  "S778C3", // class name
  bases_S778C3, 2,
  &(vtc_S778C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S778C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S778C3),144, //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  S778C2  : S778C3 {
  virtual void  v152(); // _ZN6S778C24v152Ev
  ~S778C2(); // tgen
  S778C2(); // tgen
};
//SIG(-1 S778C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


void  S778C2 ::v152(){vfunc_called(this, "_ZN6S778C24v152Ev");}
S778C2 ::~S778C2(){ note_dtor("S778C2", this);} // tgen
S778C2 ::S778C2(){ note_ctor("S778C2", this);} // tgen

static void Test_S778C2()
{
  extern Class_Descriptor cd_S778C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S778C2, buf);
    S778C2 *dp, &lv = *(dp=new (buf) S778C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S778C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S778C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S778C4*)(S778C3*), 0, "S778C2");
    check_base_class_offset(lv, (S778C4*)(S778C3*), 0, "S778C2");
    check_base_class_offset(lv, (S778C3*), 0, "S778C2");
    test_class_info(&lv, &cd_S778C2);
    dp->~S778C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS778C2(Test_S778C2, "S778C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S778C2C1Ev();
extern void _ZN6S778C2D1Ev();
Name_Map name_map_S778C2[] = {
  NSPAIR(_ZN6S778C2C1Ev),
  NSPAIR(_ZN6S778C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S778C4;
extern VTBL_ENTRY _ZTI6S778C4[];
extern  VTBL_ENTRY _ZTV6S778C4[];
extern Class_Descriptor cd_S778C3;
extern VTBL_ENTRY _ZTI6S778C3[];
extern  VTBL_ENTRY _ZTV6S778C3[];
static Base_Class bases_S778C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S778C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S778C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S778C2[];
extern void _ZN6S778C2D1Ev();
extern void _ZN6S778C2D0Ev();
extern void _ZN6S778C43v12Ev();
extern void _ZN6S778C43v13Ev();
extern void _ZN6S778C43v14Ev();
extern void _ZN6S778C43v15Ev();
extern void _ZN6S778C43v16Ev();
extern void _ZN6S778C43v17Ev();
extern void _ZN6S778C43v18Ev();
extern void _ZN6S778C43v19Ev();
extern void _ZN6S778C43v20Ev();
extern void _ZN6S778C43v21Ev();
extern void _ZN6S778C43v22Ev();
extern void _ZN6S778C43v23Ev();
extern void _ZN6S778C43v24Ev();
extern void _ZN6S778C43v25Ev();
extern void _ZN6S778C43v26Ev();
extern void _ZN6S778C43v27Ev();
extern void _ZN6S778C43v28Ev();
extern void _ZN6S778C43v29Ev();
extern void _ZN6S778C43v30Ev();
extern void _ZN6S778C43v31Ev();
extern void _ZN6S778C43v32Ev();
extern void _ZN6S778C43v33Ev();
extern void _ZN6S778C43v34Ev();
extern void _ZN6S778C43v35Ev();
extern void _ZN6S778C43v36Ev();
extern void _ZN6S778C43v37Ev();
extern void _ZN6S778C43v38Ev();
extern void _ZN6S778C43v39Ev();
extern void _ZN6S778C43v40Ev();
extern void _ZN6S778C43v41Ev();
extern void _ZN6S778C43v42Ev();
extern void _ZN6S778C43v43Ev();
extern void _ZN6S778C43v44Ev();
extern void _ZN6S778C43v45Ev();
extern void _ZN6S778C43v46Ev();
extern void _ZN6S778C43v47Ev();
extern void _ZN6S778C43v48Ev();
extern void _ZN6S778C43v49Ev();
extern void _ZN6S778C43v50Ev();
extern void _ZN6S778C43v51Ev();
extern void _ZN6S778C43v52Ev();
extern void _ZN6S778C43v53Ev();
extern void _ZN6S778C43v54Ev();
extern void _ZN6S778C43v55Ev();
extern void _ZN6S778C43v56Ev();
extern void _ZN6S778C43v57Ev();
extern void _ZN6S778C43v58Ev();
extern void _ZN6S778C43v59Ev();
extern void _ZN6S778C43v60Ev();
extern void _ZN6S778C43v61Ev();
extern void _ZN6S778C43v62Ev();
extern void _ZN6S778C43v63Ev();
extern void _ZN6S778C43v64Ev();
extern void _ZN6S778C43v65Ev();
extern void _ZN6S778C43v66Ev();
extern void _ZN6S778C43v67Ev();
extern void _ZN6S778C43v68Ev();
extern void _ZN6S778C43v69Ev();
extern void _ZN6S778C43v70Ev();
extern void _ZN6S778C43v71Ev();
extern void _ZN6S778C43v72Ev();
extern void _ZN6S778C43v73Ev();
extern void _ZN6S778C43v74Ev();
extern void _ZN6S778C43v75Ev();
extern void _ZN6S778C43v76Ev();
extern void _ZN6S778C43v77Ev();
extern void _ZN6S778C43v78Ev();
extern void _ZN6S778C43v79Ev();
extern void _ZN6S778C43v80Ev();
extern void _ZN6S778C43v81Ev();
extern void _ZN6S778C43v82Ev();
extern void _ZN6S778C43v83Ev();
extern void _ZN6S778C43v84Ev();
extern void _ZN6S778C43v85Ev();
extern void _ZN6S778C43v86Ev();
extern void _ZN6S778C43v87Ev();
extern void _ZN6S778C43v88Ev();
extern void _ZN6S778C43v89Ev();
extern void _ZN6S778C43v90Ev();
extern void _ZN6S778C43v91Ev();
extern void _ZN6S778C43v92Ev();
extern void _ZN6S778C43v93Ev();
extern void _ZN6S778C43v94Ev();
extern void _ZN6S778C43v95Ev();
extern void _ZN6S778C43v96Ev();
extern void _ZN6S778C43v97Ev();
extern void _ZN6S778C43v98Ev();
extern void _ZN6S778C43v99Ev();
extern void _ZN6S778C44v100Ev();
extern void _ZN6S778C44v101Ev();
extern void _ZN6S778C44v102Ev();
extern void _ZN6S778C44v103Ev();
extern void _ZN6S778C44v104Ev();
extern void _ZN6S778C44v105Ev();
extern void _ZN6S778C44v106Ev();
extern void _ZN6S778C44v107Ev();
extern void _ZN6S778C44v108Ev();
extern void _ZN6S778C44v109Ev();
extern void _ZN6S778C44v110Ev();
extern void _ZN6S778C44v111Ev();
extern void _ZN6S778C44v112Ev();
extern void _ZN6S778C44v113Ev();
extern void _ZN6S778C44v114Ev();
extern void _ZN6S778C44v115Ev();
extern void _ZN6S778C44v116Ev();
extern void _ZN6S778C44v117Ev();
extern void _ZN6S778C44v118Ev();
extern void _ZN6S778C44v119Ev();
extern void _ZN6S778C44v120Ev();
extern void _ZN6S778C44v121Ev();
extern void _ZN6S778C44v122Ev();
extern void _ZN6S778C44v123Ev();
extern void _ZN6S778C44v124Ev();
extern void _ZN6S778C44v125Ev();
extern void _ZN6S778C44v126Ev();
extern void _ZN6S778C44v127Ev();
extern void _ZN6S778C44v128Ev();
extern void _ZN6S778C44v129Ev();
extern void _ZN6S778C44v130Ev();
extern void _ZN6S778C44v131Ev();
extern void _ZN6S778C44v132Ev();
extern void _ZN6S778C44v133Ev();
extern void _ZN6S778C34v134Ev();
extern void _ZN6S778C34v135Ev();
extern void _ZN6S778C34v136Ev();
extern void _ZN6S778C34v137Ev();
extern void _ZN6S778C34v138Ev();
extern void _ZN6S778C34v139Ev();
extern void _ZN6S778C34v140Ev();
extern void _ZN6S778C34v141Ev();
extern void _ZN6S778C34v142Ev();
extern void _ZN6S778C34v143Ev();
extern void _ZN6S778C34v144Ev();
extern void _ZN6S778C34v145Ev();
extern void _ZN6S778C34v146Ev();
extern void _ZN6S778C34v147Ev();
extern void _ZN6S778C34v148Ev();
extern void _ZN6S778C34v149Ev();
extern void _ZN6S778C34v150Ev();
extern void _ZN6S778C34v151Ev();
extern void _ZN6S778C24v152Ev();
static  VTBL_ENTRY vtc_S778C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S778C2[0]),
  (VTBL_ENTRY)&_ZN6S778C2D1Ev,
  (VTBL_ENTRY)&_ZN6S778C2D0Ev,
  (VTBL_ENTRY)&_ZN6S778C43v12Ev,
  (VTBL_ENTRY)&_ZN6S778C43v13Ev,
  (VTBL_ENTRY)&_ZN6S778C43v14Ev,
  (VTBL_ENTRY)&_ZN6S778C43v15Ev,
  (VTBL_ENTRY)&_ZN6S778C43v16Ev,
  (VTBL_ENTRY)&_ZN6S778C43v17Ev,
  (VTBL_ENTRY)&_ZN6S778C43v18Ev,
  (VTBL_ENTRY)&_ZN6S778C43v19Ev,
  (VTBL_ENTRY)&_ZN6S778C43v20Ev,
  (VTBL_ENTRY)&_ZN6S778C43v21Ev,
  (VTBL_ENTRY)&_ZN6S778C43v22Ev,
  (VTBL_ENTRY)&_ZN6S778C43v23Ev,
  (VTBL_ENTRY)&_ZN6S778C43v24Ev,
  (VTBL_ENTRY)&_ZN6S778C43v25Ev,
  (VTBL_ENTRY)&_ZN6S778C43v26Ev,
  (VTBL_ENTRY)&_ZN6S778C43v27Ev,
  (VTBL_ENTRY)&_ZN6S778C43v28Ev,
  (VTBL_ENTRY)&_ZN6S778C43v29Ev,
  (VTBL_ENTRY)&_ZN6S778C43v30Ev,
  (VTBL_ENTRY)&_ZN6S778C43v31Ev,
  (VTBL_ENTRY)&_ZN6S778C43v32Ev,
  (VTBL_ENTRY)&_ZN6S778C43v33Ev,
  (VTBL_ENTRY)&_ZN6S778C43v34Ev,
  (VTBL_ENTRY)&_ZN6S778C43v35Ev,
  (VTBL_ENTRY)&_ZN6S778C43v36Ev,
  (VTBL_ENTRY)&_ZN6S778C43v37Ev,
  (VTBL_ENTRY)&_ZN6S778C43v38Ev,
  (VTBL_ENTRY)&_ZN6S778C43v39Ev,
  (VTBL_ENTRY)&_ZN6S778C43v40Ev,
  (VTBL_ENTRY)&_ZN6S778C43v41Ev,
  (VTBL_ENTRY)&_ZN6S778C43v42Ev,
  (VTBL_ENTRY)&_ZN6S778C43v43Ev,
  (VTBL_ENTRY)&_ZN6S778C43v44Ev,
  (VTBL_ENTRY)&_ZN6S778C43v45Ev,
  (VTBL_ENTRY)&_ZN6S778C43v46Ev,
  (VTBL_ENTRY)&_ZN6S778C43v47Ev,
  (VTBL_ENTRY)&_ZN6S778C43v48Ev,
  (VTBL_ENTRY)&_ZN6S778C43v49Ev,
  (VTBL_ENTRY)&_ZN6S778C43v50Ev,
  (VTBL_ENTRY)&_ZN6S778C43v51Ev,
  (VTBL_ENTRY)&_ZN6S778C43v52Ev,
  (VTBL_ENTRY)&_ZN6S778C43v53Ev,
  (VTBL_ENTRY)&_ZN6S778C43v54Ev,
  (VTBL_ENTRY)&_ZN6S778C43v55Ev,
  (VTBL_ENTRY)&_ZN6S778C43v56Ev,
  (VTBL_ENTRY)&_ZN6S778C43v57Ev,
  (VTBL_ENTRY)&_ZN6S778C43v58Ev,
  (VTBL_ENTRY)&_ZN6S778C43v59Ev,
  (VTBL_ENTRY)&_ZN6S778C43v60Ev,
  (VTBL_ENTRY)&_ZN6S778C43v61Ev,
  (VTBL_ENTRY)&_ZN6S778C43v62Ev,
  (VTBL_ENTRY)&_ZN6S778C43v63Ev,
  (VTBL_ENTRY)&_ZN6S778C43v64Ev,
  (VTBL_ENTRY)&_ZN6S778C43v65Ev,
  (VTBL_ENTRY)&_ZN6S778C43v66Ev,
  (VTBL_ENTRY)&_ZN6S778C43v67Ev,
  (VTBL_ENTRY)&_ZN6S778C43v68Ev,
  (VTBL_ENTRY)&_ZN6S778C43v69Ev,
  (VTBL_ENTRY)&_ZN6S778C43v70Ev,
  (VTBL_ENTRY)&_ZN6S778C43v71Ev,
  (VTBL_ENTRY)&_ZN6S778C43v72Ev,
  (VTBL_ENTRY)&_ZN6S778C43v73Ev,
  (VTBL_ENTRY)&_ZN6S778C43v74Ev,
  (VTBL_ENTRY)&_ZN6S778C43v75Ev,
  (VTBL_ENTRY)&_ZN6S778C43v76Ev,
  (VTBL_ENTRY)&_ZN6S778C43v77Ev,
  (VTBL_ENTRY)&_ZN6S778C43v78Ev,
  (VTBL_ENTRY)&_ZN6S778C43v79Ev,
  (VTBL_ENTRY)&_ZN6S778C43v80Ev,
  (VTBL_ENTRY)&_ZN6S778C43v81Ev,
  (VTBL_ENTRY)&_ZN6S778C43v82Ev,
  (VTBL_ENTRY)&_ZN6S778C43v83Ev,
  (VTBL_ENTRY)&_ZN6S778C43v84Ev,
  (VTBL_ENTRY)&_ZN6S778C43v85Ev,
  (VTBL_ENTRY)&_ZN6S778C43v86Ev,
  (VTBL_ENTRY)&_ZN6S778C43v87Ev,
  (VTBL_ENTRY)&_ZN6S778C43v88Ev,
  (VTBL_ENTRY)&_ZN6S778C43v89Ev,
  (VTBL_ENTRY)&_ZN6S778C43v90Ev,
  (VTBL_ENTRY)&_ZN6S778C43v91Ev,
  (VTBL_ENTRY)&_ZN6S778C43v92Ev,
  (VTBL_ENTRY)&_ZN6S778C43v93Ev,
  (VTBL_ENTRY)&_ZN6S778C43v94Ev,
  (VTBL_ENTRY)&_ZN6S778C43v95Ev,
  (VTBL_ENTRY)&_ZN6S778C43v96Ev,
  (VTBL_ENTRY)&_ZN6S778C43v97Ev,
  (VTBL_ENTRY)&_ZN6S778C43v98Ev,
  (VTBL_ENTRY)&_ZN6S778C43v99Ev,
  (VTBL_ENTRY)&_ZN6S778C44v100Ev,
  (VTBL_ENTRY)&_ZN6S778C44v101Ev,
  (VTBL_ENTRY)&_ZN6S778C44v102Ev,
  (VTBL_ENTRY)&_ZN6S778C44v103Ev,
  (VTBL_ENTRY)&_ZN6S778C44v104Ev,
  (VTBL_ENTRY)&_ZN6S778C44v105Ev,
  (VTBL_ENTRY)&_ZN6S778C44v106Ev,
  (VTBL_ENTRY)&_ZN6S778C44v107Ev,
  (VTBL_ENTRY)&_ZN6S778C44v108Ev,
  (VTBL_ENTRY)&_ZN6S778C44v109Ev,
  (VTBL_ENTRY)&_ZN6S778C44v110Ev,
  (VTBL_ENTRY)&_ZN6S778C44v111Ev,
  (VTBL_ENTRY)&_ZN6S778C44v112Ev,
  (VTBL_ENTRY)&_ZN6S778C44v113Ev,
  (VTBL_ENTRY)&_ZN6S778C44v114Ev,
  (VTBL_ENTRY)&_ZN6S778C44v115Ev,
  (VTBL_ENTRY)&_ZN6S778C44v116Ev,
  (VTBL_ENTRY)&_ZN6S778C44v117Ev,
  (VTBL_ENTRY)&_ZN6S778C44v118Ev,
  (VTBL_ENTRY)&_ZN6S778C44v119Ev,
  (VTBL_ENTRY)&_ZN6S778C44v120Ev,
  (VTBL_ENTRY)&_ZN6S778C44v121Ev,
  (VTBL_ENTRY)&_ZN6S778C44v122Ev,
  (VTBL_ENTRY)&_ZN6S778C44v123Ev,
  (VTBL_ENTRY)&_ZN6S778C44v124Ev,
  (VTBL_ENTRY)&_ZN6S778C44v125Ev,
  (VTBL_ENTRY)&_ZN6S778C44v126Ev,
  (VTBL_ENTRY)&_ZN6S778C44v127Ev,
  (VTBL_ENTRY)&_ZN6S778C44v128Ev,
  (VTBL_ENTRY)&_ZN6S778C44v129Ev,
  (VTBL_ENTRY)&_ZN6S778C44v130Ev,
  (VTBL_ENTRY)&_ZN6S778C44v131Ev,
  (VTBL_ENTRY)&_ZN6S778C44v132Ev,
  (VTBL_ENTRY)&_ZN6S778C44v133Ev,
  (VTBL_ENTRY)&_ZN6S778C34v134Ev,
  (VTBL_ENTRY)&_ZN6S778C34v135Ev,
  (VTBL_ENTRY)&_ZN6S778C34v136Ev,
  (VTBL_ENTRY)&_ZN6S778C34v137Ev,
  (VTBL_ENTRY)&_ZN6S778C34v138Ev,
  (VTBL_ENTRY)&_ZN6S778C34v139Ev,
  (VTBL_ENTRY)&_ZN6S778C34v140Ev,
  (VTBL_ENTRY)&_ZN6S778C34v141Ev,
  (VTBL_ENTRY)&_ZN6S778C34v142Ev,
  (VTBL_ENTRY)&_ZN6S778C34v143Ev,
  (VTBL_ENTRY)&_ZN6S778C34v144Ev,
  (VTBL_ENTRY)&_ZN6S778C34v145Ev,
  (VTBL_ENTRY)&_ZN6S778C34v146Ev,
  (VTBL_ENTRY)&_ZN6S778C34v147Ev,
  (VTBL_ENTRY)&_ZN6S778C34v148Ev,
  (VTBL_ENTRY)&_ZN6S778C34v149Ev,
  (VTBL_ENTRY)&_ZN6S778C34v150Ev,
  (VTBL_ENTRY)&_ZN6S778C34v151Ev,
  (VTBL_ENTRY)&_ZN6S778C24v152Ev,
};
extern VTBL_ENTRY _ZTI6S778C2[];
extern  VTBL_ENTRY _ZTV6S778C2[];
Class_Descriptor cd_S778C2 = {  "S778C2", // class name
  bases_S778C2, 3,
  &(vtc_S778C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S778C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S778C2),145, //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  S778C1  : S778C2 {
  virtual void  v1(); // _ZN6S778C12v1Ev
  virtual void  v2(); // _ZN6S778C12v2Ev
  virtual void  v3(); // _ZN6S778C12v3Ev
  virtual void  v4(); // _ZN6S778C12v4Ev
  virtual void  v5(); // _ZN6S778C12v5Ev
  virtual void  v6(); // _ZN6S778C12v6Ev
  virtual void  v7(); // _ZN6S778C12v7Ev
  virtual void  v8(); // _ZN6S778C12v8Ev
  virtual void  v9(); // _ZN6S778C12v9Ev
  virtual void  v10(); // _ZN6S778C13v10Ev
  virtual void  v11(); // _ZN6S778C13v11Ev
  ~S778C1(); // tgen
  S778C1(); // tgen
};
//SIG(1 S778C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 v144 v145 v146 v147 v148 v149 v150 v151} v152} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


void  S778C1 ::v1(){vfunc_called(this, "_ZN6S778C12v1Ev");}
void  S778C1 ::v2(){vfunc_called(this, "_ZN6S778C12v2Ev");}
void  S778C1 ::v3(){vfunc_called(this, "_ZN6S778C12v3Ev");}
void  S778C1 ::v4(){vfunc_called(this, "_ZN6S778C12v4Ev");}
void  S778C1 ::v5(){vfunc_called(this, "_ZN6S778C12v5Ev");}
void  S778C1 ::v6(){vfunc_called(this, "_ZN6S778C12v6Ev");}
void  S778C1 ::v7(){vfunc_called(this, "_ZN6S778C12v7Ev");}
void  S778C1 ::v8(){vfunc_called(this, "_ZN6S778C12v8Ev");}
void  S778C1 ::v9(){vfunc_called(this, "_ZN6S778C12v9Ev");}
void  S778C1 ::v10(){vfunc_called(this, "_ZN6S778C13v10Ev");}
void  S778C1 ::v11(){vfunc_called(this, "_ZN6S778C13v11Ev");}
S778C1 ::~S778C1(){ note_dtor("S778C1", this);} // tgen
S778C1 ::S778C1(){ note_ctor("S778C1", this);} // tgen

static void Test_S778C1()
{
  extern Class_Descriptor cd_S778C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S778C1, buf);
    S778C1 *dp, &lv = *(dp=new (buf) S778C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S778C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S778C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S778C4*)(S778C3*)(S778C2*), 0, "S778C1");
    check_base_class_offset(lv, (S778C4*)(S778C3*)(S778C2*), 0, "S778C1");
    check_base_class_offset(lv, (S778C3*)(S778C2*), 0, "S778C1");
    check_base_class_offset(lv, (S778C2*), 0, "S778C1");
    test_class_info(&lv, &cd_S778C1);
    dp->~S778C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS778C1(Test_S778C1, "S778C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S778C1C1Ev();
extern void _ZN6S778C1D1Ev();
Name_Map name_map_S778C1[] = {
  NSPAIR(_ZN6S778C1C1Ev),
  NSPAIR(_ZN6S778C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S778C4;
extern VTBL_ENTRY _ZTI6S778C4[];
extern  VTBL_ENTRY _ZTV6S778C4[];
extern Class_Descriptor cd_S778C3;
extern VTBL_ENTRY _ZTI6S778C3[];
extern  VTBL_ENTRY _ZTV6S778C3[];
extern Class_Descriptor cd_S778C2;
extern VTBL_ENTRY _ZTI6S778C2[];
extern  VTBL_ENTRY _ZTV6S778C2[];
static Base_Class bases_S778C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S778C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S778C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S778C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S778C1[];
extern void _ZN6S778C1D1Ev();
extern void _ZN6S778C1D0Ev();
extern void _ZN6S778C43v12Ev();
extern void _ZN6S778C43v13Ev();
extern void _ZN6S778C43v14Ev();
extern void _ZN6S778C43v15Ev();
extern void _ZN6S778C43v16Ev();
extern void _ZN6S778C43v17Ev();
extern void _ZN6S778C43v18Ev();
extern void _ZN6S778C43v19Ev();
extern void _ZN6S778C43v20Ev();
extern void _ZN6S778C43v21Ev();
extern void _ZN6S778C43v22Ev();
extern void _ZN6S778C43v23Ev();
extern void _ZN6S778C43v24Ev();
extern void _ZN6S778C43v25Ev();
extern void _ZN6S778C43v26Ev();
extern void _ZN6S778C43v27Ev();
extern void _ZN6S778C43v28Ev();
extern void _ZN6S778C43v29Ev();
extern void _ZN6S778C43v30Ev();
extern void _ZN6S778C43v31Ev();
extern void _ZN6S778C43v32Ev();
extern void _ZN6S778C43v33Ev();
extern void _ZN6S778C43v34Ev();
extern void _ZN6S778C43v35Ev();
extern void _ZN6S778C43v36Ev();
extern void _ZN6S778C43v37Ev();
extern void _ZN6S778C43v38Ev();
extern void _ZN6S778C43v39Ev();
extern void _ZN6S778C43v40Ev();
extern void _ZN6S778C43v41Ev();
extern void _ZN6S778C43v42Ev();
extern void _ZN6S778C43v43Ev();
extern void _ZN6S778C43v44Ev();
extern void _ZN6S778C43v45Ev();
extern void _ZN6S778C43v46Ev();
extern void _ZN6S778C43v47Ev();
extern void _ZN6S778C43v48Ev();
extern void _ZN6S778C43v49Ev();
extern void _ZN6S778C43v50Ev();
extern void _ZN6S778C43v51Ev();
extern void _ZN6S778C43v52Ev();
extern void _ZN6S778C43v53Ev();
extern void _ZN6S778C43v54Ev();
extern void _ZN6S778C43v55Ev();
extern void _ZN6S778C43v56Ev();
extern void _ZN6S778C43v57Ev();
extern void _ZN6S778C43v58Ev();
extern void _ZN6S778C43v59Ev();
extern void _ZN6S778C43v60Ev();
extern void _ZN6S778C43v61Ev();
extern void _ZN6S778C43v62Ev();
extern void _ZN6S778C43v63Ev();
extern void _ZN6S778C43v64Ev();
extern void _ZN6S778C43v65Ev();
extern void _ZN6S778C43v66Ev();
extern void _ZN6S778C43v67Ev();
extern void _ZN6S778C43v68Ev();
extern void _ZN6S778C43v69Ev();
extern void _ZN6S778C43v70Ev();
extern void _ZN6S778C43v71Ev();
extern void _ZN6S778C43v72Ev();
extern void _ZN6S778C43v73Ev();
extern void _ZN6S778C43v74Ev();
extern void _ZN6S778C43v75Ev();
extern void _ZN6S778C43v76Ev();
extern void _ZN6S778C43v77Ev();
extern void _ZN6S778C43v78Ev();
extern void _ZN6S778C43v79Ev();
extern void _ZN6S778C43v80Ev();
extern void _ZN6S778C43v81Ev();
extern void _ZN6S778C43v82Ev();
extern void _ZN6S778C43v83Ev();
extern void _ZN6S778C43v84Ev();
extern void _ZN6S778C43v85Ev();
extern void _ZN6S778C43v86Ev();
extern void _ZN6S778C43v87Ev();
extern void _ZN6S778C43v88Ev();
extern void _ZN6S778C43v89Ev();
extern void _ZN6S778C43v90Ev();
extern void _ZN6S778C43v91Ev();
extern void _ZN6S778C43v92Ev();
extern void _ZN6S778C43v93Ev();
extern void _ZN6S778C43v94Ev();
extern void _ZN6S778C43v95Ev();
extern void _ZN6S778C43v96Ev();
extern void _ZN6S778C43v97Ev();
extern void _ZN6S778C43v98Ev();
extern void _ZN6S778C43v99Ev();
extern void _ZN6S778C44v100Ev();
extern void _ZN6S778C44v101Ev();
extern void _ZN6S778C44v102Ev();
extern void _ZN6S778C44v103Ev();
extern void _ZN6S778C44v104Ev();
extern void _ZN6S778C44v105Ev();
extern void _ZN6S778C44v106Ev();
extern void _ZN6S778C44v107Ev();
extern void _ZN6S778C44v108Ev();
extern void _ZN6S778C44v109Ev();
extern void _ZN6S778C44v110Ev();
extern void _ZN6S778C44v111Ev();
extern void _ZN6S778C44v112Ev();
extern void _ZN6S778C44v113Ev();
extern void _ZN6S778C44v114Ev();
extern void _ZN6S778C44v115Ev();
extern void _ZN6S778C44v116Ev();
extern void _ZN6S778C44v117Ev();
extern void _ZN6S778C44v118Ev();
extern void _ZN6S778C44v119Ev();
extern void _ZN6S778C44v120Ev();
extern void _ZN6S778C44v121Ev();
extern void _ZN6S778C44v122Ev();
extern void _ZN6S778C44v123Ev();
extern void _ZN6S778C44v124Ev();
extern void _ZN6S778C44v125Ev();
extern void _ZN6S778C44v126Ev();
extern void _ZN6S778C44v127Ev();
extern void _ZN6S778C44v128Ev();
extern void _ZN6S778C44v129Ev();
extern void _ZN6S778C44v130Ev();
extern void _ZN6S778C44v131Ev();
extern void _ZN6S778C44v132Ev();
extern void _ZN6S778C44v133Ev();
extern void _ZN6S778C34v134Ev();
extern void _ZN6S778C34v135Ev();
extern void _ZN6S778C34v136Ev();
extern void _ZN6S778C34v137Ev();
extern void _ZN6S778C34v138Ev();
extern void _ZN6S778C34v139Ev();
extern void _ZN6S778C34v140Ev();
extern void _ZN6S778C34v141Ev();
extern void _ZN6S778C34v142Ev();
extern void _ZN6S778C34v143Ev();
extern void _ZN6S778C34v144Ev();
extern void _ZN6S778C34v145Ev();
extern void _ZN6S778C34v146Ev();
extern void _ZN6S778C34v147Ev();
extern void _ZN6S778C34v148Ev();
extern void _ZN6S778C34v149Ev();
extern void _ZN6S778C34v150Ev();
extern void _ZN6S778C34v151Ev();
extern void _ZN6S778C24v152Ev();
extern void _ZN6S778C12v1Ev();
extern void _ZN6S778C12v2Ev();
extern void _ZN6S778C12v3Ev();
extern void _ZN6S778C12v4Ev();
extern void _ZN6S778C12v5Ev();
extern void _ZN6S778C12v6Ev();
extern void _ZN6S778C12v7Ev();
extern void _ZN6S778C12v8Ev();
extern void _ZN6S778C12v9Ev();
extern void _ZN6S778C13v10Ev();
extern void _ZN6S778C13v11Ev();
static  VTBL_ENTRY vtc_S778C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S778C1[0]),
  (VTBL_ENTRY)&_ZN6S778C1D1Ev,
  (VTBL_ENTRY)&_ZN6S778C1D0Ev,
  (VTBL_ENTRY)&_ZN6S778C43v12Ev,
  (VTBL_ENTRY)&_ZN6S778C43v13Ev,
  (VTBL_ENTRY)&_ZN6S778C43v14Ev,
  (VTBL_ENTRY)&_ZN6S778C43v15Ev,
  (VTBL_ENTRY)&_ZN6S778C43v16Ev,
  (VTBL_ENTRY)&_ZN6S778C43v17Ev,
  (VTBL_ENTRY)&_ZN6S778C43v18Ev,
  (VTBL_ENTRY)&_ZN6S778C43v19Ev,
  (VTBL_ENTRY)&_ZN6S778C43v20Ev,
  (VTBL_ENTRY)&_ZN6S778C43v21Ev,
  (VTBL_ENTRY)&_ZN6S778C43v22Ev,
  (VTBL_ENTRY)&_ZN6S778C43v23Ev,
  (VTBL_ENTRY)&_ZN6S778C43v24Ev,
  (VTBL_ENTRY)&_ZN6S778C43v25Ev,
  (VTBL_ENTRY)&_ZN6S778C43v26Ev,
  (VTBL_ENTRY)&_ZN6S778C43v27Ev,
  (VTBL_ENTRY)&_ZN6S778C43v28Ev,
  (VTBL_ENTRY)&_ZN6S778C43v29Ev,
  (VTBL_ENTRY)&_ZN6S778C43v30Ev,
  (VTBL_ENTRY)&_ZN6S778C43v31Ev,
  (VTBL_ENTRY)&_ZN6S778C43v32Ev,
  (VTBL_ENTRY)&_ZN6S778C43v33Ev,
  (VTBL_ENTRY)&_ZN6S778C43v34Ev,
  (VTBL_ENTRY)&_ZN6S778C43v35Ev,
  (VTBL_ENTRY)&_ZN6S778C43v36Ev,
  (VTBL_ENTRY)&_ZN6S778C43v37Ev,
  (VTBL_ENTRY)&_ZN6S778C43v38Ev,
  (VTBL_ENTRY)&_ZN6S778C43v39Ev,
  (VTBL_ENTRY)&_ZN6S778C43v40Ev,
  (VTBL_ENTRY)&_ZN6S778C43v41Ev,
  (VTBL_ENTRY)&_ZN6S778C43v42Ev,
  (VTBL_ENTRY)&_ZN6S778C43v43Ev,
  (VTBL_ENTRY)&_ZN6S778C43v44Ev,
  (VTBL_ENTRY)&_ZN6S778C43v45Ev,
  (VTBL_ENTRY)&_ZN6S778C43v46Ev,
  (VTBL_ENTRY)&_ZN6S778C43v47Ev,
  (VTBL_ENTRY)&_ZN6S778C43v48Ev,
  (VTBL_ENTRY)&_ZN6S778C43v49Ev,
  (VTBL_ENTRY)&_ZN6S778C43v50Ev,
  (VTBL_ENTRY)&_ZN6S778C43v51Ev,
  (VTBL_ENTRY)&_ZN6S778C43v52Ev,
  (VTBL_ENTRY)&_ZN6S778C43v53Ev,
  (VTBL_ENTRY)&_ZN6S778C43v54Ev,
  (VTBL_ENTRY)&_ZN6S778C43v55Ev,
  (VTBL_ENTRY)&_ZN6S778C43v56Ev,
  (VTBL_ENTRY)&_ZN6S778C43v57Ev,
  (VTBL_ENTRY)&_ZN6S778C43v58Ev,
  (VTBL_ENTRY)&_ZN6S778C43v59Ev,
  (VTBL_ENTRY)&_ZN6S778C43v60Ev,
  (VTBL_ENTRY)&_ZN6S778C43v61Ev,
  (VTBL_ENTRY)&_ZN6S778C43v62Ev,
  (VTBL_ENTRY)&_ZN6S778C43v63Ev,
  (VTBL_ENTRY)&_ZN6S778C43v64Ev,
  (VTBL_ENTRY)&_ZN6S778C43v65Ev,
  (VTBL_ENTRY)&_ZN6S778C43v66Ev,
  (VTBL_ENTRY)&_ZN6S778C43v67Ev,
  (VTBL_ENTRY)&_ZN6S778C43v68Ev,
  (VTBL_ENTRY)&_ZN6S778C43v69Ev,
  (VTBL_ENTRY)&_ZN6S778C43v70Ev,
  (VTBL_ENTRY)&_ZN6S778C43v71Ev,
  (VTBL_ENTRY)&_ZN6S778C43v72Ev,
  (VTBL_ENTRY)&_ZN6S778C43v73Ev,
  (VTBL_ENTRY)&_ZN6S778C43v74Ev,
  (VTBL_ENTRY)&_ZN6S778C43v75Ev,
  (VTBL_ENTRY)&_ZN6S778C43v76Ev,
  (VTBL_ENTRY)&_ZN6S778C43v77Ev,
  (VTBL_ENTRY)&_ZN6S778C43v78Ev,
  (VTBL_ENTRY)&_ZN6S778C43v79Ev,
  (VTBL_ENTRY)&_ZN6S778C43v80Ev,
  (VTBL_ENTRY)&_ZN6S778C43v81Ev,
  (VTBL_ENTRY)&_ZN6S778C43v82Ev,
  (VTBL_ENTRY)&_ZN6S778C43v83Ev,
  (VTBL_ENTRY)&_ZN6S778C43v84Ev,
  (VTBL_ENTRY)&_ZN6S778C43v85Ev,
  (VTBL_ENTRY)&_ZN6S778C43v86Ev,
  (VTBL_ENTRY)&_ZN6S778C43v87Ev,
  (VTBL_ENTRY)&_ZN6S778C43v88Ev,
  (VTBL_ENTRY)&_ZN6S778C43v89Ev,
  (VTBL_ENTRY)&_ZN6S778C43v90Ev,
  (VTBL_ENTRY)&_ZN6S778C43v91Ev,
  (VTBL_ENTRY)&_ZN6S778C43v92Ev,
  (VTBL_ENTRY)&_ZN6S778C43v93Ev,
  (VTBL_ENTRY)&_ZN6S778C43v94Ev,
  (VTBL_ENTRY)&_ZN6S778C43v95Ev,
  (VTBL_ENTRY)&_ZN6S778C43v96Ev,
  (VTBL_ENTRY)&_ZN6S778C43v97Ev,
  (VTBL_ENTRY)&_ZN6S778C43v98Ev,
  (VTBL_ENTRY)&_ZN6S778C43v99Ev,
  (VTBL_ENTRY)&_ZN6S778C44v100Ev,
  (VTBL_ENTRY)&_ZN6S778C44v101Ev,
  (VTBL_ENTRY)&_ZN6S778C44v102Ev,
  (VTBL_ENTRY)&_ZN6S778C44v103Ev,
  (VTBL_ENTRY)&_ZN6S778C44v104Ev,
  (VTBL_ENTRY)&_ZN6S778C44v105Ev,
  (VTBL_ENTRY)&_ZN6S778C44v106Ev,
  (VTBL_ENTRY)&_ZN6S778C44v107Ev,
  (VTBL_ENTRY)&_ZN6S778C44v108Ev,
  (VTBL_ENTRY)&_ZN6S778C44v109Ev,
  (VTBL_ENTRY)&_ZN6S778C44v110Ev,
  (VTBL_ENTRY)&_ZN6S778C44v111Ev,
  (VTBL_ENTRY)&_ZN6S778C44v112Ev,
  (VTBL_ENTRY)&_ZN6S778C44v113Ev,
  (VTBL_ENTRY)&_ZN6S778C44v114Ev,
  (VTBL_ENTRY)&_ZN6S778C44v115Ev,
  (VTBL_ENTRY)&_ZN6S778C44v116Ev,
  (VTBL_ENTRY)&_ZN6S778C44v117Ev,
  (VTBL_ENTRY)&_ZN6S778C44v118Ev,
  (VTBL_ENTRY)&_ZN6S778C44v119Ev,
  (VTBL_ENTRY)&_ZN6S778C44v120Ev,
  (VTBL_ENTRY)&_ZN6S778C44v121Ev,
  (VTBL_ENTRY)&_ZN6S778C44v122Ev,
  (VTBL_ENTRY)&_ZN6S778C44v123Ev,
  (VTBL_ENTRY)&_ZN6S778C44v124Ev,
  (VTBL_ENTRY)&_ZN6S778C44v125Ev,
  (VTBL_ENTRY)&_ZN6S778C44v126Ev,
  (VTBL_ENTRY)&_ZN6S778C44v127Ev,
  (VTBL_ENTRY)&_ZN6S778C44v128Ev,
  (VTBL_ENTRY)&_ZN6S778C44v129Ev,
  (VTBL_ENTRY)&_ZN6S778C44v130Ev,
  (VTBL_ENTRY)&_ZN6S778C44v131Ev,
  (VTBL_ENTRY)&_ZN6S778C44v132Ev,
  (VTBL_ENTRY)&_ZN6S778C44v133Ev,
  (VTBL_ENTRY)&_ZN6S778C34v134Ev,
  (VTBL_ENTRY)&_ZN6S778C34v135Ev,
  (VTBL_ENTRY)&_ZN6S778C34v136Ev,
  (VTBL_ENTRY)&_ZN6S778C34v137Ev,
  (VTBL_ENTRY)&_ZN6S778C34v138Ev,
  (VTBL_ENTRY)&_ZN6S778C34v139Ev,
  (VTBL_ENTRY)&_ZN6S778C34v140Ev,
  (VTBL_ENTRY)&_ZN6S778C34v141Ev,
  (VTBL_ENTRY)&_ZN6S778C34v142Ev,
  (VTBL_ENTRY)&_ZN6S778C34v143Ev,
  (VTBL_ENTRY)&_ZN6S778C34v144Ev,
  (VTBL_ENTRY)&_ZN6S778C34v145Ev,
  (VTBL_ENTRY)&_ZN6S778C34v146Ev,
  (VTBL_ENTRY)&_ZN6S778C34v147Ev,
  (VTBL_ENTRY)&_ZN6S778C34v148Ev,
  (VTBL_ENTRY)&_ZN6S778C34v149Ev,
  (VTBL_ENTRY)&_ZN6S778C34v150Ev,
  (VTBL_ENTRY)&_ZN6S778C34v151Ev,
  (VTBL_ENTRY)&_ZN6S778C24v152Ev,
  (VTBL_ENTRY)&_ZN6S778C12v1Ev,
  (VTBL_ENTRY)&_ZN6S778C12v2Ev,
  (VTBL_ENTRY)&_ZN6S778C12v3Ev,
  (VTBL_ENTRY)&_ZN6S778C12v4Ev,
  (VTBL_ENTRY)&_ZN6S778C12v5Ev,
  (VTBL_ENTRY)&_ZN6S778C12v6Ev,
  (VTBL_ENTRY)&_ZN6S778C12v7Ev,
  (VTBL_ENTRY)&_ZN6S778C12v8Ev,
  (VTBL_ENTRY)&_ZN6S778C12v9Ev,
  (VTBL_ENTRY)&_ZN6S778C13v10Ev,
  (VTBL_ENTRY)&_ZN6S778C13v11Ev,
};
extern VTBL_ENTRY _ZTI6S778C1[];
extern  VTBL_ENTRY _ZTV6S778C1[];
Class_Descriptor cd_S778C1 = {  "S778C1", // class name
  bases_S778C1, 4,
  &(vtc_S778C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S778C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S778C1),156, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S777C4  : S785C5_nt {
  virtual void  v10(); // _ZN6S777C43v10Ev
  virtual void  v11(); // _ZN6S777C43v11Ev
  virtual void  v12(); // _ZN6S777C43v12Ev
  virtual void  v13(); // _ZN6S777C43v13Ev
  virtual void  v14(); // _ZN6S777C43v14Ev
  virtual void  v15(); // _ZN6S777C43v15Ev
  virtual void  v16(); // _ZN6S777C43v16Ev
  virtual void  v17(); // _ZN6S777C43v17Ev
  virtual void  v18(); // _ZN6S777C43v18Ev
  virtual void  v19(); // _ZN6S777C43v19Ev
  virtual void  v20(); // _ZN6S777C43v20Ev
  virtual void  v21(); // _ZN6S777C43v21Ev
  virtual void  v22(); // _ZN6S777C43v22Ev
  virtual void  v23(); // _ZN6S777C43v23Ev
  virtual void  v24(); // _ZN6S777C43v24Ev
  virtual void  v25(); // _ZN6S777C43v25Ev
  virtual void  v26(); // _ZN6S777C43v26Ev
  virtual void  v27(); // _ZN6S777C43v27Ev
  virtual void  v28(); // _ZN6S777C43v28Ev
  virtual void  v29(); // _ZN6S777C43v29Ev
  virtual void  v30(); // _ZN6S777C43v30Ev
  virtual void  v31(); // _ZN6S777C43v31Ev
  virtual void  v32(); // _ZN6S777C43v32Ev
  virtual void  v33(); // _ZN6S777C43v33Ev
  virtual void  v34(); // _ZN6S777C43v34Ev
  virtual void  v35(); // _ZN6S777C43v35Ev
  virtual void  v36(); // _ZN6S777C43v36Ev
  virtual void  v37(); // _ZN6S777C43v37Ev
  virtual void  v38(); // _ZN6S777C43v38Ev
  virtual void  v39(); // _ZN6S777C43v39Ev
  virtual void  v40(); // _ZN6S777C43v40Ev
  virtual void  v41(); // _ZN6S777C43v41Ev
  virtual void  v42(); // _ZN6S777C43v42Ev
  virtual void  v43(); // _ZN6S777C43v43Ev
  virtual void  v44(); // _ZN6S777C43v44Ev
  virtual void  v45(); // _ZN6S777C43v45Ev
  virtual void  v46(); // _ZN6S777C43v46Ev
  virtual void  v47(); // _ZN6S777C43v47Ev
  virtual void  v48(); // _ZN6S777C43v48Ev
  virtual void  v49(); // _ZN6S777C43v49Ev
  virtual void  v50(); // _ZN6S777C43v50Ev
  virtual void  v51(); // _ZN6S777C43v51Ev
  virtual void  v52(); // _ZN6S777C43v52Ev
  virtual void  v53(); // _ZN6S777C43v53Ev
  virtual void  v54(); // _ZN6S777C43v54Ev
  virtual void  v55(); // _ZN6S777C43v55Ev
  virtual void  v56(); // _ZN6S777C43v56Ev
  virtual void  v57(); // _ZN6S777C43v57Ev
  virtual void  v58(); // _ZN6S777C43v58Ev
  virtual void  v59(); // _ZN6S777C43v59Ev
  virtual void  v60(); // _ZN6S777C43v60Ev
  virtual void  v61(); // _ZN6S777C43v61Ev
  virtual void  v62(); // _ZN6S777C43v62Ev
  virtual void  v63(); // _ZN6S777C43v63Ev
  virtual void  v64(); // _ZN6S777C43v64Ev
  virtual void  v65(); // _ZN6S777C43v65Ev
  virtual void  v66(); // _ZN6S777C43v66Ev
  virtual void  v67(); // _ZN6S777C43v67Ev
  virtual void  v68(); // _ZN6S777C43v68Ev
  virtual void  v69(); // _ZN6S777C43v69Ev
  virtual void  v70(); // _ZN6S777C43v70Ev
  virtual void  v71(); // _ZN6S777C43v71Ev
  virtual void  v72(); // _ZN6S777C43v72Ev
  virtual void  v73(); // _ZN6S777C43v73Ev
  virtual void  v74(); // _ZN6S777C43v74Ev
  virtual void  v75(); // _ZN6S777C43v75Ev
  virtual void  v76(); // _ZN6S777C43v76Ev
  virtual void  v77(); // _ZN6S777C43v77Ev
  virtual void  v78(); // _ZN6S777C43v78Ev
  virtual void  v79(); // _ZN6S777C43v79Ev
  virtual void  v80(); // _ZN6S777C43v80Ev
  virtual void  v81(); // _ZN6S777C43v81Ev
  virtual void  v82(); // _ZN6S777C43v82Ev
  virtual void  v83(); // _ZN6S777C43v83Ev
  virtual void  v84(); // _ZN6S777C43v84Ev
  virtual void  v85(); // _ZN6S777C43v85Ev
  virtual void  v86(); // _ZN6S777C43v86Ev
  virtual void  v87(); // _ZN6S777C43v87Ev
  virtual void  v88(); // _ZN6S777C43v88Ev
  virtual void  v89(); // _ZN6S777C43v89Ev
  virtual void  v90(); // _ZN6S777C43v90Ev
  virtual void  v91(); // _ZN6S777C43v91Ev
  virtual void  v92(); // _ZN6S777C43v92Ev
  virtual void  v93(); // _ZN6S777C43v93Ev
  virtual void  v94(); // _ZN6S777C43v94Ev
  virtual void  v95(); // _ZN6S777C43v95Ev
  virtual void  v96(); // _ZN6S777C43v96Ev
  virtual void  v97(); // _ZN6S777C43v97Ev
  virtual void  v98(); // _ZN6S777C43v98Ev
  virtual void  v99(); // _ZN6S777C43v99Ev
  virtual void  v100(); // _ZN6S777C44v100Ev
  virtual void  v101(); // _ZN6S777C44v101Ev
  virtual void  v102(); // _ZN6S777C44v102Ev
  virtual void  v103(); // _ZN6S777C44v103Ev
  virtual void  v104(); // _ZN6S777C44v104Ev
  virtual void  v105(); // _ZN6S777C44v105Ev
  virtual void  v106(); // _ZN6S777C44v106Ev
  virtual void  v107(); // _ZN6S777C44v107Ev
  virtual void  v108(); // _ZN6S777C44v108Ev
  virtual void  v109(); // _ZN6S777C44v109Ev
  virtual void  v110(); // _ZN6S777C44v110Ev
  virtual void  v111(); // _ZN6S777C44v111Ev
  virtual void  v112(); // _ZN6S777C44v112Ev
  virtual void  v113(); // _ZN6S777C44v113Ev
  virtual void  v114(); // _ZN6S777C44v114Ev
  virtual void  v115(); // _ZN6S777C44v115Ev
  virtual void  v116(); // _ZN6S777C44v116Ev
  virtual void  v117(); // _ZN6S777C44v117Ev
  virtual void  v118(); // _ZN6S777C44v118Ev
  virtual void  v119(); // _ZN6S777C44v119Ev
  virtual void  v120(); // _ZN6S777C44v120Ev
  virtual void  v121(); // _ZN6S777C44v121Ev
  virtual void  v122(); // _ZN6S777C44v122Ev
  virtual void  v123(); // _ZN6S777C44v123Ev
  virtual void  v124(); // _ZN6S777C44v124Ev
  virtual void  v125(); // _ZN6S777C44v125Ev
  virtual void  v126(); // _ZN6S777C44v126Ev
  virtual void  v127(); // _ZN6S777C44v127Ev
  virtual void  v128(); // _ZN6S777C44v128Ev
  virtual void  v129(); // _ZN6S777C44v129Ev
  virtual void  v130(); // _ZN6S777C44v130Ev
  virtual void  v131(); // _ZN6S777C44v131Ev
  ~S777C4(); // tgen
  S777C4(); // tgen
};
//SIG(-1 S777C4) C1{ BC2{ vd m Fp Fi} 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}


void  S777C4 ::v10(){vfunc_called(this, "_ZN6S777C43v10Ev");}
void  S777C4 ::v11(){vfunc_called(this, "_ZN6S777C43v11Ev");}
void  S777C4 ::v12(){vfunc_called(this, "_ZN6S777C43v12Ev");}
void  S777C4 ::v13(){vfunc_called(this, "_ZN6S777C43v13Ev");}
void  S777C4 ::v14(){vfunc_called(this, "_ZN6S777C43v14Ev");}
void  S777C4 ::v15(){vfunc_called(this, "_ZN6S777C43v15Ev");}
void  S777C4 ::v16(){vfunc_called(this, "_ZN6S777C43v16Ev");}
void  S777C4 ::v17(){vfunc_called(this, "_ZN6S777C43v17Ev");}
void  S777C4 ::v18(){vfunc_called(this, "_ZN6S777C43v18Ev");}
void  S777C4 ::v19(){vfunc_called(this, "_ZN6S777C43v19Ev");}
void  S777C4 ::v20(){vfunc_called(this, "_ZN6S777C43v20Ev");}
void  S777C4 ::v21(){vfunc_called(this, "_ZN6S777C43v21Ev");}
void  S777C4 ::v22(){vfunc_called(this, "_ZN6S777C43v22Ev");}
void  S777C4 ::v23(){vfunc_called(this, "_ZN6S777C43v23Ev");}
void  S777C4 ::v24(){vfunc_called(this, "_ZN6S777C43v24Ev");}
void  S777C4 ::v25(){vfunc_called(this, "_ZN6S777C43v25Ev");}
void  S777C4 ::v26(){vfunc_called(this, "_ZN6S777C43v26Ev");}
void  S777C4 ::v27(){vfunc_called(this, "_ZN6S777C43v27Ev");}
void  S777C4 ::v28(){vfunc_called(this, "_ZN6S777C43v28Ev");}
void  S777C4 ::v29(){vfunc_called(this, "_ZN6S777C43v29Ev");}
void  S777C4 ::v30(){vfunc_called(this, "_ZN6S777C43v30Ev");}
void  S777C4 ::v31(){vfunc_called(this, "_ZN6S777C43v31Ev");}
void  S777C4 ::v32(){vfunc_called(this, "_ZN6S777C43v32Ev");}
void  S777C4 ::v33(){vfunc_called(this, "_ZN6S777C43v33Ev");}
void  S777C4 ::v34(){vfunc_called(this, "_ZN6S777C43v34Ev");}
void  S777C4 ::v35(){vfunc_called(this, "_ZN6S777C43v35Ev");}
void  S777C4 ::v36(){vfunc_called(this, "_ZN6S777C43v36Ev");}
void  S777C4 ::v37(){vfunc_called(this, "_ZN6S777C43v37Ev");}
void  S777C4 ::v38(){vfunc_called(this, "_ZN6S777C43v38Ev");}
void  S777C4 ::v39(){vfunc_called(this, "_ZN6S777C43v39Ev");}
void  S777C4 ::v40(){vfunc_called(this, "_ZN6S777C43v40Ev");}
void  S777C4 ::v41(){vfunc_called(this, "_ZN6S777C43v41Ev");}
void  S777C4 ::v42(){vfunc_called(this, "_ZN6S777C43v42Ev");}
void  S777C4 ::v43(){vfunc_called(this, "_ZN6S777C43v43Ev");}
void  S777C4 ::v44(){vfunc_called(this, "_ZN6S777C43v44Ev");}
void  S777C4 ::v45(){vfunc_called(this, "_ZN6S777C43v45Ev");}
void  S777C4 ::v46(){vfunc_called(this, "_ZN6S777C43v46Ev");}
void  S777C4 ::v47(){vfunc_called(this, "_ZN6S777C43v47Ev");}
void  S777C4 ::v48(){vfunc_called(this, "_ZN6S777C43v48Ev");}
void  S777C4 ::v49(){vfunc_called(this, "_ZN6S777C43v49Ev");}
void  S777C4 ::v50(){vfunc_called(this, "_ZN6S777C43v50Ev");}
void  S777C4 ::v51(){vfunc_called(this, "_ZN6S777C43v51Ev");}
void  S777C4 ::v52(){vfunc_called(this, "_ZN6S777C43v52Ev");}
void  S777C4 ::v53(){vfunc_called(this, "_ZN6S777C43v53Ev");}
void  S777C4 ::v54(){vfunc_called(this, "_ZN6S777C43v54Ev");}
void  S777C4 ::v55(){vfunc_called(this, "_ZN6S777C43v55Ev");}
void  S777C4 ::v56(){vfunc_called(this, "_ZN6S777C43v56Ev");}
void  S777C4 ::v57(){vfunc_called(this, "_ZN6S777C43v57Ev");}
void  S777C4 ::v58(){vfunc_called(this, "_ZN6S777C43v58Ev");}
void  S777C4 ::v59(){vfunc_called(this, "_ZN6S777C43v59Ev");}
void  S777C4 ::v60(){vfunc_called(this, "_ZN6S777C43v60Ev");}
void  S777C4 ::v61(){vfunc_called(this, "_ZN6S777C43v61Ev");}
void  S777C4 ::v62(){vfunc_called(this, "_ZN6S777C43v62Ev");}
void  S777C4 ::v63(){vfunc_called(this, "_ZN6S777C43v63Ev");}
void  S777C4 ::v64(){vfunc_called(this, "_ZN6S777C43v64Ev");}
void  S777C4 ::v65(){vfunc_called(this, "_ZN6S777C43v65Ev");}
void  S777C4 ::v66(){vfunc_called(this, "_ZN6S777C43v66Ev");}
void  S777C4 ::v67(){vfunc_called(this, "_ZN6S777C43v67Ev");}
void  S777C4 ::v68(){vfunc_called(this, "_ZN6S777C43v68Ev");}
void  S777C4 ::v69(){vfunc_called(this, "_ZN6S777C43v69Ev");}
void  S777C4 ::v70(){vfunc_called(this, "_ZN6S777C43v70Ev");}
void  S777C4 ::v71(){vfunc_called(this, "_ZN6S777C43v71Ev");}
void  S777C4 ::v72(){vfunc_called(this, "_ZN6S777C43v72Ev");}
void  S777C4 ::v73(){vfunc_called(this, "_ZN6S777C43v73Ev");}
void  S777C4 ::v74(){vfunc_called(this, "_ZN6S777C43v74Ev");}
void  S777C4 ::v75(){vfunc_called(this, "_ZN6S777C43v75Ev");}
void  S777C4 ::v76(){vfunc_called(this, "_ZN6S777C43v76Ev");}
void  S777C4 ::v77(){vfunc_called(this, "_ZN6S777C43v77Ev");}
void  S777C4 ::v78(){vfunc_called(this, "_ZN6S777C43v78Ev");}
void  S777C4 ::v79(){vfunc_called(this, "_ZN6S777C43v79Ev");}
void  S777C4 ::v80(){vfunc_called(this, "_ZN6S777C43v80Ev");}
void  S777C4 ::v81(){vfunc_called(this, "_ZN6S777C43v81Ev");}
void  S777C4 ::v82(){vfunc_called(this, "_ZN6S777C43v82Ev");}
void  S777C4 ::v83(){vfunc_called(this, "_ZN6S777C43v83Ev");}
void  S777C4 ::v84(){vfunc_called(this, "_ZN6S777C43v84Ev");}
void  S777C4 ::v85(){vfunc_called(this, "_ZN6S777C43v85Ev");}
void  S777C4 ::v86(){vfunc_called(this, "_ZN6S777C43v86Ev");}
void  S777C4 ::v87(){vfunc_called(this, "_ZN6S777C43v87Ev");}
void  S777C4 ::v88(){vfunc_called(this, "_ZN6S777C43v88Ev");}
void  S777C4 ::v89(){vfunc_called(this, "_ZN6S777C43v89Ev");}
void  S777C4 ::v90(){vfunc_called(this, "_ZN6S777C43v90Ev");}
void  S777C4 ::v91(){vfunc_called(this, "_ZN6S777C43v91Ev");}
void  S777C4 ::v92(){vfunc_called(this, "_ZN6S777C43v92Ev");}
void  S777C4 ::v93(){vfunc_called(this, "_ZN6S777C43v93Ev");}
void  S777C4 ::v94(){vfunc_called(this, "_ZN6S777C43v94Ev");}
void  S777C4 ::v95(){vfunc_called(this, "_ZN6S777C43v95Ev");}
void  S777C4 ::v96(){vfunc_called(this, "_ZN6S777C43v96Ev");}
void  S777C4 ::v97(){vfunc_called(this, "_ZN6S777C43v97Ev");}
void  S777C4 ::v98(){vfunc_called(this, "_ZN6S777C43v98Ev");}
void  S777C4 ::v99(){vfunc_called(this, "_ZN6S777C43v99Ev");}
void  S777C4 ::v100(){vfunc_called(this, "_ZN6S777C44v100Ev");}
void  S777C4 ::v101(){vfunc_called(this, "_ZN6S777C44v101Ev");}
void  S777C4 ::v102(){vfunc_called(this, "_ZN6S777C44v102Ev");}
void  S777C4 ::v103(){vfunc_called(this, "_ZN6S777C44v103Ev");}
void  S777C4 ::v104(){vfunc_called(this, "_ZN6S777C44v104Ev");}
void  S777C4 ::v105(){vfunc_called(this, "_ZN6S777C44v105Ev");}
void  S777C4 ::v106(){vfunc_called(this, "_ZN6S777C44v106Ev");}
void  S777C4 ::v107(){vfunc_called(this, "_ZN6S777C44v107Ev");}
void  S777C4 ::v108(){vfunc_called(this, "_ZN6S777C44v108Ev");}
void  S777C4 ::v109(){vfunc_called(this, "_ZN6S777C44v109Ev");}
void  S777C4 ::v110(){vfunc_called(this, "_ZN6S777C44v110Ev");}
void  S777C4 ::v111(){vfunc_called(this, "_ZN6S777C44v111Ev");}
void  S777C4 ::v112(){vfunc_called(this, "_ZN6S777C44v112Ev");}
void  S777C4 ::v113(){vfunc_called(this, "_ZN6S777C44v113Ev");}
void  S777C4 ::v114(){vfunc_called(this, "_ZN6S777C44v114Ev");}
void  S777C4 ::v115(){vfunc_called(this, "_ZN6S777C44v115Ev");}
void  S777C4 ::v116(){vfunc_called(this, "_ZN6S777C44v116Ev");}
void  S777C4 ::v117(){vfunc_called(this, "_ZN6S777C44v117Ev");}
void  S777C4 ::v118(){vfunc_called(this, "_ZN6S777C44v118Ev");}
void  S777C4 ::v119(){vfunc_called(this, "_ZN6S777C44v119Ev");}
void  S777C4 ::v120(){vfunc_called(this, "_ZN6S777C44v120Ev");}
void  S777C4 ::v121(){vfunc_called(this, "_ZN6S777C44v121Ev");}
void  S777C4 ::v122(){vfunc_called(this, "_ZN6S777C44v122Ev");}
void  S777C4 ::v123(){vfunc_called(this, "_ZN6S777C44v123Ev");}
void  S777C4 ::v124(){vfunc_called(this, "_ZN6S777C44v124Ev");}
void  S777C4 ::v125(){vfunc_called(this, "_ZN6S777C44v125Ev");}
void  S777C4 ::v126(){vfunc_called(this, "_ZN6S777C44v126Ev");}
void  S777C4 ::v127(){vfunc_called(this, "_ZN6S777C44v127Ev");}
void  S777C4 ::v128(){vfunc_called(this, "_ZN6S777C44v128Ev");}
void  S777C4 ::v129(){vfunc_called(this, "_ZN6S777C44v129Ev");}
void  S777C4 ::v130(){vfunc_called(this, "_ZN6S777C44v130Ev");}
void  S777C4 ::v131(){vfunc_called(this, "_ZN6S777C44v131Ev");}
S777C4 ::~S777C4(){ note_dtor("S777C4", this);} // tgen
S777C4 ::S777C4(){ note_ctor("S777C4", this);} // tgen

static void Test_S777C4()
{
  extern Class_Descriptor cd_S777C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S777C4, buf);
    S777C4 *dp, &lv = *(dp=new (buf) S777C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S777C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S777C4)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S777C4");
    test_class_info(&lv, &cd_S777C4);
    dp->~S777C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS777C4(Test_S777C4, "S777C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S777C4C1Ev();
extern void _ZN6S777C4D1Ev();
Name_Map name_map_S777C4[] = {
  NSPAIR(_ZN6S777C4C1Ev),
  NSPAIR(_ZN6S777C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S777C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S777C4[];
extern void _ZN6S777C4D1Ev();
extern void _ZN6S777C4D0Ev();
extern void _ZN6S777C43v10Ev();
extern void _ZN6S777C43v11Ev();
extern void _ZN6S777C43v12Ev();
extern void _ZN6S777C43v13Ev();
extern void _ZN6S777C43v14Ev();
extern void _ZN6S777C43v15Ev();
extern void _ZN6S777C43v16Ev();
extern void _ZN6S777C43v17Ev();
extern void _ZN6S777C43v18Ev();
extern void _ZN6S777C43v19Ev();
extern void _ZN6S777C43v20Ev();
extern void _ZN6S777C43v21Ev();
extern void _ZN6S777C43v22Ev();
extern void _ZN6S777C43v23Ev();
extern void _ZN6S777C43v24Ev();
extern void _ZN6S777C43v25Ev();
extern void _ZN6S777C43v26Ev();
extern void _ZN6S777C43v27Ev();
extern void _ZN6S777C43v28Ev();
extern void _ZN6S777C43v29Ev();
extern void _ZN6S777C43v30Ev();
extern void _ZN6S777C43v31Ev();
extern void _ZN6S777C43v32Ev();
extern void _ZN6S777C43v33Ev();
extern void _ZN6S777C43v34Ev();
extern void _ZN6S777C43v35Ev();
extern void _ZN6S777C43v36Ev();
extern void _ZN6S777C43v37Ev();
extern void _ZN6S777C43v38Ev();
extern void _ZN6S777C43v39Ev();
extern void _ZN6S777C43v40Ev();
extern void _ZN6S777C43v41Ev();
extern void _ZN6S777C43v42Ev();
extern void _ZN6S777C43v43Ev();
extern void _ZN6S777C43v44Ev();
extern void _ZN6S777C43v45Ev();
extern void _ZN6S777C43v46Ev();
extern void _ZN6S777C43v47Ev();
extern void _ZN6S777C43v48Ev();
extern void _ZN6S777C43v49Ev();
extern void _ZN6S777C43v50Ev();
extern void _ZN6S777C43v51Ev();
extern void _ZN6S777C43v52Ev();
extern void _ZN6S777C43v53Ev();
extern void _ZN6S777C43v54Ev();
extern void _ZN6S777C43v55Ev();
extern void _ZN6S777C43v56Ev();
extern void _ZN6S777C43v57Ev();
extern void _ZN6S777C43v58Ev();
extern void _ZN6S777C43v59Ev();
extern void _ZN6S777C43v60Ev();
extern void _ZN6S777C43v61Ev();
extern void _ZN6S777C43v62Ev();
extern void _ZN6S777C43v63Ev();
extern void _ZN6S777C43v64Ev();
extern void _ZN6S777C43v65Ev();
extern void _ZN6S777C43v66Ev();
extern void _ZN6S777C43v67Ev();
extern void _ZN6S777C43v68Ev();
extern void _ZN6S777C43v69Ev();
extern void _ZN6S777C43v70Ev();
extern void _ZN6S777C43v71Ev();
extern void _ZN6S777C43v72Ev();
extern void _ZN6S777C43v73Ev();
extern void _ZN6S777C43v74Ev();
extern void _ZN6S777C43v75Ev();
extern void _ZN6S777C43v76Ev();
extern void _ZN6S777C43v77Ev();
extern void _ZN6S777C43v78Ev();
extern void _ZN6S777C43v79Ev();
extern void _ZN6S777C43v80Ev();
extern void _ZN6S777C43v81Ev();
extern void _ZN6S777C43v82Ev();
extern void _ZN6S777C43v83Ev();
extern void _ZN6S777C43v84Ev();
extern void _ZN6S777C43v85Ev();
extern void _ZN6S777C43v86Ev();
extern void _ZN6S777C43v87Ev();
extern void _ZN6S777C43v88Ev();
extern void _ZN6S777C43v89Ev();
extern void _ZN6S777C43v90Ev();
extern void _ZN6S777C43v91Ev();
extern void _ZN6S777C43v92Ev();
extern void _ZN6S777C43v93Ev();
extern void _ZN6S777C43v94Ev();
extern void _ZN6S777C43v95Ev();
extern void _ZN6S777C43v96Ev();
extern void _ZN6S777C43v97Ev();
extern void _ZN6S777C43v98Ev();
extern void _ZN6S777C43v99Ev();
extern void _ZN6S777C44v100Ev();
extern void _ZN6S777C44v101Ev();
extern void _ZN6S777C44v102Ev();
extern void _ZN6S777C44v103Ev();
extern void _ZN6S777C44v104Ev();
extern void _ZN6S777C44v105Ev();
extern void _ZN6S777C44v106Ev();
extern void _ZN6S777C44v107Ev();
extern void _ZN6S777C44v108Ev();
extern void _ZN6S777C44v109Ev();
extern void _ZN6S777C44v110Ev();
extern void _ZN6S777C44v111Ev();
extern void _ZN6S777C44v112Ev();
extern void _ZN6S777C44v113Ev();
extern void _ZN6S777C44v114Ev();
extern void _ZN6S777C44v115Ev();
extern void _ZN6S777C44v116Ev();
extern void _ZN6S777C44v117Ev();
extern void _ZN6S777C44v118Ev();
extern void _ZN6S777C44v119Ev();
extern void _ZN6S777C44v120Ev();
extern void _ZN6S777C44v121Ev();
extern void _ZN6S777C44v122Ev();
extern void _ZN6S777C44v123Ev();
extern void _ZN6S777C44v124Ev();
extern void _ZN6S777C44v125Ev();
extern void _ZN6S777C44v126Ev();
extern void _ZN6S777C44v127Ev();
extern void _ZN6S777C44v128Ev();
extern void _ZN6S777C44v129Ev();
extern void _ZN6S777C44v130Ev();
extern void _ZN6S777C44v131Ev();
static  VTBL_ENTRY vtc_S777C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S777C4[0]),
  (VTBL_ENTRY)&_ZN6S777C4D1Ev,
  (VTBL_ENTRY)&_ZN6S777C4D0Ev,
  (VTBL_ENTRY)&_ZN6S777C43v10Ev,
  (VTBL_ENTRY)&_ZN6S777C43v11Ev,
  (VTBL_ENTRY)&_ZN6S777C43v12Ev,
  (VTBL_ENTRY)&_ZN6S777C43v13Ev,
  (VTBL_ENTRY)&_ZN6S777C43v14Ev,
  (VTBL_ENTRY)&_ZN6S777C43v15Ev,
  (VTBL_ENTRY)&_ZN6S777C43v16Ev,
  (VTBL_ENTRY)&_ZN6S777C43v17Ev,
  (VTBL_ENTRY)&_ZN6S777C43v18Ev,
  (VTBL_ENTRY)&_ZN6S777C43v19Ev,
  (VTBL_ENTRY)&_ZN6S777C43v20Ev,
  (VTBL_ENTRY)&_ZN6S777C43v21Ev,
  (VTBL_ENTRY)&_ZN6S777C43v22Ev,
  (VTBL_ENTRY)&_ZN6S777C43v23Ev,
  (VTBL_ENTRY)&_ZN6S777C43v24Ev,
  (VTBL_ENTRY)&_ZN6S777C43v25Ev,
  (VTBL_ENTRY)&_ZN6S777C43v26Ev,
  (VTBL_ENTRY)&_ZN6S777C43v27Ev,
  (VTBL_ENTRY)&_ZN6S777C43v28Ev,
  (VTBL_ENTRY)&_ZN6S777C43v29Ev,
  (VTBL_ENTRY)&_ZN6S777C43v30Ev,
  (VTBL_ENTRY)&_ZN6S777C43v31Ev,
  (VTBL_ENTRY)&_ZN6S777C43v32Ev,
  (VTBL_ENTRY)&_ZN6S777C43v33Ev,
  (VTBL_ENTRY)&_ZN6S777C43v34Ev,
  (VTBL_ENTRY)&_ZN6S777C43v35Ev,
  (VTBL_ENTRY)&_ZN6S777C43v36Ev,
  (VTBL_ENTRY)&_ZN6S777C43v37Ev,
  (VTBL_ENTRY)&_ZN6S777C43v38Ev,
  (VTBL_ENTRY)&_ZN6S777C43v39Ev,
  (VTBL_ENTRY)&_ZN6S777C43v40Ev,
  (VTBL_ENTRY)&_ZN6S777C43v41Ev,
  (VTBL_ENTRY)&_ZN6S777C43v42Ev,
  (VTBL_ENTRY)&_ZN6S777C43v43Ev,
  (VTBL_ENTRY)&_ZN6S777C43v44Ev,
  (VTBL_ENTRY)&_ZN6S777C43v45Ev,
  (VTBL_ENTRY)&_ZN6S777C43v46Ev,
  (VTBL_ENTRY)&_ZN6S777C43v47Ev,
  (VTBL_ENTRY)&_ZN6S777C43v48Ev,
  (VTBL_ENTRY)&_ZN6S777C43v49Ev,
  (VTBL_ENTRY)&_ZN6S777C43v50Ev,
  (VTBL_ENTRY)&_ZN6S777C43v51Ev,
  (VTBL_ENTRY)&_ZN6S777C43v52Ev,
  (VTBL_ENTRY)&_ZN6S777C43v53Ev,
  (VTBL_ENTRY)&_ZN6S777C43v54Ev,
  (VTBL_ENTRY)&_ZN6S777C43v55Ev,
  (VTBL_ENTRY)&_ZN6S777C43v56Ev,
  (VTBL_ENTRY)&_ZN6S777C43v57Ev,
  (VTBL_ENTRY)&_ZN6S777C43v58Ev,
  (VTBL_ENTRY)&_ZN6S777C43v59Ev,
  (VTBL_ENTRY)&_ZN6S777C43v60Ev,
  (VTBL_ENTRY)&_ZN6S777C43v61Ev,
  (VTBL_ENTRY)&_ZN6S777C43v62Ev,
  (VTBL_ENTRY)&_ZN6S777C43v63Ev,
  (VTBL_ENTRY)&_ZN6S777C43v64Ev,
  (VTBL_ENTRY)&_ZN6S777C43v65Ev,
  (VTBL_ENTRY)&_ZN6S777C43v66Ev,
  (VTBL_ENTRY)&_ZN6S777C43v67Ev,
  (VTBL_ENTRY)&_ZN6S777C43v68Ev,
  (VTBL_ENTRY)&_ZN6S777C43v69Ev,
  (VTBL_ENTRY)&_ZN6S777C43v70Ev,
  (VTBL_ENTRY)&_ZN6S777C43v71Ev,
  (VTBL_ENTRY)&_ZN6S777C43v72Ev,
  (VTBL_ENTRY)&_ZN6S777C43v73Ev,
  (VTBL_ENTRY)&_ZN6S777C43v74Ev,
  (VTBL_ENTRY)&_ZN6S777C43v75Ev,
  (VTBL_ENTRY)&_ZN6S777C43v76Ev,
  (VTBL_ENTRY)&_ZN6S777C43v77Ev,
  (VTBL_ENTRY)&_ZN6S777C43v78Ev,
  (VTBL_ENTRY)&_ZN6S777C43v79Ev,
  (VTBL_ENTRY)&_ZN6S777C43v80Ev,
  (VTBL_ENTRY)&_ZN6S777C43v81Ev,
  (VTBL_ENTRY)&_ZN6S777C43v82Ev,
  (VTBL_ENTRY)&_ZN6S777C43v83Ev,
  (VTBL_ENTRY)&_ZN6S777C43v84Ev,
  (VTBL_ENTRY)&_ZN6S777C43v85Ev,
  (VTBL_ENTRY)&_ZN6S777C43v86Ev,
  (VTBL_ENTRY)&_ZN6S777C43v87Ev,
  (VTBL_ENTRY)&_ZN6S777C43v88Ev,
  (VTBL_ENTRY)&_ZN6S777C43v89Ev,
  (VTBL_ENTRY)&_ZN6S777C43v90Ev,
  (VTBL_ENTRY)&_ZN6S777C43v91Ev,
  (VTBL_ENTRY)&_ZN6S777C43v92Ev,
  (VTBL_ENTRY)&_ZN6S777C43v93Ev,
  (VTBL_ENTRY)&_ZN6S777C43v94Ev,
  (VTBL_ENTRY)&_ZN6S777C43v95Ev,
  (VTBL_ENTRY)&_ZN6S777C43v96Ev,
  (VTBL_ENTRY)&_ZN6S777C43v97Ev,
  (VTBL_ENTRY)&_ZN6S777C43v98Ev,
  (VTBL_ENTRY)&_ZN6S777C43v99Ev,
  (VTBL_ENTRY)&_ZN6S777C44v100Ev,
  (VTBL_ENTRY)&_ZN6S777C44v101Ev,
  (VTBL_ENTRY)&_ZN6S777C44v102Ev,
  (VTBL_ENTRY)&_ZN6S777C44v103Ev,
  (VTBL_ENTRY)&_ZN6S777C44v104Ev,
  (VTBL_ENTRY)&_ZN6S777C44v105Ev,
  (VTBL_ENTRY)&_ZN6S777C44v106Ev,
  (VTBL_ENTRY)&_ZN6S777C44v107Ev,
  (VTBL_ENTRY)&_ZN6S777C44v108Ev,
  (VTBL_ENTRY)&_ZN6S777C44v109Ev,
  (VTBL_ENTRY)&_ZN6S777C44v110Ev,
  (VTBL_ENTRY)&_ZN6S777C44v111Ev,
  (VTBL_ENTRY)&_ZN6S777C44v112Ev,
  (VTBL_ENTRY)&_ZN6S777C44v113Ev,
  (VTBL_ENTRY)&_ZN6S777C44v114Ev,
  (VTBL_ENTRY)&_ZN6S777C44v115Ev,
  (VTBL_ENTRY)&_ZN6S777C44v116Ev,
  (VTBL_ENTRY)&_ZN6S777C44v117Ev,
  (VTBL_ENTRY)&_ZN6S777C44v118Ev,
  (VTBL_ENTRY)&_ZN6S777C44v119Ev,
  (VTBL_ENTRY)&_ZN6S777C44v120Ev,
  (VTBL_ENTRY)&_ZN6S777C44v121Ev,
  (VTBL_ENTRY)&_ZN6S777C44v122Ev,
  (VTBL_ENTRY)&_ZN6S777C44v123Ev,
  (VTBL_ENTRY)&_ZN6S777C44v124Ev,
  (VTBL_ENTRY)&_ZN6S777C44v125Ev,
  (VTBL_ENTRY)&_ZN6S777C44v126Ev,
  (VTBL_ENTRY)&_ZN6S777C44v127Ev,
  (VTBL_ENTRY)&_ZN6S777C44v128Ev,
  (VTBL_ENTRY)&_ZN6S777C44v129Ev,
  (VTBL_ENTRY)&_ZN6S777C44v130Ev,
  (VTBL_ENTRY)&_ZN6S777C44v131Ev,
};
extern VTBL_ENTRY _ZTI6S777C4[];
extern  VTBL_ENTRY _ZTV6S777C4[];
Class_Descriptor cd_S777C4 = {  "S777C4", // class name
  bases_S777C4, 1,
  &(vtc_S777C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S777C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S777C4),126, //virtual function table var
  2, // 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  S777C3  : S777C4 {
  virtual void  v132(); // _ZN6S777C34v132Ev
  virtual void  v133(); // _ZN6S777C34v133Ev
  virtual void  v134(); // _ZN6S777C34v134Ev
  virtual void  v135(); // _ZN6S777C34v135Ev
  virtual void  v136(); // _ZN6S777C34v136Ev
  virtual void  v137(); // _ZN6S777C34v137Ev
  virtual void  v138(); // _ZN6S777C34v138Ev
  virtual void  v139(); // _ZN6S777C34v139Ev
  virtual void  v140(); // _ZN6S777C34v140Ev
  virtual void  v141(); // _ZN6S777C34v141Ev
  virtual void  v142(); // _ZN6S777C34v142Ev
  virtual void  v143(); // _ZN6S777C34v143Ev
  virtual void  v144(); // _ZN6S777C34v144Ev
  virtual void  v145(); // _ZN6S777C34v145Ev
  virtual void  v146(); // _ZN6S777C34v146Ev
  virtual void  v147(); // _ZN6S777C34v147Ev
  virtual void  v148(); // _ZN6S777C34v148Ev
  virtual void  v149(); // _ZN6S777C34v149Ev
  ~S777C3(); // tgen
  S777C3(); // tgen
};
//SIG(-1 S777C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S777C3 ::v132(){vfunc_called(this, "_ZN6S777C34v132Ev");}
void  S777C3 ::v133(){vfunc_called(this, "_ZN6S777C34v133Ev");}
void  S777C3 ::v134(){vfunc_called(this, "_ZN6S777C34v134Ev");}
void  S777C3 ::v135(){vfunc_called(this, "_ZN6S777C34v135Ev");}
void  S777C3 ::v136(){vfunc_called(this, "_ZN6S777C34v136Ev");}
void  S777C3 ::v137(){vfunc_called(this, "_ZN6S777C34v137Ev");}
void  S777C3 ::v138(){vfunc_called(this, "_ZN6S777C34v138Ev");}
void  S777C3 ::v139(){vfunc_called(this, "_ZN6S777C34v139Ev");}
void  S777C3 ::v140(){vfunc_called(this, "_ZN6S777C34v140Ev");}
void  S777C3 ::v141(){vfunc_called(this, "_ZN6S777C34v141Ev");}
void  S777C3 ::v142(){vfunc_called(this, "_ZN6S777C34v142Ev");}
void  S777C3 ::v143(){vfunc_called(this, "_ZN6S777C34v143Ev");}
void  S777C3 ::v144(){vfunc_called(this, "_ZN6S777C34v144Ev");}
void  S777C3 ::v145(){vfunc_called(this, "_ZN6S777C34v145Ev");}
void  S777C3 ::v146(){vfunc_called(this, "_ZN6S777C34v146Ev");}
void  S777C3 ::v147(){vfunc_called(this, "_ZN6S777C34v147Ev");}
void  S777C3 ::v148(){vfunc_called(this, "_ZN6S777C34v148Ev");}
void  S777C3 ::v149(){vfunc_called(this, "_ZN6S777C34v149Ev");}
S777C3 ::~S777C3(){ note_dtor("S777C3", this);} // tgen
S777C3 ::S777C3(){ note_ctor("S777C3", this);} // tgen

static void Test_S777C3()
{
  extern Class_Descriptor cd_S777C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S777C3, buf);
    S777C3 *dp, &lv = *(dp=new (buf) S777C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S777C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S777C3)");
    check_base_class_offset(lv, (S785C5_nt*)(S777C4*), 0, "S777C3");
    check_base_class_offset(lv, (S777C4*), 0, "S777C3");
    test_class_info(&lv, &cd_S777C3);
    dp->~S777C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS777C3(Test_S777C3, "S777C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S777C3C1Ev();
extern void _ZN6S777C3D1Ev();
Name_Map name_map_S777C3[] = {
  NSPAIR(_ZN6S777C3C1Ev),
  NSPAIR(_ZN6S777C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S777C4;
extern VTBL_ENTRY _ZTI6S777C4[];
extern  VTBL_ENTRY _ZTV6S777C4[];
static Base_Class bases_S777C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S777C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S777C3[];
extern void _ZN6S777C3D1Ev();
extern void _ZN6S777C3D0Ev();
extern void _ZN6S777C43v10Ev();
extern void _ZN6S777C43v11Ev();
extern void _ZN6S777C43v12Ev();
extern void _ZN6S777C43v13Ev();
extern void _ZN6S777C43v14Ev();
extern void _ZN6S777C43v15Ev();
extern void _ZN6S777C43v16Ev();
extern void _ZN6S777C43v17Ev();
extern void _ZN6S777C43v18Ev();
extern void _ZN6S777C43v19Ev();
extern void _ZN6S777C43v20Ev();
extern void _ZN6S777C43v21Ev();
extern void _ZN6S777C43v22Ev();
extern void _ZN6S777C43v23Ev();
extern void _ZN6S777C43v24Ev();
extern void _ZN6S777C43v25Ev();
extern void _ZN6S777C43v26Ev();
extern void _ZN6S777C43v27Ev();
extern void _ZN6S777C43v28Ev();
extern void _ZN6S777C43v29Ev();
extern void _ZN6S777C43v30Ev();
extern void _ZN6S777C43v31Ev();
extern void _ZN6S777C43v32Ev();
extern void _ZN6S777C43v33Ev();
extern void _ZN6S777C43v34Ev();
extern void _ZN6S777C43v35Ev();
extern void _ZN6S777C43v36Ev();
extern void _ZN6S777C43v37Ev();
extern void _ZN6S777C43v38Ev();
extern void _ZN6S777C43v39Ev();
extern void _ZN6S777C43v40Ev();
extern void _ZN6S777C43v41Ev();
extern void _ZN6S777C43v42Ev();
extern void _ZN6S777C43v43Ev();
extern void _ZN6S777C43v44Ev();
extern void _ZN6S777C43v45Ev();
extern void _ZN6S777C43v46Ev();
extern void _ZN6S777C43v47Ev();
extern void _ZN6S777C43v48Ev();
extern void _ZN6S777C43v49Ev();
extern void _ZN6S777C43v50Ev();
extern void _ZN6S777C43v51Ev();
extern void _ZN6S777C43v52Ev();
extern void _ZN6S777C43v53Ev();
extern void _ZN6S777C43v54Ev();
extern void _ZN6S777C43v55Ev();
extern void _ZN6S777C43v56Ev();
extern void _ZN6S777C43v57Ev();
extern void _ZN6S777C43v58Ev();
extern void _ZN6S777C43v59Ev();
extern void _ZN6S777C43v60Ev();
extern void _ZN6S777C43v61Ev();
extern void _ZN6S777C43v62Ev();
extern void _ZN6S777C43v63Ev();
extern void _ZN6S777C43v64Ev();
extern void _ZN6S777C43v65Ev();
extern void _ZN6S777C43v66Ev();
extern void _ZN6S777C43v67Ev();
extern void _ZN6S777C43v68Ev();
extern void _ZN6S777C43v69Ev();
extern void _ZN6S777C43v70Ev();
extern void _ZN6S777C43v71Ev();
extern void _ZN6S777C43v72Ev();
extern void _ZN6S777C43v73Ev();
extern void _ZN6S777C43v74Ev();
extern void _ZN6S777C43v75Ev();
extern void _ZN6S777C43v76Ev();
extern void _ZN6S777C43v77Ev();
extern void _ZN6S777C43v78Ev();
extern void _ZN6S777C43v79Ev();
extern void _ZN6S777C43v80Ev();
extern void _ZN6S777C43v81Ev();
extern void _ZN6S777C43v82Ev();
extern void _ZN6S777C43v83Ev();
extern void _ZN6S777C43v84Ev();
extern void _ZN6S777C43v85Ev();
extern void _ZN6S777C43v86Ev();
extern void _ZN6S777C43v87Ev();
extern void _ZN6S777C43v88Ev();
extern void _ZN6S777C43v89Ev();
extern void _ZN6S777C43v90Ev();
extern void _ZN6S777C43v91Ev();
extern void _ZN6S777C43v92Ev();
extern void _ZN6S777C43v93Ev();
extern void _ZN6S777C43v94Ev();
extern void _ZN6S777C43v95Ev();
extern void _ZN6S777C43v96Ev();
extern void _ZN6S777C43v97Ev();
extern void _ZN6S777C43v98Ev();
extern void _ZN6S777C43v99Ev();
extern void _ZN6S777C44v100Ev();
extern void _ZN6S777C44v101Ev();
extern void _ZN6S777C44v102Ev();
extern void _ZN6S777C44v103Ev();
extern void _ZN6S777C44v104Ev();
extern void _ZN6S777C44v105Ev();
extern void _ZN6S777C44v106Ev();
extern void _ZN6S777C44v107Ev();
extern void _ZN6S777C44v108Ev();
extern void _ZN6S777C44v109Ev();
extern void _ZN6S777C44v110Ev();
extern void _ZN6S777C44v111Ev();
extern void _ZN6S777C44v112Ev();
extern void _ZN6S777C44v113Ev();
extern void _ZN6S777C44v114Ev();
extern void _ZN6S777C44v115Ev();
extern void _ZN6S777C44v116Ev();
extern void _ZN6S777C44v117Ev();
extern void _ZN6S777C44v118Ev();
extern void _ZN6S777C44v119Ev();
extern void _ZN6S777C44v120Ev();
extern void _ZN6S777C44v121Ev();
extern void _ZN6S777C44v122Ev();
extern void _ZN6S777C44v123Ev();
extern void _ZN6S777C44v124Ev();
extern void _ZN6S777C44v125Ev();
extern void _ZN6S777C44v126Ev();
extern void _ZN6S777C44v127Ev();
extern void _ZN6S777C44v128Ev();
extern void _ZN6S777C44v129Ev();
extern void _ZN6S777C44v130Ev();
extern void _ZN6S777C44v131Ev();
extern void _ZN6S777C34v132Ev();
extern void _ZN6S777C34v133Ev();
extern void _ZN6S777C34v134Ev();
extern void _ZN6S777C34v135Ev();
extern void _ZN6S777C34v136Ev();
extern void _ZN6S777C34v137Ev();
extern void _ZN6S777C34v138Ev();
extern void _ZN6S777C34v139Ev();
extern void _ZN6S777C34v140Ev();
extern void _ZN6S777C34v141Ev();
extern void _ZN6S777C34v142Ev();
extern void _ZN6S777C34v143Ev();
extern void _ZN6S777C34v144Ev();
extern void _ZN6S777C34v145Ev();
extern void _ZN6S777C34v146Ev();
extern void _ZN6S777C34v147Ev();
extern void _ZN6S777C34v148Ev();
extern void _ZN6S777C34v149Ev();
static  VTBL_ENTRY vtc_S777C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S777C3[0]),
  (VTBL_ENTRY)&_ZN6S777C3D1Ev,
  (VTBL_ENTRY)&_ZN6S777C3D0Ev,
  (VTBL_ENTRY)&_ZN6S777C43v10Ev,
  (VTBL_ENTRY)&_ZN6S777C43v11Ev,
  (VTBL_ENTRY)&_ZN6S777C43v12Ev,
  (VTBL_ENTRY)&_ZN6S777C43v13Ev,
  (VTBL_ENTRY)&_ZN6S777C43v14Ev,
  (VTBL_ENTRY)&_ZN6S777C43v15Ev,
  (VTBL_ENTRY)&_ZN6S777C43v16Ev,
  (VTBL_ENTRY)&_ZN6S777C43v17Ev,
  (VTBL_ENTRY)&_ZN6S777C43v18Ev,
  (VTBL_ENTRY)&_ZN6S777C43v19Ev,
  (VTBL_ENTRY)&_ZN6S777C43v20Ev,
  (VTBL_ENTRY)&_ZN6S777C43v21Ev,
  (VTBL_ENTRY)&_ZN6S777C43v22Ev,
  (VTBL_ENTRY)&_ZN6S777C43v23Ev,
  (VTBL_ENTRY)&_ZN6S777C43v24Ev,
  (VTBL_ENTRY)&_ZN6S777C43v25Ev,
  (VTBL_ENTRY)&_ZN6S777C43v26Ev,
  (VTBL_ENTRY)&_ZN6S777C43v27Ev,
  (VTBL_ENTRY)&_ZN6S777C43v28Ev,
  (VTBL_ENTRY)&_ZN6S777C43v29Ev,
  (VTBL_ENTRY)&_ZN6S777C43v30Ev,
  (VTBL_ENTRY)&_ZN6S777C43v31Ev,
  (VTBL_ENTRY)&_ZN6S777C43v32Ev,
  (VTBL_ENTRY)&_ZN6S777C43v33Ev,
  (VTBL_ENTRY)&_ZN6S777C43v34Ev,
  (VTBL_ENTRY)&_ZN6S777C43v35Ev,
  (VTBL_ENTRY)&_ZN6S777C43v36Ev,
  (VTBL_ENTRY)&_ZN6S777C43v37Ev,
  (VTBL_ENTRY)&_ZN6S777C43v38Ev,
  (VTBL_ENTRY)&_ZN6S777C43v39Ev,
  (VTBL_ENTRY)&_ZN6S777C43v40Ev,
  (VTBL_ENTRY)&_ZN6S777C43v41Ev,
  (VTBL_ENTRY)&_ZN6S777C43v42Ev,
  (VTBL_ENTRY)&_ZN6S777C43v43Ev,
  (VTBL_ENTRY)&_ZN6S777C43v44Ev,
  (VTBL_ENTRY)&_ZN6S777C43v45Ev,
  (VTBL_ENTRY)&_ZN6S777C43v46Ev,
  (VTBL_ENTRY)&_ZN6S777C43v47Ev,
  (VTBL_ENTRY)&_ZN6S777C43v48Ev,
  (VTBL_ENTRY)&_ZN6S777C43v49Ev,
  (VTBL_ENTRY)&_ZN6S777C43v50Ev,
  (VTBL_ENTRY)&_ZN6S777C43v51Ev,
  (VTBL_ENTRY)&_ZN6S777C43v52Ev,
  (VTBL_ENTRY)&_ZN6S777C43v53Ev,
  (VTBL_ENTRY)&_ZN6S777C43v54Ev,
  (VTBL_ENTRY)&_ZN6S777C43v55Ev,
  (VTBL_ENTRY)&_ZN6S777C43v56Ev,
  (VTBL_ENTRY)&_ZN6S777C43v57Ev,
  (VTBL_ENTRY)&_ZN6S777C43v58Ev,
  (VTBL_ENTRY)&_ZN6S777C43v59Ev,
  (VTBL_ENTRY)&_ZN6S777C43v60Ev,
  (VTBL_ENTRY)&_ZN6S777C43v61Ev,
  (VTBL_ENTRY)&_ZN6S777C43v62Ev,
  (VTBL_ENTRY)&_ZN6S777C43v63Ev,
  (VTBL_ENTRY)&_ZN6S777C43v64Ev,
  (VTBL_ENTRY)&_ZN6S777C43v65Ev,
  (VTBL_ENTRY)&_ZN6S777C43v66Ev,
  (VTBL_ENTRY)&_ZN6S777C43v67Ev,
  (VTBL_ENTRY)&_ZN6S777C43v68Ev,
  (VTBL_ENTRY)&_ZN6S777C43v69Ev,
  (VTBL_ENTRY)&_ZN6S777C43v70Ev,
  (VTBL_ENTRY)&_ZN6S777C43v71Ev,
  (VTBL_ENTRY)&_ZN6S777C43v72Ev,
  (VTBL_ENTRY)&_ZN6S777C43v73Ev,
  (VTBL_ENTRY)&_ZN6S777C43v74Ev,
  (VTBL_ENTRY)&_ZN6S777C43v75Ev,
  (VTBL_ENTRY)&_ZN6S777C43v76Ev,
  (VTBL_ENTRY)&_ZN6S777C43v77Ev,
  (VTBL_ENTRY)&_ZN6S777C43v78Ev,
  (VTBL_ENTRY)&_ZN6S777C43v79Ev,
  (VTBL_ENTRY)&_ZN6S777C43v80Ev,
  (VTBL_ENTRY)&_ZN6S777C43v81Ev,
  (VTBL_ENTRY)&_ZN6S777C43v82Ev,
  (VTBL_ENTRY)&_ZN6S777C43v83Ev,
  (VTBL_ENTRY)&_ZN6S777C43v84Ev,
  (VTBL_ENTRY)&_ZN6S777C43v85Ev,
  (VTBL_ENTRY)&_ZN6S777C43v86Ev,
  (VTBL_ENTRY)&_ZN6S777C43v87Ev,
  (VTBL_ENTRY)&_ZN6S777C43v88Ev,
  (VTBL_ENTRY)&_ZN6S777C43v89Ev,
  (VTBL_ENTRY)&_ZN6S777C43v90Ev,
  (VTBL_ENTRY)&_ZN6S777C43v91Ev,
  (VTBL_ENTRY)&_ZN6S777C43v92Ev,
  (VTBL_ENTRY)&_ZN6S777C43v93Ev,
  (VTBL_ENTRY)&_ZN6S777C43v94Ev,
  (VTBL_ENTRY)&_ZN6S777C43v95Ev,
  (VTBL_ENTRY)&_ZN6S777C43v96Ev,
  (VTBL_ENTRY)&_ZN6S777C43v97Ev,
  (VTBL_ENTRY)&_ZN6S777C43v98Ev,
  (VTBL_ENTRY)&_ZN6S777C43v99Ev,
  (VTBL_ENTRY)&_ZN6S777C44v100Ev,
  (VTBL_ENTRY)&_ZN6S777C44v101Ev,
  (VTBL_ENTRY)&_ZN6S777C44v102Ev,
  (VTBL_ENTRY)&_ZN6S777C44v103Ev,
  (VTBL_ENTRY)&_ZN6S777C44v104Ev,
  (VTBL_ENTRY)&_ZN6S777C44v105Ev,
  (VTBL_ENTRY)&_ZN6S777C44v106Ev,
  (VTBL_ENTRY)&_ZN6S777C44v107Ev,
  (VTBL_ENTRY)&_ZN6S777C44v108Ev,
  (VTBL_ENTRY)&_ZN6S777C44v109Ev,
  (VTBL_ENTRY)&_ZN6S777C44v110Ev,
  (VTBL_ENTRY)&_ZN6S777C44v111Ev,
  (VTBL_ENTRY)&_ZN6S777C44v112Ev,
  (VTBL_ENTRY)&_ZN6S777C44v113Ev,
  (VTBL_ENTRY)&_ZN6S777C44v114Ev,
  (VTBL_ENTRY)&_ZN6S777C44v115Ev,
  (VTBL_ENTRY)&_ZN6S777C44v116Ev,
  (VTBL_ENTRY)&_ZN6S777C44v117Ev,
  (VTBL_ENTRY)&_ZN6S777C44v118Ev,
  (VTBL_ENTRY)&_ZN6S777C44v119Ev,
  (VTBL_ENTRY)&_ZN6S777C44v120Ev,
  (VTBL_ENTRY)&_ZN6S777C44v121Ev,
  (VTBL_ENTRY)&_ZN6S777C44v122Ev,
  (VTBL_ENTRY)&_ZN6S777C44v123Ev,
  (VTBL_ENTRY)&_ZN6S777C44v124Ev,
  (VTBL_ENTRY)&_ZN6S777C44v125Ev,
  (VTBL_ENTRY)&_ZN6S777C44v126Ev,
  (VTBL_ENTRY)&_ZN6S777C44v127Ev,
  (VTBL_ENTRY)&_ZN6S777C44v128Ev,
  (VTBL_ENTRY)&_ZN6S777C44v129Ev,
  (VTBL_ENTRY)&_ZN6S777C44v130Ev,
  (VTBL_ENTRY)&_ZN6S777C44v131Ev,
  (VTBL_ENTRY)&_ZN6S777C34v132Ev,
  (VTBL_ENTRY)&_ZN6S777C34v133Ev,
  (VTBL_ENTRY)&_ZN6S777C34v134Ev,
  (VTBL_ENTRY)&_ZN6S777C34v135Ev,
  (VTBL_ENTRY)&_ZN6S777C34v136Ev,
  (VTBL_ENTRY)&_ZN6S777C34v137Ev,
  (VTBL_ENTRY)&_ZN6S777C34v138Ev,
  (VTBL_ENTRY)&_ZN6S777C34v139Ev,
  (VTBL_ENTRY)&_ZN6S777C34v140Ev,
  (VTBL_ENTRY)&_ZN6S777C34v141Ev,
  (VTBL_ENTRY)&_ZN6S777C34v142Ev,
  (VTBL_ENTRY)&_ZN6S777C34v143Ev,
  (VTBL_ENTRY)&_ZN6S777C34v144Ev,
  (VTBL_ENTRY)&_ZN6S777C34v145Ev,
  (VTBL_ENTRY)&_ZN6S777C34v146Ev,
  (VTBL_ENTRY)&_ZN6S777C34v147Ev,
  (VTBL_ENTRY)&_ZN6S777C34v148Ev,
  (VTBL_ENTRY)&_ZN6S777C34v149Ev,
};
extern VTBL_ENTRY _ZTI6S777C3[];
extern  VTBL_ENTRY _ZTV6S777C3[];
Class_Descriptor cd_S777C3 = {  "S777C3", // class name
  bases_S777C3, 2,
  &(vtc_S777C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S777C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S777C3),144, //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  S777C2  : S777C3 {
  virtual void  v150(); // _ZN6S777C24v150Ev
  ~S777C2(); // tgen
  S777C2(); // tgen
};
//SIG(-1 S777C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


void  S777C2 ::v150(){vfunc_called(this, "_ZN6S777C24v150Ev");}
S777C2 ::~S777C2(){ note_dtor("S777C2", this);} // tgen
S777C2 ::S777C2(){ note_ctor("S777C2", this);} // tgen

static void Test_S777C2()
{
  extern Class_Descriptor cd_S777C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S777C2, buf);
    S777C2 *dp, &lv = *(dp=new (buf) S777C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S777C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S777C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S777C4*)(S777C3*), 0, "S777C2");
    check_base_class_offset(lv, (S777C4*)(S777C3*), 0, "S777C2");
    check_base_class_offset(lv, (S777C3*), 0, "S777C2");
    test_class_info(&lv, &cd_S777C2);
    dp->~S777C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS777C2(Test_S777C2, "S777C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S777C2C1Ev();
extern void _ZN6S777C2D1Ev();
Name_Map name_map_S777C2[] = {
  NSPAIR(_ZN6S777C2C1Ev),
  NSPAIR(_ZN6S777C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S777C4;
extern VTBL_ENTRY _ZTI6S777C4[];
extern  VTBL_ENTRY _ZTV6S777C4[];
extern Class_Descriptor cd_S777C3;
extern VTBL_ENTRY _ZTI6S777C3[];
extern  VTBL_ENTRY _ZTV6S777C3[];
static Base_Class bases_S777C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S777C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S777C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S777C2[];
extern void _ZN6S777C2D1Ev();
extern void _ZN6S777C2D0Ev();
extern void _ZN6S777C43v10Ev();
extern void _ZN6S777C43v11Ev();
extern void _ZN6S777C43v12Ev();
extern void _ZN6S777C43v13Ev();
extern void _ZN6S777C43v14Ev();
extern void _ZN6S777C43v15Ev();
extern void _ZN6S777C43v16Ev();
extern void _ZN6S777C43v17Ev();
extern void _ZN6S777C43v18Ev();
extern void _ZN6S777C43v19Ev();
extern void _ZN6S777C43v20Ev();
extern void _ZN6S777C43v21Ev();
extern void _ZN6S777C43v22Ev();
extern void _ZN6S777C43v23Ev();
extern void _ZN6S777C43v24Ev();
extern void _ZN6S777C43v25Ev();
extern void _ZN6S777C43v26Ev();
extern void _ZN6S777C43v27Ev();
extern void _ZN6S777C43v28Ev();
extern void _ZN6S777C43v29Ev();
extern void _ZN6S777C43v30Ev();
extern void _ZN6S777C43v31Ev();
extern void _ZN6S777C43v32Ev();
extern void _ZN6S777C43v33Ev();
extern void _ZN6S777C43v34Ev();
extern void _ZN6S777C43v35Ev();
extern void _ZN6S777C43v36Ev();
extern void _ZN6S777C43v37Ev();
extern void _ZN6S777C43v38Ev();
extern void _ZN6S777C43v39Ev();
extern void _ZN6S777C43v40Ev();
extern void _ZN6S777C43v41Ev();
extern void _ZN6S777C43v42Ev();
extern void _ZN6S777C43v43Ev();
extern void _ZN6S777C43v44Ev();
extern void _ZN6S777C43v45Ev();
extern void _ZN6S777C43v46Ev();
extern void _ZN6S777C43v47Ev();
extern void _ZN6S777C43v48Ev();
extern void _ZN6S777C43v49Ev();
extern void _ZN6S777C43v50Ev();
extern void _ZN6S777C43v51Ev();
extern void _ZN6S777C43v52Ev();
extern void _ZN6S777C43v53Ev();
extern void _ZN6S777C43v54Ev();
extern void _ZN6S777C43v55Ev();
extern void _ZN6S777C43v56Ev();
extern void _ZN6S777C43v57Ev();
extern void _ZN6S777C43v58Ev();
extern void _ZN6S777C43v59Ev();
extern void _ZN6S777C43v60Ev();
extern void _ZN6S777C43v61Ev();
extern void _ZN6S777C43v62Ev();
extern void _ZN6S777C43v63Ev();
extern void _ZN6S777C43v64Ev();
extern void _ZN6S777C43v65Ev();
extern void _ZN6S777C43v66Ev();
extern void _ZN6S777C43v67Ev();
extern void _ZN6S777C43v68Ev();
extern void _ZN6S777C43v69Ev();
extern void _ZN6S777C43v70Ev();
extern void _ZN6S777C43v71Ev();
extern void _ZN6S777C43v72Ev();
extern void _ZN6S777C43v73Ev();
extern void _ZN6S777C43v74Ev();
extern void _ZN6S777C43v75Ev();
extern void _ZN6S777C43v76Ev();
extern void _ZN6S777C43v77Ev();
extern void _ZN6S777C43v78Ev();
extern void _ZN6S777C43v79Ev();
extern void _ZN6S777C43v80Ev();
extern void _ZN6S777C43v81Ev();
extern void _ZN6S777C43v82Ev();
extern void _ZN6S777C43v83Ev();
extern void _ZN6S777C43v84Ev();
extern void _ZN6S777C43v85Ev();
extern void _ZN6S777C43v86Ev();
extern void _ZN6S777C43v87Ev();
extern void _ZN6S777C43v88Ev();
extern void _ZN6S777C43v89Ev();
extern void _ZN6S777C43v90Ev();
extern void _ZN6S777C43v91Ev();
extern void _ZN6S777C43v92Ev();
extern void _ZN6S777C43v93Ev();
extern void _ZN6S777C43v94Ev();
extern void _ZN6S777C43v95Ev();
extern void _ZN6S777C43v96Ev();
extern void _ZN6S777C43v97Ev();
extern void _ZN6S777C43v98Ev();
extern void _ZN6S777C43v99Ev();
extern void _ZN6S777C44v100Ev();
extern void _ZN6S777C44v101Ev();
extern void _ZN6S777C44v102Ev();
extern void _ZN6S777C44v103Ev();
extern void _ZN6S777C44v104Ev();
extern void _ZN6S777C44v105Ev();
extern void _ZN6S777C44v106Ev();
extern void _ZN6S777C44v107Ev();
extern void _ZN6S777C44v108Ev();
extern void _ZN6S777C44v109Ev();
extern void _ZN6S777C44v110Ev();
extern void _ZN6S777C44v111Ev();
extern void _ZN6S777C44v112Ev();
extern void _ZN6S777C44v113Ev();
extern void _ZN6S777C44v114Ev();
extern void _ZN6S777C44v115Ev();
extern void _ZN6S777C44v116Ev();
extern void _ZN6S777C44v117Ev();
extern void _ZN6S777C44v118Ev();
extern void _ZN6S777C44v119Ev();
extern void _ZN6S777C44v120Ev();
extern void _ZN6S777C44v121Ev();
extern void _ZN6S777C44v122Ev();
extern void _ZN6S777C44v123Ev();
extern void _ZN6S777C44v124Ev();
extern void _ZN6S777C44v125Ev();
extern void _ZN6S777C44v126Ev();
extern void _ZN6S777C44v127Ev();
extern void _ZN6S777C44v128Ev();
extern void _ZN6S777C44v129Ev();
extern void _ZN6S777C44v130Ev();
extern void _ZN6S777C44v131Ev();
extern void _ZN6S777C34v132Ev();
extern void _ZN6S777C34v133Ev();
extern void _ZN6S777C34v134Ev();
extern void _ZN6S777C34v135Ev();
extern void _ZN6S777C34v136Ev();
extern void _ZN6S777C34v137Ev();
extern void _ZN6S777C34v138Ev();
extern void _ZN6S777C34v139Ev();
extern void _ZN6S777C34v140Ev();
extern void _ZN6S777C34v141Ev();
extern void _ZN6S777C34v142Ev();
extern void _ZN6S777C34v143Ev();
extern void _ZN6S777C34v144Ev();
extern void _ZN6S777C34v145Ev();
extern void _ZN6S777C34v146Ev();
extern void _ZN6S777C34v147Ev();
extern void _ZN6S777C34v148Ev();
extern void _ZN6S777C34v149Ev();
extern void _ZN6S777C24v150Ev();
static  VTBL_ENTRY vtc_S777C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S777C2[0]),
  (VTBL_ENTRY)&_ZN6S777C2D1Ev,
  (VTBL_ENTRY)&_ZN6S777C2D0Ev,
  (VTBL_ENTRY)&_ZN6S777C43v10Ev,
  (VTBL_ENTRY)&_ZN6S777C43v11Ev,
  (VTBL_ENTRY)&_ZN6S777C43v12Ev,
  (VTBL_ENTRY)&_ZN6S777C43v13Ev,
  (VTBL_ENTRY)&_ZN6S777C43v14Ev,
  (VTBL_ENTRY)&_ZN6S777C43v15Ev,
  (VTBL_ENTRY)&_ZN6S777C43v16Ev,
  (VTBL_ENTRY)&_ZN6S777C43v17Ev,
  (VTBL_ENTRY)&_ZN6S777C43v18Ev,
  (VTBL_ENTRY)&_ZN6S777C43v19Ev,
  (VTBL_ENTRY)&_ZN6S777C43v20Ev,
  (VTBL_ENTRY)&_ZN6S777C43v21Ev,
  (VTBL_ENTRY)&_ZN6S777C43v22Ev,
  (VTBL_ENTRY)&_ZN6S777C43v23Ev,
  (VTBL_ENTRY)&_ZN6S777C43v24Ev,
  (VTBL_ENTRY)&_ZN6S777C43v25Ev,
  (VTBL_ENTRY)&_ZN6S777C43v26Ev,
  (VTBL_ENTRY)&_ZN6S777C43v27Ev,
  (VTBL_ENTRY)&_ZN6S777C43v28Ev,
  (VTBL_ENTRY)&_ZN6S777C43v29Ev,
  (VTBL_ENTRY)&_ZN6S777C43v30Ev,
  (VTBL_ENTRY)&_ZN6S777C43v31Ev,
  (VTBL_ENTRY)&_ZN6S777C43v32Ev,
  (VTBL_ENTRY)&_ZN6S777C43v33Ev,
  (VTBL_ENTRY)&_ZN6S777C43v34Ev,
  (VTBL_ENTRY)&_ZN6S777C43v35Ev,
  (VTBL_ENTRY)&_ZN6S777C43v36Ev,
  (VTBL_ENTRY)&_ZN6S777C43v37Ev,
  (VTBL_ENTRY)&_ZN6S777C43v38Ev,
  (VTBL_ENTRY)&_ZN6S777C43v39Ev,
  (VTBL_ENTRY)&_ZN6S777C43v40Ev,
  (VTBL_ENTRY)&_ZN6S777C43v41Ev,
  (VTBL_ENTRY)&_ZN6S777C43v42Ev,
  (VTBL_ENTRY)&_ZN6S777C43v43Ev,
  (VTBL_ENTRY)&_ZN6S777C43v44Ev,
  (VTBL_ENTRY)&_ZN6S777C43v45Ev,
  (VTBL_ENTRY)&_ZN6S777C43v46Ev,
  (VTBL_ENTRY)&_ZN6S777C43v47Ev,
  (VTBL_ENTRY)&_ZN6S777C43v48Ev,
  (VTBL_ENTRY)&_ZN6S777C43v49Ev,
  (VTBL_ENTRY)&_ZN6S777C43v50Ev,
  (VTBL_ENTRY)&_ZN6S777C43v51Ev,
  (VTBL_ENTRY)&_ZN6S777C43v52Ev,
  (VTBL_ENTRY)&_ZN6S777C43v53Ev,
  (VTBL_ENTRY)&_ZN6S777C43v54Ev,
  (VTBL_ENTRY)&_ZN6S777C43v55Ev,
  (VTBL_ENTRY)&_ZN6S777C43v56Ev,
  (VTBL_ENTRY)&_ZN6S777C43v57Ev,
  (VTBL_ENTRY)&_ZN6S777C43v58Ev,
  (VTBL_ENTRY)&_ZN6S777C43v59Ev,
  (VTBL_ENTRY)&_ZN6S777C43v60Ev,
  (VTBL_ENTRY)&_ZN6S777C43v61Ev,
  (VTBL_ENTRY)&_ZN6S777C43v62Ev,
  (VTBL_ENTRY)&_ZN6S777C43v63Ev,
  (VTBL_ENTRY)&_ZN6S777C43v64Ev,
  (VTBL_ENTRY)&_ZN6S777C43v65Ev,
  (VTBL_ENTRY)&_ZN6S777C43v66Ev,
  (VTBL_ENTRY)&_ZN6S777C43v67Ev,
  (VTBL_ENTRY)&_ZN6S777C43v68Ev,
  (VTBL_ENTRY)&_ZN6S777C43v69Ev,
  (VTBL_ENTRY)&_ZN6S777C43v70Ev,
  (VTBL_ENTRY)&_ZN6S777C43v71Ev,
  (VTBL_ENTRY)&_ZN6S777C43v72Ev,
  (VTBL_ENTRY)&_ZN6S777C43v73Ev,
  (VTBL_ENTRY)&_ZN6S777C43v74Ev,
  (VTBL_ENTRY)&_ZN6S777C43v75Ev,
  (VTBL_ENTRY)&_ZN6S777C43v76Ev,
  (VTBL_ENTRY)&_ZN6S777C43v77Ev,
  (VTBL_ENTRY)&_ZN6S777C43v78Ev,
  (VTBL_ENTRY)&_ZN6S777C43v79Ev,
  (VTBL_ENTRY)&_ZN6S777C43v80Ev,
  (VTBL_ENTRY)&_ZN6S777C43v81Ev,
  (VTBL_ENTRY)&_ZN6S777C43v82Ev,
  (VTBL_ENTRY)&_ZN6S777C43v83Ev,
  (VTBL_ENTRY)&_ZN6S777C43v84Ev,
  (VTBL_ENTRY)&_ZN6S777C43v85Ev,
  (VTBL_ENTRY)&_ZN6S777C43v86Ev,
  (VTBL_ENTRY)&_ZN6S777C43v87Ev,
  (VTBL_ENTRY)&_ZN6S777C43v88Ev,
  (VTBL_ENTRY)&_ZN6S777C43v89Ev,
  (VTBL_ENTRY)&_ZN6S777C43v90Ev,
  (VTBL_ENTRY)&_ZN6S777C43v91Ev,
  (VTBL_ENTRY)&_ZN6S777C43v92Ev,
  (VTBL_ENTRY)&_ZN6S777C43v93Ev,
  (VTBL_ENTRY)&_ZN6S777C43v94Ev,
  (VTBL_ENTRY)&_ZN6S777C43v95Ev,
  (VTBL_ENTRY)&_ZN6S777C43v96Ev,
  (VTBL_ENTRY)&_ZN6S777C43v97Ev,
  (VTBL_ENTRY)&_ZN6S777C43v98Ev,
  (VTBL_ENTRY)&_ZN6S777C43v99Ev,
  (VTBL_ENTRY)&_ZN6S777C44v100Ev,
  (VTBL_ENTRY)&_ZN6S777C44v101Ev,
  (VTBL_ENTRY)&_ZN6S777C44v102Ev,
  (VTBL_ENTRY)&_ZN6S777C44v103Ev,
  (VTBL_ENTRY)&_ZN6S777C44v104Ev,
  (VTBL_ENTRY)&_ZN6S777C44v105Ev,
  (VTBL_ENTRY)&_ZN6S777C44v106Ev,
  (VTBL_ENTRY)&_ZN6S777C44v107Ev,
  (VTBL_ENTRY)&_ZN6S777C44v108Ev,
  (VTBL_ENTRY)&_ZN6S777C44v109Ev,
  (VTBL_ENTRY)&_ZN6S777C44v110Ev,
  (VTBL_ENTRY)&_ZN6S777C44v111Ev,
  (VTBL_ENTRY)&_ZN6S777C44v112Ev,
  (VTBL_ENTRY)&_ZN6S777C44v113Ev,
  (VTBL_ENTRY)&_ZN6S777C44v114Ev,
  (VTBL_ENTRY)&_ZN6S777C44v115Ev,
  (VTBL_ENTRY)&_ZN6S777C44v116Ev,
  (VTBL_ENTRY)&_ZN6S777C44v117Ev,
  (VTBL_ENTRY)&_ZN6S777C44v118Ev,
  (VTBL_ENTRY)&_ZN6S777C44v119Ev,
  (VTBL_ENTRY)&_ZN6S777C44v120Ev,
  (VTBL_ENTRY)&_ZN6S777C44v121Ev,
  (VTBL_ENTRY)&_ZN6S777C44v122Ev,
  (VTBL_ENTRY)&_ZN6S777C44v123Ev,
  (VTBL_ENTRY)&_ZN6S777C44v124Ev,
  (VTBL_ENTRY)&_ZN6S777C44v125Ev,
  (VTBL_ENTRY)&_ZN6S777C44v126Ev,
  (VTBL_ENTRY)&_ZN6S777C44v127Ev,
  (VTBL_ENTRY)&_ZN6S777C44v128Ev,
  (VTBL_ENTRY)&_ZN6S777C44v129Ev,
  (VTBL_ENTRY)&_ZN6S777C44v130Ev,
  (VTBL_ENTRY)&_ZN6S777C44v131Ev,
  (VTBL_ENTRY)&_ZN6S777C34v132Ev,
  (VTBL_ENTRY)&_ZN6S777C34v133Ev,
  (VTBL_ENTRY)&_ZN6S777C34v134Ev,
  (VTBL_ENTRY)&_ZN6S777C34v135Ev,
  (VTBL_ENTRY)&_ZN6S777C34v136Ev,
  (VTBL_ENTRY)&_ZN6S777C34v137Ev,
  (VTBL_ENTRY)&_ZN6S777C34v138Ev,
  (VTBL_ENTRY)&_ZN6S777C34v139Ev,
  (VTBL_ENTRY)&_ZN6S777C34v140Ev,
  (VTBL_ENTRY)&_ZN6S777C34v141Ev,
  (VTBL_ENTRY)&_ZN6S777C34v142Ev,
  (VTBL_ENTRY)&_ZN6S777C34v143Ev,
  (VTBL_ENTRY)&_ZN6S777C34v144Ev,
  (VTBL_ENTRY)&_ZN6S777C34v145Ev,
  (VTBL_ENTRY)&_ZN6S777C34v146Ev,
  (VTBL_ENTRY)&_ZN6S777C34v147Ev,
  (VTBL_ENTRY)&_ZN6S777C34v148Ev,
  (VTBL_ENTRY)&_ZN6S777C34v149Ev,
  (VTBL_ENTRY)&_ZN6S777C24v150Ev,
};
extern VTBL_ENTRY _ZTI6S777C2[];
extern  VTBL_ENTRY _ZTV6S777C2[];
Class_Descriptor cd_S777C2 = {  "S777C2", // class name
  bases_S777C2, 3,
  &(vtc_S777C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S777C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S777C2),145, //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  S777C1  : S777C2 {
  virtual void  v1(); // _ZN6S777C12v1Ev
  virtual void  v2(); // _ZN6S777C12v2Ev
  virtual void  v3(); // _ZN6S777C12v3Ev
  virtual void  v4(); // _ZN6S777C12v4Ev
  virtual void  v5(); // _ZN6S777C12v5Ev
  virtual void  v6(); // _ZN6S777C12v6Ev
  virtual void  v7(); // _ZN6S777C12v7Ev
  virtual void  v8(); // _ZN6S777C12v8Ev
  virtual void  v9(); // _ZN6S777C12v9Ev
  ~S777C1(); // tgen
  S777C1(); // tgen
};
//SIG(1 S777C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 v144 v145 v146 v147 v148 v149} v150} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S777C1 ::v1(){vfunc_called(this, "_ZN6S777C12v1Ev");}
void  S777C1 ::v2(){vfunc_called(this, "_ZN6S777C12v2Ev");}
void  S777C1 ::v3(){vfunc_called(this, "_ZN6S777C12v3Ev");}
void  S777C1 ::v4(){vfunc_called(this, "_ZN6S777C12v4Ev");}
void  S777C1 ::v5(){vfunc_called(this, "_ZN6S777C12v5Ev");}
void  S777C1 ::v6(){vfunc_called(this, "_ZN6S777C12v6Ev");}
void  S777C1 ::v7(){vfunc_called(this, "_ZN6S777C12v7Ev");}
void  S777C1 ::v8(){vfunc_called(this, "_ZN6S777C12v8Ev");}
void  S777C1 ::v9(){vfunc_called(this, "_ZN6S777C12v9Ev");}
S777C1 ::~S777C1(){ note_dtor("S777C1", this);} // tgen
S777C1 ::S777C1(){ note_ctor("S777C1", this);} // tgen

static void Test_S777C1()
{
  extern Class_Descriptor cd_S777C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S777C1, buf);
    S777C1 *dp, &lv = *(dp=new (buf) S777C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S777C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S777C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S777C4*)(S777C3*)(S777C2*), 0, "S777C1");
    check_base_class_offset(lv, (S777C4*)(S777C3*)(S777C2*), 0, "S777C1");
    check_base_class_offset(lv, (S777C3*)(S777C2*), 0, "S777C1");
    check_base_class_offset(lv, (S777C2*), 0, "S777C1");
    test_class_info(&lv, &cd_S777C1);
    dp->~S777C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS777C1(Test_S777C1, "S777C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S777C1C1Ev();
extern void _ZN6S777C1D1Ev();
Name_Map name_map_S777C1[] = {
  NSPAIR(_ZN6S777C1C1Ev),
  NSPAIR(_ZN6S777C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S777C4;
extern VTBL_ENTRY _ZTI6S777C4[];
extern  VTBL_ENTRY _ZTV6S777C4[];
extern Class_Descriptor cd_S777C3;
extern VTBL_ENTRY _ZTI6S777C3[];
extern  VTBL_ENTRY _ZTV6S777C3[];
extern Class_Descriptor cd_S777C2;
extern VTBL_ENTRY _ZTI6S777C2[];
extern  VTBL_ENTRY _ZTV6S777C2[];
static Base_Class bases_S777C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S777C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S777C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S777C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S777C1[];
extern void _ZN6S777C1D1Ev();
extern void _ZN6S777C1D0Ev();
extern void _ZN6S777C43v10Ev();
extern void _ZN6S777C43v11Ev();
extern void _ZN6S777C43v12Ev();
extern void _ZN6S777C43v13Ev();
extern void _ZN6S777C43v14Ev();
extern void _ZN6S777C43v15Ev();
extern void _ZN6S777C43v16Ev();
extern void _ZN6S777C43v17Ev();
extern void _ZN6S777C43v18Ev();
extern void _ZN6S777C43v19Ev();
extern void _ZN6S777C43v20Ev();
extern void _ZN6S777C43v21Ev();
extern void _ZN6S777C43v22Ev();
extern void _ZN6S777C43v23Ev();
extern void _ZN6S777C43v24Ev();
extern void _ZN6S777C43v25Ev();
extern void _ZN6S777C43v26Ev();
extern void _ZN6S777C43v27Ev();
extern void _ZN6S777C43v28Ev();
extern void _ZN6S777C43v29Ev();
extern void _ZN6S777C43v30Ev();
extern void _ZN6S777C43v31Ev();
extern void _ZN6S777C43v32Ev();
extern void _ZN6S777C43v33Ev();
extern void _ZN6S777C43v34Ev();
extern void _ZN6S777C43v35Ev();
extern void _ZN6S777C43v36Ev();
extern void _ZN6S777C43v37Ev();
extern void _ZN6S777C43v38Ev();
extern void _ZN6S777C43v39Ev();
extern void _ZN6S777C43v40Ev();
extern void _ZN6S777C43v41Ev();
extern void _ZN6S777C43v42Ev();
extern void _ZN6S777C43v43Ev();
extern void _ZN6S777C43v44Ev();
extern void _ZN6S777C43v45Ev();
extern void _ZN6S777C43v46Ev();
extern void _ZN6S777C43v47Ev();
extern void _ZN6S777C43v48Ev();
extern void _ZN6S777C43v49Ev();
extern void _ZN6S777C43v50Ev();
extern void _ZN6S777C43v51Ev();
extern void _ZN6S777C43v52Ev();
extern void _ZN6S777C43v53Ev();
extern void _ZN6S777C43v54Ev();
extern void _ZN6S777C43v55Ev();
extern void _ZN6S777C43v56Ev();
extern void _ZN6S777C43v57Ev();
extern void _ZN6S777C43v58Ev();
extern void _ZN6S777C43v59Ev();
extern void _ZN6S777C43v60Ev();
extern void _ZN6S777C43v61Ev();
extern void _ZN6S777C43v62Ev();
extern void _ZN6S777C43v63Ev();
extern void _ZN6S777C43v64Ev();
extern void _ZN6S777C43v65Ev();
extern void _ZN6S777C43v66Ev();
extern void _ZN6S777C43v67Ev();
extern void _ZN6S777C43v68Ev();
extern void _ZN6S777C43v69Ev();
extern void _ZN6S777C43v70Ev();
extern void _ZN6S777C43v71Ev();
extern void _ZN6S777C43v72Ev();
extern void _ZN6S777C43v73Ev();
extern void _ZN6S777C43v74Ev();
extern void _ZN6S777C43v75Ev();
extern void _ZN6S777C43v76Ev();
extern void _ZN6S777C43v77Ev();
extern void _ZN6S777C43v78Ev();
extern void _ZN6S777C43v79Ev();
extern void _ZN6S777C43v80Ev();
extern void _ZN6S777C43v81Ev();
extern void _ZN6S777C43v82Ev();
extern void _ZN6S777C43v83Ev();
extern void _ZN6S777C43v84Ev();
extern void _ZN6S777C43v85Ev();
extern void _ZN6S777C43v86Ev();
extern void _ZN6S777C43v87Ev();
extern void _ZN6S777C43v88Ev();
extern void _ZN6S777C43v89Ev();
extern void _ZN6S777C43v90Ev();
extern void _ZN6S777C43v91Ev();
extern void _ZN6S777C43v92Ev();
extern void _ZN6S777C43v93Ev();
extern void _ZN6S777C43v94Ev();
extern void _ZN6S777C43v95Ev();
extern void _ZN6S777C43v96Ev();
extern void _ZN6S777C43v97Ev();
extern void _ZN6S777C43v98Ev();
extern void _ZN6S777C43v99Ev();
extern void _ZN6S777C44v100Ev();
extern void _ZN6S777C44v101Ev();
extern void _ZN6S777C44v102Ev();
extern void _ZN6S777C44v103Ev();
extern void _ZN6S777C44v104Ev();
extern void _ZN6S777C44v105Ev();
extern void _ZN6S777C44v106Ev();
extern void _ZN6S777C44v107Ev();
extern void _ZN6S777C44v108Ev();
extern void _ZN6S777C44v109Ev();
extern void _ZN6S777C44v110Ev();
extern void _ZN6S777C44v111Ev();
extern void _ZN6S777C44v112Ev();
extern void _ZN6S777C44v113Ev();
extern void _ZN6S777C44v114Ev();
extern void _ZN6S777C44v115Ev();
extern void _ZN6S777C44v116Ev();
extern void _ZN6S777C44v117Ev();
extern void _ZN6S777C44v118Ev();
extern void _ZN6S777C44v119Ev();
extern void _ZN6S777C44v120Ev();
extern void _ZN6S777C44v121Ev();
extern void _ZN6S777C44v122Ev();
extern void _ZN6S777C44v123Ev();
extern void _ZN6S777C44v124Ev();
extern void _ZN6S777C44v125Ev();
extern void _ZN6S777C44v126Ev();
extern void _ZN6S777C44v127Ev();
extern void _ZN6S777C44v128Ev();
extern void _ZN6S777C44v129Ev();
extern void _ZN6S777C44v130Ev();
extern void _ZN6S777C44v131Ev();
extern void _ZN6S777C34v132Ev();
extern void _ZN6S777C34v133Ev();
extern void _ZN6S777C34v134Ev();
extern void _ZN6S777C34v135Ev();
extern void _ZN6S777C34v136Ev();
extern void _ZN6S777C34v137Ev();
extern void _ZN6S777C34v138Ev();
extern void _ZN6S777C34v139Ev();
extern void _ZN6S777C34v140Ev();
extern void _ZN6S777C34v141Ev();
extern void _ZN6S777C34v142Ev();
extern void _ZN6S777C34v143Ev();
extern void _ZN6S777C34v144Ev();
extern void _ZN6S777C34v145Ev();
extern void _ZN6S777C34v146Ev();
extern void _ZN6S777C34v147Ev();
extern void _ZN6S777C34v148Ev();
extern void _ZN6S777C34v149Ev();
extern void _ZN6S777C24v150Ev();
extern void _ZN6S777C12v1Ev();
extern void _ZN6S777C12v2Ev();
extern void _ZN6S777C12v3Ev();
extern void _ZN6S777C12v4Ev();
extern void _ZN6S777C12v5Ev();
extern void _ZN6S777C12v6Ev();
extern void _ZN6S777C12v7Ev();
extern void _ZN6S777C12v8Ev();
extern void _ZN6S777C12v9Ev();
static  VTBL_ENTRY vtc_S777C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S777C1[0]),
  (VTBL_ENTRY)&_ZN6S777C1D1Ev,
  (VTBL_ENTRY)&_ZN6S777C1D0Ev,
  (VTBL_ENTRY)&_ZN6S777C43v10Ev,
  (VTBL_ENTRY)&_ZN6S777C43v11Ev,
  (VTBL_ENTRY)&_ZN6S777C43v12Ev,
  (VTBL_ENTRY)&_ZN6S777C43v13Ev,
  (VTBL_ENTRY)&_ZN6S777C43v14Ev,
  (VTBL_ENTRY)&_ZN6S777C43v15Ev,
  (VTBL_ENTRY)&_ZN6S777C43v16Ev,
  (VTBL_ENTRY)&_ZN6S777C43v17Ev,
  (VTBL_ENTRY)&_ZN6S777C43v18Ev,
  (VTBL_ENTRY)&_ZN6S777C43v19Ev,
  (VTBL_ENTRY)&_ZN6S777C43v20Ev,
  (VTBL_ENTRY)&_ZN6S777C43v21Ev,
  (VTBL_ENTRY)&_ZN6S777C43v22Ev,
  (VTBL_ENTRY)&_ZN6S777C43v23Ev,
  (VTBL_ENTRY)&_ZN6S777C43v24Ev,
  (VTBL_ENTRY)&_ZN6S777C43v25Ev,
  (VTBL_ENTRY)&_ZN6S777C43v26Ev,
  (VTBL_ENTRY)&_ZN6S777C43v27Ev,
  (VTBL_ENTRY)&_ZN6S777C43v28Ev,
  (VTBL_ENTRY)&_ZN6S777C43v29Ev,
  (VTBL_ENTRY)&_ZN6S777C43v30Ev,
  (VTBL_ENTRY)&_ZN6S777C43v31Ev,
  (VTBL_ENTRY)&_ZN6S777C43v32Ev,
  (VTBL_ENTRY)&_ZN6S777C43v33Ev,
  (VTBL_ENTRY)&_ZN6S777C43v34Ev,
  (VTBL_ENTRY)&_ZN6S777C43v35Ev,
  (VTBL_ENTRY)&_ZN6S777C43v36Ev,
  (VTBL_ENTRY)&_ZN6S777C43v37Ev,
  (VTBL_ENTRY)&_ZN6S777C43v38Ev,
  (VTBL_ENTRY)&_ZN6S777C43v39Ev,
  (VTBL_ENTRY)&_ZN6S777C43v40Ev,
  (VTBL_ENTRY)&_ZN6S777C43v41Ev,
  (VTBL_ENTRY)&_ZN6S777C43v42Ev,
  (VTBL_ENTRY)&_ZN6S777C43v43Ev,
  (VTBL_ENTRY)&_ZN6S777C43v44Ev,
  (VTBL_ENTRY)&_ZN6S777C43v45Ev,
  (VTBL_ENTRY)&_ZN6S777C43v46Ev,
  (VTBL_ENTRY)&_ZN6S777C43v47Ev,
  (VTBL_ENTRY)&_ZN6S777C43v48Ev,
  (VTBL_ENTRY)&_ZN6S777C43v49Ev,
  (VTBL_ENTRY)&_ZN6S777C43v50Ev,
  (VTBL_ENTRY)&_ZN6S777C43v51Ev,
  (VTBL_ENTRY)&_ZN6S777C43v52Ev,
  (VTBL_ENTRY)&_ZN6S777C43v53Ev,
  (VTBL_ENTRY)&_ZN6S777C43v54Ev,
  (VTBL_ENTRY)&_ZN6S777C43v55Ev,
  (VTBL_ENTRY)&_ZN6S777C43v56Ev,
  (VTBL_ENTRY)&_ZN6S777C43v57Ev,
  (VTBL_ENTRY)&_ZN6S777C43v58Ev,
  (VTBL_ENTRY)&_ZN6S777C43v59Ev,
  (VTBL_ENTRY)&_ZN6S777C43v60Ev,
  (VTBL_ENTRY)&_ZN6S777C43v61Ev,
  (VTBL_ENTRY)&_ZN6S777C43v62Ev,
  (VTBL_ENTRY)&_ZN6S777C43v63Ev,
  (VTBL_ENTRY)&_ZN6S777C43v64Ev,
  (VTBL_ENTRY)&_ZN6S777C43v65Ev,
  (VTBL_ENTRY)&_ZN6S777C43v66Ev,
  (VTBL_ENTRY)&_ZN6S777C43v67Ev,
  (VTBL_ENTRY)&_ZN6S777C43v68Ev,
  (VTBL_ENTRY)&_ZN6S777C43v69Ev,
  (VTBL_ENTRY)&_ZN6S777C43v70Ev,
  (VTBL_ENTRY)&_ZN6S777C43v71Ev,
  (VTBL_ENTRY)&_ZN6S777C43v72Ev,
  (VTBL_ENTRY)&_ZN6S777C43v73Ev,
  (VTBL_ENTRY)&_ZN6S777C43v74Ev,
  (VTBL_ENTRY)&_ZN6S777C43v75Ev,
  (VTBL_ENTRY)&_ZN6S777C43v76Ev,
  (VTBL_ENTRY)&_ZN6S777C43v77Ev,
  (VTBL_ENTRY)&_ZN6S777C43v78Ev,
  (VTBL_ENTRY)&_ZN6S777C43v79Ev,
  (VTBL_ENTRY)&_ZN6S777C43v80Ev,
  (VTBL_ENTRY)&_ZN6S777C43v81Ev,
  (VTBL_ENTRY)&_ZN6S777C43v82Ev,
  (VTBL_ENTRY)&_ZN6S777C43v83Ev,
  (VTBL_ENTRY)&_ZN6S777C43v84Ev,
  (VTBL_ENTRY)&_ZN6S777C43v85Ev,
  (VTBL_ENTRY)&_ZN6S777C43v86Ev,
  (VTBL_ENTRY)&_ZN6S777C43v87Ev,
  (VTBL_ENTRY)&_ZN6S777C43v88Ev,
  (VTBL_ENTRY)&_ZN6S777C43v89Ev,
  (VTBL_ENTRY)&_ZN6S777C43v90Ev,
  (VTBL_ENTRY)&_ZN6S777C43v91Ev,
  (VTBL_ENTRY)&_ZN6S777C43v92Ev,
  (VTBL_ENTRY)&_ZN6S777C43v93Ev,
  (VTBL_ENTRY)&_ZN6S777C43v94Ev,
  (VTBL_ENTRY)&_ZN6S777C43v95Ev,
  (VTBL_ENTRY)&_ZN6S777C43v96Ev,
  (VTBL_ENTRY)&_ZN6S777C43v97Ev,
  (VTBL_ENTRY)&_ZN6S777C43v98Ev,
  (VTBL_ENTRY)&_ZN6S777C43v99Ev,
  (VTBL_ENTRY)&_ZN6S777C44v100Ev,
  (VTBL_ENTRY)&_ZN6S777C44v101Ev,
  (VTBL_ENTRY)&_ZN6S777C44v102Ev,
  (VTBL_ENTRY)&_ZN6S777C44v103Ev,
  (VTBL_ENTRY)&_ZN6S777C44v104Ev,
  (VTBL_ENTRY)&_ZN6S777C44v105Ev,
  (VTBL_ENTRY)&_ZN6S777C44v106Ev,
  (VTBL_ENTRY)&_ZN6S777C44v107Ev,
  (VTBL_ENTRY)&_ZN6S777C44v108Ev,
  (VTBL_ENTRY)&_ZN6S777C44v109Ev,
  (VTBL_ENTRY)&_ZN6S777C44v110Ev,
  (VTBL_ENTRY)&_ZN6S777C44v111Ev,
  (VTBL_ENTRY)&_ZN6S777C44v112Ev,
  (VTBL_ENTRY)&_ZN6S777C44v113Ev,
  (VTBL_ENTRY)&_ZN6S777C44v114Ev,
  (VTBL_ENTRY)&_ZN6S777C44v115Ev,
  (VTBL_ENTRY)&_ZN6S777C44v116Ev,
  (VTBL_ENTRY)&_ZN6S777C44v117Ev,
  (VTBL_ENTRY)&_ZN6S777C44v118Ev,
  (VTBL_ENTRY)&_ZN6S777C44v119Ev,
  (VTBL_ENTRY)&_ZN6S777C44v120Ev,
  (VTBL_ENTRY)&_ZN6S777C44v121Ev,
  (VTBL_ENTRY)&_ZN6S777C44v122Ev,
  (VTBL_ENTRY)&_ZN6S777C44v123Ev,
  (VTBL_ENTRY)&_ZN6S777C44v124Ev,
  (VTBL_ENTRY)&_ZN6S777C44v125Ev,
  (VTBL_ENTRY)&_ZN6S777C44v126Ev,
  (VTBL_ENTRY)&_ZN6S777C44v127Ev,
  (VTBL_ENTRY)&_ZN6S777C44v128Ev,
  (VTBL_ENTRY)&_ZN6S777C44v129Ev,
  (VTBL_ENTRY)&_ZN6S777C44v130Ev,
  (VTBL_ENTRY)&_ZN6S777C44v131Ev,
  (VTBL_ENTRY)&_ZN6S777C34v132Ev,
  (VTBL_ENTRY)&_ZN6S777C34v133Ev,
  (VTBL_ENTRY)&_ZN6S777C34v134Ev,
  (VTBL_ENTRY)&_ZN6S777C34v135Ev,
  (VTBL_ENTRY)&_ZN6S777C34v136Ev,
  (VTBL_ENTRY)&_ZN6S777C34v137Ev,
  (VTBL_ENTRY)&_ZN6S777C34v138Ev,
  (VTBL_ENTRY)&_ZN6S777C34v139Ev,
  (VTBL_ENTRY)&_ZN6S777C34v140Ev,
  (VTBL_ENTRY)&_ZN6S777C34v141Ev,
  (VTBL_ENTRY)&_ZN6S777C34v142Ev,
  (VTBL_ENTRY)&_ZN6S777C34v143Ev,
  (VTBL_ENTRY)&_ZN6S777C34v144Ev,
  (VTBL_ENTRY)&_ZN6S777C34v145Ev,
  (VTBL_ENTRY)&_ZN6S777C34v146Ev,
  (VTBL_ENTRY)&_ZN6S777C34v147Ev,
  (VTBL_ENTRY)&_ZN6S777C34v148Ev,
  (VTBL_ENTRY)&_ZN6S777C34v149Ev,
  (VTBL_ENTRY)&_ZN6S777C24v150Ev,
  (VTBL_ENTRY)&_ZN6S777C12v1Ev,
  (VTBL_ENTRY)&_ZN6S777C12v2Ev,
  (VTBL_ENTRY)&_ZN6S777C12v3Ev,
  (VTBL_ENTRY)&_ZN6S777C12v4Ev,
  (VTBL_ENTRY)&_ZN6S777C12v5Ev,
  (VTBL_ENTRY)&_ZN6S777C12v6Ev,
  (VTBL_ENTRY)&_ZN6S777C12v7Ev,
  (VTBL_ENTRY)&_ZN6S777C12v8Ev,
  (VTBL_ENTRY)&_ZN6S777C12v9Ev,
};
extern VTBL_ENTRY _ZTI6S777C1[];
extern  VTBL_ENTRY _ZTV6S777C1[];
Class_Descriptor cd_S777C1 = {  "S777C1", // class name
  bases_S777C1, 4,
  &(vtc_S777C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S777C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S777C1),154, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1772C3  : S785C5_nt {
  virtual void  v11(); // _ZN7S1772C33v11Ev
  virtual void  v12(); // _ZN7S1772C33v12Ev
  virtual void  v13(); // _ZN7S1772C33v13Ev
  virtual void  v14(); // _ZN7S1772C33v14Ev
  virtual void  v15(); // _ZN7S1772C33v15Ev
  virtual void  v16(); // _ZN7S1772C33v16Ev
  virtual void  v17(); // _ZN7S1772C33v17Ev
  virtual void  v18(); // _ZN7S1772C33v18Ev
  virtual void  v19(); // _ZN7S1772C33v19Ev
  virtual void  v20(); // _ZN7S1772C33v20Ev
  virtual void  v21(); // _ZN7S1772C33v21Ev
  virtual void  v22(); // _ZN7S1772C33v22Ev
  virtual void  v23(); // _ZN7S1772C33v23Ev
  virtual void  v24(); // _ZN7S1772C33v24Ev
  virtual void  v25(); // _ZN7S1772C33v25Ev
  virtual void  v26(); // _ZN7S1772C33v26Ev
  virtual void  v27(); // _ZN7S1772C33v27Ev
  virtual void  v28(); // _ZN7S1772C33v28Ev
  virtual void  v29(); // _ZN7S1772C33v29Ev
  virtual void  v30(); // _ZN7S1772C33v30Ev
  virtual void  v31(); // _ZN7S1772C33v31Ev
  virtual void  v32(); // _ZN7S1772C33v32Ev
  virtual void  v33(); // _ZN7S1772C33v33Ev
  virtual void  v34(); // _ZN7S1772C33v34Ev
  virtual void  v35(); // _ZN7S1772C33v35Ev
  virtual void  v36(); // _ZN7S1772C33v36Ev
  virtual void  v37(); // _ZN7S1772C33v37Ev
  virtual void  v38(); // _ZN7S1772C33v38Ev
  virtual void  v39(); // _ZN7S1772C33v39Ev
  virtual void  v40(); // _ZN7S1772C33v40Ev
  virtual void  v41(); // _ZN7S1772C33v41Ev
  virtual void  v42(); // _ZN7S1772C33v42Ev
  virtual void  v43(); // _ZN7S1772C33v43Ev
  virtual void  v44(); // _ZN7S1772C33v44Ev
  virtual void  v45(); // _ZN7S1772C33v45Ev
  virtual void  v46(); // _ZN7S1772C33v46Ev
  virtual void  v47(); // _ZN7S1772C33v47Ev
  virtual void  v48(); // _ZN7S1772C33v48Ev
  virtual void  v49(); // _ZN7S1772C33v49Ev
  virtual void  v50(); // _ZN7S1772C33v50Ev
  virtual void  v51(); // _ZN7S1772C33v51Ev
  virtual void  v52(); // _ZN7S1772C33v52Ev
  virtual void  v53(); // _ZN7S1772C33v53Ev
  virtual void  v54(); // _ZN7S1772C33v54Ev
  virtual void  v55(); // _ZN7S1772C33v55Ev
  virtual void  v56(); // _ZN7S1772C33v56Ev
  virtual void  v57(); // _ZN7S1772C33v57Ev
  virtual void  v58(); // _ZN7S1772C33v58Ev
  virtual void  v59(); // _ZN7S1772C33v59Ev
  virtual void  v60(); // _ZN7S1772C33v60Ev
  virtual void  v61(); // _ZN7S1772C33v61Ev
  virtual void  v62(); // _ZN7S1772C33v62Ev
  virtual void  v63(); // _ZN7S1772C33v63Ev
  virtual void  v64(); // _ZN7S1772C33v64Ev
  virtual void  v65(); // _ZN7S1772C33v65Ev
  virtual void  v66(); // _ZN7S1772C33v66Ev
  virtual void  v67(); // _ZN7S1772C33v67Ev
  virtual void  v68(); // _ZN7S1772C33v68Ev
  virtual void  v69(); // _ZN7S1772C33v69Ev
  virtual void  v70(); // _ZN7S1772C33v70Ev
  virtual void  v71(); // _ZN7S1772C33v71Ev
  virtual void  v72(); // _ZN7S1772C33v72Ev
  virtual void  v73(); // _ZN7S1772C33v73Ev
  virtual void  v74(); // _ZN7S1772C33v74Ev
  virtual void  v75(); // _ZN7S1772C33v75Ev
  virtual void  v76(); // _ZN7S1772C33v76Ev
  virtual void  v77(); // _ZN7S1772C33v77Ev
  virtual void  v78(); // _ZN7S1772C33v78Ev
  virtual void  v79(); // _ZN7S1772C33v79Ev
  virtual void  v80(); // _ZN7S1772C33v80Ev
  virtual void  v81(); // _ZN7S1772C33v81Ev
  virtual void  v82(); // _ZN7S1772C33v82Ev
  virtual void  v83(); // _ZN7S1772C33v83Ev
  virtual void  v84(); // _ZN7S1772C33v84Ev
  virtual void  v85(); // _ZN7S1772C33v85Ev
  virtual void  v86(); // _ZN7S1772C33v86Ev
  virtual void  v87(); // _ZN7S1772C33v87Ev
  virtual void  v88(); // _ZN7S1772C33v88Ev
  virtual void  v89(); // _ZN7S1772C33v89Ev
  virtual void  v90(); // _ZN7S1772C33v90Ev
  virtual void  v91(); // _ZN7S1772C33v91Ev
  virtual void  v92(); // _ZN7S1772C33v92Ev
  virtual void  v93(); // _ZN7S1772C33v93Ev
  virtual void  v94(); // _ZN7S1772C33v94Ev
  virtual void  v95(); // _ZN7S1772C33v95Ev
  virtual void  v96(); // _ZN7S1772C33v96Ev
  virtual void  v97(); // _ZN7S1772C33v97Ev
  virtual void  v98(); // _ZN7S1772C33v98Ev
  virtual void  v99(); // _ZN7S1772C33v99Ev
  virtual void  v100(); // _ZN7S1772C34v100Ev
  virtual void  v101(); // _ZN7S1772C34v101Ev
  virtual void  v102(); // _ZN7S1772C34v102Ev
  virtual void  v103(); // _ZN7S1772C34v103Ev
  virtual void  v104(); // _ZN7S1772C34v104Ev
  virtual void  v105(); // _ZN7S1772C34v105Ev
  virtual void  v106(); // _ZN7S1772C34v106Ev
  virtual void  v107(); // _ZN7S1772C34v107Ev
  virtual void  v108(); // _ZN7S1772C34v108Ev
  virtual void  v109(); // _ZN7S1772C34v109Ev
  virtual void  v110(); // _ZN7S1772C34v110Ev
  virtual void  v111(); // _ZN7S1772C34v111Ev
  virtual void  v112(); // _ZN7S1772C34v112Ev
  virtual void  v113(); // _ZN7S1772C34v113Ev
  virtual void  v114(); // _ZN7S1772C34v114Ev
  virtual void  v115(); // _ZN7S1772C34v115Ev
  virtual void  v116(); // _ZN7S1772C34v116Ev
  virtual void  v117(); // _ZN7S1772C34v117Ev
  virtual void  v118(); // _ZN7S1772C34v118Ev
  virtual void  v119(); // _ZN7S1772C34v119Ev
  virtual void  v120(); // _ZN7S1772C34v120Ev
  virtual void  v121(); // _ZN7S1772C34v121Ev
  virtual void  v122(); // _ZN7S1772C34v122Ev
  virtual void  v123(); // _ZN7S1772C34v123Ev
  virtual void  v124(); // _ZN7S1772C34v124Ev
  virtual void  v125(); // _ZN7S1772C34v125Ev
  virtual void  v126(); // _ZN7S1772C34v126Ev
  virtual void  v127(); // _ZN7S1772C34v127Ev
  virtual void  v128(); // _ZN7S1772C34v128Ev
  virtual void  v129(); // _ZN7S1772C34v129Ev
  virtual void  v130(); // _ZN7S1772C34v130Ev
  virtual void  v131(); // _ZN7S1772C34v131Ev
  virtual void  v132(); // _ZN7S1772C34v132Ev
  ~S1772C3(); // tgen
  S1772C3(); // tgen
};
//SIG(-1 S1772C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1772C3 ::v11(){vfunc_called(this, "_ZN7S1772C33v11Ev");}
void  S1772C3 ::v12(){vfunc_called(this, "_ZN7S1772C33v12Ev");}
void  S1772C3 ::v13(){vfunc_called(this, "_ZN7S1772C33v13Ev");}
void  S1772C3 ::v14(){vfunc_called(this, "_ZN7S1772C33v14Ev");}
void  S1772C3 ::v15(){vfunc_called(this, "_ZN7S1772C33v15Ev");}
void  S1772C3 ::v16(){vfunc_called(this, "_ZN7S1772C33v16Ev");}
void  S1772C3 ::v17(){vfunc_called(this, "_ZN7S1772C33v17Ev");}
void  S1772C3 ::v18(){vfunc_called(this, "_ZN7S1772C33v18Ev");}
void  S1772C3 ::v19(){vfunc_called(this, "_ZN7S1772C33v19Ev");}
void  S1772C3 ::v20(){vfunc_called(this, "_ZN7S1772C33v20Ev");}
void  S1772C3 ::v21(){vfunc_called(this, "_ZN7S1772C33v21Ev");}
void  S1772C3 ::v22(){vfunc_called(this, "_ZN7S1772C33v22Ev");}
void  S1772C3 ::v23(){vfunc_called(this, "_ZN7S1772C33v23Ev");}
void  S1772C3 ::v24(){vfunc_called(this, "_ZN7S1772C33v24Ev");}
void  S1772C3 ::v25(){vfunc_called(this, "_ZN7S1772C33v25Ev");}
void  S1772C3 ::v26(){vfunc_called(this, "_ZN7S1772C33v26Ev");}
void  S1772C3 ::v27(){vfunc_called(this, "_ZN7S1772C33v27Ev");}
void  S1772C3 ::v28(){vfunc_called(this, "_ZN7S1772C33v28Ev");}
void  S1772C3 ::v29(){vfunc_called(this, "_ZN7S1772C33v29Ev");}
void  S1772C3 ::v30(){vfunc_called(this, "_ZN7S1772C33v30Ev");}
void  S1772C3 ::v31(){vfunc_called(this, "_ZN7S1772C33v31Ev");}
void  S1772C3 ::v32(){vfunc_called(this, "_ZN7S1772C33v32Ev");}
void  S1772C3 ::v33(){vfunc_called(this, "_ZN7S1772C33v33Ev");}
void  S1772C3 ::v34(){vfunc_called(this, "_ZN7S1772C33v34Ev");}
void  S1772C3 ::v35(){vfunc_called(this, "_ZN7S1772C33v35Ev");}
void  S1772C3 ::v36(){vfunc_called(this, "_ZN7S1772C33v36Ev");}
void  S1772C3 ::v37(){vfunc_called(this, "_ZN7S1772C33v37Ev");}
void  S1772C3 ::v38(){vfunc_called(this, "_ZN7S1772C33v38Ev");}
void  S1772C3 ::v39(){vfunc_called(this, "_ZN7S1772C33v39Ev");}
void  S1772C3 ::v40(){vfunc_called(this, "_ZN7S1772C33v40Ev");}
void  S1772C3 ::v41(){vfunc_called(this, "_ZN7S1772C33v41Ev");}
void  S1772C3 ::v42(){vfunc_called(this, "_ZN7S1772C33v42Ev");}
void  S1772C3 ::v43(){vfunc_called(this, "_ZN7S1772C33v43Ev");}
void  S1772C3 ::v44(){vfunc_called(this, "_ZN7S1772C33v44Ev");}
void  S1772C3 ::v45(){vfunc_called(this, "_ZN7S1772C33v45Ev");}
void  S1772C3 ::v46(){vfunc_called(this, "_ZN7S1772C33v46Ev");}
void  S1772C3 ::v47(){vfunc_called(this, "_ZN7S1772C33v47Ev");}
void  S1772C3 ::v48(){vfunc_called(this, "_ZN7S1772C33v48Ev");}
void  S1772C3 ::v49(){vfunc_called(this, "_ZN7S1772C33v49Ev");}
void  S1772C3 ::v50(){vfunc_called(this, "_ZN7S1772C33v50Ev");}
void  S1772C3 ::v51(){vfunc_called(this, "_ZN7S1772C33v51Ev");}
void  S1772C3 ::v52(){vfunc_called(this, "_ZN7S1772C33v52Ev");}
void  S1772C3 ::v53(){vfunc_called(this, "_ZN7S1772C33v53Ev");}
void  S1772C3 ::v54(){vfunc_called(this, "_ZN7S1772C33v54Ev");}
void  S1772C3 ::v55(){vfunc_called(this, "_ZN7S1772C33v55Ev");}
void  S1772C3 ::v56(){vfunc_called(this, "_ZN7S1772C33v56Ev");}
void  S1772C3 ::v57(){vfunc_called(this, "_ZN7S1772C33v57Ev");}
void  S1772C3 ::v58(){vfunc_called(this, "_ZN7S1772C33v58Ev");}
void  S1772C3 ::v59(){vfunc_called(this, "_ZN7S1772C33v59Ev");}
void  S1772C3 ::v60(){vfunc_called(this, "_ZN7S1772C33v60Ev");}
void  S1772C3 ::v61(){vfunc_called(this, "_ZN7S1772C33v61Ev");}
void  S1772C3 ::v62(){vfunc_called(this, "_ZN7S1772C33v62Ev");}
void  S1772C3 ::v63(){vfunc_called(this, "_ZN7S1772C33v63Ev");}
void  S1772C3 ::v64(){vfunc_called(this, "_ZN7S1772C33v64Ev");}
void  S1772C3 ::v65(){vfunc_called(this, "_ZN7S1772C33v65Ev");}
void  S1772C3 ::v66(){vfunc_called(this, "_ZN7S1772C33v66Ev");}
void  S1772C3 ::v67(){vfunc_called(this, "_ZN7S1772C33v67Ev");}
void  S1772C3 ::v68(){vfunc_called(this, "_ZN7S1772C33v68Ev");}
void  S1772C3 ::v69(){vfunc_called(this, "_ZN7S1772C33v69Ev");}
void  S1772C3 ::v70(){vfunc_called(this, "_ZN7S1772C33v70Ev");}
void  S1772C3 ::v71(){vfunc_called(this, "_ZN7S1772C33v71Ev");}
void  S1772C3 ::v72(){vfunc_called(this, "_ZN7S1772C33v72Ev");}
void  S1772C3 ::v73(){vfunc_called(this, "_ZN7S1772C33v73Ev");}
void  S1772C3 ::v74(){vfunc_called(this, "_ZN7S1772C33v74Ev");}
void  S1772C3 ::v75(){vfunc_called(this, "_ZN7S1772C33v75Ev");}
void  S1772C3 ::v76(){vfunc_called(this, "_ZN7S1772C33v76Ev");}
void  S1772C3 ::v77(){vfunc_called(this, "_ZN7S1772C33v77Ev");}
void  S1772C3 ::v78(){vfunc_called(this, "_ZN7S1772C33v78Ev");}
void  S1772C3 ::v79(){vfunc_called(this, "_ZN7S1772C33v79Ev");}
void  S1772C3 ::v80(){vfunc_called(this, "_ZN7S1772C33v80Ev");}
void  S1772C3 ::v81(){vfunc_called(this, "_ZN7S1772C33v81Ev");}
void  S1772C3 ::v82(){vfunc_called(this, "_ZN7S1772C33v82Ev");}
void  S1772C3 ::v83(){vfunc_called(this, "_ZN7S1772C33v83Ev");}
void  S1772C3 ::v84(){vfunc_called(this, "_ZN7S1772C33v84Ev");}
void  S1772C3 ::v85(){vfunc_called(this, "_ZN7S1772C33v85Ev");}
void  S1772C3 ::v86(){vfunc_called(this, "_ZN7S1772C33v86Ev");}
void  S1772C3 ::v87(){vfunc_called(this, "_ZN7S1772C33v87Ev");}
void  S1772C3 ::v88(){vfunc_called(this, "_ZN7S1772C33v88Ev");}
void  S1772C3 ::v89(){vfunc_called(this, "_ZN7S1772C33v89Ev");}
void  S1772C3 ::v90(){vfunc_called(this, "_ZN7S1772C33v90Ev");}
void  S1772C3 ::v91(){vfunc_called(this, "_ZN7S1772C33v91Ev");}
void  S1772C3 ::v92(){vfunc_called(this, "_ZN7S1772C33v92Ev");}
void  S1772C3 ::v93(){vfunc_called(this, "_ZN7S1772C33v93Ev");}
void  S1772C3 ::v94(){vfunc_called(this, "_ZN7S1772C33v94Ev");}
void  S1772C3 ::v95(){vfunc_called(this, "_ZN7S1772C33v95Ev");}
void  S1772C3 ::v96(){vfunc_called(this, "_ZN7S1772C33v96Ev");}
void  S1772C3 ::v97(){vfunc_called(this, "_ZN7S1772C33v97Ev");}
void  S1772C3 ::v98(){vfunc_called(this, "_ZN7S1772C33v98Ev");}
void  S1772C3 ::v99(){vfunc_called(this, "_ZN7S1772C33v99Ev");}
void  S1772C3 ::v100(){vfunc_called(this, "_ZN7S1772C34v100Ev");}
void  S1772C3 ::v101(){vfunc_called(this, "_ZN7S1772C34v101Ev");}
void  S1772C3 ::v102(){vfunc_called(this, "_ZN7S1772C34v102Ev");}
void  S1772C3 ::v103(){vfunc_called(this, "_ZN7S1772C34v103Ev");}
void  S1772C3 ::v104(){vfunc_called(this, "_ZN7S1772C34v104Ev");}
void  S1772C3 ::v105(){vfunc_called(this, "_ZN7S1772C34v105Ev");}
void  S1772C3 ::v106(){vfunc_called(this, "_ZN7S1772C34v106Ev");}
void  S1772C3 ::v107(){vfunc_called(this, "_ZN7S1772C34v107Ev");}
void  S1772C3 ::v108(){vfunc_called(this, "_ZN7S1772C34v108Ev");}
void  S1772C3 ::v109(){vfunc_called(this, "_ZN7S1772C34v109Ev");}
void  S1772C3 ::v110(){vfunc_called(this, "_ZN7S1772C34v110Ev");}
void  S1772C3 ::v111(){vfunc_called(this, "_ZN7S1772C34v111Ev");}
void  S1772C3 ::v112(){vfunc_called(this, "_ZN7S1772C34v112Ev");}
void  S1772C3 ::v113(){vfunc_called(this, "_ZN7S1772C34v113Ev");}
void  S1772C3 ::v114(){vfunc_called(this, "_ZN7S1772C34v114Ev");}
void  S1772C3 ::v115(){vfunc_called(this, "_ZN7S1772C34v115Ev");}
void  S1772C3 ::v116(){vfunc_called(this, "_ZN7S1772C34v116Ev");}
void  S1772C3 ::v117(){vfunc_called(this, "_ZN7S1772C34v117Ev");}
void  S1772C3 ::v118(){vfunc_called(this, "_ZN7S1772C34v118Ev");}
void  S1772C3 ::v119(){vfunc_called(this, "_ZN7S1772C34v119Ev");}
void  S1772C3 ::v120(){vfunc_called(this, "_ZN7S1772C34v120Ev");}
void  S1772C3 ::v121(){vfunc_called(this, "_ZN7S1772C34v121Ev");}
void  S1772C3 ::v122(){vfunc_called(this, "_ZN7S1772C34v122Ev");}
void  S1772C3 ::v123(){vfunc_called(this, "_ZN7S1772C34v123Ev");}
void  S1772C3 ::v124(){vfunc_called(this, "_ZN7S1772C34v124Ev");}
void  S1772C3 ::v125(){vfunc_called(this, "_ZN7S1772C34v125Ev");}
void  S1772C3 ::v126(){vfunc_called(this, "_ZN7S1772C34v126Ev");}
void  S1772C3 ::v127(){vfunc_called(this, "_ZN7S1772C34v127Ev");}
void  S1772C3 ::v128(){vfunc_called(this, "_ZN7S1772C34v128Ev");}
void  S1772C3 ::v129(){vfunc_called(this, "_ZN7S1772C34v129Ev");}
void  S1772C3 ::v130(){vfunc_called(this, "_ZN7S1772C34v130Ev");}
void  S1772C3 ::v131(){vfunc_called(this, "_ZN7S1772C34v131Ev");}
void  S1772C3 ::v132(){vfunc_called(this, "_ZN7S1772C34v132Ev");}
S1772C3 ::~S1772C3(){ note_dtor("S1772C3", this);} // tgen
S1772C3 ::S1772C3(){ note_ctor("S1772C3", this);} // tgen

static void Test_S1772C3()
{
  extern Class_Descriptor cd_S1772C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1772C3, buf);
    S1772C3 *dp, &lv = *(dp=new (buf) S1772C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1772C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1772C3)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S1772C3");
    test_class_info(&lv, &cd_S1772C3);
    dp->~S1772C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1772C3(Test_S1772C3, "S1772C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1772C3C1Ev();
extern void _ZN7S1772C3D1Ev();
Name_Map name_map_S1772C3[] = {
  NSPAIR(_ZN7S1772C3C1Ev),
  NSPAIR(_ZN7S1772C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S1772C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1772C3[];
extern void _ZN7S1772C3D1Ev();
extern void _ZN7S1772C3D0Ev();
extern void _ZN7S1772C33v11Ev();
extern void _ZN7S1772C33v12Ev();
extern void _ZN7S1772C33v13Ev();
extern void _ZN7S1772C33v14Ev();
extern void _ZN7S1772C33v15Ev();
extern void _ZN7S1772C33v16Ev();
extern void _ZN7S1772C33v17Ev();
extern void _ZN7S1772C33v18Ev();
extern void _ZN7S1772C33v19Ev();
extern void _ZN7S1772C33v20Ev();
extern void _ZN7S1772C33v21Ev();
extern void _ZN7S1772C33v22Ev();
extern void _ZN7S1772C33v23Ev();
extern void _ZN7S1772C33v24Ev();
extern void _ZN7S1772C33v25Ev();
extern void _ZN7S1772C33v26Ev();
extern void _ZN7S1772C33v27Ev();
extern void _ZN7S1772C33v28Ev();
extern void _ZN7S1772C33v29Ev();
extern void _ZN7S1772C33v30Ev();
extern void _ZN7S1772C33v31Ev();
extern void _ZN7S1772C33v32Ev();
extern void _ZN7S1772C33v33Ev();
extern void _ZN7S1772C33v34Ev();
extern void _ZN7S1772C33v35Ev();
extern void _ZN7S1772C33v36Ev();
extern void _ZN7S1772C33v37Ev();
extern void _ZN7S1772C33v38Ev();
extern void _ZN7S1772C33v39Ev();
extern void _ZN7S1772C33v40Ev();
extern void _ZN7S1772C33v41Ev();
extern void _ZN7S1772C33v42Ev();
extern void _ZN7S1772C33v43Ev();
extern void _ZN7S1772C33v44Ev();
extern void _ZN7S1772C33v45Ev();
extern void _ZN7S1772C33v46Ev();
extern void _ZN7S1772C33v47Ev();
extern void _ZN7S1772C33v48Ev();
extern void _ZN7S1772C33v49Ev();
extern void _ZN7S1772C33v50Ev();
extern void _ZN7S1772C33v51Ev();
extern void _ZN7S1772C33v52Ev();
extern void _ZN7S1772C33v53Ev();
extern void _ZN7S1772C33v54Ev();
extern void _ZN7S1772C33v55Ev();
extern void _ZN7S1772C33v56Ev();
extern void _ZN7S1772C33v57Ev();
extern void _ZN7S1772C33v58Ev();
extern void _ZN7S1772C33v59Ev();
extern void _ZN7S1772C33v60Ev();
extern void _ZN7S1772C33v61Ev();
extern void _ZN7S1772C33v62Ev();
extern void _ZN7S1772C33v63Ev();
extern void _ZN7S1772C33v64Ev();
extern void _ZN7S1772C33v65Ev();
extern void _ZN7S1772C33v66Ev();
extern void _ZN7S1772C33v67Ev();
extern void _ZN7S1772C33v68Ev();
extern void _ZN7S1772C33v69Ev();
extern void _ZN7S1772C33v70Ev();
extern void _ZN7S1772C33v71Ev();
extern void _ZN7S1772C33v72Ev();
extern void _ZN7S1772C33v73Ev();
extern void _ZN7S1772C33v74Ev();
extern void _ZN7S1772C33v75Ev();
extern void _ZN7S1772C33v76Ev();
extern void _ZN7S1772C33v77Ev();
extern void _ZN7S1772C33v78Ev();
extern void _ZN7S1772C33v79Ev();
extern void _ZN7S1772C33v80Ev();
extern void _ZN7S1772C33v81Ev();
extern void _ZN7S1772C33v82Ev();
extern void _ZN7S1772C33v83Ev();
extern void _ZN7S1772C33v84Ev();
extern void _ZN7S1772C33v85Ev();
extern void _ZN7S1772C33v86Ev();
extern void _ZN7S1772C33v87Ev();
extern void _ZN7S1772C33v88Ev();
extern void _ZN7S1772C33v89Ev();
extern void _ZN7S1772C33v90Ev();
extern void _ZN7S1772C33v91Ev();
extern void _ZN7S1772C33v92Ev();
extern void _ZN7S1772C33v93Ev();
extern void _ZN7S1772C33v94Ev();
extern void _ZN7S1772C33v95Ev();
extern void _ZN7S1772C33v96Ev();
extern void _ZN7S1772C33v97Ev();
extern void _ZN7S1772C33v98Ev();
extern void _ZN7S1772C33v99Ev();
extern void _ZN7S1772C34v100Ev();
extern void _ZN7S1772C34v101Ev();
extern void _ZN7S1772C34v102Ev();
extern void _ZN7S1772C34v103Ev();
extern void _ZN7S1772C34v104Ev();
extern void _ZN7S1772C34v105Ev();
extern void _ZN7S1772C34v106Ev();
extern void _ZN7S1772C34v107Ev();
extern void _ZN7S1772C34v108Ev();
extern void _ZN7S1772C34v109Ev();
extern void _ZN7S1772C34v110Ev();
extern void _ZN7S1772C34v111Ev();
extern void _ZN7S1772C34v112Ev();
extern void _ZN7S1772C34v113Ev();
extern void _ZN7S1772C34v114Ev();
extern void _ZN7S1772C34v115Ev();
extern void _ZN7S1772C34v116Ev();
extern void _ZN7S1772C34v117Ev();
extern void _ZN7S1772C34v118Ev();
extern void _ZN7S1772C34v119Ev();
extern void _ZN7S1772C34v120Ev();
extern void _ZN7S1772C34v121Ev();
extern void _ZN7S1772C34v122Ev();
extern void _ZN7S1772C34v123Ev();
extern void _ZN7S1772C34v124Ev();
extern void _ZN7S1772C34v125Ev();
extern void _ZN7S1772C34v126Ev();
extern void _ZN7S1772C34v127Ev();
extern void _ZN7S1772C34v128Ev();
extern void _ZN7S1772C34v129Ev();
extern void _ZN7S1772C34v130Ev();
extern void _ZN7S1772C34v131Ev();
extern void _ZN7S1772C34v132Ev();
static  VTBL_ENTRY vtc_S1772C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1772C3[0]),
  (VTBL_ENTRY)&_ZN7S1772C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1772C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v132Ev,
};
extern VTBL_ENTRY _ZTI7S1772C3[];
extern  VTBL_ENTRY _ZTV7S1772C3[];
Class_Descriptor cd_S1772C3 = {  "S1772C3", // class name
  bases_S1772C3, 1,
  &(vtc_S1772C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1772C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1772C3),126, //virtual function table var
  2, // 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  S1772C2  : S1772C3 {
  virtual void  v133(); // _ZN7S1772C24v133Ev
  virtual void  v134(); // _ZN7S1772C24v134Ev
  virtual void  v135(); // _ZN7S1772C24v135Ev
  virtual void  v136(); // _ZN7S1772C24v136Ev
  virtual void  v137(); // _ZN7S1772C24v137Ev
  virtual void  v138(); // _ZN7S1772C24v138Ev
  virtual void  v139(); // _ZN7S1772C24v139Ev
  virtual void  v140(); // _ZN7S1772C24v140Ev
  virtual void  v141(); // _ZN7S1772C24v141Ev
  virtual void  v142(); // _ZN7S1772C24v142Ev
  virtual void  v143(); // _ZN7S1772C24v143Ev
  virtual void  v144(); // _ZN7S1772C24v144Ev
  virtual void  v145(); // _ZN7S1772C24v145Ev
  virtual void  v146(); // _ZN7S1772C24v146Ev
  virtual void  v147(); // _ZN7S1772C24v147Ev
  virtual void  v148(); // _ZN7S1772C24v148Ev
  virtual void  v149(); // _ZN7S1772C24v149Ev
  virtual void  v150(); // _ZN7S1772C24v150Ev
  ~S1772C2(); // tgen
  S1772C2(); // tgen
};
//SIG(-1 S1772C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S1772C2 ::v133(){vfunc_called(this, "_ZN7S1772C24v133Ev");}
void  S1772C2 ::v134(){vfunc_called(this, "_ZN7S1772C24v134Ev");}
void  S1772C2 ::v135(){vfunc_called(this, "_ZN7S1772C24v135Ev");}
void  S1772C2 ::v136(){vfunc_called(this, "_ZN7S1772C24v136Ev");}
void  S1772C2 ::v137(){vfunc_called(this, "_ZN7S1772C24v137Ev");}
void  S1772C2 ::v138(){vfunc_called(this, "_ZN7S1772C24v138Ev");}
void  S1772C2 ::v139(){vfunc_called(this, "_ZN7S1772C24v139Ev");}
void  S1772C2 ::v140(){vfunc_called(this, "_ZN7S1772C24v140Ev");}
void  S1772C2 ::v141(){vfunc_called(this, "_ZN7S1772C24v141Ev");}
void  S1772C2 ::v142(){vfunc_called(this, "_ZN7S1772C24v142Ev");}
void  S1772C2 ::v143(){vfunc_called(this, "_ZN7S1772C24v143Ev");}
void  S1772C2 ::v144(){vfunc_called(this, "_ZN7S1772C24v144Ev");}
void  S1772C2 ::v145(){vfunc_called(this, "_ZN7S1772C24v145Ev");}
void  S1772C2 ::v146(){vfunc_called(this, "_ZN7S1772C24v146Ev");}
void  S1772C2 ::v147(){vfunc_called(this, "_ZN7S1772C24v147Ev");}
void  S1772C2 ::v148(){vfunc_called(this, "_ZN7S1772C24v148Ev");}
void  S1772C2 ::v149(){vfunc_called(this, "_ZN7S1772C24v149Ev");}
void  S1772C2 ::v150(){vfunc_called(this, "_ZN7S1772C24v150Ev");}
S1772C2 ::~S1772C2(){ note_dtor("S1772C2", this);} // tgen
S1772C2 ::S1772C2(){ note_ctor("S1772C2", this);} // tgen

static void Test_S1772C2()
{
  extern Class_Descriptor cd_S1772C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1772C2, buf);
    S1772C2 *dp, &lv = *(dp=new (buf) S1772C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1772C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1772C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S1772C3*), 0, "S1772C2");
    check_base_class_offset(lv, (S1772C3*), 0, "S1772C2");
    test_class_info(&lv, &cd_S1772C2);
    dp->~S1772C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1772C2(Test_S1772C2, "S1772C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1772C2C1Ev();
extern void _ZN7S1772C2D1Ev();
Name_Map name_map_S1772C2[] = {
  NSPAIR(_ZN7S1772C2C1Ev),
  NSPAIR(_ZN7S1772C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1772C3;
extern VTBL_ENTRY _ZTI7S1772C3[];
extern  VTBL_ENTRY _ZTV7S1772C3[];
static Base_Class bases_S1772C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1772C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1772C2[];
extern void _ZN7S1772C2D1Ev();
extern void _ZN7S1772C2D0Ev();
extern void _ZN7S1772C33v11Ev();
extern void _ZN7S1772C33v12Ev();
extern void _ZN7S1772C33v13Ev();
extern void _ZN7S1772C33v14Ev();
extern void _ZN7S1772C33v15Ev();
extern void _ZN7S1772C33v16Ev();
extern void _ZN7S1772C33v17Ev();
extern void _ZN7S1772C33v18Ev();
extern void _ZN7S1772C33v19Ev();
extern void _ZN7S1772C33v20Ev();
extern void _ZN7S1772C33v21Ev();
extern void _ZN7S1772C33v22Ev();
extern void _ZN7S1772C33v23Ev();
extern void _ZN7S1772C33v24Ev();
extern void _ZN7S1772C33v25Ev();
extern void _ZN7S1772C33v26Ev();
extern void _ZN7S1772C33v27Ev();
extern void _ZN7S1772C33v28Ev();
extern void _ZN7S1772C33v29Ev();
extern void _ZN7S1772C33v30Ev();
extern void _ZN7S1772C33v31Ev();
extern void _ZN7S1772C33v32Ev();
extern void _ZN7S1772C33v33Ev();
extern void _ZN7S1772C33v34Ev();
extern void _ZN7S1772C33v35Ev();
extern void _ZN7S1772C33v36Ev();
extern void _ZN7S1772C33v37Ev();
extern void _ZN7S1772C33v38Ev();
extern void _ZN7S1772C33v39Ev();
extern void _ZN7S1772C33v40Ev();
extern void _ZN7S1772C33v41Ev();
extern void _ZN7S1772C33v42Ev();
extern void _ZN7S1772C33v43Ev();
extern void _ZN7S1772C33v44Ev();
extern void _ZN7S1772C33v45Ev();
extern void _ZN7S1772C33v46Ev();
extern void _ZN7S1772C33v47Ev();
extern void _ZN7S1772C33v48Ev();
extern void _ZN7S1772C33v49Ev();
extern void _ZN7S1772C33v50Ev();
extern void _ZN7S1772C33v51Ev();
extern void _ZN7S1772C33v52Ev();
extern void _ZN7S1772C33v53Ev();
extern void _ZN7S1772C33v54Ev();
extern void _ZN7S1772C33v55Ev();
extern void _ZN7S1772C33v56Ev();
extern void _ZN7S1772C33v57Ev();
extern void _ZN7S1772C33v58Ev();
extern void _ZN7S1772C33v59Ev();
extern void _ZN7S1772C33v60Ev();
extern void _ZN7S1772C33v61Ev();
extern void _ZN7S1772C33v62Ev();
extern void _ZN7S1772C33v63Ev();
extern void _ZN7S1772C33v64Ev();
extern void _ZN7S1772C33v65Ev();
extern void _ZN7S1772C33v66Ev();
extern void _ZN7S1772C33v67Ev();
extern void _ZN7S1772C33v68Ev();
extern void _ZN7S1772C33v69Ev();
extern void _ZN7S1772C33v70Ev();
extern void _ZN7S1772C33v71Ev();
extern void _ZN7S1772C33v72Ev();
extern void _ZN7S1772C33v73Ev();
extern void _ZN7S1772C33v74Ev();
extern void _ZN7S1772C33v75Ev();
extern void _ZN7S1772C33v76Ev();
extern void _ZN7S1772C33v77Ev();
extern void _ZN7S1772C33v78Ev();
extern void _ZN7S1772C33v79Ev();
extern void _ZN7S1772C33v80Ev();
extern void _ZN7S1772C33v81Ev();
extern void _ZN7S1772C33v82Ev();
extern void _ZN7S1772C33v83Ev();
extern void _ZN7S1772C33v84Ev();
extern void _ZN7S1772C33v85Ev();
extern void _ZN7S1772C33v86Ev();
extern void _ZN7S1772C33v87Ev();
extern void _ZN7S1772C33v88Ev();
extern void _ZN7S1772C33v89Ev();
extern void _ZN7S1772C33v90Ev();
extern void _ZN7S1772C33v91Ev();
extern void _ZN7S1772C33v92Ev();
extern void _ZN7S1772C33v93Ev();
extern void _ZN7S1772C33v94Ev();
extern void _ZN7S1772C33v95Ev();
extern void _ZN7S1772C33v96Ev();
extern void _ZN7S1772C33v97Ev();
extern void _ZN7S1772C33v98Ev();
extern void _ZN7S1772C33v99Ev();
extern void _ZN7S1772C34v100Ev();
extern void _ZN7S1772C34v101Ev();
extern void _ZN7S1772C34v102Ev();
extern void _ZN7S1772C34v103Ev();
extern void _ZN7S1772C34v104Ev();
extern void _ZN7S1772C34v105Ev();
extern void _ZN7S1772C34v106Ev();
extern void _ZN7S1772C34v107Ev();
extern void _ZN7S1772C34v108Ev();
extern void _ZN7S1772C34v109Ev();
extern void _ZN7S1772C34v110Ev();
extern void _ZN7S1772C34v111Ev();
extern void _ZN7S1772C34v112Ev();
extern void _ZN7S1772C34v113Ev();
extern void _ZN7S1772C34v114Ev();
extern void _ZN7S1772C34v115Ev();
extern void _ZN7S1772C34v116Ev();
extern void _ZN7S1772C34v117Ev();
extern void _ZN7S1772C34v118Ev();
extern void _ZN7S1772C34v119Ev();
extern void _ZN7S1772C34v120Ev();
extern void _ZN7S1772C34v121Ev();
extern void _ZN7S1772C34v122Ev();
extern void _ZN7S1772C34v123Ev();
extern void _ZN7S1772C34v124Ev();
extern void _ZN7S1772C34v125Ev();
extern void _ZN7S1772C34v126Ev();
extern void _ZN7S1772C34v127Ev();
extern void _ZN7S1772C34v128Ev();
extern void _ZN7S1772C34v129Ev();
extern void _ZN7S1772C34v130Ev();
extern void _ZN7S1772C34v131Ev();
extern void _ZN7S1772C34v132Ev();
extern void _ZN7S1772C24v133Ev();
extern void _ZN7S1772C24v134Ev();
extern void _ZN7S1772C24v135Ev();
extern void _ZN7S1772C24v136Ev();
extern void _ZN7S1772C24v137Ev();
extern void _ZN7S1772C24v138Ev();
extern void _ZN7S1772C24v139Ev();
extern void _ZN7S1772C24v140Ev();
extern void _ZN7S1772C24v141Ev();
extern void _ZN7S1772C24v142Ev();
extern void _ZN7S1772C24v143Ev();
extern void _ZN7S1772C24v144Ev();
extern void _ZN7S1772C24v145Ev();
extern void _ZN7S1772C24v146Ev();
extern void _ZN7S1772C24v147Ev();
extern void _ZN7S1772C24v148Ev();
extern void _ZN7S1772C24v149Ev();
extern void _ZN7S1772C24v150Ev();
static  VTBL_ENTRY vtc_S1772C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1772C2[0]),
  (VTBL_ENTRY)&_ZN7S1772C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1772C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v132Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v149Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v150Ev,
};
extern VTBL_ENTRY _ZTI7S1772C2[];
extern  VTBL_ENTRY _ZTV7S1772C2[];
Class_Descriptor cd_S1772C2 = {  "S1772C2", // class name
  bases_S1772C2, 2,
  &(vtc_S1772C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1772C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1772C2),144, //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  S1772C1  : S1772C2 {
  virtual void  v1(); // _ZN7S1772C12v1Ev
  virtual void  v2(); // _ZN7S1772C12v2Ev
  virtual void  v3(); // _ZN7S1772C12v3Ev
  virtual void  v4(); // _ZN7S1772C12v4Ev
  virtual void  v5(); // _ZN7S1772C12v5Ev
  virtual void  v6(); // _ZN7S1772C12v6Ev
  virtual void  v7(); // _ZN7S1772C12v7Ev
  virtual void  v8(); // _ZN7S1772C12v8Ev
  virtual void  v9(); // _ZN7S1772C12v9Ev
  virtual void  v10(); // _ZN7S1772C13v10Ev
  ~S1772C1(); // tgen
  S1772C1(); // tgen
};
//SIG(1 S1772C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 v144 v145 v146 v147 v148 v149 v150} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S1772C1 ::v1(){vfunc_called(this, "_ZN7S1772C12v1Ev");}
void  S1772C1 ::v2(){vfunc_called(this, "_ZN7S1772C12v2Ev");}
void  S1772C1 ::v3(){vfunc_called(this, "_ZN7S1772C12v3Ev");}
void  S1772C1 ::v4(){vfunc_called(this, "_ZN7S1772C12v4Ev");}
void  S1772C1 ::v5(){vfunc_called(this, "_ZN7S1772C12v5Ev");}
void  S1772C1 ::v6(){vfunc_called(this, "_ZN7S1772C12v6Ev");}
void  S1772C1 ::v7(){vfunc_called(this, "_ZN7S1772C12v7Ev");}
void  S1772C1 ::v8(){vfunc_called(this, "_ZN7S1772C12v8Ev");}
void  S1772C1 ::v9(){vfunc_called(this, "_ZN7S1772C12v9Ev");}
void  S1772C1 ::v10(){vfunc_called(this, "_ZN7S1772C13v10Ev");}
S1772C1 ::~S1772C1(){ note_dtor("S1772C1", this);} // tgen
S1772C1 ::S1772C1(){ note_ctor("S1772C1", this);} // tgen

static void Test_S1772C1()
{
  extern Class_Descriptor cd_S1772C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1772C1, buf);
    S1772C1 *dp, &lv = *(dp=new (buf) S1772C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1772C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1772C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S1772C3*)(S1772C2*), 0, "S1772C1");
    check_base_class_offset(lv, (S1772C3*)(S1772C2*), 0, "S1772C1");
    check_base_class_offset(lv, (S1772C2*), 0, "S1772C1");
    test_class_info(&lv, &cd_S1772C1);
    dp->~S1772C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1772C1(Test_S1772C1, "S1772C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1772C1C1Ev();
extern void _ZN7S1772C1D1Ev();
Name_Map name_map_S1772C1[] = {
  NSPAIR(_ZN7S1772C1C1Ev),
  NSPAIR(_ZN7S1772C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1772C3;
extern VTBL_ENTRY _ZTI7S1772C3[];
extern  VTBL_ENTRY _ZTV7S1772C3[];
extern Class_Descriptor cd_S1772C2;
extern VTBL_ENTRY _ZTI7S1772C2[];
extern  VTBL_ENTRY _ZTV7S1772C2[];
static Base_Class bases_S1772C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1772C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1772C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1772C1[];
extern void _ZN7S1772C1D1Ev();
extern void _ZN7S1772C1D0Ev();
extern void _ZN7S1772C33v11Ev();
extern void _ZN7S1772C33v12Ev();
extern void _ZN7S1772C33v13Ev();
extern void _ZN7S1772C33v14Ev();
extern void _ZN7S1772C33v15Ev();
extern void _ZN7S1772C33v16Ev();
extern void _ZN7S1772C33v17Ev();
extern void _ZN7S1772C33v18Ev();
extern void _ZN7S1772C33v19Ev();
extern void _ZN7S1772C33v20Ev();
extern void _ZN7S1772C33v21Ev();
extern void _ZN7S1772C33v22Ev();
extern void _ZN7S1772C33v23Ev();
extern void _ZN7S1772C33v24Ev();
extern void _ZN7S1772C33v25Ev();
extern void _ZN7S1772C33v26Ev();
extern void _ZN7S1772C33v27Ev();
extern void _ZN7S1772C33v28Ev();
extern void _ZN7S1772C33v29Ev();
extern void _ZN7S1772C33v30Ev();
extern void _ZN7S1772C33v31Ev();
extern void _ZN7S1772C33v32Ev();
extern void _ZN7S1772C33v33Ev();
extern void _ZN7S1772C33v34Ev();
extern void _ZN7S1772C33v35Ev();
extern void _ZN7S1772C33v36Ev();
extern void _ZN7S1772C33v37Ev();
extern void _ZN7S1772C33v38Ev();
extern void _ZN7S1772C33v39Ev();
extern void _ZN7S1772C33v40Ev();
extern void _ZN7S1772C33v41Ev();
extern void _ZN7S1772C33v42Ev();
extern void _ZN7S1772C33v43Ev();
extern void _ZN7S1772C33v44Ev();
extern void _ZN7S1772C33v45Ev();
extern void _ZN7S1772C33v46Ev();
extern void _ZN7S1772C33v47Ev();
extern void _ZN7S1772C33v48Ev();
extern void _ZN7S1772C33v49Ev();
extern void _ZN7S1772C33v50Ev();
extern void _ZN7S1772C33v51Ev();
extern void _ZN7S1772C33v52Ev();
extern void _ZN7S1772C33v53Ev();
extern void _ZN7S1772C33v54Ev();
extern void _ZN7S1772C33v55Ev();
extern void _ZN7S1772C33v56Ev();
extern void _ZN7S1772C33v57Ev();
extern void _ZN7S1772C33v58Ev();
extern void _ZN7S1772C33v59Ev();
extern void _ZN7S1772C33v60Ev();
extern void _ZN7S1772C33v61Ev();
extern void _ZN7S1772C33v62Ev();
extern void _ZN7S1772C33v63Ev();
extern void _ZN7S1772C33v64Ev();
extern void _ZN7S1772C33v65Ev();
extern void _ZN7S1772C33v66Ev();
extern void _ZN7S1772C33v67Ev();
extern void _ZN7S1772C33v68Ev();
extern void _ZN7S1772C33v69Ev();
extern void _ZN7S1772C33v70Ev();
extern void _ZN7S1772C33v71Ev();
extern void _ZN7S1772C33v72Ev();
extern void _ZN7S1772C33v73Ev();
extern void _ZN7S1772C33v74Ev();
extern void _ZN7S1772C33v75Ev();
extern void _ZN7S1772C33v76Ev();
extern void _ZN7S1772C33v77Ev();
extern void _ZN7S1772C33v78Ev();
extern void _ZN7S1772C33v79Ev();
extern void _ZN7S1772C33v80Ev();
extern void _ZN7S1772C33v81Ev();
extern void _ZN7S1772C33v82Ev();
extern void _ZN7S1772C33v83Ev();
extern void _ZN7S1772C33v84Ev();
extern void _ZN7S1772C33v85Ev();
extern void _ZN7S1772C33v86Ev();
extern void _ZN7S1772C33v87Ev();
extern void _ZN7S1772C33v88Ev();
extern void _ZN7S1772C33v89Ev();
extern void _ZN7S1772C33v90Ev();
extern void _ZN7S1772C33v91Ev();
extern void _ZN7S1772C33v92Ev();
extern void _ZN7S1772C33v93Ev();
extern void _ZN7S1772C33v94Ev();
extern void _ZN7S1772C33v95Ev();
extern void _ZN7S1772C33v96Ev();
extern void _ZN7S1772C33v97Ev();
extern void _ZN7S1772C33v98Ev();
extern void _ZN7S1772C33v99Ev();
extern void _ZN7S1772C34v100Ev();
extern void _ZN7S1772C34v101Ev();
extern void _ZN7S1772C34v102Ev();
extern void _ZN7S1772C34v103Ev();
extern void _ZN7S1772C34v104Ev();
extern void _ZN7S1772C34v105Ev();
extern void _ZN7S1772C34v106Ev();
extern void _ZN7S1772C34v107Ev();
extern void _ZN7S1772C34v108Ev();
extern void _ZN7S1772C34v109Ev();
extern void _ZN7S1772C34v110Ev();
extern void _ZN7S1772C34v111Ev();
extern void _ZN7S1772C34v112Ev();
extern void _ZN7S1772C34v113Ev();
extern void _ZN7S1772C34v114Ev();
extern void _ZN7S1772C34v115Ev();
extern void _ZN7S1772C34v116Ev();
extern void _ZN7S1772C34v117Ev();
extern void _ZN7S1772C34v118Ev();
extern void _ZN7S1772C34v119Ev();
extern void _ZN7S1772C34v120Ev();
extern void _ZN7S1772C34v121Ev();
extern void _ZN7S1772C34v122Ev();
extern void _ZN7S1772C34v123Ev();
extern void _ZN7S1772C34v124Ev();
extern void _ZN7S1772C34v125Ev();
extern void _ZN7S1772C34v126Ev();
extern void _ZN7S1772C34v127Ev();
extern void _ZN7S1772C34v128Ev();
extern void _ZN7S1772C34v129Ev();
extern void _ZN7S1772C34v130Ev();
extern void _ZN7S1772C34v131Ev();
extern void _ZN7S1772C34v132Ev();
extern void _ZN7S1772C24v133Ev();
extern void _ZN7S1772C24v134Ev();
extern void _ZN7S1772C24v135Ev();
extern void _ZN7S1772C24v136Ev();
extern void _ZN7S1772C24v137Ev();
extern void _ZN7S1772C24v138Ev();
extern void _ZN7S1772C24v139Ev();
extern void _ZN7S1772C24v140Ev();
extern void _ZN7S1772C24v141Ev();
extern void _ZN7S1772C24v142Ev();
extern void _ZN7S1772C24v143Ev();
extern void _ZN7S1772C24v144Ev();
extern void _ZN7S1772C24v145Ev();
extern void _ZN7S1772C24v146Ev();
extern void _ZN7S1772C24v147Ev();
extern void _ZN7S1772C24v148Ev();
extern void _ZN7S1772C24v149Ev();
extern void _ZN7S1772C24v150Ev();
extern void _ZN7S1772C12v1Ev();
extern void _ZN7S1772C12v2Ev();
extern void _ZN7S1772C12v3Ev();
extern void _ZN7S1772C12v4Ev();
extern void _ZN7S1772C12v5Ev();
extern void _ZN7S1772C12v6Ev();
extern void _ZN7S1772C12v7Ev();
extern void _ZN7S1772C12v8Ev();
extern void _ZN7S1772C12v9Ev();
extern void _ZN7S1772C13v10Ev();
static  VTBL_ENTRY vtc_S1772C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1772C1[0]),
  (VTBL_ENTRY)&_ZN7S1772C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1772C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1772C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1772C34v132Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v149Ev,
  (VTBL_ENTRY)&_ZN7S1772C24v150Ev,
  (VTBL_ENTRY)&_ZN7S1772C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1772C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1772C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1772C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1772C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1772C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1772C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1772C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1772C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1772C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1772C1[];
extern  VTBL_ENTRY _ZTV7S1772C1[];
Class_Descriptor cd_S1772C1 = {  "S1772C1", // class name
  bases_S1772C1, 3,
  &(vtc_S1772C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1772C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1772C1),154, //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  S781C4  : S785C5_nt {
  virtual void  v4(); // _ZN6S781C42v4Ev
  virtual void  v5(); // _ZN6S781C42v5Ev
  virtual void  v6(); // _ZN6S781C42v6Ev
  virtual void  v7(); // _ZN6S781C42v7Ev
  virtual void  v8(); // _ZN6S781C42v8Ev
  virtual void  v9(); // _ZN6S781C42v9Ev
  virtual void  v10(); // _ZN6S781C43v10Ev
  virtual void  v11(); // _ZN6S781C43v11Ev
  virtual void  v12(); // _ZN6S781C43v12Ev
  virtual void  v13(); // _ZN6S781C43v13Ev
  virtual void  v14(); // _ZN6S781C43v14Ev
  virtual void  v15(); // _ZN6S781C43v15Ev
  virtual void  v16(); // _ZN6S781C43v16Ev
  virtual void  v17(); // _ZN6S781C43v17Ev
  virtual void  v18(); // _ZN6S781C43v18Ev
  virtual void  v19(); // _ZN6S781C43v19Ev
  virtual void  v20(); // _ZN6S781C43v20Ev
  virtual void  v21(); // _ZN6S781C43v21Ev
  virtual void  v22(); // _ZN6S781C43v22Ev
  virtual void  v23(); // _ZN6S781C43v23Ev
  virtual void  v24(); // _ZN6S781C43v24Ev
  virtual void  v25(); // _ZN6S781C43v25Ev
  virtual void  v26(); // _ZN6S781C43v26Ev
  virtual void  v27(); // _ZN6S781C43v27Ev
  virtual void  v28(); // _ZN6S781C43v28Ev
  virtual void  v29(); // _ZN6S781C43v29Ev
  virtual void  v30(); // _ZN6S781C43v30Ev
  virtual void  v31(); // _ZN6S781C43v31Ev
  virtual void  v32(); // _ZN6S781C43v32Ev
  virtual void  v33(); // _ZN6S781C43v33Ev
  virtual void  v34(); // _ZN6S781C43v34Ev
  virtual void  v35(); // _ZN6S781C43v35Ev
  virtual void  v36(); // _ZN6S781C43v36Ev
  virtual void  v37(); // _ZN6S781C43v37Ev
  virtual void  v38(); // _ZN6S781C43v38Ev
  virtual void  v39(); // _ZN6S781C43v39Ev
  virtual void  v40(); // _ZN6S781C43v40Ev
  virtual void  v41(); // _ZN6S781C43v41Ev
  virtual void  v42(); // _ZN6S781C43v42Ev
  virtual void  v43(); // _ZN6S781C43v43Ev
  virtual void  v44(); // _ZN6S781C43v44Ev
  virtual void  v45(); // _ZN6S781C43v45Ev
  virtual void  v46(); // _ZN6S781C43v46Ev
  virtual void  v47(); // _ZN6S781C43v47Ev
  virtual void  v48(); // _ZN6S781C43v48Ev
  virtual void  v49(); // _ZN6S781C43v49Ev
  virtual void  v50(); // _ZN6S781C43v50Ev
  virtual void  v51(); // _ZN6S781C43v51Ev
  virtual void  v52(); // _ZN6S781C43v52Ev
  virtual void  v53(); // _ZN6S781C43v53Ev
  virtual void  v54(); // _ZN6S781C43v54Ev
  virtual void  v55(); // _ZN6S781C43v55Ev
  virtual void  v56(); // _ZN6S781C43v56Ev
  virtual void  v57(); // _ZN6S781C43v57Ev
  virtual void  v58(); // _ZN6S781C43v58Ev
  virtual void  v59(); // _ZN6S781C43v59Ev
  virtual void  v60(); // _ZN6S781C43v60Ev
  virtual void  v61(); // _ZN6S781C43v61Ev
  virtual void  v62(); // _ZN6S781C43v62Ev
  virtual void  v63(); // _ZN6S781C43v63Ev
  virtual void  v64(); // _ZN6S781C43v64Ev
  virtual void  v65(); // _ZN6S781C43v65Ev
  virtual void  v66(); // _ZN6S781C43v66Ev
  virtual void  v67(); // _ZN6S781C43v67Ev
  virtual void  v68(); // _ZN6S781C43v68Ev
  virtual void  v69(); // _ZN6S781C43v69Ev
  virtual void  v70(); // _ZN6S781C43v70Ev
  virtual void  v71(); // _ZN6S781C43v71Ev
  virtual void  v72(); // _ZN6S781C43v72Ev
  virtual void  v73(); // _ZN6S781C43v73Ev
  virtual void  v74(); // _ZN6S781C43v74Ev
  virtual void  v75(); // _ZN6S781C43v75Ev
  virtual void  v76(); // _ZN6S781C43v76Ev
  virtual void  v77(); // _ZN6S781C43v77Ev
  virtual void  v78(); // _ZN6S781C43v78Ev
  virtual void  v79(); // _ZN6S781C43v79Ev
  virtual void  v80(); // _ZN6S781C43v80Ev
  virtual void  v81(); // _ZN6S781C43v81Ev
  virtual void  v82(); // _ZN6S781C43v82Ev
  virtual void  v83(); // _ZN6S781C43v83Ev
  virtual void  v84(); // _ZN6S781C43v84Ev
  virtual void  v85(); // _ZN6S781C43v85Ev
  virtual void  v86(); // _ZN6S781C43v86Ev
  virtual void  v87(); // _ZN6S781C43v87Ev
  virtual void  v88(); // _ZN6S781C43v88Ev
  virtual void  v89(); // _ZN6S781C43v89Ev
  virtual void  v90(); // _ZN6S781C43v90Ev
  virtual void  v91(); // _ZN6S781C43v91Ev
  virtual void  v92(); // _ZN6S781C43v92Ev
  virtual void  v93(); // _ZN6S781C43v93Ev
  virtual void  v94(); // _ZN6S781C43v94Ev
  virtual void  v95(); // _ZN6S781C43v95Ev
  virtual void  v96(); // _ZN6S781C43v96Ev
  virtual void  v97(); // _ZN6S781C43v97Ev
  virtual void  v98(); // _ZN6S781C43v98Ev
  virtual void  v99(); // _ZN6S781C43v99Ev
  virtual void  v100(); // _ZN6S781C44v100Ev
  virtual void  v101(); // _ZN6S781C44v101Ev
  virtual void  v102(); // _ZN6S781C44v102Ev
  virtual void  v103(); // _ZN6S781C44v103Ev
  virtual void  v104(); // _ZN6S781C44v104Ev
  virtual void  v105(); // _ZN6S781C44v105Ev
  virtual void  v106(); // _ZN6S781C44v106Ev
  virtual void  v107(); // _ZN6S781C44v107Ev
  virtual void  v108(); // _ZN6S781C44v108Ev
  virtual void  v109(); // _ZN6S781C44v109Ev
  virtual void  v110(); // _ZN6S781C44v110Ev
  virtual void  v111(); // _ZN6S781C44v111Ev
  virtual void  v112(); // _ZN6S781C44v112Ev
  virtual void  v113(); // _ZN6S781C44v113Ev
  virtual void  v114(); // _ZN6S781C44v114Ev
  virtual void  v115(); // _ZN6S781C44v115Ev
  virtual void  v116(); // _ZN6S781C44v116Ev
  virtual void  v117(); // _ZN6S781C44v117Ev
  virtual void  v118(); // _ZN6S781C44v118Ev
  virtual void  v119(); // _ZN6S781C44v119Ev
  virtual void  v120(); // _ZN6S781C44v120Ev
  virtual void  v121(); // _ZN6S781C44v121Ev
  virtual void  v122(); // _ZN6S781C44v122Ev
  virtual void  v123(); // _ZN6S781C44v123Ev
  virtual void  v124(); // _ZN6S781C44v124Ev
  virtual void  v125(); // _ZN6S781C44v125Ev
  ~S781C4(); // tgen
  S781C4(); // tgen
};
//SIG(-1 S781C4) C1{ BC2{ vd m Fp Fi} 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}


void  S781C4 ::v4(){vfunc_called(this, "_ZN6S781C42v4Ev");}
void  S781C4 ::v5(){vfunc_called(this, "_ZN6S781C42v5Ev");}
void  S781C4 ::v6(){vfunc_called(this, "_ZN6S781C42v6Ev");}
void  S781C4 ::v7(){vfunc_called(this, "_ZN6S781C42v7Ev");}
void  S781C4 ::v8(){vfunc_called(this, "_ZN6S781C42v8Ev");}
void  S781C4 ::v9(){vfunc_called(this, "_ZN6S781C42v9Ev");}
void  S781C4 ::v10(){vfunc_called(this, "_ZN6S781C43v10Ev");}
void  S781C4 ::v11(){vfunc_called(this, "_ZN6S781C43v11Ev");}
void  S781C4 ::v12(){vfunc_called(this, "_ZN6S781C43v12Ev");}
void  S781C4 ::v13(){vfunc_called(this, "_ZN6S781C43v13Ev");}
void  S781C4 ::v14(){vfunc_called(this, "_ZN6S781C43v14Ev");}
void  S781C4 ::v15(){vfunc_called(this, "_ZN6S781C43v15Ev");}
void  S781C4 ::v16(){vfunc_called(this, "_ZN6S781C43v16Ev");}
void  S781C4 ::v17(){vfunc_called(this, "_ZN6S781C43v17Ev");}
void  S781C4 ::v18(){vfunc_called(this, "_ZN6S781C43v18Ev");}
void  S781C4 ::v19(){vfunc_called(this, "_ZN6S781C43v19Ev");}
void  S781C4 ::v20(){vfunc_called(this, "_ZN6S781C43v20Ev");}
void  S781C4 ::v21(){vfunc_called(this, "_ZN6S781C43v21Ev");}
void  S781C4 ::v22(){vfunc_called(this, "_ZN6S781C43v22Ev");}
void  S781C4 ::v23(){vfunc_called(this, "_ZN6S781C43v23Ev");}
void  S781C4 ::v24(){vfunc_called(this, "_ZN6S781C43v24Ev");}
void  S781C4 ::v25(){vfunc_called(this, "_ZN6S781C43v25Ev");}
void  S781C4 ::v26(){vfunc_called(this, "_ZN6S781C43v26Ev");}
void  S781C4 ::v27(){vfunc_called(this, "_ZN6S781C43v27Ev");}
void  S781C4 ::v28(){vfunc_called(this, "_ZN6S781C43v28Ev");}
void  S781C4 ::v29(){vfunc_called(this, "_ZN6S781C43v29Ev");}
void  S781C4 ::v30(){vfunc_called(this, "_ZN6S781C43v30Ev");}
void  S781C4 ::v31(){vfunc_called(this, "_ZN6S781C43v31Ev");}
void  S781C4 ::v32(){vfunc_called(this, "_ZN6S781C43v32Ev");}
void  S781C4 ::v33(){vfunc_called(this, "_ZN6S781C43v33Ev");}
void  S781C4 ::v34(){vfunc_called(this, "_ZN6S781C43v34Ev");}
void  S781C4 ::v35(){vfunc_called(this, "_ZN6S781C43v35Ev");}
void  S781C4 ::v36(){vfunc_called(this, "_ZN6S781C43v36Ev");}
void  S781C4 ::v37(){vfunc_called(this, "_ZN6S781C43v37Ev");}
void  S781C4 ::v38(){vfunc_called(this, "_ZN6S781C43v38Ev");}
void  S781C4 ::v39(){vfunc_called(this, "_ZN6S781C43v39Ev");}
void  S781C4 ::v40(){vfunc_called(this, "_ZN6S781C43v40Ev");}
void  S781C4 ::v41(){vfunc_called(this, "_ZN6S781C43v41Ev");}
void  S781C4 ::v42(){vfunc_called(this, "_ZN6S781C43v42Ev");}
void  S781C4 ::v43(){vfunc_called(this, "_ZN6S781C43v43Ev");}
void  S781C4 ::v44(){vfunc_called(this, "_ZN6S781C43v44Ev");}
void  S781C4 ::v45(){vfunc_called(this, "_ZN6S781C43v45Ev");}
void  S781C4 ::v46(){vfunc_called(this, "_ZN6S781C43v46Ev");}
void  S781C4 ::v47(){vfunc_called(this, "_ZN6S781C43v47Ev");}
void  S781C4 ::v48(){vfunc_called(this, "_ZN6S781C43v48Ev");}
void  S781C4 ::v49(){vfunc_called(this, "_ZN6S781C43v49Ev");}
void  S781C4 ::v50(){vfunc_called(this, "_ZN6S781C43v50Ev");}
void  S781C4 ::v51(){vfunc_called(this, "_ZN6S781C43v51Ev");}
void  S781C4 ::v52(){vfunc_called(this, "_ZN6S781C43v52Ev");}
void  S781C4 ::v53(){vfunc_called(this, "_ZN6S781C43v53Ev");}
void  S781C4 ::v54(){vfunc_called(this, "_ZN6S781C43v54Ev");}
void  S781C4 ::v55(){vfunc_called(this, "_ZN6S781C43v55Ev");}
void  S781C4 ::v56(){vfunc_called(this, "_ZN6S781C43v56Ev");}
void  S781C4 ::v57(){vfunc_called(this, "_ZN6S781C43v57Ev");}
void  S781C4 ::v58(){vfunc_called(this, "_ZN6S781C43v58Ev");}
void  S781C4 ::v59(){vfunc_called(this, "_ZN6S781C43v59Ev");}
void  S781C4 ::v60(){vfunc_called(this, "_ZN6S781C43v60Ev");}
void  S781C4 ::v61(){vfunc_called(this, "_ZN6S781C43v61Ev");}
void  S781C4 ::v62(){vfunc_called(this, "_ZN6S781C43v62Ev");}
void  S781C4 ::v63(){vfunc_called(this, "_ZN6S781C43v63Ev");}
void  S781C4 ::v64(){vfunc_called(this, "_ZN6S781C43v64Ev");}
void  S781C4 ::v65(){vfunc_called(this, "_ZN6S781C43v65Ev");}
void  S781C4 ::v66(){vfunc_called(this, "_ZN6S781C43v66Ev");}
void  S781C4 ::v67(){vfunc_called(this, "_ZN6S781C43v67Ev");}
void  S781C4 ::v68(){vfunc_called(this, "_ZN6S781C43v68Ev");}
void  S781C4 ::v69(){vfunc_called(this, "_ZN6S781C43v69Ev");}
void  S781C4 ::v70(){vfunc_called(this, "_ZN6S781C43v70Ev");}
void  S781C4 ::v71(){vfunc_called(this, "_ZN6S781C43v71Ev");}
void  S781C4 ::v72(){vfunc_called(this, "_ZN6S781C43v72Ev");}
void  S781C4 ::v73(){vfunc_called(this, "_ZN6S781C43v73Ev");}
void  S781C4 ::v74(){vfunc_called(this, "_ZN6S781C43v74Ev");}
void  S781C4 ::v75(){vfunc_called(this, "_ZN6S781C43v75Ev");}
void  S781C4 ::v76(){vfunc_called(this, "_ZN6S781C43v76Ev");}
void  S781C4 ::v77(){vfunc_called(this, "_ZN6S781C43v77Ev");}
void  S781C4 ::v78(){vfunc_called(this, "_ZN6S781C43v78Ev");}
void  S781C4 ::v79(){vfunc_called(this, "_ZN6S781C43v79Ev");}
void  S781C4 ::v80(){vfunc_called(this, "_ZN6S781C43v80Ev");}
void  S781C4 ::v81(){vfunc_called(this, "_ZN6S781C43v81Ev");}
void  S781C4 ::v82(){vfunc_called(this, "_ZN6S781C43v82Ev");}
void  S781C4 ::v83(){vfunc_called(this, "_ZN6S781C43v83Ev");}
void  S781C4 ::v84(){vfunc_called(this, "_ZN6S781C43v84Ev");}
void  S781C4 ::v85(){vfunc_called(this, "_ZN6S781C43v85Ev");}
void  S781C4 ::v86(){vfunc_called(this, "_ZN6S781C43v86Ev");}
void  S781C4 ::v87(){vfunc_called(this, "_ZN6S781C43v87Ev");}
void  S781C4 ::v88(){vfunc_called(this, "_ZN6S781C43v88Ev");}
void  S781C4 ::v89(){vfunc_called(this, "_ZN6S781C43v89Ev");}
void  S781C4 ::v90(){vfunc_called(this, "_ZN6S781C43v90Ev");}
void  S781C4 ::v91(){vfunc_called(this, "_ZN6S781C43v91Ev");}
void  S781C4 ::v92(){vfunc_called(this, "_ZN6S781C43v92Ev");}
void  S781C4 ::v93(){vfunc_called(this, "_ZN6S781C43v93Ev");}
void  S781C4 ::v94(){vfunc_called(this, "_ZN6S781C43v94Ev");}
void  S781C4 ::v95(){vfunc_called(this, "_ZN6S781C43v95Ev");}
void  S781C4 ::v96(){vfunc_called(this, "_ZN6S781C43v96Ev");}
void  S781C4 ::v97(){vfunc_called(this, "_ZN6S781C43v97Ev");}
void  S781C4 ::v98(){vfunc_called(this, "_ZN6S781C43v98Ev");}
void  S781C4 ::v99(){vfunc_called(this, "_ZN6S781C43v99Ev");}
void  S781C4 ::v100(){vfunc_called(this, "_ZN6S781C44v100Ev");}
void  S781C4 ::v101(){vfunc_called(this, "_ZN6S781C44v101Ev");}
void  S781C4 ::v102(){vfunc_called(this, "_ZN6S781C44v102Ev");}
void  S781C4 ::v103(){vfunc_called(this, "_ZN6S781C44v103Ev");}
void  S781C4 ::v104(){vfunc_called(this, "_ZN6S781C44v104Ev");}
void  S781C4 ::v105(){vfunc_called(this, "_ZN6S781C44v105Ev");}
void  S781C4 ::v106(){vfunc_called(this, "_ZN6S781C44v106Ev");}
void  S781C4 ::v107(){vfunc_called(this, "_ZN6S781C44v107Ev");}
void  S781C4 ::v108(){vfunc_called(this, "_ZN6S781C44v108Ev");}
void  S781C4 ::v109(){vfunc_called(this, "_ZN6S781C44v109Ev");}
void  S781C4 ::v110(){vfunc_called(this, "_ZN6S781C44v110Ev");}
void  S781C4 ::v111(){vfunc_called(this, "_ZN6S781C44v111Ev");}
void  S781C4 ::v112(){vfunc_called(this, "_ZN6S781C44v112Ev");}
void  S781C4 ::v113(){vfunc_called(this, "_ZN6S781C44v113Ev");}
void  S781C4 ::v114(){vfunc_called(this, "_ZN6S781C44v114Ev");}
void  S781C4 ::v115(){vfunc_called(this, "_ZN6S781C44v115Ev");}
void  S781C4 ::v116(){vfunc_called(this, "_ZN6S781C44v116Ev");}
void  S781C4 ::v117(){vfunc_called(this, "_ZN6S781C44v117Ev");}
void  S781C4 ::v118(){vfunc_called(this, "_ZN6S781C44v118Ev");}
void  S781C4 ::v119(){vfunc_called(this, "_ZN6S781C44v119Ev");}
void  S781C4 ::v120(){vfunc_called(this, "_ZN6S781C44v120Ev");}
void  S781C4 ::v121(){vfunc_called(this, "_ZN6S781C44v121Ev");}
void  S781C4 ::v122(){vfunc_called(this, "_ZN6S781C44v122Ev");}
void  S781C4 ::v123(){vfunc_called(this, "_ZN6S781C44v123Ev");}
void  S781C4 ::v124(){vfunc_called(this, "_ZN6S781C44v124Ev");}
void  S781C4 ::v125(){vfunc_called(this, "_ZN6S781C44v125Ev");}
S781C4 ::~S781C4(){ note_dtor("S781C4", this);} // tgen
S781C4 ::S781C4(){ note_ctor("S781C4", this);} // tgen

static void Test_S781C4()
{
  extern Class_Descriptor cd_S781C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S781C4, buf);
    S781C4 *dp, &lv = *(dp=new (buf) S781C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S781C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S781C4)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S781C4");
    test_class_info(&lv, &cd_S781C4);
    dp->~S781C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS781C4(Test_S781C4, "S781C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S781C4C1Ev();
extern void _ZN6S781C4D1Ev();
Name_Map name_map_S781C4[] = {
  NSPAIR(_ZN6S781C4C1Ev),
  NSPAIR(_ZN6S781C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S781C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S781C4[];
extern void _ZN6S781C4D1Ev();
extern void _ZN6S781C4D0Ev();
extern void _ZN6S781C42v4Ev();
extern void _ZN6S781C42v5Ev();
extern void _ZN6S781C42v6Ev();
extern void _ZN6S781C42v7Ev();
extern void _ZN6S781C42v8Ev();
extern void _ZN6S781C42v9Ev();
extern void _ZN6S781C43v10Ev();
extern void _ZN6S781C43v11Ev();
extern void _ZN6S781C43v12Ev();
extern void _ZN6S781C43v13Ev();
extern void _ZN6S781C43v14Ev();
extern void _ZN6S781C43v15Ev();
extern void _ZN6S781C43v16Ev();
extern void _ZN6S781C43v17Ev();
extern void _ZN6S781C43v18Ev();
extern void _ZN6S781C43v19Ev();
extern void _ZN6S781C43v20Ev();
extern void _ZN6S781C43v21Ev();
extern void _ZN6S781C43v22Ev();
extern void _ZN6S781C43v23Ev();
extern void _ZN6S781C43v24Ev();
extern void _ZN6S781C43v25Ev();
extern void _ZN6S781C43v26Ev();
extern void _ZN6S781C43v27Ev();
extern void _ZN6S781C43v28Ev();
extern void _ZN6S781C43v29Ev();
extern void _ZN6S781C43v30Ev();
extern void _ZN6S781C43v31Ev();
extern void _ZN6S781C43v32Ev();
extern void _ZN6S781C43v33Ev();
extern void _ZN6S781C43v34Ev();
extern void _ZN6S781C43v35Ev();
extern void _ZN6S781C43v36Ev();
extern void _ZN6S781C43v37Ev();
extern void _ZN6S781C43v38Ev();
extern void _ZN6S781C43v39Ev();
extern void _ZN6S781C43v40Ev();
extern void _ZN6S781C43v41Ev();
extern void _ZN6S781C43v42Ev();
extern void _ZN6S781C43v43Ev();
extern void _ZN6S781C43v44Ev();
extern void _ZN6S781C43v45Ev();
extern void _ZN6S781C43v46Ev();
extern void _ZN6S781C43v47Ev();
extern void _ZN6S781C43v48Ev();
extern void _ZN6S781C43v49Ev();
extern void _ZN6S781C43v50Ev();
extern void _ZN6S781C43v51Ev();
extern void _ZN6S781C43v52Ev();
extern void _ZN6S781C43v53Ev();
extern void _ZN6S781C43v54Ev();
extern void _ZN6S781C43v55Ev();
extern void _ZN6S781C43v56Ev();
extern void _ZN6S781C43v57Ev();
extern void _ZN6S781C43v58Ev();
extern void _ZN6S781C43v59Ev();
extern void _ZN6S781C43v60Ev();
extern void _ZN6S781C43v61Ev();
extern void _ZN6S781C43v62Ev();
extern void _ZN6S781C43v63Ev();
extern void _ZN6S781C43v64Ev();
extern void _ZN6S781C43v65Ev();
extern void _ZN6S781C43v66Ev();
extern void _ZN6S781C43v67Ev();
extern void _ZN6S781C43v68Ev();
extern void _ZN6S781C43v69Ev();
extern void _ZN6S781C43v70Ev();
extern void _ZN6S781C43v71Ev();
extern void _ZN6S781C43v72Ev();
extern void _ZN6S781C43v73Ev();
extern void _ZN6S781C43v74Ev();
extern void _ZN6S781C43v75Ev();
extern void _ZN6S781C43v76Ev();
extern void _ZN6S781C43v77Ev();
extern void _ZN6S781C43v78Ev();
extern void _ZN6S781C43v79Ev();
extern void _ZN6S781C43v80Ev();
extern void _ZN6S781C43v81Ev();
extern void _ZN6S781C43v82Ev();
extern void _ZN6S781C43v83Ev();
extern void _ZN6S781C43v84Ev();
extern void _ZN6S781C43v85Ev();
extern void _ZN6S781C43v86Ev();
extern void _ZN6S781C43v87Ev();
extern void _ZN6S781C43v88Ev();
extern void _ZN6S781C43v89Ev();
extern void _ZN6S781C43v90Ev();
extern void _ZN6S781C43v91Ev();
extern void _ZN6S781C43v92Ev();
extern void _ZN6S781C43v93Ev();
extern void _ZN6S781C43v94Ev();
extern void _ZN6S781C43v95Ev();
extern void _ZN6S781C43v96Ev();
extern void _ZN6S781C43v97Ev();
extern void _ZN6S781C43v98Ev();
extern void _ZN6S781C43v99Ev();
extern void _ZN6S781C44v100Ev();
extern void _ZN6S781C44v101Ev();
extern void _ZN6S781C44v102Ev();
extern void _ZN6S781C44v103Ev();
extern void _ZN6S781C44v104Ev();
extern void _ZN6S781C44v105Ev();
extern void _ZN6S781C44v106Ev();
extern void _ZN6S781C44v107Ev();
extern void _ZN6S781C44v108Ev();
extern void _ZN6S781C44v109Ev();
extern void _ZN6S781C44v110Ev();
extern void _ZN6S781C44v111Ev();
extern void _ZN6S781C44v112Ev();
extern void _ZN6S781C44v113Ev();
extern void _ZN6S781C44v114Ev();
extern void _ZN6S781C44v115Ev();
extern void _ZN6S781C44v116Ev();
extern void _ZN6S781C44v117Ev();
extern void _ZN6S781C44v118Ev();
extern void _ZN6S781C44v119Ev();
extern void _ZN6S781C44v120Ev();
extern void _ZN6S781C44v121Ev();
extern void _ZN6S781C44v122Ev();
extern void _ZN6S781C44v123Ev();
extern void _ZN6S781C44v124Ev();
extern void _ZN6S781C44v125Ev();
static  VTBL_ENTRY vtc_S781C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S781C4[0]),
  (VTBL_ENTRY)&_ZN6S781C4D1Ev,
  (VTBL_ENTRY)&_ZN6S781C4D0Ev,
  (VTBL_ENTRY)&_ZN6S781C42v4Ev,
  (VTBL_ENTRY)&_ZN6S781C42v5Ev,
  (VTBL_ENTRY)&_ZN6S781C42v6Ev,
  (VTBL_ENTRY)&_ZN6S781C42v7Ev,
  (VTBL_ENTRY)&_ZN6S781C42v8Ev,
  (VTBL_ENTRY)&_ZN6S781C42v9Ev,
  (VTBL_ENTRY)&_ZN6S781C43v10Ev,
  (VTBL_ENTRY)&_ZN6S781C43v11Ev,
  (VTBL_ENTRY)&_ZN6S781C43v12Ev,
  (VTBL_ENTRY)&_ZN6S781C43v13Ev,
  (VTBL_ENTRY)&_ZN6S781C43v14Ev,
  (VTBL_ENTRY)&_ZN6S781C43v15Ev,
  (VTBL_ENTRY)&_ZN6S781C43v16Ev,
  (VTBL_ENTRY)&_ZN6S781C43v17Ev,
  (VTBL_ENTRY)&_ZN6S781C43v18Ev,
  (VTBL_ENTRY)&_ZN6S781C43v19Ev,
  (VTBL_ENTRY)&_ZN6S781C43v20Ev,
  (VTBL_ENTRY)&_ZN6S781C43v21Ev,
  (VTBL_ENTRY)&_ZN6S781C43v22Ev,
  (VTBL_ENTRY)&_ZN6S781C43v23Ev,
  (VTBL_ENTRY)&_ZN6S781C43v24Ev,
  (VTBL_ENTRY)&_ZN6S781C43v25Ev,
  (VTBL_ENTRY)&_ZN6S781C43v26Ev,
  (VTBL_ENTRY)&_ZN6S781C43v27Ev,
  (VTBL_ENTRY)&_ZN6S781C43v28Ev,
  (VTBL_ENTRY)&_ZN6S781C43v29Ev,
  (VTBL_ENTRY)&_ZN6S781C43v30Ev,
  (VTBL_ENTRY)&_ZN6S781C43v31Ev,
  (VTBL_ENTRY)&_ZN6S781C43v32Ev,
  (VTBL_ENTRY)&_ZN6S781C43v33Ev,
  (VTBL_ENTRY)&_ZN6S781C43v34Ev,
  (VTBL_ENTRY)&_ZN6S781C43v35Ev,
  (VTBL_ENTRY)&_ZN6S781C43v36Ev,
  (VTBL_ENTRY)&_ZN6S781C43v37Ev,
  (VTBL_ENTRY)&_ZN6S781C43v38Ev,
  (VTBL_ENTRY)&_ZN6S781C43v39Ev,
  (VTBL_ENTRY)&_ZN6S781C43v40Ev,
  (VTBL_ENTRY)&_ZN6S781C43v41Ev,
  (VTBL_ENTRY)&_ZN6S781C43v42Ev,
  (VTBL_ENTRY)&_ZN6S781C43v43Ev,
  (VTBL_ENTRY)&_ZN6S781C43v44Ev,
  (VTBL_ENTRY)&_ZN6S781C43v45Ev,
  (VTBL_ENTRY)&_ZN6S781C43v46Ev,
  (VTBL_ENTRY)&_ZN6S781C43v47Ev,
  (VTBL_ENTRY)&_ZN6S781C43v48Ev,
  (VTBL_ENTRY)&_ZN6S781C43v49Ev,
  (VTBL_ENTRY)&_ZN6S781C43v50Ev,
  (VTBL_ENTRY)&_ZN6S781C43v51Ev,
  (VTBL_ENTRY)&_ZN6S781C43v52Ev,
  (VTBL_ENTRY)&_ZN6S781C43v53Ev,
  (VTBL_ENTRY)&_ZN6S781C43v54Ev,
  (VTBL_ENTRY)&_ZN6S781C43v55Ev,
  (VTBL_ENTRY)&_ZN6S781C43v56Ev,
  (VTBL_ENTRY)&_ZN6S781C43v57Ev,
  (VTBL_ENTRY)&_ZN6S781C43v58Ev,
  (VTBL_ENTRY)&_ZN6S781C43v59Ev,
  (VTBL_ENTRY)&_ZN6S781C43v60Ev,
  (VTBL_ENTRY)&_ZN6S781C43v61Ev,
  (VTBL_ENTRY)&_ZN6S781C43v62Ev,
  (VTBL_ENTRY)&_ZN6S781C43v63Ev,
  (VTBL_ENTRY)&_ZN6S781C43v64Ev,
  (VTBL_ENTRY)&_ZN6S781C43v65Ev,
  (VTBL_ENTRY)&_ZN6S781C43v66Ev,
  (VTBL_ENTRY)&_ZN6S781C43v67Ev,
  (VTBL_ENTRY)&_ZN6S781C43v68Ev,
  (VTBL_ENTRY)&_ZN6S781C43v69Ev,
  (VTBL_ENTRY)&_ZN6S781C43v70Ev,
  (VTBL_ENTRY)&_ZN6S781C43v71Ev,
  (VTBL_ENTRY)&_ZN6S781C43v72Ev,
  (VTBL_ENTRY)&_ZN6S781C43v73Ev,
  (VTBL_ENTRY)&_ZN6S781C43v74Ev,
  (VTBL_ENTRY)&_ZN6S781C43v75Ev,
  (VTBL_ENTRY)&_ZN6S781C43v76Ev,
  (VTBL_ENTRY)&_ZN6S781C43v77Ev,
  (VTBL_ENTRY)&_ZN6S781C43v78Ev,
  (VTBL_ENTRY)&_ZN6S781C43v79Ev,
  (VTBL_ENTRY)&_ZN6S781C43v80Ev,
  (VTBL_ENTRY)&_ZN6S781C43v81Ev,
  (VTBL_ENTRY)&_ZN6S781C43v82Ev,
  (VTBL_ENTRY)&_ZN6S781C43v83Ev,
  (VTBL_ENTRY)&_ZN6S781C43v84Ev,
  (VTBL_ENTRY)&_ZN6S781C43v85Ev,
  (VTBL_ENTRY)&_ZN6S781C43v86Ev,
  (VTBL_ENTRY)&_ZN6S781C43v87Ev,
  (VTBL_ENTRY)&_ZN6S781C43v88Ev,
  (VTBL_ENTRY)&_ZN6S781C43v89Ev,
  (VTBL_ENTRY)&_ZN6S781C43v90Ev,
  (VTBL_ENTRY)&_ZN6S781C43v91Ev,
  (VTBL_ENTRY)&_ZN6S781C43v92Ev,
  (VTBL_ENTRY)&_ZN6S781C43v93Ev,
  (VTBL_ENTRY)&_ZN6S781C43v94Ev,
  (VTBL_ENTRY)&_ZN6S781C43v95Ev,
  (VTBL_ENTRY)&_ZN6S781C43v96Ev,
  (VTBL_ENTRY)&_ZN6S781C43v97Ev,
  (VTBL_ENTRY)&_ZN6S781C43v98Ev,
  (VTBL_ENTRY)&_ZN6S781C43v99Ev,
  (VTBL_ENTRY)&_ZN6S781C44v100Ev,
  (VTBL_ENTRY)&_ZN6S781C44v101Ev,
  (VTBL_ENTRY)&_ZN6S781C44v102Ev,
  (VTBL_ENTRY)&_ZN6S781C44v103Ev,
  (VTBL_ENTRY)&_ZN6S781C44v104Ev,
  (VTBL_ENTRY)&_ZN6S781C44v105Ev,
  (VTBL_ENTRY)&_ZN6S781C44v106Ev,
  (VTBL_ENTRY)&_ZN6S781C44v107Ev,
  (VTBL_ENTRY)&_ZN6S781C44v108Ev,
  (VTBL_ENTRY)&_ZN6S781C44v109Ev,
  (VTBL_ENTRY)&_ZN6S781C44v110Ev,
  (VTBL_ENTRY)&_ZN6S781C44v111Ev,
  (VTBL_ENTRY)&_ZN6S781C44v112Ev,
  (VTBL_ENTRY)&_ZN6S781C44v113Ev,
  (VTBL_ENTRY)&_ZN6S781C44v114Ev,
  (VTBL_ENTRY)&_ZN6S781C44v115Ev,
  (VTBL_ENTRY)&_ZN6S781C44v116Ev,
  (VTBL_ENTRY)&_ZN6S781C44v117Ev,
  (VTBL_ENTRY)&_ZN6S781C44v118Ev,
  (VTBL_ENTRY)&_ZN6S781C44v119Ev,
  (VTBL_ENTRY)&_ZN6S781C44v120Ev,
  (VTBL_ENTRY)&_ZN6S781C44v121Ev,
  (VTBL_ENTRY)&_ZN6S781C44v122Ev,
  (VTBL_ENTRY)&_ZN6S781C44v123Ev,
  (VTBL_ENTRY)&_ZN6S781C44v124Ev,
  (VTBL_ENTRY)&_ZN6S781C44v125Ev,
};
extern VTBL_ENTRY _ZTI6S781C4[];
extern  VTBL_ENTRY _ZTV6S781C4[];
Class_Descriptor cd_S781C4 = {  "S781C4", // class name
  bases_S781C4, 1,
  &(vtc_S781C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S781C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S781C4),126, //virtual function table var
  2, // 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  S781C3  : S781C4 {
  virtual void  v126(); // _ZN6S781C34v126Ev
  virtual void  v127(); // _ZN6S781C34v127Ev
  virtual void  v128(); // _ZN6S781C34v128Ev
  virtual void  v129(); // _ZN6S781C34v129Ev
  virtual void  v130(); // _ZN6S781C34v130Ev
  virtual void  v131(); // _ZN6S781C34v131Ev
  virtual void  v132(); // _ZN6S781C34v132Ev
  virtual void  v133(); // _ZN6S781C34v133Ev
  virtual void  v134(); // _ZN6S781C34v134Ev
  virtual void  v135(); // _ZN6S781C34v135Ev
  virtual void  v136(); // _ZN6S781C34v136Ev
  virtual void  v137(); // _ZN6S781C34v137Ev
  virtual void  v138(); // _ZN6S781C34v138Ev
  virtual void  v139(); // _ZN6S781C34v139Ev
  virtual void  v140(); // _ZN6S781C34v140Ev
  virtual void  v141(); // _ZN6S781C34v141Ev
  virtual void  v142(); // _ZN6S781C34v142Ev
  virtual void  v143(); // _ZN6S781C34v143Ev
  ~S781C3(); // tgen
  S781C3(); // tgen
};
//SIG(-1 S781C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S781C3 ::v126(){vfunc_called(this, "_ZN6S781C34v126Ev");}
void  S781C3 ::v127(){vfunc_called(this, "_ZN6S781C34v127Ev");}
void  S781C3 ::v128(){vfunc_called(this, "_ZN6S781C34v128Ev");}
void  S781C3 ::v129(){vfunc_called(this, "_ZN6S781C34v129Ev");}
void  S781C3 ::v130(){vfunc_called(this, "_ZN6S781C34v130Ev");}
void  S781C3 ::v131(){vfunc_called(this, "_ZN6S781C34v131Ev");}
void  S781C3 ::v132(){vfunc_called(this, "_ZN6S781C34v132Ev");}
void  S781C3 ::v133(){vfunc_called(this, "_ZN6S781C34v133Ev");}
void  S781C3 ::v134(){vfunc_called(this, "_ZN6S781C34v134Ev");}
void  S781C3 ::v135(){vfunc_called(this, "_ZN6S781C34v135Ev");}
void  S781C3 ::v136(){vfunc_called(this, "_ZN6S781C34v136Ev");}
void  S781C3 ::v137(){vfunc_called(this, "_ZN6S781C34v137Ev");}
void  S781C3 ::v138(){vfunc_called(this, "_ZN6S781C34v138Ev");}
void  S781C3 ::v139(){vfunc_called(this, "_ZN6S781C34v139Ev");}
void  S781C3 ::v140(){vfunc_called(this, "_ZN6S781C34v140Ev");}
void  S781C3 ::v141(){vfunc_called(this, "_ZN6S781C34v141Ev");}
void  S781C3 ::v142(){vfunc_called(this, "_ZN6S781C34v142Ev");}
void  S781C3 ::v143(){vfunc_called(this, "_ZN6S781C34v143Ev");}
S781C3 ::~S781C3(){ note_dtor("S781C3", this);} // tgen
S781C3 ::S781C3(){ note_ctor("S781C3", this);} // tgen

static void Test_S781C3()
{
  extern Class_Descriptor cd_S781C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S781C3, buf);
    S781C3 *dp, &lv = *(dp=new (buf) S781C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S781C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S781C3)");
    check_base_class_offset(lv, (S785C5_nt*)(S781C4*), 0, "S781C3");
    check_base_class_offset(lv, (S781C4*), 0, "S781C3");
    test_class_info(&lv, &cd_S781C3);
    dp->~S781C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS781C3(Test_S781C3, "S781C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S781C3C1Ev();
extern void _ZN6S781C3D1Ev();
Name_Map name_map_S781C3[] = {
  NSPAIR(_ZN6S781C3C1Ev),
  NSPAIR(_ZN6S781C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S781C4;
extern VTBL_ENTRY _ZTI6S781C4[];
extern  VTBL_ENTRY _ZTV6S781C4[];
static Base_Class bases_S781C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S781C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S781C3[];
extern void _ZN6S781C3D1Ev();
extern void _ZN6S781C3D0Ev();
extern void _ZN6S781C42v4Ev();
extern void _ZN6S781C42v5Ev();
extern void _ZN6S781C42v6Ev();
extern void _ZN6S781C42v7Ev();
extern void _ZN6S781C42v8Ev();
extern void _ZN6S781C42v9Ev();
extern void _ZN6S781C43v10Ev();
extern void _ZN6S781C43v11Ev();
extern void _ZN6S781C43v12Ev();
extern void _ZN6S781C43v13Ev();
extern void _ZN6S781C43v14Ev();
extern void _ZN6S781C43v15Ev();
extern void _ZN6S781C43v16Ev();
extern void _ZN6S781C43v17Ev();
extern void _ZN6S781C43v18Ev();
extern void _ZN6S781C43v19Ev();
extern void _ZN6S781C43v20Ev();
extern void _ZN6S781C43v21Ev();
extern void _ZN6S781C43v22Ev();
extern void _ZN6S781C43v23Ev();
extern void _ZN6S781C43v24Ev();
extern void _ZN6S781C43v25Ev();
extern void _ZN6S781C43v26Ev();
extern void _ZN6S781C43v27Ev();
extern void _ZN6S781C43v28Ev();
extern void _ZN6S781C43v29Ev();
extern void _ZN6S781C43v30Ev();
extern void _ZN6S781C43v31Ev();
extern void _ZN6S781C43v32Ev();
extern void _ZN6S781C43v33Ev();
extern void _ZN6S781C43v34Ev();
extern void _ZN6S781C43v35Ev();
extern void _ZN6S781C43v36Ev();
extern void _ZN6S781C43v37Ev();
extern void _ZN6S781C43v38Ev();
extern void _ZN6S781C43v39Ev();
extern void _ZN6S781C43v40Ev();
extern void _ZN6S781C43v41Ev();
extern void _ZN6S781C43v42Ev();
extern void _ZN6S781C43v43Ev();
extern void _ZN6S781C43v44Ev();
extern void _ZN6S781C43v45Ev();
extern void _ZN6S781C43v46Ev();
extern void _ZN6S781C43v47Ev();
extern void _ZN6S781C43v48Ev();
extern void _ZN6S781C43v49Ev();
extern void _ZN6S781C43v50Ev();
extern void _ZN6S781C43v51Ev();
extern void _ZN6S781C43v52Ev();
extern void _ZN6S781C43v53Ev();
extern void _ZN6S781C43v54Ev();
extern void _ZN6S781C43v55Ev();
extern void _ZN6S781C43v56Ev();
extern void _ZN6S781C43v57Ev();
extern void _ZN6S781C43v58Ev();
extern void _ZN6S781C43v59Ev();
extern void _ZN6S781C43v60Ev();
extern void _ZN6S781C43v61Ev();
extern void _ZN6S781C43v62Ev();
extern void _ZN6S781C43v63Ev();
extern void _ZN6S781C43v64Ev();
extern void _ZN6S781C43v65Ev();
extern void _ZN6S781C43v66Ev();
extern void _ZN6S781C43v67Ev();
extern void _ZN6S781C43v68Ev();
extern void _ZN6S781C43v69Ev();
extern void _ZN6S781C43v70Ev();
extern void _ZN6S781C43v71Ev();
extern void _ZN6S781C43v72Ev();
extern void _ZN6S781C43v73Ev();
extern void _ZN6S781C43v74Ev();
extern void _ZN6S781C43v75Ev();
extern void _ZN6S781C43v76Ev();
extern void _ZN6S781C43v77Ev();
extern void _ZN6S781C43v78Ev();
extern void _ZN6S781C43v79Ev();
extern void _ZN6S781C43v80Ev();
extern void _ZN6S781C43v81Ev();
extern void _ZN6S781C43v82Ev();
extern void _ZN6S781C43v83Ev();
extern void _ZN6S781C43v84Ev();
extern void _ZN6S781C43v85Ev();
extern void _ZN6S781C43v86Ev();
extern void _ZN6S781C43v87Ev();
extern void _ZN6S781C43v88Ev();
extern void _ZN6S781C43v89Ev();
extern void _ZN6S781C43v90Ev();
extern void _ZN6S781C43v91Ev();
extern void _ZN6S781C43v92Ev();
extern void _ZN6S781C43v93Ev();
extern void _ZN6S781C43v94Ev();
extern void _ZN6S781C43v95Ev();
extern void _ZN6S781C43v96Ev();
extern void _ZN6S781C43v97Ev();
extern void _ZN6S781C43v98Ev();
extern void _ZN6S781C43v99Ev();
extern void _ZN6S781C44v100Ev();
extern void _ZN6S781C44v101Ev();
extern void _ZN6S781C44v102Ev();
extern void _ZN6S781C44v103Ev();
extern void _ZN6S781C44v104Ev();
extern void _ZN6S781C44v105Ev();
extern void _ZN6S781C44v106Ev();
extern void _ZN6S781C44v107Ev();
extern void _ZN6S781C44v108Ev();
extern void _ZN6S781C44v109Ev();
extern void _ZN6S781C44v110Ev();
extern void _ZN6S781C44v111Ev();
extern void _ZN6S781C44v112Ev();
extern void _ZN6S781C44v113Ev();
extern void _ZN6S781C44v114Ev();
extern void _ZN6S781C44v115Ev();
extern void _ZN6S781C44v116Ev();
extern void _ZN6S781C44v117Ev();
extern void _ZN6S781C44v118Ev();
extern void _ZN6S781C44v119Ev();
extern void _ZN6S781C44v120Ev();
extern void _ZN6S781C44v121Ev();
extern void _ZN6S781C44v122Ev();
extern void _ZN6S781C44v123Ev();
extern void _ZN6S781C44v124Ev();
extern void _ZN6S781C44v125Ev();
extern void _ZN6S781C34v126Ev();
extern void _ZN6S781C34v127Ev();
extern void _ZN6S781C34v128Ev();
extern void _ZN6S781C34v129Ev();
extern void _ZN6S781C34v130Ev();
extern void _ZN6S781C34v131Ev();
extern void _ZN6S781C34v132Ev();
extern void _ZN6S781C34v133Ev();
extern void _ZN6S781C34v134Ev();
extern void _ZN6S781C34v135Ev();
extern void _ZN6S781C34v136Ev();
extern void _ZN6S781C34v137Ev();
extern void _ZN6S781C34v138Ev();
extern void _ZN6S781C34v139Ev();
extern void _ZN6S781C34v140Ev();
extern void _ZN6S781C34v141Ev();
extern void _ZN6S781C34v142Ev();
extern void _ZN6S781C34v143Ev();
static  VTBL_ENTRY vtc_S781C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S781C3[0]),
  (VTBL_ENTRY)&_ZN6S781C3D1Ev,
  (VTBL_ENTRY)&_ZN6S781C3D0Ev,
  (VTBL_ENTRY)&_ZN6S781C42v4Ev,
  (VTBL_ENTRY)&_ZN6S781C42v5Ev,
  (VTBL_ENTRY)&_ZN6S781C42v6Ev,
  (VTBL_ENTRY)&_ZN6S781C42v7Ev,
  (VTBL_ENTRY)&_ZN6S781C42v8Ev,
  (VTBL_ENTRY)&_ZN6S781C42v9Ev,
  (VTBL_ENTRY)&_ZN6S781C43v10Ev,
  (VTBL_ENTRY)&_ZN6S781C43v11Ev,
  (VTBL_ENTRY)&_ZN6S781C43v12Ev,
  (VTBL_ENTRY)&_ZN6S781C43v13Ev,
  (VTBL_ENTRY)&_ZN6S781C43v14Ev,
  (VTBL_ENTRY)&_ZN6S781C43v15Ev,
  (VTBL_ENTRY)&_ZN6S781C43v16Ev,
  (VTBL_ENTRY)&_ZN6S781C43v17Ev,
  (VTBL_ENTRY)&_ZN6S781C43v18Ev,
  (VTBL_ENTRY)&_ZN6S781C43v19Ev,
  (VTBL_ENTRY)&_ZN6S781C43v20Ev,
  (VTBL_ENTRY)&_ZN6S781C43v21Ev,
  (VTBL_ENTRY)&_ZN6S781C43v22Ev,
  (VTBL_ENTRY)&_ZN6S781C43v23Ev,
  (VTBL_ENTRY)&_ZN6S781C43v24Ev,
  (VTBL_ENTRY)&_ZN6S781C43v25Ev,
  (VTBL_ENTRY)&_ZN6S781C43v26Ev,
  (VTBL_ENTRY)&_ZN6S781C43v27Ev,
  (VTBL_ENTRY)&_ZN6S781C43v28Ev,
  (VTBL_ENTRY)&_ZN6S781C43v29Ev,
  (VTBL_ENTRY)&_ZN6S781C43v30Ev,
  (VTBL_ENTRY)&_ZN6S781C43v31Ev,
  (VTBL_ENTRY)&_ZN6S781C43v32Ev,
  (VTBL_ENTRY)&_ZN6S781C43v33Ev,
  (VTBL_ENTRY)&_ZN6S781C43v34Ev,
  (VTBL_ENTRY)&_ZN6S781C43v35Ev,
  (VTBL_ENTRY)&_ZN6S781C43v36Ev,
  (VTBL_ENTRY)&_ZN6S781C43v37Ev,
  (VTBL_ENTRY)&_ZN6S781C43v38Ev,
  (VTBL_ENTRY)&_ZN6S781C43v39Ev,
  (VTBL_ENTRY)&_ZN6S781C43v40Ev,
  (VTBL_ENTRY)&_ZN6S781C43v41Ev,
  (VTBL_ENTRY)&_ZN6S781C43v42Ev,
  (VTBL_ENTRY)&_ZN6S781C43v43Ev,
  (VTBL_ENTRY)&_ZN6S781C43v44Ev,
  (VTBL_ENTRY)&_ZN6S781C43v45Ev,
  (VTBL_ENTRY)&_ZN6S781C43v46Ev,
  (VTBL_ENTRY)&_ZN6S781C43v47Ev,
  (VTBL_ENTRY)&_ZN6S781C43v48Ev,
  (VTBL_ENTRY)&_ZN6S781C43v49Ev,
  (VTBL_ENTRY)&_ZN6S781C43v50Ev,
  (VTBL_ENTRY)&_ZN6S781C43v51Ev,
  (VTBL_ENTRY)&_ZN6S781C43v52Ev,
  (VTBL_ENTRY)&_ZN6S781C43v53Ev,
  (VTBL_ENTRY)&_ZN6S781C43v54Ev,
  (VTBL_ENTRY)&_ZN6S781C43v55Ev,
  (VTBL_ENTRY)&_ZN6S781C43v56Ev,
  (VTBL_ENTRY)&_ZN6S781C43v57Ev,
  (VTBL_ENTRY)&_ZN6S781C43v58Ev,
  (VTBL_ENTRY)&_ZN6S781C43v59Ev,
  (VTBL_ENTRY)&_ZN6S781C43v60Ev,
  (VTBL_ENTRY)&_ZN6S781C43v61Ev,
  (VTBL_ENTRY)&_ZN6S781C43v62Ev,
  (VTBL_ENTRY)&_ZN6S781C43v63Ev,
  (VTBL_ENTRY)&_ZN6S781C43v64Ev,
  (VTBL_ENTRY)&_ZN6S781C43v65Ev,
  (VTBL_ENTRY)&_ZN6S781C43v66Ev,
  (VTBL_ENTRY)&_ZN6S781C43v67Ev,
  (VTBL_ENTRY)&_ZN6S781C43v68Ev,
  (VTBL_ENTRY)&_ZN6S781C43v69Ev,
  (VTBL_ENTRY)&_ZN6S781C43v70Ev,
  (VTBL_ENTRY)&_ZN6S781C43v71Ev,
  (VTBL_ENTRY)&_ZN6S781C43v72Ev,
  (VTBL_ENTRY)&_ZN6S781C43v73Ev,
  (VTBL_ENTRY)&_ZN6S781C43v74Ev,
  (VTBL_ENTRY)&_ZN6S781C43v75Ev,
  (VTBL_ENTRY)&_ZN6S781C43v76Ev,
  (VTBL_ENTRY)&_ZN6S781C43v77Ev,
  (VTBL_ENTRY)&_ZN6S781C43v78Ev,
  (VTBL_ENTRY)&_ZN6S781C43v79Ev,
  (VTBL_ENTRY)&_ZN6S781C43v80Ev,
  (VTBL_ENTRY)&_ZN6S781C43v81Ev,
  (VTBL_ENTRY)&_ZN6S781C43v82Ev,
  (VTBL_ENTRY)&_ZN6S781C43v83Ev,
  (VTBL_ENTRY)&_ZN6S781C43v84Ev,
  (VTBL_ENTRY)&_ZN6S781C43v85Ev,
  (VTBL_ENTRY)&_ZN6S781C43v86Ev,
  (VTBL_ENTRY)&_ZN6S781C43v87Ev,
  (VTBL_ENTRY)&_ZN6S781C43v88Ev,
  (VTBL_ENTRY)&_ZN6S781C43v89Ev,
  (VTBL_ENTRY)&_ZN6S781C43v90Ev,
  (VTBL_ENTRY)&_ZN6S781C43v91Ev,
  (VTBL_ENTRY)&_ZN6S781C43v92Ev,
  (VTBL_ENTRY)&_ZN6S781C43v93Ev,
  (VTBL_ENTRY)&_ZN6S781C43v94Ev,
  (VTBL_ENTRY)&_ZN6S781C43v95Ev,
  (VTBL_ENTRY)&_ZN6S781C43v96Ev,
  (VTBL_ENTRY)&_ZN6S781C43v97Ev,
  (VTBL_ENTRY)&_ZN6S781C43v98Ev,
  (VTBL_ENTRY)&_ZN6S781C43v99Ev,
  (VTBL_ENTRY)&_ZN6S781C44v100Ev,
  (VTBL_ENTRY)&_ZN6S781C44v101Ev,
  (VTBL_ENTRY)&_ZN6S781C44v102Ev,
  (VTBL_ENTRY)&_ZN6S781C44v103Ev,
  (VTBL_ENTRY)&_ZN6S781C44v104Ev,
  (VTBL_ENTRY)&_ZN6S781C44v105Ev,
  (VTBL_ENTRY)&_ZN6S781C44v106Ev,
  (VTBL_ENTRY)&_ZN6S781C44v107Ev,
  (VTBL_ENTRY)&_ZN6S781C44v108Ev,
  (VTBL_ENTRY)&_ZN6S781C44v109Ev,
  (VTBL_ENTRY)&_ZN6S781C44v110Ev,
  (VTBL_ENTRY)&_ZN6S781C44v111Ev,
  (VTBL_ENTRY)&_ZN6S781C44v112Ev,
  (VTBL_ENTRY)&_ZN6S781C44v113Ev,
  (VTBL_ENTRY)&_ZN6S781C44v114Ev,
  (VTBL_ENTRY)&_ZN6S781C44v115Ev,
  (VTBL_ENTRY)&_ZN6S781C44v116Ev,
  (VTBL_ENTRY)&_ZN6S781C44v117Ev,
  (VTBL_ENTRY)&_ZN6S781C44v118Ev,
  (VTBL_ENTRY)&_ZN6S781C44v119Ev,
  (VTBL_ENTRY)&_ZN6S781C44v120Ev,
  (VTBL_ENTRY)&_ZN6S781C44v121Ev,
  (VTBL_ENTRY)&_ZN6S781C44v122Ev,
  (VTBL_ENTRY)&_ZN6S781C44v123Ev,
  (VTBL_ENTRY)&_ZN6S781C44v124Ev,
  (VTBL_ENTRY)&_ZN6S781C44v125Ev,
  (VTBL_ENTRY)&_ZN6S781C34v126Ev,
  (VTBL_ENTRY)&_ZN6S781C34v127Ev,
  (VTBL_ENTRY)&_ZN6S781C34v128Ev,
  (VTBL_ENTRY)&_ZN6S781C34v129Ev,
  (VTBL_ENTRY)&_ZN6S781C34v130Ev,
  (VTBL_ENTRY)&_ZN6S781C34v131Ev,
  (VTBL_ENTRY)&_ZN6S781C34v132Ev,
  (VTBL_ENTRY)&_ZN6S781C34v133Ev,
  (VTBL_ENTRY)&_ZN6S781C34v134Ev,
  (VTBL_ENTRY)&_ZN6S781C34v135Ev,
  (VTBL_ENTRY)&_ZN6S781C34v136Ev,
  (VTBL_ENTRY)&_ZN6S781C34v137Ev,
  (VTBL_ENTRY)&_ZN6S781C34v138Ev,
  (VTBL_ENTRY)&_ZN6S781C34v139Ev,
  (VTBL_ENTRY)&_ZN6S781C34v140Ev,
  (VTBL_ENTRY)&_ZN6S781C34v141Ev,
  (VTBL_ENTRY)&_ZN6S781C34v142Ev,
  (VTBL_ENTRY)&_ZN6S781C34v143Ev,
};
extern VTBL_ENTRY _ZTI6S781C3[];
extern  VTBL_ENTRY _ZTV6S781C3[];
Class_Descriptor cd_S781C3 = {  "S781C3", // class name
  bases_S781C3, 2,
  &(vtc_S781C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S781C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S781C3),144, //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  S781C2  : S781C3 {
  virtual void  v144(); // _ZN6S781C24v144Ev
  virtual void  v145(); // _ZN6S781C24v145Ev
  virtual void  v146(); // _ZN6S781C24v146Ev
  virtual void  v147(); // _ZN6S781C24v147Ev
  virtual void  v148(); // _ZN6S781C24v148Ev
  virtual void  v149(); // _ZN6S781C24v149Ev
  ~S781C2(); // tgen
  S781C2(); // tgen
};
//SIG(-1 S781C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 v144 v145 v146} v1 v2 v3 v4 v5 v6}


void  S781C2 ::v144(){vfunc_called(this, "_ZN6S781C24v144Ev");}
void  S781C2 ::v145(){vfunc_called(this, "_ZN6S781C24v145Ev");}
void  S781C2 ::v146(){vfunc_called(this, "_ZN6S781C24v146Ev");}
void  S781C2 ::v147(){vfunc_called(this, "_ZN6S781C24v147Ev");}
void  S781C2 ::v148(){vfunc_called(this, "_ZN6S781C24v148Ev");}
void  S781C2 ::v149(){vfunc_called(this, "_ZN6S781C24v149Ev");}
S781C2 ::~S781C2(){ note_dtor("S781C2", this);} // tgen
S781C2 ::S781C2(){ note_ctor("S781C2", this);} // tgen

static void Test_S781C2()
{
  extern Class_Descriptor cd_S781C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S781C2, buf);
    S781C2 *dp, &lv = *(dp=new (buf) S781C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S781C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S781C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S781C4*)(S781C3*), 0, "S781C2");
    check_base_class_offset(lv, (S781C4*)(S781C3*), 0, "S781C2");
    check_base_class_offset(lv, (S781C3*), 0, "S781C2");
    test_class_info(&lv, &cd_S781C2);
    dp->~S781C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS781C2(Test_S781C2, "S781C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S781C2C1Ev();
extern void _ZN6S781C2D1Ev();
Name_Map name_map_S781C2[] = {
  NSPAIR(_ZN6S781C2C1Ev),
  NSPAIR(_ZN6S781C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S781C4;
extern VTBL_ENTRY _ZTI6S781C4[];
extern  VTBL_ENTRY _ZTV6S781C4[];
extern Class_Descriptor cd_S781C3;
extern VTBL_ENTRY _ZTI6S781C3[];
extern  VTBL_ENTRY _ZTV6S781C3[];
static Base_Class bases_S781C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S781C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S781C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S781C2[];
extern void _ZN6S781C2D1Ev();
extern void _ZN6S781C2D0Ev();
extern void _ZN6S781C42v4Ev();
extern void _ZN6S781C42v5Ev();
extern void _ZN6S781C42v6Ev();
extern void _ZN6S781C42v7Ev();
extern void _ZN6S781C42v8Ev();
extern void _ZN6S781C42v9Ev();
extern void _ZN6S781C43v10Ev();
extern void _ZN6S781C43v11Ev();
extern void _ZN6S781C43v12Ev();
extern void _ZN6S781C43v13Ev();
extern void _ZN6S781C43v14Ev();
extern void _ZN6S781C43v15Ev();
extern void _ZN6S781C43v16Ev();
extern void _ZN6S781C43v17Ev();
extern void _ZN6S781C43v18Ev();
extern void _ZN6S781C43v19Ev();
extern void _ZN6S781C43v20Ev();
extern void _ZN6S781C43v21Ev();
extern void _ZN6S781C43v22Ev();
extern void _ZN6S781C43v23Ev();
extern void _ZN6S781C43v24Ev();
extern void _ZN6S781C43v25Ev();
extern void _ZN6S781C43v26Ev();
extern void _ZN6S781C43v27Ev();
extern void _ZN6S781C43v28Ev();
extern void _ZN6S781C43v29Ev();
extern void _ZN6S781C43v30Ev();
extern void _ZN6S781C43v31Ev();
extern void _ZN6S781C43v32Ev();
extern void _ZN6S781C43v33Ev();
extern void _ZN6S781C43v34Ev();
extern void _ZN6S781C43v35Ev();
extern void _ZN6S781C43v36Ev();
extern void _ZN6S781C43v37Ev();
extern void _ZN6S781C43v38Ev();
extern void _ZN6S781C43v39Ev();
extern void _ZN6S781C43v40Ev();
extern void _ZN6S781C43v41Ev();
extern void _ZN6S781C43v42Ev();
extern void _ZN6S781C43v43Ev();
extern void _ZN6S781C43v44Ev();
extern void _ZN6S781C43v45Ev();
extern void _ZN6S781C43v46Ev();
extern void _ZN6S781C43v47Ev();
extern void _ZN6S781C43v48Ev();
extern void _ZN6S781C43v49Ev();
extern void _ZN6S781C43v50Ev();
extern void _ZN6S781C43v51Ev();
extern void _ZN6S781C43v52Ev();
extern void _ZN6S781C43v53Ev();
extern void _ZN6S781C43v54Ev();
extern void _ZN6S781C43v55Ev();
extern void _ZN6S781C43v56Ev();
extern void _ZN6S781C43v57Ev();
extern void _ZN6S781C43v58Ev();
extern void _ZN6S781C43v59Ev();
extern void _ZN6S781C43v60Ev();
extern void _ZN6S781C43v61Ev();
extern void _ZN6S781C43v62Ev();
extern void _ZN6S781C43v63Ev();
extern void _ZN6S781C43v64Ev();
extern void _ZN6S781C43v65Ev();
extern void _ZN6S781C43v66Ev();
extern void _ZN6S781C43v67Ev();
extern void _ZN6S781C43v68Ev();
extern void _ZN6S781C43v69Ev();
extern void _ZN6S781C43v70Ev();
extern void _ZN6S781C43v71Ev();
extern void _ZN6S781C43v72Ev();
extern void _ZN6S781C43v73Ev();
extern void _ZN6S781C43v74Ev();
extern void _ZN6S781C43v75Ev();
extern void _ZN6S781C43v76Ev();
extern void _ZN6S781C43v77Ev();
extern void _ZN6S781C43v78Ev();
extern void _ZN6S781C43v79Ev();
extern void _ZN6S781C43v80Ev();
extern void _ZN6S781C43v81Ev();
extern void _ZN6S781C43v82Ev();
extern void _ZN6S781C43v83Ev();
extern void _ZN6S781C43v84Ev();
extern void _ZN6S781C43v85Ev();
extern void _ZN6S781C43v86Ev();
extern void _ZN6S781C43v87Ev();
extern void _ZN6S781C43v88Ev();
extern void _ZN6S781C43v89Ev();
extern void _ZN6S781C43v90Ev();
extern void _ZN6S781C43v91Ev();
extern void _ZN6S781C43v92Ev();
extern void _ZN6S781C43v93Ev();
extern void _ZN6S781C43v94Ev();
extern void _ZN6S781C43v95Ev();
extern void _ZN6S781C43v96Ev();
extern void _ZN6S781C43v97Ev();
extern void _ZN6S781C43v98Ev();
extern void _ZN6S781C43v99Ev();
extern void _ZN6S781C44v100Ev();
extern void _ZN6S781C44v101Ev();
extern void _ZN6S781C44v102Ev();
extern void _ZN6S781C44v103Ev();
extern void _ZN6S781C44v104Ev();
extern void _ZN6S781C44v105Ev();
extern void _ZN6S781C44v106Ev();
extern void _ZN6S781C44v107Ev();
extern void _ZN6S781C44v108Ev();
extern void _ZN6S781C44v109Ev();
extern void _ZN6S781C44v110Ev();
extern void _ZN6S781C44v111Ev();
extern void _ZN6S781C44v112Ev();
extern void _ZN6S781C44v113Ev();
extern void _ZN6S781C44v114Ev();
extern void _ZN6S781C44v115Ev();
extern void _ZN6S781C44v116Ev();
extern void _ZN6S781C44v117Ev();
extern void _ZN6S781C44v118Ev();
extern void _ZN6S781C44v119Ev();
extern void _ZN6S781C44v120Ev();
extern void _ZN6S781C44v121Ev();
extern void _ZN6S781C44v122Ev();
extern void _ZN6S781C44v123Ev();
extern void _ZN6S781C44v124Ev();
extern void _ZN6S781C44v125Ev();
extern void _ZN6S781C34v126Ev();
extern void _ZN6S781C34v127Ev();
extern void _ZN6S781C34v128Ev();
extern void _ZN6S781C34v129Ev();
extern void _ZN6S781C34v130Ev();
extern void _ZN6S781C34v131Ev();
extern void _ZN6S781C34v132Ev();
extern void _ZN6S781C34v133Ev();
extern void _ZN6S781C34v134Ev();
extern void _ZN6S781C34v135Ev();
extern void _ZN6S781C34v136Ev();
extern void _ZN6S781C34v137Ev();
extern void _ZN6S781C34v138Ev();
extern void _ZN6S781C34v139Ev();
extern void _ZN6S781C34v140Ev();
extern void _ZN6S781C34v141Ev();
extern void _ZN6S781C34v142Ev();
extern void _ZN6S781C34v143Ev();
extern void _ZN6S781C24v144Ev();
extern void _ZN6S781C24v145Ev();
extern void _ZN6S781C24v146Ev();
extern void _ZN6S781C24v147Ev();
extern void _ZN6S781C24v148Ev();
extern void _ZN6S781C24v149Ev();
static  VTBL_ENTRY vtc_S781C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S781C2[0]),
  (VTBL_ENTRY)&_ZN6S781C2D1Ev,
  (VTBL_ENTRY)&_ZN6S781C2D0Ev,
  (VTBL_ENTRY)&_ZN6S781C42v4Ev,
  (VTBL_ENTRY)&_ZN6S781C42v5Ev,
  (VTBL_ENTRY)&_ZN6S781C42v6Ev,
  (VTBL_ENTRY)&_ZN6S781C42v7Ev,
  (VTBL_ENTRY)&_ZN6S781C42v8Ev,
  (VTBL_ENTRY)&_ZN6S781C42v9Ev,
  (VTBL_ENTRY)&_ZN6S781C43v10Ev,
  (VTBL_ENTRY)&_ZN6S781C43v11Ev,
  (VTBL_ENTRY)&_ZN6S781C43v12Ev,
  (VTBL_ENTRY)&_ZN6S781C43v13Ev,
  (VTBL_ENTRY)&_ZN6S781C43v14Ev,
  (VTBL_ENTRY)&_ZN6S781C43v15Ev,
  (VTBL_ENTRY)&_ZN6S781C43v16Ev,
  (VTBL_ENTRY)&_ZN6S781C43v17Ev,
  (VTBL_ENTRY)&_ZN6S781C43v18Ev,
  (VTBL_ENTRY)&_ZN6S781C43v19Ev,
  (VTBL_ENTRY)&_ZN6S781C43v20Ev,
  (VTBL_ENTRY)&_ZN6S781C43v21Ev,
  (VTBL_ENTRY)&_ZN6S781C43v22Ev,
  (VTBL_ENTRY)&_ZN6S781C43v23Ev,
  (VTBL_ENTRY)&_ZN6S781C43v24Ev,
  (VTBL_ENTRY)&_ZN6S781C43v25Ev,
  (VTBL_ENTRY)&_ZN6S781C43v26Ev,
  (VTBL_ENTRY)&_ZN6S781C43v27Ev,
  (VTBL_ENTRY)&_ZN6S781C43v28Ev,
  (VTBL_ENTRY)&_ZN6S781C43v29Ev,
  (VTBL_ENTRY)&_ZN6S781C43v30Ev,
  (VTBL_ENTRY)&_ZN6S781C43v31Ev,
  (VTBL_ENTRY)&_ZN6S781C43v32Ev,
  (VTBL_ENTRY)&_ZN6S781C43v33Ev,
  (VTBL_ENTRY)&_ZN6S781C43v34Ev,
  (VTBL_ENTRY)&_ZN6S781C43v35Ev,
  (VTBL_ENTRY)&_ZN6S781C43v36Ev,
  (VTBL_ENTRY)&_ZN6S781C43v37Ev,
  (VTBL_ENTRY)&_ZN6S781C43v38Ev,
  (VTBL_ENTRY)&_ZN6S781C43v39Ev,
  (VTBL_ENTRY)&_ZN6S781C43v40Ev,
  (VTBL_ENTRY)&_ZN6S781C43v41Ev,
  (VTBL_ENTRY)&_ZN6S781C43v42Ev,
  (VTBL_ENTRY)&_ZN6S781C43v43Ev,
  (VTBL_ENTRY)&_ZN6S781C43v44Ev,
  (VTBL_ENTRY)&_ZN6S781C43v45Ev,
  (VTBL_ENTRY)&_ZN6S781C43v46Ev,
  (VTBL_ENTRY)&_ZN6S781C43v47Ev,
  (VTBL_ENTRY)&_ZN6S781C43v48Ev,
  (VTBL_ENTRY)&_ZN6S781C43v49Ev,
  (VTBL_ENTRY)&_ZN6S781C43v50Ev,
  (VTBL_ENTRY)&_ZN6S781C43v51Ev,
  (VTBL_ENTRY)&_ZN6S781C43v52Ev,
  (VTBL_ENTRY)&_ZN6S781C43v53Ev,
  (VTBL_ENTRY)&_ZN6S781C43v54Ev,
  (VTBL_ENTRY)&_ZN6S781C43v55Ev,
  (VTBL_ENTRY)&_ZN6S781C43v56Ev,
  (VTBL_ENTRY)&_ZN6S781C43v57Ev,
  (VTBL_ENTRY)&_ZN6S781C43v58Ev,
  (VTBL_ENTRY)&_ZN6S781C43v59Ev,
  (VTBL_ENTRY)&_ZN6S781C43v60Ev,
  (VTBL_ENTRY)&_ZN6S781C43v61Ev,
  (VTBL_ENTRY)&_ZN6S781C43v62Ev,
  (VTBL_ENTRY)&_ZN6S781C43v63Ev,
  (VTBL_ENTRY)&_ZN6S781C43v64Ev,
  (VTBL_ENTRY)&_ZN6S781C43v65Ev,
  (VTBL_ENTRY)&_ZN6S781C43v66Ev,
  (VTBL_ENTRY)&_ZN6S781C43v67Ev,
  (VTBL_ENTRY)&_ZN6S781C43v68Ev,
  (VTBL_ENTRY)&_ZN6S781C43v69Ev,
  (VTBL_ENTRY)&_ZN6S781C43v70Ev,
  (VTBL_ENTRY)&_ZN6S781C43v71Ev,
  (VTBL_ENTRY)&_ZN6S781C43v72Ev,
  (VTBL_ENTRY)&_ZN6S781C43v73Ev,
  (VTBL_ENTRY)&_ZN6S781C43v74Ev,
  (VTBL_ENTRY)&_ZN6S781C43v75Ev,
  (VTBL_ENTRY)&_ZN6S781C43v76Ev,
  (VTBL_ENTRY)&_ZN6S781C43v77Ev,
  (VTBL_ENTRY)&_ZN6S781C43v78Ev,
  (VTBL_ENTRY)&_ZN6S781C43v79Ev,
  (VTBL_ENTRY)&_ZN6S781C43v80Ev,
  (VTBL_ENTRY)&_ZN6S781C43v81Ev,
  (VTBL_ENTRY)&_ZN6S781C43v82Ev,
  (VTBL_ENTRY)&_ZN6S781C43v83Ev,
  (VTBL_ENTRY)&_ZN6S781C43v84Ev,
  (VTBL_ENTRY)&_ZN6S781C43v85Ev,
  (VTBL_ENTRY)&_ZN6S781C43v86Ev,
  (VTBL_ENTRY)&_ZN6S781C43v87Ev,
  (VTBL_ENTRY)&_ZN6S781C43v88Ev,
  (VTBL_ENTRY)&_ZN6S781C43v89Ev,
  (VTBL_ENTRY)&_ZN6S781C43v90Ev,
  (VTBL_ENTRY)&_ZN6S781C43v91Ev,
  (VTBL_ENTRY)&_ZN6S781C43v92Ev,
  (VTBL_ENTRY)&_ZN6S781C43v93Ev,
  (VTBL_ENTRY)&_ZN6S781C43v94Ev,
  (VTBL_ENTRY)&_ZN6S781C43v95Ev,
  (VTBL_ENTRY)&_ZN6S781C43v96Ev,
  (VTBL_ENTRY)&_ZN6S781C43v97Ev,
  (VTBL_ENTRY)&_ZN6S781C43v98Ev,
  (VTBL_ENTRY)&_ZN6S781C43v99Ev,
  (VTBL_ENTRY)&_ZN6S781C44v100Ev,
  (VTBL_ENTRY)&_ZN6S781C44v101Ev,
  (VTBL_ENTRY)&_ZN6S781C44v102Ev,
  (VTBL_ENTRY)&_ZN6S781C44v103Ev,
  (VTBL_ENTRY)&_ZN6S781C44v104Ev,
  (VTBL_ENTRY)&_ZN6S781C44v105Ev,
  (VTBL_ENTRY)&_ZN6S781C44v106Ev,
  (VTBL_ENTRY)&_ZN6S781C44v107Ev,
  (VTBL_ENTRY)&_ZN6S781C44v108Ev,
  (VTBL_ENTRY)&_ZN6S781C44v109Ev,
  (VTBL_ENTRY)&_ZN6S781C44v110Ev,
  (VTBL_ENTRY)&_ZN6S781C44v111Ev,
  (VTBL_ENTRY)&_ZN6S781C44v112Ev,
  (VTBL_ENTRY)&_ZN6S781C44v113Ev,
  (VTBL_ENTRY)&_ZN6S781C44v114Ev,
  (VTBL_ENTRY)&_ZN6S781C44v115Ev,
  (VTBL_ENTRY)&_ZN6S781C44v116Ev,
  (VTBL_ENTRY)&_ZN6S781C44v117Ev,
  (VTBL_ENTRY)&_ZN6S781C44v118Ev,
  (VTBL_ENTRY)&_ZN6S781C44v119Ev,
  (VTBL_ENTRY)&_ZN6S781C44v120Ev,
  (VTBL_ENTRY)&_ZN6S781C44v121Ev,
  (VTBL_ENTRY)&_ZN6S781C44v122Ev,
  (VTBL_ENTRY)&_ZN6S781C44v123Ev,
  (VTBL_ENTRY)&_ZN6S781C44v124Ev,
  (VTBL_ENTRY)&_ZN6S781C44v125Ev,
  (VTBL_ENTRY)&_ZN6S781C34v126Ev,
  (VTBL_ENTRY)&_ZN6S781C34v127Ev,
  (VTBL_ENTRY)&_ZN6S781C34v128Ev,
  (VTBL_ENTRY)&_ZN6S781C34v129Ev,
  (VTBL_ENTRY)&_ZN6S781C34v130Ev,
  (VTBL_ENTRY)&_ZN6S781C34v131Ev,
  (VTBL_ENTRY)&_ZN6S781C34v132Ev,
  (VTBL_ENTRY)&_ZN6S781C34v133Ev,
  (VTBL_ENTRY)&_ZN6S781C34v134Ev,
  (VTBL_ENTRY)&_ZN6S781C34v135Ev,
  (VTBL_ENTRY)&_ZN6S781C34v136Ev,
  (VTBL_ENTRY)&_ZN6S781C34v137Ev,
  (VTBL_ENTRY)&_ZN6S781C34v138Ev,
  (VTBL_ENTRY)&_ZN6S781C34v139Ev,
  (VTBL_ENTRY)&_ZN6S781C34v140Ev,
  (VTBL_ENTRY)&_ZN6S781C34v141Ev,
  (VTBL_ENTRY)&_ZN6S781C34v142Ev,
  (VTBL_ENTRY)&_ZN6S781C34v143Ev,
  (VTBL_ENTRY)&_ZN6S781C24v144Ev,
  (VTBL_ENTRY)&_ZN6S781C24v145Ev,
  (VTBL_ENTRY)&_ZN6S781C24v146Ev,
  (VTBL_ENTRY)&_ZN6S781C24v147Ev,
  (VTBL_ENTRY)&_ZN6S781C24v148Ev,
  (VTBL_ENTRY)&_ZN6S781C24v149Ev,
};
extern VTBL_ENTRY _ZTI6S781C2[];
extern  VTBL_ENTRY _ZTV6S781C2[];
Class_Descriptor cd_S781C2 = {  "S781C2", // class name
  bases_S781C2, 3,
  &(vtc_S781C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S781C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S781C2),150, //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  S781C1  : S781C2 {
  virtual void  v1(); // _ZN6S781C12v1Ev
  virtual void  v2(); // _ZN6S781C12v2Ev
  virtual void  v3(); // _ZN6S781C12v3Ev
  ~S781C1(); // tgen
  S781C1(); // tgen
};
//SIG(1 S781C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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} v144 v145 v146 v147 v148 v149} v1 v2 v3}


void  S781C1 ::v1(){vfunc_called(this, "_ZN6S781C12v1Ev");}
void  S781C1 ::v2(){vfunc_called(this, "_ZN6S781C12v2Ev");}
void  S781C1 ::v3(){vfunc_called(this, "_ZN6S781C12v3Ev");}
S781C1 ::~S781C1(){ note_dtor("S781C1", this);} // tgen
S781C1 ::S781C1(){ note_ctor("S781C1", this);} // tgen

static void Test_S781C1()
{
  extern Class_Descriptor cd_S781C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S781C1, buf);
    S781C1 *dp, &lv = *(dp=new (buf) S781C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S781C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S781C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S781C4*)(S781C3*)(S781C2*), 0, "S781C1");
    check_base_class_offset(lv, (S781C4*)(S781C3*)(S781C2*), 0, "S781C1");
    check_base_class_offset(lv, (S781C3*)(S781C2*), 0, "S781C1");
    check_base_class_offset(lv, (S781C2*), 0, "S781C1");
    test_class_info(&lv, &cd_S781C1);
    dp->~S781C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS781C1(Test_S781C1, "S781C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S781C1C1Ev();
extern void _ZN6S781C1D1Ev();
Name_Map name_map_S781C1[] = {
  NSPAIR(_ZN6S781C1C1Ev),
  NSPAIR(_ZN6S781C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S781C4;
extern VTBL_ENTRY _ZTI6S781C4[];
extern  VTBL_ENTRY _ZTV6S781C4[];
extern Class_Descriptor cd_S781C3;
extern VTBL_ENTRY _ZTI6S781C3[];
extern  VTBL_ENTRY _ZTV6S781C3[];
extern Class_Descriptor cd_S781C2;
extern VTBL_ENTRY _ZTI6S781C2[];
extern  VTBL_ENTRY _ZTV6S781C2[];
static Base_Class bases_S781C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S781C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S781C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S781C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S781C1[];
extern void _ZN6S781C1D1Ev();
extern void _ZN6S781C1D0Ev();
extern void _ZN6S781C42v4Ev();
extern void _ZN6S781C42v5Ev();
extern void _ZN6S781C42v6Ev();
extern void _ZN6S781C42v7Ev();
extern void _ZN6S781C42v8Ev();
extern void _ZN6S781C42v9Ev();
extern void _ZN6S781C43v10Ev();
extern void _ZN6S781C43v11Ev();
extern void _ZN6S781C43v12Ev();
extern void _ZN6S781C43v13Ev();
extern void _ZN6S781C43v14Ev();
extern void _ZN6S781C43v15Ev();
extern void _ZN6S781C43v16Ev();
extern void _ZN6S781C43v17Ev();
extern void _ZN6S781C43v18Ev();
extern void _ZN6S781C43v19Ev();
extern void _ZN6S781C43v20Ev();
extern void _ZN6S781C43v21Ev();
extern void _ZN6S781C43v22Ev();
extern void _ZN6S781C43v23Ev();
extern void _ZN6S781C43v24Ev();
extern void _ZN6S781C43v25Ev();
extern void _ZN6S781C43v26Ev();
extern void _ZN6S781C43v27Ev();
extern void _ZN6S781C43v28Ev();
extern void _ZN6S781C43v29Ev();
extern void _ZN6S781C43v30Ev();
extern void _ZN6S781C43v31Ev();
extern void _ZN6S781C43v32Ev();
extern void _ZN6S781C43v33Ev();
extern void _ZN6S781C43v34Ev();
extern void _ZN6S781C43v35Ev();
extern void _ZN6S781C43v36Ev();
extern void _ZN6S781C43v37Ev();
extern void _ZN6S781C43v38Ev();
extern void _ZN6S781C43v39Ev();
extern void _ZN6S781C43v40Ev();
extern void _ZN6S781C43v41Ev();
extern void _ZN6S781C43v42Ev();
extern void _ZN6S781C43v43Ev();
extern void _ZN6S781C43v44Ev();
extern void _ZN6S781C43v45Ev();
extern void _ZN6S781C43v46Ev();
extern void _ZN6S781C43v47Ev();
extern void _ZN6S781C43v48Ev();
extern void _ZN6S781C43v49Ev();
extern void _ZN6S781C43v50Ev();
extern void _ZN6S781C43v51Ev();
extern void _ZN6S781C43v52Ev();
extern void _ZN6S781C43v53Ev();
extern void _ZN6S781C43v54Ev();
extern void _ZN6S781C43v55Ev();
extern void _ZN6S781C43v56Ev();
extern void _ZN6S781C43v57Ev();
extern void _ZN6S781C43v58Ev();
extern void _ZN6S781C43v59Ev();
extern void _ZN6S781C43v60Ev();
extern void _ZN6S781C43v61Ev();
extern void _ZN6S781C43v62Ev();
extern void _ZN6S781C43v63Ev();
extern void _ZN6S781C43v64Ev();
extern void _ZN6S781C43v65Ev();
extern void _ZN6S781C43v66Ev();
extern void _ZN6S781C43v67Ev();
extern void _ZN6S781C43v68Ev();
extern void _ZN6S781C43v69Ev();
extern void _ZN6S781C43v70Ev();
extern void _ZN6S781C43v71Ev();
extern void _ZN6S781C43v72Ev();
extern void _ZN6S781C43v73Ev();
extern void _ZN6S781C43v74Ev();
extern void _ZN6S781C43v75Ev();
extern void _ZN6S781C43v76Ev();
extern void _ZN6S781C43v77Ev();
extern void _ZN6S781C43v78Ev();
extern void _ZN6S781C43v79Ev();
extern void _ZN6S781C43v80Ev();
extern void _ZN6S781C43v81Ev();
extern void _ZN6S781C43v82Ev();
extern void _ZN6S781C43v83Ev();
extern void _ZN6S781C43v84Ev();
extern void _ZN6S781C43v85Ev();
extern void _ZN6S781C43v86Ev();
extern void _ZN6S781C43v87Ev();
extern void _ZN6S781C43v88Ev();
extern void _ZN6S781C43v89Ev();
extern void _ZN6S781C43v90Ev();
extern void _ZN6S781C43v91Ev();
extern void _ZN6S781C43v92Ev();
extern void _ZN6S781C43v93Ev();
extern void _ZN6S781C43v94Ev();
extern void _ZN6S781C43v95Ev();
extern void _ZN6S781C43v96Ev();
extern void _ZN6S781C43v97Ev();
extern void _ZN6S781C43v98Ev();
extern void _ZN6S781C43v99Ev();
extern void _ZN6S781C44v100Ev();
extern void _ZN6S781C44v101Ev();
extern void _ZN6S781C44v102Ev();
extern void _ZN6S781C44v103Ev();
extern void _ZN6S781C44v104Ev();
extern void _ZN6S781C44v105Ev();
extern void _ZN6S781C44v106Ev();
extern void _ZN6S781C44v107Ev();
extern void _ZN6S781C44v108Ev();
extern void _ZN6S781C44v109Ev();
extern void _ZN6S781C44v110Ev();
extern void _ZN6S781C44v111Ev();
extern void _ZN6S781C44v112Ev();
extern void _ZN6S781C44v113Ev();
extern void _ZN6S781C44v114Ev();
extern void _ZN6S781C44v115Ev();
extern void _ZN6S781C44v116Ev();
extern void _ZN6S781C44v117Ev();
extern void _ZN6S781C44v118Ev();
extern void _ZN6S781C44v119Ev();
extern void _ZN6S781C44v120Ev();
extern void _ZN6S781C44v121Ev();
extern void _ZN6S781C44v122Ev();
extern void _ZN6S781C44v123Ev();
extern void _ZN6S781C44v124Ev();
extern void _ZN6S781C44v125Ev();
extern void _ZN6S781C34v126Ev();
extern void _ZN6S781C34v127Ev();
extern void _ZN6S781C34v128Ev();
extern void _ZN6S781C34v129Ev();
extern void _ZN6S781C34v130Ev();
extern void _ZN6S781C34v131Ev();
extern void _ZN6S781C34v132Ev();
extern void _ZN6S781C34v133Ev();
extern void _ZN6S781C34v134Ev();
extern void _ZN6S781C34v135Ev();
extern void _ZN6S781C34v136Ev();
extern void _ZN6S781C34v137Ev();
extern void _ZN6S781C34v138Ev();
extern void _ZN6S781C34v139Ev();
extern void _ZN6S781C34v140Ev();
extern void _ZN6S781C34v141Ev();
extern void _ZN6S781C34v142Ev();
extern void _ZN6S781C34v143Ev();
extern void _ZN6S781C24v144Ev();
extern void _ZN6S781C24v145Ev();
extern void _ZN6S781C24v146Ev();
extern void _ZN6S781C24v147Ev();
extern void _ZN6S781C24v148Ev();
extern void _ZN6S781C24v149Ev();
extern void _ZN6S781C12v1Ev();
extern void _ZN6S781C12v2Ev();
extern void _ZN6S781C12v3Ev();
static  VTBL_ENTRY vtc_S781C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S781C1[0]),
  (VTBL_ENTRY)&_ZN6S781C1D1Ev,
  (VTBL_ENTRY)&_ZN6S781C1D0Ev,
  (VTBL_ENTRY)&_ZN6S781C42v4Ev,
  (VTBL_ENTRY)&_ZN6S781C42v5Ev,
  (VTBL_ENTRY)&_ZN6S781C42v6Ev,
  (VTBL_ENTRY)&_ZN6S781C42v7Ev,
  (VTBL_ENTRY)&_ZN6S781C42v8Ev,
  (VTBL_ENTRY)&_ZN6S781C42v9Ev,
  (VTBL_ENTRY)&_ZN6S781C43v10Ev,
  (VTBL_ENTRY)&_ZN6S781C43v11Ev,
  (VTBL_ENTRY)&_ZN6S781C43v12Ev,
  (VTBL_ENTRY)&_ZN6S781C43v13Ev,
  (VTBL_ENTRY)&_ZN6S781C43v14Ev,
  (VTBL_ENTRY)&_ZN6S781C43v15Ev,
  (VTBL_ENTRY)&_ZN6S781C43v16Ev,
  (VTBL_ENTRY)&_ZN6S781C43v17Ev,
  (VTBL_ENTRY)&_ZN6S781C43v18Ev,
  (VTBL_ENTRY)&_ZN6S781C43v19Ev,
  (VTBL_ENTRY)&_ZN6S781C43v20Ev,
  (VTBL_ENTRY)&_ZN6S781C43v21Ev,
  (VTBL_ENTRY)&_ZN6S781C43v22Ev,
  (VTBL_ENTRY)&_ZN6S781C43v23Ev,
  (VTBL_ENTRY)&_ZN6S781C43v24Ev,
  (VTBL_ENTRY)&_ZN6S781C43v25Ev,
  (VTBL_ENTRY)&_ZN6S781C43v26Ev,
  (VTBL_ENTRY)&_ZN6S781C43v27Ev,
  (VTBL_ENTRY)&_ZN6S781C43v28Ev,
  (VTBL_ENTRY)&_ZN6S781C43v29Ev,
  (VTBL_ENTRY)&_ZN6S781C43v30Ev,
  (VTBL_ENTRY)&_ZN6S781C43v31Ev,
  (VTBL_ENTRY)&_ZN6S781C43v32Ev,
  (VTBL_ENTRY)&_ZN6S781C43v33Ev,
  (VTBL_ENTRY)&_ZN6S781C43v34Ev,
  (VTBL_ENTRY)&_ZN6S781C43v35Ev,
  (VTBL_ENTRY)&_ZN6S781C43v36Ev,
  (VTBL_ENTRY)&_ZN6S781C43v37Ev,
  (VTBL_ENTRY)&_ZN6S781C43v38Ev,
  (VTBL_ENTRY)&_ZN6S781C43v39Ev,
  (VTBL_ENTRY)&_ZN6S781C43v40Ev,
  (VTBL_ENTRY)&_ZN6S781C43v41Ev,
  (VTBL_ENTRY)&_ZN6S781C43v42Ev,
  (VTBL_ENTRY)&_ZN6S781C43v43Ev,
  (VTBL_ENTRY)&_ZN6S781C43v44Ev,
  (VTBL_ENTRY)&_ZN6S781C43v45Ev,
  (VTBL_ENTRY)&_ZN6S781C43v46Ev,
  (VTBL_ENTRY)&_ZN6S781C43v47Ev,
  (VTBL_ENTRY)&_ZN6S781C43v48Ev,
  (VTBL_ENTRY)&_ZN6S781C43v49Ev,
  (VTBL_ENTRY)&_ZN6S781C43v50Ev,
  (VTBL_ENTRY)&_ZN6S781C43v51Ev,
  (VTBL_ENTRY)&_ZN6S781C43v52Ev,
  (VTBL_ENTRY)&_ZN6S781C43v53Ev,
  (VTBL_ENTRY)&_ZN6S781C43v54Ev,
  (VTBL_ENTRY)&_ZN6S781C43v55Ev,
  (VTBL_ENTRY)&_ZN6S781C43v56Ev,
  (VTBL_ENTRY)&_ZN6S781C43v57Ev,
  (VTBL_ENTRY)&_ZN6S781C43v58Ev,
  (VTBL_ENTRY)&_ZN6S781C43v59Ev,
  (VTBL_ENTRY)&_ZN6S781C43v60Ev,
  (VTBL_ENTRY)&_ZN6S781C43v61Ev,
  (VTBL_ENTRY)&_ZN6S781C43v62Ev,
  (VTBL_ENTRY)&_ZN6S781C43v63Ev,
  (VTBL_ENTRY)&_ZN6S781C43v64Ev,
  (VTBL_ENTRY)&_ZN6S781C43v65Ev,
  (VTBL_ENTRY)&_ZN6S781C43v66Ev,
  (VTBL_ENTRY)&_ZN6S781C43v67Ev,
  (VTBL_ENTRY)&_ZN6S781C43v68Ev,
  (VTBL_ENTRY)&_ZN6S781C43v69Ev,
  (VTBL_ENTRY)&_ZN6S781C43v70Ev,
  (VTBL_ENTRY)&_ZN6S781C43v71Ev,
  (VTBL_ENTRY)&_ZN6S781C43v72Ev,
  (VTBL_ENTRY)&_ZN6S781C43v73Ev,
  (VTBL_ENTRY)&_ZN6S781C43v74Ev,
  (VTBL_ENTRY)&_ZN6S781C43v75Ev,
  (VTBL_ENTRY)&_ZN6S781C43v76Ev,
  (VTBL_ENTRY)&_ZN6S781C43v77Ev,
  (VTBL_ENTRY)&_ZN6S781C43v78Ev,
  (VTBL_ENTRY)&_ZN6S781C43v79Ev,
  (VTBL_ENTRY)&_ZN6S781C43v80Ev,
  (VTBL_ENTRY)&_ZN6S781C43v81Ev,
  (VTBL_ENTRY)&_ZN6S781C43v82Ev,
  (VTBL_ENTRY)&_ZN6S781C43v83Ev,
  (VTBL_ENTRY)&_ZN6S781C43v84Ev,
  (VTBL_ENTRY)&_ZN6S781C43v85Ev,
  (VTBL_ENTRY)&_ZN6S781C43v86Ev,
  (VTBL_ENTRY)&_ZN6S781C43v87Ev,
  (VTBL_ENTRY)&_ZN6S781C43v88Ev,
  (VTBL_ENTRY)&_ZN6S781C43v89Ev,
  (VTBL_ENTRY)&_ZN6S781C43v90Ev,
  (VTBL_ENTRY)&_ZN6S781C43v91Ev,
  (VTBL_ENTRY)&_ZN6S781C43v92Ev,
  (VTBL_ENTRY)&_ZN6S781C43v93Ev,
  (VTBL_ENTRY)&_ZN6S781C43v94Ev,
  (VTBL_ENTRY)&_ZN6S781C43v95Ev,
  (VTBL_ENTRY)&_ZN6S781C43v96Ev,
  (VTBL_ENTRY)&_ZN6S781C43v97Ev,
  (VTBL_ENTRY)&_ZN6S781C43v98Ev,
  (VTBL_ENTRY)&_ZN6S781C43v99Ev,
  (VTBL_ENTRY)&_ZN6S781C44v100Ev,
  (VTBL_ENTRY)&_ZN6S781C44v101Ev,
  (VTBL_ENTRY)&_ZN6S781C44v102Ev,
  (VTBL_ENTRY)&_ZN6S781C44v103Ev,
  (VTBL_ENTRY)&_ZN6S781C44v104Ev,
  (VTBL_ENTRY)&_ZN6S781C44v105Ev,
  (VTBL_ENTRY)&_ZN6S781C44v106Ev,
  (VTBL_ENTRY)&_ZN6S781C44v107Ev,
  (VTBL_ENTRY)&_ZN6S781C44v108Ev,
  (VTBL_ENTRY)&_ZN6S781C44v109Ev,
  (VTBL_ENTRY)&_ZN6S781C44v110Ev,
  (VTBL_ENTRY)&_ZN6S781C44v111Ev,
  (VTBL_ENTRY)&_ZN6S781C44v112Ev,
  (VTBL_ENTRY)&_ZN6S781C44v113Ev,
  (VTBL_ENTRY)&_ZN6S781C44v114Ev,
  (VTBL_ENTRY)&_ZN6S781C44v115Ev,
  (VTBL_ENTRY)&_ZN6S781C44v116Ev,
  (VTBL_ENTRY)&_ZN6S781C44v117Ev,
  (VTBL_ENTRY)&_ZN6S781C44v118Ev,
  (VTBL_ENTRY)&_ZN6S781C44v119Ev,
  (VTBL_ENTRY)&_ZN6S781C44v120Ev,
  (VTBL_ENTRY)&_ZN6S781C44v121Ev,
  (VTBL_ENTRY)&_ZN6S781C44v122Ev,
  (VTBL_ENTRY)&_ZN6S781C44v123Ev,
  (VTBL_ENTRY)&_ZN6S781C44v124Ev,
  (VTBL_ENTRY)&_ZN6S781C44v125Ev,
  (VTBL_ENTRY)&_ZN6S781C34v126Ev,
  (VTBL_ENTRY)&_ZN6S781C34v127Ev,
  (VTBL_ENTRY)&_ZN6S781C34v128Ev,
  (VTBL_ENTRY)&_ZN6S781C34v129Ev,
  (VTBL_ENTRY)&_ZN6S781C34v130Ev,
  (VTBL_ENTRY)&_ZN6S781C34v131Ev,
  (VTBL_ENTRY)&_ZN6S781C34v132Ev,
  (VTBL_ENTRY)&_ZN6S781C34v133Ev,
  (VTBL_ENTRY)&_ZN6S781C34v134Ev,
  (VTBL_ENTRY)&_ZN6S781C34v135Ev,
  (VTBL_ENTRY)&_ZN6S781C34v136Ev,
  (VTBL_ENTRY)&_ZN6S781C34v137Ev,
  (VTBL_ENTRY)&_ZN6S781C34v138Ev,
  (VTBL_ENTRY)&_ZN6S781C34v139Ev,
  (VTBL_ENTRY)&_ZN6S781C34v140Ev,
  (VTBL_ENTRY)&_ZN6S781C34v141Ev,
  (VTBL_ENTRY)&_ZN6S781C34v142Ev,
  (VTBL_ENTRY)&_ZN6S781C34v143Ev,
  (VTBL_ENTRY)&_ZN6S781C24v144Ev,
  (VTBL_ENTRY)&_ZN6S781C24v145Ev,
  (VTBL_ENTRY)&_ZN6S781C24v146Ev,
  (VTBL_ENTRY)&_ZN6S781C24v147Ev,
  (VTBL_ENTRY)&_ZN6S781C24v148Ev,
  (VTBL_ENTRY)&_ZN6S781C24v149Ev,
  (VTBL_ENTRY)&_ZN6S781C12v1Ev,
  (VTBL_ENTRY)&_ZN6S781C12v2Ev,
  (VTBL_ENTRY)&_ZN6S781C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S781C1[];
extern  VTBL_ENTRY _ZTV6S781C1[];
Class_Descriptor cd_S781C1 = {  "S781C1", // class name
  bases_S781C1, 4,
  &(vtc_S781C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S781C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S781C1),153, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S788C4  : S785C5_nt {
  virtual void  v9(); // _ZN6S788C42v9Ev
  virtual void  v10(); // _ZN6S788C43v10Ev
  virtual void  v11(); // _ZN6S788C43v11Ev
  virtual void  v12(); // _ZN6S788C43v12Ev
  virtual void  v13(); // _ZN6S788C43v13Ev
  virtual void  v14(); // _ZN6S788C43v14Ev
  virtual void  v15(); // _ZN6S788C43v15Ev
  virtual void  v16(); // _ZN6S788C43v16Ev
  virtual void  v17(); // _ZN6S788C43v17Ev
  virtual void  v18(); // _ZN6S788C43v18Ev
  virtual void  v19(); // _ZN6S788C43v19Ev
  virtual void  v20(); // _ZN6S788C43v20Ev
  virtual void  v21(); // _ZN6S788C43v21Ev
  virtual void  v22(); // _ZN6S788C43v22Ev
  virtual void  v23(); // _ZN6S788C43v23Ev
  virtual void  v24(); // _ZN6S788C43v24Ev
  virtual void  v25(); // _ZN6S788C43v25Ev
  virtual void  v26(); // _ZN6S788C43v26Ev
  virtual void  v27(); // _ZN6S788C43v27Ev
  virtual void  v28(); // _ZN6S788C43v28Ev
  virtual void  v29(); // _ZN6S788C43v29Ev
  virtual void  v30(); // _ZN6S788C43v30Ev
  virtual void  v31(); // _ZN6S788C43v31Ev
  virtual void  v32(); // _ZN6S788C43v32Ev
  virtual void  v33(); // _ZN6S788C43v33Ev
  virtual void  v34(); // _ZN6S788C43v34Ev
  virtual void  v35(); // _ZN6S788C43v35Ev
  virtual void  v36(); // _ZN6S788C43v36Ev
  virtual void  v37(); // _ZN6S788C43v37Ev
  virtual void  v38(); // _ZN6S788C43v38Ev
  virtual void  v39(); // _ZN6S788C43v39Ev
  virtual void  v40(); // _ZN6S788C43v40Ev
  virtual void  v41(); // _ZN6S788C43v41Ev
  virtual void  v42(); // _ZN6S788C43v42Ev
  virtual void  v43(); // _ZN6S788C43v43Ev
  virtual void  v44(); // _ZN6S788C43v44Ev
  virtual void  v45(); // _ZN6S788C43v45Ev
  virtual void  v46(); // _ZN6S788C43v46Ev
  virtual void  v47(); // _ZN6S788C43v47Ev
  virtual void  v48(); // _ZN6S788C43v48Ev
  virtual void  v49(); // _ZN6S788C43v49Ev
  virtual void  v50(); // _ZN6S788C43v50Ev
  virtual void  v51(); // _ZN6S788C43v51Ev
  virtual void  v52(); // _ZN6S788C43v52Ev
  virtual void  v53(); // _ZN6S788C43v53Ev
  virtual void  v54(); // _ZN6S788C43v54Ev
  virtual void  v55(); // _ZN6S788C43v55Ev
  virtual void  v56(); // _ZN6S788C43v56Ev
  virtual void  v57(); // _ZN6S788C43v57Ev
  virtual void  v58(); // _ZN6S788C43v58Ev
  virtual void  v59(); // _ZN6S788C43v59Ev
  virtual void  v60(); // _ZN6S788C43v60Ev
  virtual void  v61(); // _ZN6S788C43v61Ev
  virtual void  v62(); // _ZN6S788C43v62Ev
  virtual void  v63(); // _ZN6S788C43v63Ev
  virtual void  v64(); // _ZN6S788C43v64Ev
  virtual void  v65(); // _ZN6S788C43v65Ev
  virtual void  v66(); // _ZN6S788C43v66Ev
  virtual void  v67(); // _ZN6S788C43v67Ev
  virtual void  v68(); // _ZN6S788C43v68Ev
  virtual void  v69(); // _ZN6S788C43v69Ev
  virtual void  v70(); // _ZN6S788C43v70Ev
  virtual void  v71(); // _ZN6S788C43v71Ev
  virtual void  v72(); // _ZN6S788C43v72Ev
  virtual void  v73(); // _ZN6S788C43v73Ev
  virtual void  v74(); // _ZN6S788C43v74Ev
  virtual void  v75(); // _ZN6S788C43v75Ev
  virtual void  v76(); // _ZN6S788C43v76Ev
  virtual void  v77(); // _ZN6S788C43v77Ev
  virtual void  v78(); // _ZN6S788C43v78Ev
  virtual void  v79(); // _ZN6S788C43v79Ev
  virtual void  v80(); // _ZN6S788C43v80Ev
  virtual void  v81(); // _ZN6S788C43v81Ev
  virtual void  v82(); // _ZN6S788C43v82Ev
  virtual void  v83(); // _ZN6S788C43v83Ev
  virtual void  v84(); // _ZN6S788C43v84Ev
  virtual void  v85(); // _ZN6S788C43v85Ev
  virtual void  v86(); // _ZN6S788C43v86Ev
  virtual void  v87(); // _ZN6S788C43v87Ev
  virtual void  v88(); // _ZN6S788C43v88Ev
  virtual void  v89(); // _ZN6S788C43v89Ev
  virtual void  v90(); // _ZN6S788C43v90Ev
  virtual void  v91(); // _ZN6S788C43v91Ev
  virtual void  v92(); // _ZN6S788C43v92Ev
  virtual void  v93(); // _ZN6S788C43v93Ev
  virtual void  v94(); // _ZN6S788C43v94Ev
  virtual void  v95(); // _ZN6S788C43v95Ev
  virtual void  v96(); // _ZN6S788C43v96Ev
  virtual void  v97(); // _ZN6S788C43v97Ev
  virtual void  v98(); // _ZN6S788C43v98Ev
  virtual void  v99(); // _ZN6S788C43v99Ev
  virtual void  v100(); // _ZN6S788C44v100Ev
  virtual void  v101(); // _ZN6S788C44v101Ev
  virtual void  v102(); // _ZN6S788C44v102Ev
  virtual void  v103(); // _ZN6S788C44v103Ev
  virtual void  v104(); // _ZN6S788C44v104Ev
  virtual void  v105(); // _ZN6S788C44v105Ev
  virtual void  v106(); // _ZN6S788C44v106Ev
  virtual void  v107(); // _ZN6S788C44v107Ev
  virtual void  v108(); // _ZN6S788C44v108Ev
  virtual void  v109(); // _ZN6S788C44v109Ev
  virtual void  v110(); // _ZN6S788C44v110Ev
  virtual void  v111(); // _ZN6S788C44v111Ev
  virtual void  v112(); // _ZN6S788C44v112Ev
  virtual void  v113(); // _ZN6S788C44v113Ev
  virtual void  v114(); // _ZN6S788C44v114Ev
  virtual void  v115(); // _ZN6S788C44v115Ev
  virtual void  v116(); // _ZN6S788C44v116Ev
  virtual void  v117(); // _ZN6S788C44v117Ev
  virtual void  v118(); // _ZN6S788C44v118Ev
  virtual void  v119(); // _ZN6S788C44v119Ev
  virtual void  v120(); // _ZN6S788C44v120Ev
  virtual void  v121(); // _ZN6S788C44v121Ev
  virtual void  v122(); // _ZN6S788C44v122Ev
  virtual void  v123(); // _ZN6S788C44v123Ev
  virtual void  v124(); // _ZN6S788C44v124Ev
  virtual void  v125(); // _ZN6S788C44v125Ev
  virtual void  v126(); // _ZN6S788C44v126Ev
  virtual void  v127(); // _ZN6S788C44v127Ev
  virtual void  v128(); // _ZN6S788C44v128Ev
  virtual void  v129(); // _ZN6S788C44v129Ev
  virtual void  v130(); // _ZN6S788C44v130Ev
  ~S788C4(); // tgen
  S788C4(); // tgen
};
//SIG(-1 S788C4) C1{ BC2{ vd m Fp Fi} 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}


void  S788C4 ::v9(){vfunc_called(this, "_ZN6S788C42v9Ev");}
void  S788C4 ::v10(){vfunc_called(this, "_ZN6S788C43v10Ev");}
void  S788C4 ::v11(){vfunc_called(this, "_ZN6S788C43v11Ev");}
void  S788C4 ::v12(){vfunc_called(this, "_ZN6S788C43v12Ev");}
void  S788C4 ::v13(){vfunc_called(this, "_ZN6S788C43v13Ev");}
void  S788C4 ::v14(){vfunc_called(this, "_ZN6S788C43v14Ev");}
void  S788C4 ::v15(){vfunc_called(this, "_ZN6S788C43v15Ev");}
void  S788C4 ::v16(){vfunc_called(this, "_ZN6S788C43v16Ev");}
void  S788C4 ::v17(){vfunc_called(this, "_ZN6S788C43v17Ev");}
void  S788C4 ::v18(){vfunc_called(this, "_ZN6S788C43v18Ev");}
void  S788C4 ::v19(){vfunc_called(this, "_ZN6S788C43v19Ev");}
void  S788C4 ::v20(){vfunc_called(this, "_ZN6S788C43v20Ev");}
void  S788C4 ::v21(){vfunc_called(this, "_ZN6S788C43v21Ev");}
void  S788C4 ::v22(){vfunc_called(this, "_ZN6S788C43v22Ev");}
void  S788C4 ::v23(){vfunc_called(this, "_ZN6S788C43v23Ev");}
void  S788C4 ::v24(){vfunc_called(this, "_ZN6S788C43v24Ev");}
void  S788C4 ::v25(){vfunc_called(this, "_ZN6S788C43v25Ev");}
void  S788C4 ::v26(){vfunc_called(this, "_ZN6S788C43v26Ev");}
void  S788C4 ::v27(){vfunc_called(this, "_ZN6S788C43v27Ev");}
void  S788C4 ::v28(){vfunc_called(this, "_ZN6S788C43v28Ev");}
void  S788C4 ::v29(){vfunc_called(this, "_ZN6S788C43v29Ev");}
void  S788C4 ::v30(){vfunc_called(this, "_ZN6S788C43v30Ev");}
void  S788C4 ::v31(){vfunc_called(this, "_ZN6S788C43v31Ev");}
void  S788C4 ::v32(){vfunc_called(this, "_ZN6S788C43v32Ev");}
void  S788C4 ::v33(){vfunc_called(this, "_ZN6S788C43v33Ev");}
void  S788C4 ::v34(){vfunc_called(this, "_ZN6S788C43v34Ev");}
void  S788C4 ::v35(){vfunc_called(this, "_ZN6S788C43v35Ev");}
void  S788C4 ::v36(){vfunc_called(this, "_ZN6S788C43v36Ev");}
void  S788C4 ::v37(){vfunc_called(this, "_ZN6S788C43v37Ev");}
void  S788C4 ::v38(){vfunc_called(this, "_ZN6S788C43v38Ev");}
void  S788C4 ::v39(){vfunc_called(this, "_ZN6S788C43v39Ev");}
void  S788C4 ::v40(){vfunc_called(this, "_ZN6S788C43v40Ev");}
void  S788C4 ::v41(){vfunc_called(this, "_ZN6S788C43v41Ev");}
void  S788C4 ::v42(){vfunc_called(this, "_ZN6S788C43v42Ev");}
void  S788C4 ::v43(){vfunc_called(this, "_ZN6S788C43v43Ev");}
void  S788C4 ::v44(){vfunc_called(this, "_ZN6S788C43v44Ev");}
void  S788C4 ::v45(){vfunc_called(this, "_ZN6S788C43v45Ev");}
void  S788C4 ::v46(){vfunc_called(this, "_ZN6S788C43v46Ev");}
void  S788C4 ::v47(){vfunc_called(this, "_ZN6S788C43v47Ev");}
void  S788C4 ::v48(){vfunc_called(this, "_ZN6S788C43v48Ev");}
void  S788C4 ::v49(){vfunc_called(this, "_ZN6S788C43v49Ev");}
void  S788C4 ::v50(){vfunc_called(this, "_ZN6S788C43v50Ev");}
void  S788C4 ::v51(){vfunc_called(this, "_ZN6S788C43v51Ev");}
void  S788C4 ::v52(){vfunc_called(this, "_ZN6S788C43v52Ev");}
void  S788C4 ::v53(){vfunc_called(this, "_ZN6S788C43v53Ev");}
void  S788C4 ::v54(){vfunc_called(this, "_ZN6S788C43v54Ev");}
void  S788C4 ::v55(){vfunc_called(this, "_ZN6S788C43v55Ev");}
void  S788C4 ::v56(){vfunc_called(this, "_ZN6S788C43v56Ev");}
void  S788C4 ::v57(){vfunc_called(this, "_ZN6S788C43v57Ev");}
void  S788C4 ::v58(){vfunc_called(this, "_ZN6S788C43v58Ev");}
void  S788C4 ::v59(){vfunc_called(this, "_ZN6S788C43v59Ev");}
void  S788C4 ::v60(){vfunc_called(this, "_ZN6S788C43v60Ev");}
void  S788C4 ::v61(){vfunc_called(this, "_ZN6S788C43v61Ev");}
void  S788C4 ::v62(){vfunc_called(this, "_ZN6S788C43v62Ev");}
void  S788C4 ::v63(){vfunc_called(this, "_ZN6S788C43v63Ev");}
void  S788C4 ::v64(){vfunc_called(this, "_ZN6S788C43v64Ev");}
void  S788C4 ::v65(){vfunc_called(this, "_ZN6S788C43v65Ev");}
void  S788C4 ::v66(){vfunc_called(this, "_ZN6S788C43v66Ev");}
void  S788C4 ::v67(){vfunc_called(this, "_ZN6S788C43v67Ev");}
void  S788C4 ::v68(){vfunc_called(this, "_ZN6S788C43v68Ev");}
void  S788C4 ::v69(){vfunc_called(this, "_ZN6S788C43v69Ev");}
void  S788C4 ::v70(){vfunc_called(this, "_ZN6S788C43v70Ev");}
void  S788C4 ::v71(){vfunc_called(this, "_ZN6S788C43v71Ev");}
void  S788C4 ::v72(){vfunc_called(this, "_ZN6S788C43v72Ev");}
void  S788C4 ::v73(){vfunc_called(this, "_ZN6S788C43v73Ev");}
void  S788C4 ::v74(){vfunc_called(this, "_ZN6S788C43v74Ev");}
void  S788C4 ::v75(){vfunc_called(this, "_ZN6S788C43v75Ev");}
void  S788C4 ::v76(){vfunc_called(this, "_ZN6S788C43v76Ev");}
void  S788C4 ::v77(){vfunc_called(this, "_ZN6S788C43v77Ev");}
void  S788C4 ::v78(){vfunc_called(this, "_ZN6S788C43v78Ev");}
void  S788C4 ::v79(){vfunc_called(this, "_ZN6S788C43v79Ev");}
void  S788C4 ::v80(){vfunc_called(this, "_ZN6S788C43v80Ev");}
void  S788C4 ::v81(){vfunc_called(this, "_ZN6S788C43v81Ev");}
void  S788C4 ::v82(){vfunc_called(this, "_ZN6S788C43v82Ev");}
void  S788C4 ::v83(){vfunc_called(this, "_ZN6S788C43v83Ev");}
void  S788C4 ::v84(){vfunc_called(this, "_ZN6S788C43v84Ev");}
void  S788C4 ::v85(){vfunc_called(this, "_ZN6S788C43v85Ev");}
void  S788C4 ::v86(){vfunc_called(this, "_ZN6S788C43v86Ev");}
void  S788C4 ::v87(){vfunc_called(this, "_ZN6S788C43v87Ev");}
void  S788C4 ::v88(){vfunc_called(this, "_ZN6S788C43v88Ev");}
void  S788C4 ::v89(){vfunc_called(this, "_ZN6S788C43v89Ev");}
void  S788C4 ::v90(){vfunc_called(this, "_ZN6S788C43v90Ev");}
void  S788C4 ::v91(){vfunc_called(this, "_ZN6S788C43v91Ev");}
void  S788C4 ::v92(){vfunc_called(this, "_ZN6S788C43v92Ev");}
void  S788C4 ::v93(){vfunc_called(this, "_ZN6S788C43v93Ev");}
void  S788C4 ::v94(){vfunc_called(this, "_ZN6S788C43v94Ev");}
void  S788C4 ::v95(){vfunc_called(this, "_ZN6S788C43v95Ev");}
void  S788C4 ::v96(){vfunc_called(this, "_ZN6S788C43v96Ev");}
void  S788C4 ::v97(){vfunc_called(this, "_ZN6S788C43v97Ev");}
void  S788C4 ::v98(){vfunc_called(this, "_ZN6S788C43v98Ev");}
void  S788C4 ::v99(){vfunc_called(this, "_ZN6S788C43v99Ev");}
void  S788C4 ::v100(){vfunc_called(this, "_ZN6S788C44v100Ev");}
void  S788C4 ::v101(){vfunc_called(this, "_ZN6S788C44v101Ev");}
void  S788C4 ::v102(){vfunc_called(this, "_ZN6S788C44v102Ev");}
void  S788C4 ::v103(){vfunc_called(this, "_ZN6S788C44v103Ev");}
void  S788C4 ::v104(){vfunc_called(this, "_ZN6S788C44v104Ev");}
void  S788C4 ::v105(){vfunc_called(this, "_ZN6S788C44v105Ev");}
void  S788C4 ::v106(){vfunc_called(this, "_ZN6S788C44v106Ev");}
void  S788C4 ::v107(){vfunc_called(this, "_ZN6S788C44v107Ev");}
void  S788C4 ::v108(){vfunc_called(this, "_ZN6S788C44v108Ev");}
void  S788C4 ::v109(){vfunc_called(this, "_ZN6S788C44v109Ev");}
void  S788C4 ::v110(){vfunc_called(this, "_ZN6S788C44v110Ev");}
void  S788C4 ::v111(){vfunc_called(this, "_ZN6S788C44v111Ev");}
void  S788C4 ::v112(){vfunc_called(this, "_ZN6S788C44v112Ev");}
void  S788C4 ::v113(){vfunc_called(this, "_ZN6S788C44v113Ev");}
void  S788C4 ::v114(){vfunc_called(this, "_ZN6S788C44v114Ev");}
void  S788C4 ::v115(){vfunc_called(this, "_ZN6S788C44v115Ev");}
void  S788C4 ::v116(){vfunc_called(this, "_ZN6S788C44v116Ev");}
void  S788C4 ::v117(){vfunc_called(this, "_ZN6S788C44v117Ev");}
void  S788C4 ::v118(){vfunc_called(this, "_ZN6S788C44v118Ev");}
void  S788C4 ::v119(){vfunc_called(this, "_ZN6S788C44v119Ev");}
void  S788C4 ::v120(){vfunc_called(this, "_ZN6S788C44v120Ev");}
void  S788C4 ::v121(){vfunc_called(this, "_ZN6S788C44v121Ev");}
void  S788C4 ::v122(){vfunc_called(this, "_ZN6S788C44v122Ev");}
void  S788C4 ::v123(){vfunc_called(this, "_ZN6S788C44v123Ev");}
void  S788C4 ::v124(){vfunc_called(this, "_ZN6S788C44v124Ev");}
void  S788C4 ::v125(){vfunc_called(this, "_ZN6S788C44v125Ev");}
void  S788C4 ::v126(){vfunc_called(this, "_ZN6S788C44v126Ev");}
void  S788C4 ::v127(){vfunc_called(this, "_ZN6S788C44v127Ev");}
void  S788C4 ::v128(){vfunc_called(this, "_ZN6S788C44v128Ev");}
void  S788C4 ::v129(){vfunc_called(this, "_ZN6S788C44v129Ev");}
void  S788C4 ::v130(){vfunc_called(this, "_ZN6S788C44v130Ev");}
S788C4 ::~S788C4(){ note_dtor("S788C4", this);} // tgen
S788C4 ::S788C4(){ note_ctor("S788C4", this);} // tgen

static void Test_S788C4()
{
  extern Class_Descriptor cd_S788C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S788C4, buf);
    S788C4 *dp, &lv = *(dp=new (buf) S788C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S788C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S788C4)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S788C4");
    test_class_info(&lv, &cd_S788C4);
    dp->~S788C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS788C4(Test_S788C4, "S788C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S788C4C1Ev();
extern void _ZN6S788C4D1Ev();
Name_Map name_map_S788C4[] = {
  NSPAIR(_ZN6S788C4C1Ev),
  NSPAIR(_ZN6S788C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S788C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S788C4[];
extern void _ZN6S788C4D1Ev();
extern void _ZN6S788C4D0Ev();
extern void _ZN6S788C42v9Ev();
extern void _ZN6S788C43v10Ev();
extern void _ZN6S788C43v11Ev();
extern void _ZN6S788C43v12Ev();
extern void _ZN6S788C43v13Ev();
extern void _ZN6S788C43v14Ev();
extern void _ZN6S788C43v15Ev();
extern void _ZN6S788C43v16Ev();
extern void _ZN6S788C43v17Ev();
extern void _ZN6S788C43v18Ev();
extern void _ZN6S788C43v19Ev();
extern void _ZN6S788C43v20Ev();
extern void _ZN6S788C43v21Ev();
extern void _ZN6S788C43v22Ev();
extern void _ZN6S788C43v23Ev();
extern void _ZN6S788C43v24Ev();
extern void _ZN6S788C43v25Ev();
extern void _ZN6S788C43v26Ev();
extern void _ZN6S788C43v27Ev();
extern void _ZN6S788C43v28Ev();
extern void _ZN6S788C43v29Ev();
extern void _ZN6S788C43v30Ev();
extern void _ZN6S788C43v31Ev();
extern void _ZN6S788C43v32Ev();
extern void _ZN6S788C43v33Ev();
extern void _ZN6S788C43v34Ev();
extern void _ZN6S788C43v35Ev();
extern void _ZN6S788C43v36Ev();
extern void _ZN6S788C43v37Ev();
extern void _ZN6S788C43v38Ev();
extern void _ZN6S788C43v39Ev();
extern void _ZN6S788C43v40Ev();
extern void _ZN6S788C43v41Ev();
extern void _ZN6S788C43v42Ev();
extern void _ZN6S788C43v43Ev();
extern void _ZN6S788C43v44Ev();
extern void _ZN6S788C43v45Ev();
extern void _ZN6S788C43v46Ev();
extern void _ZN6S788C43v47Ev();
extern void _ZN6S788C43v48Ev();
extern void _ZN6S788C43v49Ev();
extern void _ZN6S788C43v50Ev();
extern void _ZN6S788C43v51Ev();
extern void _ZN6S788C43v52Ev();
extern void _ZN6S788C43v53Ev();
extern void _ZN6S788C43v54Ev();
extern void _ZN6S788C43v55Ev();
extern void _ZN6S788C43v56Ev();
extern void _ZN6S788C43v57Ev();
extern void _ZN6S788C43v58Ev();
extern void _ZN6S788C43v59Ev();
extern void _ZN6S788C43v60Ev();
extern void _ZN6S788C43v61Ev();
extern void _ZN6S788C43v62Ev();
extern void _ZN6S788C43v63Ev();
extern void _ZN6S788C43v64Ev();
extern void _ZN6S788C43v65Ev();
extern void _ZN6S788C43v66Ev();
extern void _ZN6S788C43v67Ev();
extern void _ZN6S788C43v68Ev();
extern void _ZN6S788C43v69Ev();
extern void _ZN6S788C43v70Ev();
extern void _ZN6S788C43v71Ev();
extern void _ZN6S788C43v72Ev();
extern void _ZN6S788C43v73Ev();
extern void _ZN6S788C43v74Ev();
extern void _ZN6S788C43v75Ev();
extern void _ZN6S788C43v76Ev();
extern void _ZN6S788C43v77Ev();
extern void _ZN6S788C43v78Ev();
extern void _ZN6S788C43v79Ev();
extern void _ZN6S788C43v80Ev();
extern void _ZN6S788C43v81Ev();
extern void _ZN6S788C43v82Ev();
extern void _ZN6S788C43v83Ev();
extern void _ZN6S788C43v84Ev();
extern void _ZN6S788C43v85Ev();
extern void _ZN6S788C43v86Ev();
extern void _ZN6S788C43v87Ev();
extern void _ZN6S788C43v88Ev();
extern void _ZN6S788C43v89Ev();
extern void _ZN6S788C43v90Ev();
extern void _ZN6S788C43v91Ev();
extern void _ZN6S788C43v92Ev();
extern void _ZN6S788C43v93Ev();
extern void _ZN6S788C43v94Ev();
extern void _ZN6S788C43v95Ev();
extern void _ZN6S788C43v96Ev();
extern void _ZN6S788C43v97Ev();
extern void _ZN6S788C43v98Ev();
extern void _ZN6S788C43v99Ev();
extern void _ZN6S788C44v100Ev();
extern void _ZN6S788C44v101Ev();
extern void _ZN6S788C44v102Ev();
extern void _ZN6S788C44v103Ev();
extern void _ZN6S788C44v104Ev();
extern void _ZN6S788C44v105Ev();
extern void _ZN6S788C44v106Ev();
extern void _ZN6S788C44v107Ev();
extern void _ZN6S788C44v108Ev();
extern void _ZN6S788C44v109Ev();
extern void _ZN6S788C44v110Ev();
extern void _ZN6S788C44v111Ev();
extern void _ZN6S788C44v112Ev();
extern void _ZN6S788C44v113Ev();
extern void _ZN6S788C44v114Ev();
extern void _ZN6S788C44v115Ev();
extern void _ZN6S788C44v116Ev();
extern void _ZN6S788C44v117Ev();
extern void _ZN6S788C44v118Ev();
extern void _ZN6S788C44v119Ev();
extern void _ZN6S788C44v120Ev();
extern void _ZN6S788C44v121Ev();
extern void _ZN6S788C44v122Ev();
extern void _ZN6S788C44v123Ev();
extern void _ZN6S788C44v124Ev();
extern void _ZN6S788C44v125Ev();
extern void _ZN6S788C44v126Ev();
extern void _ZN6S788C44v127Ev();
extern void _ZN6S788C44v128Ev();
extern void _ZN6S788C44v129Ev();
extern void _ZN6S788C44v130Ev();
static  VTBL_ENTRY vtc_S788C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S788C4[0]),
  (VTBL_ENTRY)&_ZN6S788C4D1Ev,
  (VTBL_ENTRY)&_ZN6S788C4D0Ev,
  (VTBL_ENTRY)&_ZN6S788C42v9Ev,
  (VTBL_ENTRY)&_ZN6S788C43v10Ev,
  (VTBL_ENTRY)&_ZN6S788C43v11Ev,
  (VTBL_ENTRY)&_ZN6S788C43v12Ev,
  (VTBL_ENTRY)&_ZN6S788C43v13Ev,
  (VTBL_ENTRY)&_ZN6S788C43v14Ev,
  (VTBL_ENTRY)&_ZN6S788C43v15Ev,
  (VTBL_ENTRY)&_ZN6S788C43v16Ev,
  (VTBL_ENTRY)&_ZN6S788C43v17Ev,
  (VTBL_ENTRY)&_ZN6S788C43v18Ev,
  (VTBL_ENTRY)&_ZN6S788C43v19Ev,
  (VTBL_ENTRY)&_ZN6S788C43v20Ev,
  (VTBL_ENTRY)&_ZN6S788C43v21Ev,
  (VTBL_ENTRY)&_ZN6S788C43v22Ev,
  (VTBL_ENTRY)&_ZN6S788C43v23Ev,
  (VTBL_ENTRY)&_ZN6S788C43v24Ev,
  (VTBL_ENTRY)&_ZN6S788C43v25Ev,
  (VTBL_ENTRY)&_ZN6S788C43v26Ev,
  (VTBL_ENTRY)&_ZN6S788C43v27Ev,
  (VTBL_ENTRY)&_ZN6S788C43v28Ev,
  (VTBL_ENTRY)&_ZN6S788C43v29Ev,
  (VTBL_ENTRY)&_ZN6S788C43v30Ev,
  (VTBL_ENTRY)&_ZN6S788C43v31Ev,
  (VTBL_ENTRY)&_ZN6S788C43v32Ev,
  (VTBL_ENTRY)&_ZN6S788C43v33Ev,
  (VTBL_ENTRY)&_ZN6S788C43v34Ev,
  (VTBL_ENTRY)&_ZN6S788C43v35Ev,
  (VTBL_ENTRY)&_ZN6S788C43v36Ev,
  (VTBL_ENTRY)&_ZN6S788C43v37Ev,
  (VTBL_ENTRY)&_ZN6S788C43v38Ev,
  (VTBL_ENTRY)&_ZN6S788C43v39Ev,
  (VTBL_ENTRY)&_ZN6S788C43v40Ev,
  (VTBL_ENTRY)&_ZN6S788C43v41Ev,
  (VTBL_ENTRY)&_ZN6S788C43v42Ev,
  (VTBL_ENTRY)&_ZN6S788C43v43Ev,
  (VTBL_ENTRY)&_ZN6S788C43v44Ev,
  (VTBL_ENTRY)&_ZN6S788C43v45Ev,
  (VTBL_ENTRY)&_ZN6S788C43v46Ev,
  (VTBL_ENTRY)&_ZN6S788C43v47Ev,
  (VTBL_ENTRY)&_ZN6S788C43v48Ev,
  (VTBL_ENTRY)&_ZN6S788C43v49Ev,
  (VTBL_ENTRY)&_ZN6S788C43v50Ev,
  (VTBL_ENTRY)&_ZN6S788C43v51Ev,
  (VTBL_ENTRY)&_ZN6S788C43v52Ev,
  (VTBL_ENTRY)&_ZN6S788C43v53Ev,
  (VTBL_ENTRY)&_ZN6S788C43v54Ev,
  (VTBL_ENTRY)&_ZN6S788C43v55Ev,
  (VTBL_ENTRY)&_ZN6S788C43v56Ev,
  (VTBL_ENTRY)&_ZN6S788C43v57Ev,
  (VTBL_ENTRY)&_ZN6S788C43v58Ev,
  (VTBL_ENTRY)&_ZN6S788C43v59Ev,
  (VTBL_ENTRY)&_ZN6S788C43v60Ev,
  (VTBL_ENTRY)&_ZN6S788C43v61Ev,
  (VTBL_ENTRY)&_ZN6S788C43v62Ev,
  (VTBL_ENTRY)&_ZN6S788C43v63Ev,
  (VTBL_ENTRY)&_ZN6S788C43v64Ev,
  (VTBL_ENTRY)&_ZN6S788C43v65Ev,
  (VTBL_ENTRY)&_ZN6S788C43v66Ev,
  (VTBL_ENTRY)&_ZN6S788C43v67Ev,
  (VTBL_ENTRY)&_ZN6S788C43v68Ev,
  (VTBL_ENTRY)&_ZN6S788C43v69Ev,
  (VTBL_ENTRY)&_ZN6S788C43v70Ev,
  (VTBL_ENTRY)&_ZN6S788C43v71Ev,
  (VTBL_ENTRY)&_ZN6S788C43v72Ev,
  (VTBL_ENTRY)&_ZN6S788C43v73Ev,
  (VTBL_ENTRY)&_ZN6S788C43v74Ev,
  (VTBL_ENTRY)&_ZN6S788C43v75Ev,
  (VTBL_ENTRY)&_ZN6S788C43v76Ev,
  (VTBL_ENTRY)&_ZN6S788C43v77Ev,
  (VTBL_ENTRY)&_ZN6S788C43v78Ev,
  (VTBL_ENTRY)&_ZN6S788C43v79Ev,
  (VTBL_ENTRY)&_ZN6S788C43v80Ev,
  (VTBL_ENTRY)&_ZN6S788C43v81Ev,
  (VTBL_ENTRY)&_ZN6S788C43v82Ev,
  (VTBL_ENTRY)&_ZN6S788C43v83Ev,
  (VTBL_ENTRY)&_ZN6S788C43v84Ev,
  (VTBL_ENTRY)&_ZN6S788C43v85Ev,
  (VTBL_ENTRY)&_ZN6S788C43v86Ev,
  (VTBL_ENTRY)&_ZN6S788C43v87Ev,
  (VTBL_ENTRY)&_ZN6S788C43v88Ev,
  (VTBL_ENTRY)&_ZN6S788C43v89Ev,
  (VTBL_ENTRY)&_ZN6S788C43v90Ev,
  (VTBL_ENTRY)&_ZN6S788C43v91Ev,
  (VTBL_ENTRY)&_ZN6S788C43v92Ev,
  (VTBL_ENTRY)&_ZN6S788C43v93Ev,
  (VTBL_ENTRY)&_ZN6S788C43v94Ev,
  (VTBL_ENTRY)&_ZN6S788C43v95Ev,
  (VTBL_ENTRY)&_ZN6S788C43v96Ev,
  (VTBL_ENTRY)&_ZN6S788C43v97Ev,
  (VTBL_ENTRY)&_ZN6S788C43v98Ev,
  (VTBL_ENTRY)&_ZN6S788C43v99Ev,
  (VTBL_ENTRY)&_ZN6S788C44v100Ev,
  (VTBL_ENTRY)&_ZN6S788C44v101Ev,
  (VTBL_ENTRY)&_ZN6S788C44v102Ev,
  (VTBL_ENTRY)&_ZN6S788C44v103Ev,
  (VTBL_ENTRY)&_ZN6S788C44v104Ev,
  (VTBL_ENTRY)&_ZN6S788C44v105Ev,
  (VTBL_ENTRY)&_ZN6S788C44v106Ev,
  (VTBL_ENTRY)&_ZN6S788C44v107Ev,
  (VTBL_ENTRY)&_ZN6S788C44v108Ev,
  (VTBL_ENTRY)&_ZN6S788C44v109Ev,
  (VTBL_ENTRY)&_ZN6S788C44v110Ev,
  (VTBL_ENTRY)&_ZN6S788C44v111Ev,
  (VTBL_ENTRY)&_ZN6S788C44v112Ev,
  (VTBL_ENTRY)&_ZN6S788C44v113Ev,
  (VTBL_ENTRY)&_ZN6S788C44v114Ev,
  (VTBL_ENTRY)&_ZN6S788C44v115Ev,
  (VTBL_ENTRY)&_ZN6S788C44v116Ev,
  (VTBL_ENTRY)&_ZN6S788C44v117Ev,
  (VTBL_ENTRY)&_ZN6S788C44v118Ev,
  (VTBL_ENTRY)&_ZN6S788C44v119Ev,
  (VTBL_ENTRY)&_ZN6S788C44v120Ev,
  (VTBL_ENTRY)&_ZN6S788C44v121Ev,
  (VTBL_ENTRY)&_ZN6S788C44v122Ev,
  (VTBL_ENTRY)&_ZN6S788C44v123Ev,
  (VTBL_ENTRY)&_ZN6S788C44v124Ev,
  (VTBL_ENTRY)&_ZN6S788C44v125Ev,
  (VTBL_ENTRY)&_ZN6S788C44v126Ev,
  (VTBL_ENTRY)&_ZN6S788C44v127Ev,
  (VTBL_ENTRY)&_ZN6S788C44v128Ev,
  (VTBL_ENTRY)&_ZN6S788C44v129Ev,
  (VTBL_ENTRY)&_ZN6S788C44v130Ev,
};
extern VTBL_ENTRY _ZTI6S788C4[];
extern  VTBL_ENTRY _ZTV6S788C4[];
Class_Descriptor cd_S788C4 = {  "S788C4", // class name
  bases_S788C4, 1,
  &(vtc_S788C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S788C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S788C4),126, //virtual function table var
  2, // 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  S788C3  : S788C4 {
  virtual void  v131(); // _ZN6S788C34v131Ev
  virtual void  v132(); // _ZN6S788C34v132Ev
  virtual void  v133(); // _ZN6S788C34v133Ev
  virtual void  v134(); // _ZN6S788C34v134Ev
  virtual void  v135(); // _ZN6S788C34v135Ev
  virtual void  v136(); // _ZN6S788C34v136Ev
  virtual void  v137(); // _ZN6S788C34v137Ev
  virtual void  v138(); // _ZN6S788C34v138Ev
  virtual void  v139(); // _ZN6S788C34v139Ev
  virtual void  v140(); // _ZN6S788C34v140Ev
  virtual void  v141(); // _ZN6S788C34v141Ev
  virtual void  v142(); // _ZN6S788C34v142Ev
  virtual void  v143(); // _ZN6S788C34v143Ev
  virtual void  v144(); // _ZN6S788C34v144Ev
  virtual void  v145(); // _ZN6S788C34v145Ev
  virtual void  v146(); // _ZN6S788C34v146Ev
  virtual void  v147(); // _ZN6S788C34v147Ev
  virtual void  v148(); // _ZN6S788C34v148Ev
  ~S788C3(); // tgen
  S788C3(); // tgen
};
//SIG(-1 S788C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S788C3 ::v131(){vfunc_called(this, "_ZN6S788C34v131Ev");}
void  S788C3 ::v132(){vfunc_called(this, "_ZN6S788C34v132Ev");}
void  S788C3 ::v133(){vfunc_called(this, "_ZN6S788C34v133Ev");}
void  S788C3 ::v134(){vfunc_called(this, "_ZN6S788C34v134Ev");}
void  S788C3 ::v135(){vfunc_called(this, "_ZN6S788C34v135Ev");}
void  S788C3 ::v136(){vfunc_called(this, "_ZN6S788C34v136Ev");}
void  S788C3 ::v137(){vfunc_called(this, "_ZN6S788C34v137Ev");}
void  S788C3 ::v138(){vfunc_called(this, "_ZN6S788C34v138Ev");}
void  S788C3 ::v139(){vfunc_called(this, "_ZN6S788C34v139Ev");}
void  S788C3 ::v140(){vfunc_called(this, "_ZN6S788C34v140Ev");}
void  S788C3 ::v141(){vfunc_called(this, "_ZN6S788C34v141Ev");}
void  S788C3 ::v142(){vfunc_called(this, "_ZN6S788C34v142Ev");}
void  S788C3 ::v143(){vfunc_called(this, "_ZN6S788C34v143Ev");}
void  S788C3 ::v144(){vfunc_called(this, "_ZN6S788C34v144Ev");}
void  S788C3 ::v145(){vfunc_called(this, "_ZN6S788C34v145Ev");}
void  S788C3 ::v146(){vfunc_called(this, "_ZN6S788C34v146Ev");}
void  S788C3 ::v147(){vfunc_called(this, "_ZN6S788C34v147Ev");}
void  S788C3 ::v148(){vfunc_called(this, "_ZN6S788C34v148Ev");}
S788C3 ::~S788C3(){ note_dtor("S788C3", this);} // tgen
S788C3 ::S788C3(){ note_ctor("S788C3", this);} // tgen

static void Test_S788C3()
{
  extern Class_Descriptor cd_S788C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S788C3, buf);
    S788C3 *dp, &lv = *(dp=new (buf) S788C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S788C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S788C3)");
    check_base_class_offset(lv, (S785C5_nt*)(S788C4*), 0, "S788C3");
    check_base_class_offset(lv, (S788C4*), 0, "S788C3");
    test_class_info(&lv, &cd_S788C3);
    dp->~S788C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS788C3(Test_S788C3, "S788C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S788C3C1Ev();
extern void _ZN6S788C3D1Ev();
Name_Map name_map_S788C3[] = {
  NSPAIR(_ZN6S788C3C1Ev),
  NSPAIR(_ZN6S788C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S788C4;
extern VTBL_ENTRY _ZTI6S788C4[];
extern  VTBL_ENTRY _ZTV6S788C4[];
static Base_Class bases_S788C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S788C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S788C3[];
extern void _ZN6S788C3D1Ev();
extern void _ZN6S788C3D0Ev();
extern void _ZN6S788C42v9Ev();
extern void _ZN6S788C43v10Ev();
extern void _ZN6S788C43v11Ev();
extern void _ZN6S788C43v12Ev();
extern void _ZN6S788C43v13Ev();
extern void _ZN6S788C43v14Ev();
extern void _ZN6S788C43v15Ev();
extern void _ZN6S788C43v16Ev();
extern void _ZN6S788C43v17Ev();
extern void _ZN6S788C43v18Ev();
extern void _ZN6S788C43v19Ev();
extern void _ZN6S788C43v20Ev();
extern void _ZN6S788C43v21Ev();
extern void _ZN6S788C43v22Ev();
extern void _ZN6S788C43v23Ev();
extern void _ZN6S788C43v24Ev();
extern void _ZN6S788C43v25Ev();
extern void _ZN6S788C43v26Ev();
extern void _ZN6S788C43v27Ev();
extern void _ZN6S788C43v28Ev();
extern void _ZN6S788C43v29Ev();
extern void _ZN6S788C43v30Ev();
extern void _ZN6S788C43v31Ev();
extern void _ZN6S788C43v32Ev();
extern void _ZN6S788C43v33Ev();
extern void _ZN6S788C43v34Ev();
extern void _ZN6S788C43v35Ev();
extern void _ZN6S788C43v36Ev();
extern void _ZN6S788C43v37Ev();
extern void _ZN6S788C43v38Ev();
extern void _ZN6S788C43v39Ev();
extern void _ZN6S788C43v40Ev();
extern void _ZN6S788C43v41Ev();
extern void _ZN6S788C43v42Ev();
extern void _ZN6S788C43v43Ev();
extern void _ZN6S788C43v44Ev();
extern void _ZN6S788C43v45Ev();
extern void _ZN6S788C43v46Ev();
extern void _ZN6S788C43v47Ev();
extern void _ZN6S788C43v48Ev();
extern void _ZN6S788C43v49Ev();
extern void _ZN6S788C43v50Ev();
extern void _ZN6S788C43v51Ev();
extern void _ZN6S788C43v52Ev();
extern void _ZN6S788C43v53Ev();
extern void _ZN6S788C43v54Ev();
extern void _ZN6S788C43v55Ev();
extern void _ZN6S788C43v56Ev();
extern void _ZN6S788C43v57Ev();
extern void _ZN6S788C43v58Ev();
extern void _ZN6S788C43v59Ev();
extern void _ZN6S788C43v60Ev();
extern void _ZN6S788C43v61Ev();
extern void _ZN6S788C43v62Ev();
extern void _ZN6S788C43v63Ev();
extern void _ZN6S788C43v64Ev();
extern void _ZN6S788C43v65Ev();
extern void _ZN6S788C43v66Ev();
extern void _ZN6S788C43v67Ev();
extern void _ZN6S788C43v68Ev();
extern void _ZN6S788C43v69Ev();
extern void _ZN6S788C43v70Ev();
extern void _ZN6S788C43v71Ev();
extern void _ZN6S788C43v72Ev();
extern void _ZN6S788C43v73Ev();
extern void _ZN6S788C43v74Ev();
extern void _ZN6S788C43v75Ev();
extern void _ZN6S788C43v76Ev();
extern void _ZN6S788C43v77Ev();
extern void _ZN6S788C43v78Ev();
extern void _ZN6S788C43v79Ev();
extern void _ZN6S788C43v80Ev();
extern void _ZN6S788C43v81Ev();
extern void _ZN6S788C43v82Ev();
extern void _ZN6S788C43v83Ev();
extern void _ZN6S788C43v84Ev();
extern void _ZN6S788C43v85Ev();
extern void _ZN6S788C43v86Ev();
extern void _ZN6S788C43v87Ev();
extern void _ZN6S788C43v88Ev();
extern void _ZN6S788C43v89Ev();
extern void _ZN6S788C43v90Ev();
extern void _ZN6S788C43v91Ev();
extern void _ZN6S788C43v92Ev();
extern void _ZN6S788C43v93Ev();
extern void _ZN6S788C43v94Ev();
extern void _ZN6S788C43v95Ev();
extern void _ZN6S788C43v96Ev();
extern void _ZN6S788C43v97Ev();
extern void _ZN6S788C43v98Ev();
extern void _ZN6S788C43v99Ev();
extern void _ZN6S788C44v100Ev();
extern void _ZN6S788C44v101Ev();
extern void _ZN6S788C44v102Ev();
extern void _ZN6S788C44v103Ev();
extern void _ZN6S788C44v104Ev();
extern void _ZN6S788C44v105Ev();
extern void _ZN6S788C44v106Ev();
extern void _ZN6S788C44v107Ev();
extern void _ZN6S788C44v108Ev();
extern void _ZN6S788C44v109Ev();
extern void _ZN6S788C44v110Ev();
extern void _ZN6S788C44v111Ev();
extern void _ZN6S788C44v112Ev();
extern void _ZN6S788C44v113Ev();
extern void _ZN6S788C44v114Ev();
extern void _ZN6S788C44v115Ev();
extern void _ZN6S788C44v116Ev();
extern void _ZN6S788C44v117Ev();
extern void _ZN6S788C44v118Ev();
extern void _ZN6S788C44v119Ev();
extern void _ZN6S788C44v120Ev();
extern void _ZN6S788C44v121Ev();
extern void _ZN6S788C44v122Ev();
extern void _ZN6S788C44v123Ev();
extern void _ZN6S788C44v124Ev();
extern void _ZN6S788C44v125Ev();
extern void _ZN6S788C44v126Ev();
extern void _ZN6S788C44v127Ev();
extern void _ZN6S788C44v128Ev();
extern void _ZN6S788C44v129Ev();
extern void _ZN6S788C44v130Ev();
extern void _ZN6S788C34v131Ev();
extern void _ZN6S788C34v132Ev();
extern void _ZN6S788C34v133Ev();
extern void _ZN6S788C34v134Ev();
extern void _ZN6S788C34v135Ev();
extern void _ZN6S788C34v136Ev();
extern void _ZN6S788C34v137Ev();
extern void _ZN6S788C34v138Ev();
extern void _ZN6S788C34v139Ev();
extern void _ZN6S788C34v140Ev();
extern void _ZN6S788C34v141Ev();
extern void _ZN6S788C34v142Ev();
extern void _ZN6S788C34v143Ev();
extern void _ZN6S788C34v144Ev();
extern void _ZN6S788C34v145Ev();
extern void _ZN6S788C34v146Ev();
extern void _ZN6S788C34v147Ev();
extern void _ZN6S788C34v148Ev();
static  VTBL_ENTRY vtc_S788C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S788C3[0]),
  (VTBL_ENTRY)&_ZN6S788C3D1Ev,
  (VTBL_ENTRY)&_ZN6S788C3D0Ev,
  (VTBL_ENTRY)&_ZN6S788C42v9Ev,
  (VTBL_ENTRY)&_ZN6S788C43v10Ev,
  (VTBL_ENTRY)&_ZN6S788C43v11Ev,
  (VTBL_ENTRY)&_ZN6S788C43v12Ev,
  (VTBL_ENTRY)&_ZN6S788C43v13Ev,
  (VTBL_ENTRY)&_ZN6S788C43v14Ev,
  (VTBL_ENTRY)&_ZN6S788C43v15Ev,
  (VTBL_ENTRY)&_ZN6S788C43v16Ev,
  (VTBL_ENTRY)&_ZN6S788C43v17Ev,
  (VTBL_ENTRY)&_ZN6S788C43v18Ev,
  (VTBL_ENTRY)&_ZN6S788C43v19Ev,
  (VTBL_ENTRY)&_ZN6S788C43v20Ev,
  (VTBL_ENTRY)&_ZN6S788C43v21Ev,
  (VTBL_ENTRY)&_ZN6S788C43v22Ev,
  (VTBL_ENTRY)&_ZN6S788C43v23Ev,
  (VTBL_ENTRY)&_ZN6S788C43v24Ev,
  (VTBL_ENTRY)&_ZN6S788C43v25Ev,
  (VTBL_ENTRY)&_ZN6S788C43v26Ev,
  (VTBL_ENTRY)&_ZN6S788C43v27Ev,
  (VTBL_ENTRY)&_ZN6S788C43v28Ev,
  (VTBL_ENTRY)&_ZN6S788C43v29Ev,
  (VTBL_ENTRY)&_ZN6S788C43v30Ev,
  (VTBL_ENTRY)&_ZN6S788C43v31Ev,
  (VTBL_ENTRY)&_ZN6S788C43v32Ev,
  (VTBL_ENTRY)&_ZN6S788C43v33Ev,
  (VTBL_ENTRY)&_ZN6S788C43v34Ev,
  (VTBL_ENTRY)&_ZN6S788C43v35Ev,
  (VTBL_ENTRY)&_ZN6S788C43v36Ev,
  (VTBL_ENTRY)&_ZN6S788C43v37Ev,
  (VTBL_ENTRY)&_ZN6S788C43v38Ev,
  (VTBL_ENTRY)&_ZN6S788C43v39Ev,
  (VTBL_ENTRY)&_ZN6S788C43v40Ev,
  (VTBL_ENTRY)&_ZN6S788C43v41Ev,
  (VTBL_ENTRY)&_ZN6S788C43v42Ev,
  (VTBL_ENTRY)&_ZN6S788C43v43Ev,
  (VTBL_ENTRY)&_ZN6S788C43v44Ev,
  (VTBL_ENTRY)&_ZN6S788C43v45Ev,
  (VTBL_ENTRY)&_ZN6S788C43v46Ev,
  (VTBL_ENTRY)&_ZN6S788C43v47Ev,
  (VTBL_ENTRY)&_ZN6S788C43v48Ev,
  (VTBL_ENTRY)&_ZN6S788C43v49Ev,
  (VTBL_ENTRY)&_ZN6S788C43v50Ev,
  (VTBL_ENTRY)&_ZN6S788C43v51Ev,
  (VTBL_ENTRY)&_ZN6S788C43v52Ev,
  (VTBL_ENTRY)&_ZN6S788C43v53Ev,
  (VTBL_ENTRY)&_ZN6S788C43v54Ev,
  (VTBL_ENTRY)&_ZN6S788C43v55Ev,
  (VTBL_ENTRY)&_ZN6S788C43v56Ev,
  (VTBL_ENTRY)&_ZN6S788C43v57Ev,
  (VTBL_ENTRY)&_ZN6S788C43v58Ev,
  (VTBL_ENTRY)&_ZN6S788C43v59Ev,
  (VTBL_ENTRY)&_ZN6S788C43v60Ev,
  (VTBL_ENTRY)&_ZN6S788C43v61Ev,
  (VTBL_ENTRY)&_ZN6S788C43v62Ev,
  (VTBL_ENTRY)&_ZN6S788C43v63Ev,
  (VTBL_ENTRY)&_ZN6S788C43v64Ev,
  (VTBL_ENTRY)&_ZN6S788C43v65Ev,
  (VTBL_ENTRY)&_ZN6S788C43v66Ev,
  (VTBL_ENTRY)&_ZN6S788C43v67Ev,
  (VTBL_ENTRY)&_ZN6S788C43v68Ev,
  (VTBL_ENTRY)&_ZN6S788C43v69Ev,
  (VTBL_ENTRY)&_ZN6S788C43v70Ev,
  (VTBL_ENTRY)&_ZN6S788C43v71Ev,
  (VTBL_ENTRY)&_ZN6S788C43v72Ev,
  (VTBL_ENTRY)&_ZN6S788C43v73Ev,
  (VTBL_ENTRY)&_ZN6S788C43v74Ev,
  (VTBL_ENTRY)&_ZN6S788C43v75Ev,
  (VTBL_ENTRY)&_ZN6S788C43v76Ev,
  (VTBL_ENTRY)&_ZN6S788C43v77Ev,
  (VTBL_ENTRY)&_ZN6S788C43v78Ev,
  (VTBL_ENTRY)&_ZN6S788C43v79Ev,
  (VTBL_ENTRY)&_ZN6S788C43v80Ev,
  (VTBL_ENTRY)&_ZN6S788C43v81Ev,
  (VTBL_ENTRY)&_ZN6S788C43v82Ev,
  (VTBL_ENTRY)&_ZN6S788C43v83Ev,
  (VTBL_ENTRY)&_ZN6S788C43v84Ev,
  (VTBL_ENTRY)&_ZN6S788C43v85Ev,
  (VTBL_ENTRY)&_ZN6S788C43v86Ev,
  (VTBL_ENTRY)&_ZN6S788C43v87Ev,
  (VTBL_ENTRY)&_ZN6S788C43v88Ev,
  (VTBL_ENTRY)&_ZN6S788C43v89Ev,
  (VTBL_ENTRY)&_ZN6S788C43v90Ev,
  (VTBL_ENTRY)&_ZN6S788C43v91Ev,
  (VTBL_ENTRY)&_ZN6S788C43v92Ev,
  (VTBL_ENTRY)&_ZN6S788C43v93Ev,
  (VTBL_ENTRY)&_ZN6S788C43v94Ev,
  (VTBL_ENTRY)&_ZN6S788C43v95Ev,
  (VTBL_ENTRY)&_ZN6S788C43v96Ev,
  (VTBL_ENTRY)&_ZN6S788C43v97Ev,
  (VTBL_ENTRY)&_ZN6S788C43v98Ev,
  (VTBL_ENTRY)&_ZN6S788C43v99Ev,
  (VTBL_ENTRY)&_ZN6S788C44v100Ev,
  (VTBL_ENTRY)&_ZN6S788C44v101Ev,
  (VTBL_ENTRY)&_ZN6S788C44v102Ev,
  (VTBL_ENTRY)&_ZN6S788C44v103Ev,
  (VTBL_ENTRY)&_ZN6S788C44v104Ev,
  (VTBL_ENTRY)&_ZN6S788C44v105Ev,
  (VTBL_ENTRY)&_ZN6S788C44v106Ev,
  (VTBL_ENTRY)&_ZN6S788C44v107Ev,
  (VTBL_ENTRY)&_ZN6S788C44v108Ev,
  (VTBL_ENTRY)&_ZN6S788C44v109Ev,
  (VTBL_ENTRY)&_ZN6S788C44v110Ev,
  (VTBL_ENTRY)&_ZN6S788C44v111Ev,
  (VTBL_ENTRY)&_ZN6S788C44v112Ev,
  (VTBL_ENTRY)&_ZN6S788C44v113Ev,
  (VTBL_ENTRY)&_ZN6S788C44v114Ev,
  (VTBL_ENTRY)&_ZN6S788C44v115Ev,
  (VTBL_ENTRY)&_ZN6S788C44v116Ev,
  (VTBL_ENTRY)&_ZN6S788C44v117Ev,
  (VTBL_ENTRY)&_ZN6S788C44v118Ev,
  (VTBL_ENTRY)&_ZN6S788C44v119Ev,
  (VTBL_ENTRY)&_ZN6S788C44v120Ev,
  (VTBL_ENTRY)&_ZN6S788C44v121Ev,
  (VTBL_ENTRY)&_ZN6S788C44v122Ev,
  (VTBL_ENTRY)&_ZN6S788C44v123Ev,
  (VTBL_ENTRY)&_ZN6S788C44v124Ev,
  (VTBL_ENTRY)&_ZN6S788C44v125Ev,
  (VTBL_ENTRY)&_ZN6S788C44v126Ev,
  (VTBL_ENTRY)&_ZN6S788C44v127Ev,
  (VTBL_ENTRY)&_ZN6S788C44v128Ev,
  (VTBL_ENTRY)&_ZN6S788C44v129Ev,
  (VTBL_ENTRY)&_ZN6S788C44v130Ev,
  (VTBL_ENTRY)&_ZN6S788C34v131Ev,
  (VTBL_ENTRY)&_ZN6S788C34v132Ev,
  (VTBL_ENTRY)&_ZN6S788C34v133Ev,
  (VTBL_ENTRY)&_ZN6S788C34v134Ev,
  (VTBL_ENTRY)&_ZN6S788C34v135Ev,
  (VTBL_ENTRY)&_ZN6S788C34v136Ev,
  (VTBL_ENTRY)&_ZN6S788C34v137Ev,
  (VTBL_ENTRY)&_ZN6S788C34v138Ev,
  (VTBL_ENTRY)&_ZN6S788C34v139Ev,
  (VTBL_ENTRY)&_ZN6S788C34v140Ev,
  (VTBL_ENTRY)&_ZN6S788C34v141Ev,
  (VTBL_ENTRY)&_ZN6S788C34v142Ev,
  (VTBL_ENTRY)&_ZN6S788C34v143Ev,
  (VTBL_ENTRY)&_ZN6S788C34v144Ev,
  (VTBL_ENTRY)&_ZN6S788C34v145Ev,
  (VTBL_ENTRY)&_ZN6S788C34v146Ev,
  (VTBL_ENTRY)&_ZN6S788C34v147Ev,
  (VTBL_ENTRY)&_ZN6S788C34v148Ev,
};
extern VTBL_ENTRY _ZTI6S788C3[];
extern  VTBL_ENTRY _ZTV6S788C3[];
Class_Descriptor cd_S788C3 = {  "S788C3", // class name
  bases_S788C3, 2,
  &(vtc_S788C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S788C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S788C3),144, //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  S788C2  : S788C3 {
  virtual void  v149(); // _ZN6S788C24v149Ev
  ~S788C2(); // tgen
  S788C2(); // tgen
};
//SIG(-1 S788C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


void  S788C2 ::v149(){vfunc_called(this, "_ZN6S788C24v149Ev");}
S788C2 ::~S788C2(){ note_dtor("S788C2", this);} // tgen
S788C2 ::S788C2(){ note_ctor("S788C2", this);} // tgen

static void Test_S788C2()
{
  extern Class_Descriptor cd_S788C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S788C2, buf);
    S788C2 *dp, &lv = *(dp=new (buf) S788C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S788C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S788C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S788C4*)(S788C3*), 0, "S788C2");
    check_base_class_offset(lv, (S788C4*)(S788C3*), 0, "S788C2");
    check_base_class_offset(lv, (S788C3*), 0, "S788C2");
    test_class_info(&lv, &cd_S788C2);
    dp->~S788C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS788C2(Test_S788C2, "S788C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S788C2C1Ev();
extern void _ZN6S788C2D1Ev();
Name_Map name_map_S788C2[] = {
  NSPAIR(_ZN6S788C2C1Ev),
  NSPAIR(_ZN6S788C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S788C4;
extern VTBL_ENTRY _ZTI6S788C4[];
extern  VTBL_ENTRY _ZTV6S788C4[];
extern Class_Descriptor cd_S788C3;
extern VTBL_ENTRY _ZTI6S788C3[];
extern  VTBL_ENTRY _ZTV6S788C3[];
static Base_Class bases_S788C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S788C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S788C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S788C2[];
extern void _ZN6S788C2D1Ev();
extern void _ZN6S788C2D0Ev();
extern void _ZN6S788C42v9Ev();
extern void _ZN6S788C43v10Ev();
extern void _ZN6S788C43v11Ev();
extern void _ZN6S788C43v12Ev();
extern void _ZN6S788C43v13Ev();
extern void _ZN6S788C43v14Ev();
extern void _ZN6S788C43v15Ev();
extern void _ZN6S788C43v16Ev();
extern void _ZN6S788C43v17Ev();
extern void _ZN6S788C43v18Ev();
extern void _ZN6S788C43v19Ev();
extern void _ZN6S788C43v20Ev();
extern void _ZN6S788C43v21Ev();
extern void _ZN6S788C43v22Ev();
extern void _ZN6S788C43v23Ev();
extern void _ZN6S788C43v24Ev();
extern void _ZN6S788C43v25Ev();
extern void _ZN6S788C43v26Ev();
extern void _ZN6S788C43v27Ev();
extern void _ZN6S788C43v28Ev();
extern void _ZN6S788C43v29Ev();
extern void _ZN6S788C43v30Ev();
extern void _ZN6S788C43v31Ev();
extern void _ZN6S788C43v32Ev();
extern void _ZN6S788C43v33Ev();
extern void _ZN6S788C43v34Ev();
extern void _ZN6S788C43v35Ev();
extern void _ZN6S788C43v36Ev();
extern void _ZN6S788C43v37Ev();
extern void _ZN6S788C43v38Ev();
extern void _ZN6S788C43v39Ev();
extern void _ZN6S788C43v40Ev();
extern void _ZN6S788C43v41Ev();
extern void _ZN6S788C43v42Ev();
extern void _ZN6S788C43v43Ev();
extern void _ZN6S788C43v44Ev();
extern void _ZN6S788C43v45Ev();
extern void _ZN6S788C43v46Ev();
extern void _ZN6S788C43v47Ev();
extern void _ZN6S788C43v48Ev();
extern void _ZN6S788C43v49Ev();
extern void _ZN6S788C43v50Ev();
extern void _ZN6S788C43v51Ev();
extern void _ZN6S788C43v52Ev();
extern void _ZN6S788C43v53Ev();
extern void _ZN6S788C43v54Ev();
extern void _ZN6S788C43v55Ev();
extern void _ZN6S788C43v56Ev();
extern void _ZN6S788C43v57Ev();
extern void _ZN6S788C43v58Ev();
extern void _ZN6S788C43v59Ev();
extern void _ZN6S788C43v60Ev();
extern void _ZN6S788C43v61Ev();
extern void _ZN6S788C43v62Ev();
extern void _ZN6S788C43v63Ev();
extern void _ZN6S788C43v64Ev();
extern void _ZN6S788C43v65Ev();
extern void _ZN6S788C43v66Ev();
extern void _ZN6S788C43v67Ev();
extern void _ZN6S788C43v68Ev();
extern void _ZN6S788C43v69Ev();
extern void _ZN6S788C43v70Ev();
extern void _ZN6S788C43v71Ev();
extern void _ZN6S788C43v72Ev();
extern void _ZN6S788C43v73Ev();
extern void _ZN6S788C43v74Ev();
extern void _ZN6S788C43v75Ev();
extern void _ZN6S788C43v76Ev();
extern void _ZN6S788C43v77Ev();
extern void _ZN6S788C43v78Ev();
extern void _ZN6S788C43v79Ev();
extern void _ZN6S788C43v80Ev();
extern void _ZN6S788C43v81Ev();
extern void _ZN6S788C43v82Ev();
extern void _ZN6S788C43v83Ev();
extern void _ZN6S788C43v84Ev();
extern void _ZN6S788C43v85Ev();
extern void _ZN6S788C43v86Ev();
extern void _ZN6S788C43v87Ev();
extern void _ZN6S788C43v88Ev();
extern void _ZN6S788C43v89Ev();
extern void _ZN6S788C43v90Ev();
extern void _ZN6S788C43v91Ev();
extern void _ZN6S788C43v92Ev();
extern void _ZN6S788C43v93Ev();
extern void _ZN6S788C43v94Ev();
extern void _ZN6S788C43v95Ev();
extern void _ZN6S788C43v96Ev();
extern void _ZN6S788C43v97Ev();
extern void _ZN6S788C43v98Ev();
extern void _ZN6S788C43v99Ev();
extern void _ZN6S788C44v100Ev();
extern void _ZN6S788C44v101Ev();
extern void _ZN6S788C44v102Ev();
extern void _ZN6S788C44v103Ev();
extern void _ZN6S788C44v104Ev();
extern void _ZN6S788C44v105Ev();
extern void _ZN6S788C44v106Ev();
extern void _ZN6S788C44v107Ev();
extern void _ZN6S788C44v108Ev();
extern void _ZN6S788C44v109Ev();
extern void _ZN6S788C44v110Ev();
extern void _ZN6S788C44v111Ev();
extern void _ZN6S788C44v112Ev();
extern void _ZN6S788C44v113Ev();
extern void _ZN6S788C44v114Ev();
extern void _ZN6S788C44v115Ev();
extern void _ZN6S788C44v116Ev();
extern void _ZN6S788C44v117Ev();
extern void _ZN6S788C44v118Ev();
extern void _ZN6S788C44v119Ev();
extern void _ZN6S788C44v120Ev();
extern void _ZN6S788C44v121Ev();
extern void _ZN6S788C44v122Ev();
extern void _ZN6S788C44v123Ev();
extern void _ZN6S788C44v124Ev();
extern void _ZN6S788C44v125Ev();
extern void _ZN6S788C44v126Ev();
extern void _ZN6S788C44v127Ev();
extern void _ZN6S788C44v128Ev();
extern void _ZN6S788C44v129Ev();
extern void _ZN6S788C44v130Ev();
extern void _ZN6S788C34v131Ev();
extern void _ZN6S788C34v132Ev();
extern void _ZN6S788C34v133Ev();
extern void _ZN6S788C34v134Ev();
extern void _ZN6S788C34v135Ev();
extern void _ZN6S788C34v136Ev();
extern void _ZN6S788C34v137Ev();
extern void _ZN6S788C34v138Ev();
extern void _ZN6S788C34v139Ev();
extern void _ZN6S788C34v140Ev();
extern void _ZN6S788C34v141Ev();
extern void _ZN6S788C34v142Ev();
extern void _ZN6S788C34v143Ev();
extern void _ZN6S788C34v144Ev();
extern void _ZN6S788C34v145Ev();
extern void _ZN6S788C34v146Ev();
extern void _ZN6S788C34v147Ev();
extern void _ZN6S788C34v148Ev();
extern void _ZN6S788C24v149Ev();
static  VTBL_ENTRY vtc_S788C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S788C2[0]),
  (VTBL_ENTRY)&_ZN6S788C2D1Ev,
  (VTBL_ENTRY)&_ZN6S788C2D0Ev,
  (VTBL_ENTRY)&_ZN6S788C42v9Ev,
  (VTBL_ENTRY)&_ZN6S788C43v10Ev,
  (VTBL_ENTRY)&_ZN6S788C43v11Ev,
  (VTBL_ENTRY)&_ZN6S788C43v12Ev,
  (VTBL_ENTRY)&_ZN6S788C43v13Ev,
  (VTBL_ENTRY)&_ZN6S788C43v14Ev,
  (VTBL_ENTRY)&_ZN6S788C43v15Ev,
  (VTBL_ENTRY)&_ZN6S788C43v16Ev,
  (VTBL_ENTRY)&_ZN6S788C43v17Ev,
  (VTBL_ENTRY)&_ZN6S788C43v18Ev,
  (VTBL_ENTRY)&_ZN6S788C43v19Ev,
  (VTBL_ENTRY)&_ZN6S788C43v20Ev,
  (VTBL_ENTRY)&_ZN6S788C43v21Ev,
  (VTBL_ENTRY)&_ZN6S788C43v22Ev,
  (VTBL_ENTRY)&_ZN6S788C43v23Ev,
  (VTBL_ENTRY)&_ZN6S788C43v24Ev,
  (VTBL_ENTRY)&_ZN6S788C43v25Ev,
  (VTBL_ENTRY)&_ZN6S788C43v26Ev,
  (VTBL_ENTRY)&_ZN6S788C43v27Ev,
  (VTBL_ENTRY)&_ZN6S788C43v28Ev,
  (VTBL_ENTRY)&_ZN6S788C43v29Ev,
  (VTBL_ENTRY)&_ZN6S788C43v30Ev,
  (VTBL_ENTRY)&_ZN6S788C43v31Ev,
  (VTBL_ENTRY)&_ZN6S788C43v32Ev,
  (VTBL_ENTRY)&_ZN6S788C43v33Ev,
  (VTBL_ENTRY)&_ZN6S788C43v34Ev,
  (VTBL_ENTRY)&_ZN6S788C43v35Ev,
  (VTBL_ENTRY)&_ZN6S788C43v36Ev,
  (VTBL_ENTRY)&_ZN6S788C43v37Ev,
  (VTBL_ENTRY)&_ZN6S788C43v38Ev,
  (VTBL_ENTRY)&_ZN6S788C43v39Ev,
  (VTBL_ENTRY)&_ZN6S788C43v40Ev,
  (VTBL_ENTRY)&_ZN6S788C43v41Ev,
  (VTBL_ENTRY)&_ZN6S788C43v42Ev,
  (VTBL_ENTRY)&_ZN6S788C43v43Ev,
  (VTBL_ENTRY)&_ZN6S788C43v44Ev,
  (VTBL_ENTRY)&_ZN6S788C43v45Ev,
  (VTBL_ENTRY)&_ZN6S788C43v46Ev,
  (VTBL_ENTRY)&_ZN6S788C43v47Ev,
  (VTBL_ENTRY)&_ZN6S788C43v48Ev,
  (VTBL_ENTRY)&_ZN6S788C43v49Ev,
  (VTBL_ENTRY)&_ZN6S788C43v50Ev,
  (VTBL_ENTRY)&_ZN6S788C43v51Ev,
  (VTBL_ENTRY)&_ZN6S788C43v52Ev,
  (VTBL_ENTRY)&_ZN6S788C43v53Ev,
  (VTBL_ENTRY)&_ZN6S788C43v54Ev,
  (VTBL_ENTRY)&_ZN6S788C43v55Ev,
  (VTBL_ENTRY)&_ZN6S788C43v56Ev,
  (VTBL_ENTRY)&_ZN6S788C43v57Ev,
  (VTBL_ENTRY)&_ZN6S788C43v58Ev,
  (VTBL_ENTRY)&_ZN6S788C43v59Ev,
  (VTBL_ENTRY)&_ZN6S788C43v60Ev,
  (VTBL_ENTRY)&_ZN6S788C43v61Ev,
  (VTBL_ENTRY)&_ZN6S788C43v62Ev,
  (VTBL_ENTRY)&_ZN6S788C43v63Ev,
  (VTBL_ENTRY)&_ZN6S788C43v64Ev,
  (VTBL_ENTRY)&_ZN6S788C43v65Ev,
  (VTBL_ENTRY)&_ZN6S788C43v66Ev,
  (VTBL_ENTRY)&_ZN6S788C43v67Ev,
  (VTBL_ENTRY)&_ZN6S788C43v68Ev,
  (VTBL_ENTRY)&_ZN6S788C43v69Ev,
  (VTBL_ENTRY)&_ZN6S788C43v70Ev,
  (VTBL_ENTRY)&_ZN6S788C43v71Ev,
  (VTBL_ENTRY)&_ZN6S788C43v72Ev,
  (VTBL_ENTRY)&_ZN6S788C43v73Ev,
  (VTBL_ENTRY)&_ZN6S788C43v74Ev,
  (VTBL_ENTRY)&_ZN6S788C43v75Ev,
  (VTBL_ENTRY)&_ZN6S788C43v76Ev,
  (VTBL_ENTRY)&_ZN6S788C43v77Ev,
  (VTBL_ENTRY)&_ZN6S788C43v78Ev,
  (VTBL_ENTRY)&_ZN6S788C43v79Ev,
  (VTBL_ENTRY)&_ZN6S788C43v80Ev,
  (VTBL_ENTRY)&_ZN6S788C43v81Ev,
  (VTBL_ENTRY)&_ZN6S788C43v82Ev,
  (VTBL_ENTRY)&_ZN6S788C43v83Ev,
  (VTBL_ENTRY)&_ZN6S788C43v84Ev,
  (VTBL_ENTRY)&_ZN6S788C43v85Ev,
  (VTBL_ENTRY)&_ZN6S788C43v86Ev,
  (VTBL_ENTRY)&_ZN6S788C43v87Ev,
  (VTBL_ENTRY)&_ZN6S788C43v88Ev,
  (VTBL_ENTRY)&_ZN6S788C43v89Ev,
  (VTBL_ENTRY)&_ZN6S788C43v90Ev,
  (VTBL_ENTRY)&_ZN6S788C43v91Ev,
  (VTBL_ENTRY)&_ZN6S788C43v92Ev,
  (VTBL_ENTRY)&_ZN6S788C43v93Ev,
  (VTBL_ENTRY)&_ZN6S788C43v94Ev,
  (VTBL_ENTRY)&_ZN6S788C43v95Ev,
  (VTBL_ENTRY)&_ZN6S788C43v96Ev,
  (VTBL_ENTRY)&_ZN6S788C43v97Ev,
  (VTBL_ENTRY)&_ZN6S788C43v98Ev,
  (VTBL_ENTRY)&_ZN6S788C43v99Ev,
  (VTBL_ENTRY)&_ZN6S788C44v100Ev,
  (VTBL_ENTRY)&_ZN6S788C44v101Ev,
  (VTBL_ENTRY)&_ZN6S788C44v102Ev,
  (VTBL_ENTRY)&_ZN6S788C44v103Ev,
  (VTBL_ENTRY)&_ZN6S788C44v104Ev,
  (VTBL_ENTRY)&_ZN6S788C44v105Ev,
  (VTBL_ENTRY)&_ZN6S788C44v106Ev,
  (VTBL_ENTRY)&_ZN6S788C44v107Ev,
  (VTBL_ENTRY)&_ZN6S788C44v108Ev,
  (VTBL_ENTRY)&_ZN6S788C44v109Ev,
  (VTBL_ENTRY)&_ZN6S788C44v110Ev,
  (VTBL_ENTRY)&_ZN6S788C44v111Ev,
  (VTBL_ENTRY)&_ZN6S788C44v112Ev,
  (VTBL_ENTRY)&_ZN6S788C44v113Ev,
  (VTBL_ENTRY)&_ZN6S788C44v114Ev,
  (VTBL_ENTRY)&_ZN6S788C44v115Ev,
  (VTBL_ENTRY)&_ZN6S788C44v116Ev,
  (VTBL_ENTRY)&_ZN6S788C44v117Ev,
  (VTBL_ENTRY)&_ZN6S788C44v118Ev,
  (VTBL_ENTRY)&_ZN6S788C44v119Ev,
  (VTBL_ENTRY)&_ZN6S788C44v120Ev,
  (VTBL_ENTRY)&_ZN6S788C44v121Ev,
  (VTBL_ENTRY)&_ZN6S788C44v122Ev,
  (VTBL_ENTRY)&_ZN6S788C44v123Ev,
  (VTBL_ENTRY)&_ZN6S788C44v124Ev,
  (VTBL_ENTRY)&_ZN6S788C44v125Ev,
  (VTBL_ENTRY)&_ZN6S788C44v126Ev,
  (VTBL_ENTRY)&_ZN6S788C44v127Ev,
  (VTBL_ENTRY)&_ZN6S788C44v128Ev,
  (VTBL_ENTRY)&_ZN6S788C44v129Ev,
  (VTBL_ENTRY)&_ZN6S788C44v130Ev,
  (VTBL_ENTRY)&_ZN6S788C34v131Ev,
  (VTBL_ENTRY)&_ZN6S788C34v132Ev,
  (VTBL_ENTRY)&_ZN6S788C34v133Ev,
  (VTBL_ENTRY)&_ZN6S788C34v134Ev,
  (VTBL_ENTRY)&_ZN6S788C34v135Ev,
  (VTBL_ENTRY)&_ZN6S788C34v136Ev,
  (VTBL_ENTRY)&_ZN6S788C34v137Ev,
  (VTBL_ENTRY)&_ZN6S788C34v138Ev,
  (VTBL_ENTRY)&_ZN6S788C34v139Ev,
  (VTBL_ENTRY)&_ZN6S788C34v140Ev,
  (VTBL_ENTRY)&_ZN6S788C34v141Ev,
  (VTBL_ENTRY)&_ZN6S788C34v142Ev,
  (VTBL_ENTRY)&_ZN6S788C34v143Ev,
  (VTBL_ENTRY)&_ZN6S788C34v144Ev,
  (VTBL_ENTRY)&_ZN6S788C34v145Ev,
  (VTBL_ENTRY)&_ZN6S788C34v146Ev,
  (VTBL_ENTRY)&_ZN6S788C34v147Ev,
  (VTBL_ENTRY)&_ZN6S788C34v148Ev,
  (VTBL_ENTRY)&_ZN6S788C24v149Ev,
};
extern VTBL_ENTRY _ZTI6S788C2[];
extern  VTBL_ENTRY _ZTV6S788C2[];
Class_Descriptor cd_S788C2 = {  "S788C2", // class name
  bases_S788C2, 3,
  &(vtc_S788C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S788C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S788C2),145, //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  S788C1  : S788C2 {
  virtual void  v1(); // _ZN6S788C12v1Ev
  virtual void  v2(); // _ZN6S788C12v2Ev
  virtual void  v3(); // _ZN6S788C12v3Ev
  virtual void  v4(); // _ZN6S788C12v4Ev
  virtual void  v5(); // _ZN6S788C12v5Ev
  virtual void  v6(); // _ZN6S788C12v6Ev
  virtual void  v7(); // _ZN6S788C12v7Ev
  virtual void  v8(); // _ZN6S788C12v8Ev
  ~S788C1(); // tgen
  S788C1(); // tgen
};
//SIG(1 S788C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 v144 v145 v146 v147 v148} v149} v1 v2 v3 v4 v5 v6 v7 v8}


void  S788C1 ::v1(){vfunc_called(this, "_ZN6S788C12v1Ev");}
void  S788C1 ::v2(){vfunc_called(this, "_ZN6S788C12v2Ev");}
void  S788C1 ::v3(){vfunc_called(this, "_ZN6S788C12v3Ev");}
void  S788C1 ::v4(){vfunc_called(this, "_ZN6S788C12v4Ev");}
void  S788C1 ::v5(){vfunc_called(this, "_ZN6S788C12v5Ev");}
void  S788C1 ::v6(){vfunc_called(this, "_ZN6S788C12v6Ev");}
void  S788C1 ::v7(){vfunc_called(this, "_ZN6S788C12v7Ev");}
void  S788C1 ::v8(){vfunc_called(this, "_ZN6S788C12v8Ev");}
S788C1 ::~S788C1(){ note_dtor("S788C1", this);} // tgen
S788C1 ::S788C1(){ note_ctor("S788C1", this);} // tgen

static void Test_S788C1()
{
  extern Class_Descriptor cd_S788C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S788C1, buf);
    S788C1 *dp, &lv = *(dp=new (buf) S788C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S788C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S788C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S788C4*)(S788C3*)(S788C2*), 0, "S788C1");
    check_base_class_offset(lv, (S788C4*)(S788C3*)(S788C2*), 0, "S788C1");
    check_base_class_offset(lv, (S788C3*)(S788C2*), 0, "S788C1");
    check_base_class_offset(lv, (S788C2*), 0, "S788C1");
    test_class_info(&lv, &cd_S788C1);
    dp->~S788C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS788C1(Test_S788C1, "S788C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S788C1C1Ev();
extern void _ZN6S788C1D1Ev();
Name_Map name_map_S788C1[] = {
  NSPAIR(_ZN6S788C1C1Ev),
  NSPAIR(_ZN6S788C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S788C4;
extern VTBL_ENTRY _ZTI6S788C4[];
extern  VTBL_ENTRY _ZTV6S788C4[];
extern Class_Descriptor cd_S788C3;
extern VTBL_ENTRY _ZTI6S788C3[];
extern  VTBL_ENTRY _ZTV6S788C3[];
extern Class_Descriptor cd_S788C2;
extern VTBL_ENTRY _ZTI6S788C2[];
extern  VTBL_ENTRY _ZTV6S788C2[];
static Base_Class bases_S788C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S788C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S788C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S788C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S788C1[];
extern void _ZN6S788C1D1Ev();
extern void _ZN6S788C1D0Ev();
extern void _ZN6S788C42v9Ev();
extern void _ZN6S788C43v10Ev();
extern void _ZN6S788C43v11Ev();
extern void _ZN6S788C43v12Ev();
extern void _ZN6S788C43v13Ev();
extern void _ZN6S788C43v14Ev();
extern void _ZN6S788C43v15Ev();
extern void _ZN6S788C43v16Ev();
extern void _ZN6S788C43v17Ev();
extern void _ZN6S788C43v18Ev();
extern void _ZN6S788C43v19Ev();
extern void _ZN6S788C43v20Ev();
extern void _ZN6S788C43v21Ev();
extern void _ZN6S788C43v22Ev();
extern void _ZN6S788C43v23Ev();
extern void _ZN6S788C43v24Ev();
extern void _ZN6S788C43v25Ev();
extern void _ZN6S788C43v26Ev();
extern void _ZN6S788C43v27Ev();
extern void _ZN6S788C43v28Ev();
extern void _ZN6S788C43v29Ev();
extern void _ZN6S788C43v30Ev();
extern void _ZN6S788C43v31Ev();
extern void _ZN6S788C43v32Ev();
extern void _ZN6S788C43v33Ev();
extern void _ZN6S788C43v34Ev();
extern void _ZN6S788C43v35Ev();
extern void _ZN6S788C43v36Ev();
extern void _ZN6S788C43v37Ev();
extern void _ZN6S788C43v38Ev();
extern void _ZN6S788C43v39Ev();
extern void _ZN6S788C43v40Ev();
extern void _ZN6S788C43v41Ev();
extern void _ZN6S788C43v42Ev();
extern void _ZN6S788C43v43Ev();
extern void _ZN6S788C43v44Ev();
extern void _ZN6S788C43v45Ev();
extern void _ZN6S788C43v46Ev();
extern void _ZN6S788C43v47Ev();
extern void _ZN6S788C43v48Ev();
extern void _ZN6S788C43v49Ev();
extern void _ZN6S788C43v50Ev();
extern void _ZN6S788C43v51Ev();
extern void _ZN6S788C43v52Ev();
extern void _ZN6S788C43v53Ev();
extern void _ZN6S788C43v54Ev();
extern void _ZN6S788C43v55Ev();
extern void _ZN6S788C43v56Ev();
extern void _ZN6S788C43v57Ev();
extern void _ZN6S788C43v58Ev();
extern void _ZN6S788C43v59Ev();
extern void _ZN6S788C43v60Ev();
extern void _ZN6S788C43v61Ev();
extern void _ZN6S788C43v62Ev();
extern void _ZN6S788C43v63Ev();
extern void _ZN6S788C43v64Ev();
extern void _ZN6S788C43v65Ev();
extern void _ZN6S788C43v66Ev();
extern void _ZN6S788C43v67Ev();
extern void _ZN6S788C43v68Ev();
extern void _ZN6S788C43v69Ev();
extern void _ZN6S788C43v70Ev();
extern void _ZN6S788C43v71Ev();
extern void _ZN6S788C43v72Ev();
extern void _ZN6S788C43v73Ev();
extern void _ZN6S788C43v74Ev();
extern void _ZN6S788C43v75Ev();
extern void _ZN6S788C43v76Ev();
extern void _ZN6S788C43v77Ev();
extern void _ZN6S788C43v78Ev();
extern void _ZN6S788C43v79Ev();
extern void _ZN6S788C43v80Ev();
extern void _ZN6S788C43v81Ev();
extern void _ZN6S788C43v82Ev();
extern void _ZN6S788C43v83Ev();
extern void _ZN6S788C43v84Ev();
extern void _ZN6S788C43v85Ev();
extern void _ZN6S788C43v86Ev();
extern void _ZN6S788C43v87Ev();
extern void _ZN6S788C43v88Ev();
extern void _ZN6S788C43v89Ev();
extern void _ZN6S788C43v90Ev();
extern void _ZN6S788C43v91Ev();
extern void _ZN6S788C43v92Ev();
extern void _ZN6S788C43v93Ev();
extern void _ZN6S788C43v94Ev();
extern void _ZN6S788C43v95Ev();
extern void _ZN6S788C43v96Ev();
extern void _ZN6S788C43v97Ev();
extern void _ZN6S788C43v98Ev();
extern void _ZN6S788C43v99Ev();
extern void _ZN6S788C44v100Ev();
extern void _ZN6S788C44v101Ev();
extern void _ZN6S788C44v102Ev();
extern void _ZN6S788C44v103Ev();
extern void _ZN6S788C44v104Ev();
extern void _ZN6S788C44v105Ev();
extern void _ZN6S788C44v106Ev();
extern void _ZN6S788C44v107Ev();
extern void _ZN6S788C44v108Ev();
extern void _ZN6S788C44v109Ev();
extern void _ZN6S788C44v110Ev();
extern void _ZN6S788C44v111Ev();
extern void _ZN6S788C44v112Ev();
extern void _ZN6S788C44v113Ev();
extern void _ZN6S788C44v114Ev();
extern void _ZN6S788C44v115Ev();
extern void _ZN6S788C44v116Ev();
extern void _ZN6S788C44v117Ev();
extern void _ZN6S788C44v118Ev();
extern void _ZN6S788C44v119Ev();
extern void _ZN6S788C44v120Ev();
extern void _ZN6S788C44v121Ev();
extern void _ZN6S788C44v122Ev();
extern void _ZN6S788C44v123Ev();
extern void _ZN6S788C44v124Ev();
extern void _ZN6S788C44v125Ev();
extern void _ZN6S788C44v126Ev();
extern void _ZN6S788C44v127Ev();
extern void _ZN6S788C44v128Ev();
extern void _ZN6S788C44v129Ev();
extern void _ZN6S788C44v130Ev();
extern void _ZN6S788C34v131Ev();
extern void _ZN6S788C34v132Ev();
extern void _ZN6S788C34v133Ev();
extern void _ZN6S788C34v134Ev();
extern void _ZN6S788C34v135Ev();
extern void _ZN6S788C34v136Ev();
extern void _ZN6S788C34v137Ev();
extern void _ZN6S788C34v138Ev();
extern void _ZN6S788C34v139Ev();
extern void _ZN6S788C34v140Ev();
extern void _ZN6S788C34v141Ev();
extern void _ZN6S788C34v142Ev();
extern void _ZN6S788C34v143Ev();
extern void _ZN6S788C34v144Ev();
extern void _ZN6S788C34v145Ev();
extern void _ZN6S788C34v146Ev();
extern void _ZN6S788C34v147Ev();
extern void _ZN6S788C34v148Ev();
extern void _ZN6S788C24v149Ev();
extern void _ZN6S788C12v1Ev();
extern void _ZN6S788C12v2Ev();
extern void _ZN6S788C12v3Ev();
extern void _ZN6S788C12v4Ev();
extern void _ZN6S788C12v5Ev();
extern void _ZN6S788C12v6Ev();
extern void _ZN6S788C12v7Ev();
extern void _ZN6S788C12v8Ev();
static  VTBL_ENTRY vtc_S788C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S788C1[0]),
  (VTBL_ENTRY)&_ZN6S788C1D1Ev,
  (VTBL_ENTRY)&_ZN6S788C1D0Ev,
  (VTBL_ENTRY)&_ZN6S788C42v9Ev,
  (VTBL_ENTRY)&_ZN6S788C43v10Ev,
  (VTBL_ENTRY)&_ZN6S788C43v11Ev,
  (VTBL_ENTRY)&_ZN6S788C43v12Ev,
  (VTBL_ENTRY)&_ZN6S788C43v13Ev,
  (VTBL_ENTRY)&_ZN6S788C43v14Ev,
  (VTBL_ENTRY)&_ZN6S788C43v15Ev,
  (VTBL_ENTRY)&_ZN6S788C43v16Ev,
  (VTBL_ENTRY)&_ZN6S788C43v17Ev,
  (VTBL_ENTRY)&_ZN6S788C43v18Ev,
  (VTBL_ENTRY)&_ZN6S788C43v19Ev,
  (VTBL_ENTRY)&_ZN6S788C43v20Ev,
  (VTBL_ENTRY)&_ZN6S788C43v21Ev,
  (VTBL_ENTRY)&_ZN6S788C43v22Ev,
  (VTBL_ENTRY)&_ZN6S788C43v23Ev,
  (VTBL_ENTRY)&_ZN6S788C43v24Ev,
  (VTBL_ENTRY)&_ZN6S788C43v25Ev,
  (VTBL_ENTRY)&_ZN6S788C43v26Ev,
  (VTBL_ENTRY)&_ZN6S788C43v27Ev,
  (VTBL_ENTRY)&_ZN6S788C43v28Ev,
  (VTBL_ENTRY)&_ZN6S788C43v29Ev,
  (VTBL_ENTRY)&_ZN6S788C43v30Ev,
  (VTBL_ENTRY)&_ZN6S788C43v31Ev,
  (VTBL_ENTRY)&_ZN6S788C43v32Ev,
  (VTBL_ENTRY)&_ZN6S788C43v33Ev,
  (VTBL_ENTRY)&_ZN6S788C43v34Ev,
  (VTBL_ENTRY)&_ZN6S788C43v35Ev,
  (VTBL_ENTRY)&_ZN6S788C43v36Ev,
  (VTBL_ENTRY)&_ZN6S788C43v37Ev,
  (VTBL_ENTRY)&_ZN6S788C43v38Ev,
  (VTBL_ENTRY)&_ZN6S788C43v39Ev,
  (VTBL_ENTRY)&_ZN6S788C43v40Ev,
  (VTBL_ENTRY)&_ZN6S788C43v41Ev,
  (VTBL_ENTRY)&_ZN6S788C43v42Ev,
  (VTBL_ENTRY)&_ZN6S788C43v43Ev,
  (VTBL_ENTRY)&_ZN6S788C43v44Ev,
  (VTBL_ENTRY)&_ZN6S788C43v45Ev,
  (VTBL_ENTRY)&_ZN6S788C43v46Ev,
  (VTBL_ENTRY)&_ZN6S788C43v47Ev,
  (VTBL_ENTRY)&_ZN6S788C43v48Ev,
  (VTBL_ENTRY)&_ZN6S788C43v49Ev,
  (VTBL_ENTRY)&_ZN6S788C43v50Ev,
  (VTBL_ENTRY)&_ZN6S788C43v51Ev,
  (VTBL_ENTRY)&_ZN6S788C43v52Ev,
  (VTBL_ENTRY)&_ZN6S788C43v53Ev,
  (VTBL_ENTRY)&_ZN6S788C43v54Ev,
  (VTBL_ENTRY)&_ZN6S788C43v55Ev,
  (VTBL_ENTRY)&_ZN6S788C43v56Ev,
  (VTBL_ENTRY)&_ZN6S788C43v57Ev,
  (VTBL_ENTRY)&_ZN6S788C43v58Ev,
  (VTBL_ENTRY)&_ZN6S788C43v59Ev,
  (VTBL_ENTRY)&_ZN6S788C43v60Ev,
  (VTBL_ENTRY)&_ZN6S788C43v61Ev,
  (VTBL_ENTRY)&_ZN6S788C43v62Ev,
  (VTBL_ENTRY)&_ZN6S788C43v63Ev,
  (VTBL_ENTRY)&_ZN6S788C43v64Ev,
  (VTBL_ENTRY)&_ZN6S788C43v65Ev,
  (VTBL_ENTRY)&_ZN6S788C43v66Ev,
  (VTBL_ENTRY)&_ZN6S788C43v67Ev,
  (VTBL_ENTRY)&_ZN6S788C43v68Ev,
  (VTBL_ENTRY)&_ZN6S788C43v69Ev,
  (VTBL_ENTRY)&_ZN6S788C43v70Ev,
  (VTBL_ENTRY)&_ZN6S788C43v71Ev,
  (VTBL_ENTRY)&_ZN6S788C43v72Ev,
  (VTBL_ENTRY)&_ZN6S788C43v73Ev,
  (VTBL_ENTRY)&_ZN6S788C43v74Ev,
  (VTBL_ENTRY)&_ZN6S788C43v75Ev,
  (VTBL_ENTRY)&_ZN6S788C43v76Ev,
  (VTBL_ENTRY)&_ZN6S788C43v77Ev,
  (VTBL_ENTRY)&_ZN6S788C43v78Ev,
  (VTBL_ENTRY)&_ZN6S788C43v79Ev,
  (VTBL_ENTRY)&_ZN6S788C43v80Ev,
  (VTBL_ENTRY)&_ZN6S788C43v81Ev,
  (VTBL_ENTRY)&_ZN6S788C43v82Ev,
  (VTBL_ENTRY)&_ZN6S788C43v83Ev,
  (VTBL_ENTRY)&_ZN6S788C43v84Ev,
  (VTBL_ENTRY)&_ZN6S788C43v85Ev,
  (VTBL_ENTRY)&_ZN6S788C43v86Ev,
  (VTBL_ENTRY)&_ZN6S788C43v87Ev,
  (VTBL_ENTRY)&_ZN6S788C43v88Ev,
  (VTBL_ENTRY)&_ZN6S788C43v89Ev,
  (VTBL_ENTRY)&_ZN6S788C43v90Ev,
  (VTBL_ENTRY)&_ZN6S788C43v91Ev,
  (VTBL_ENTRY)&_ZN6S788C43v92Ev,
  (VTBL_ENTRY)&_ZN6S788C43v93Ev,
  (VTBL_ENTRY)&_ZN6S788C43v94Ev,
  (VTBL_ENTRY)&_ZN6S788C43v95Ev,
  (VTBL_ENTRY)&_ZN6S788C43v96Ev,
  (VTBL_ENTRY)&_ZN6S788C43v97Ev,
  (VTBL_ENTRY)&_ZN6S788C43v98Ev,
  (VTBL_ENTRY)&_ZN6S788C43v99Ev,
  (VTBL_ENTRY)&_ZN6S788C44v100Ev,
  (VTBL_ENTRY)&_ZN6S788C44v101Ev,
  (VTBL_ENTRY)&_ZN6S788C44v102Ev,
  (VTBL_ENTRY)&_ZN6S788C44v103Ev,
  (VTBL_ENTRY)&_ZN6S788C44v104Ev,
  (VTBL_ENTRY)&_ZN6S788C44v105Ev,
  (VTBL_ENTRY)&_ZN6S788C44v106Ev,
  (VTBL_ENTRY)&_ZN6S788C44v107Ev,
  (VTBL_ENTRY)&_ZN6S788C44v108Ev,
  (VTBL_ENTRY)&_ZN6S788C44v109Ev,
  (VTBL_ENTRY)&_ZN6S788C44v110Ev,
  (VTBL_ENTRY)&_ZN6S788C44v111Ev,
  (VTBL_ENTRY)&_ZN6S788C44v112Ev,
  (VTBL_ENTRY)&_ZN6S788C44v113Ev,
  (VTBL_ENTRY)&_ZN6S788C44v114Ev,
  (VTBL_ENTRY)&_ZN6S788C44v115Ev,
  (VTBL_ENTRY)&_ZN6S788C44v116Ev,
  (VTBL_ENTRY)&_ZN6S788C44v117Ev,
  (VTBL_ENTRY)&_ZN6S788C44v118Ev,
  (VTBL_ENTRY)&_ZN6S788C44v119Ev,
  (VTBL_ENTRY)&_ZN6S788C44v120Ev,
  (VTBL_ENTRY)&_ZN6S788C44v121Ev,
  (VTBL_ENTRY)&_ZN6S788C44v122Ev,
  (VTBL_ENTRY)&_ZN6S788C44v123Ev,
  (VTBL_ENTRY)&_ZN6S788C44v124Ev,
  (VTBL_ENTRY)&_ZN6S788C44v125Ev,
  (VTBL_ENTRY)&_ZN6S788C44v126Ev,
  (VTBL_ENTRY)&_ZN6S788C44v127Ev,
  (VTBL_ENTRY)&_ZN6S788C44v128Ev,
  (VTBL_ENTRY)&_ZN6S788C44v129Ev,
  (VTBL_ENTRY)&_ZN6S788C44v130Ev,
  (VTBL_ENTRY)&_ZN6S788C34v131Ev,
  (VTBL_ENTRY)&_ZN6S788C34v132Ev,
  (VTBL_ENTRY)&_ZN6S788C34v133Ev,
  (VTBL_ENTRY)&_ZN6S788C34v134Ev,
  (VTBL_ENTRY)&_ZN6S788C34v135Ev,
  (VTBL_ENTRY)&_ZN6S788C34v136Ev,
  (VTBL_ENTRY)&_ZN6S788C34v137Ev,
  (VTBL_ENTRY)&_ZN6S788C34v138Ev,
  (VTBL_ENTRY)&_ZN6S788C34v139Ev,
  (VTBL_ENTRY)&_ZN6S788C34v140Ev,
  (VTBL_ENTRY)&_ZN6S788C34v141Ev,
  (VTBL_ENTRY)&_ZN6S788C34v142Ev,
  (VTBL_ENTRY)&_ZN6S788C34v143Ev,
  (VTBL_ENTRY)&_ZN6S788C34v144Ev,
  (VTBL_ENTRY)&_ZN6S788C34v145Ev,
  (VTBL_ENTRY)&_ZN6S788C34v146Ev,
  (VTBL_ENTRY)&_ZN6S788C34v147Ev,
  (VTBL_ENTRY)&_ZN6S788C34v148Ev,
  (VTBL_ENTRY)&_ZN6S788C24v149Ev,
  (VTBL_ENTRY)&_ZN6S788C12v1Ev,
  (VTBL_ENTRY)&_ZN6S788C12v2Ev,
  (VTBL_ENTRY)&_ZN6S788C12v3Ev,
  (VTBL_ENTRY)&_ZN6S788C12v4Ev,
  (VTBL_ENTRY)&_ZN6S788C12v5Ev,
  (VTBL_ENTRY)&_ZN6S788C12v6Ev,
  (VTBL_ENTRY)&_ZN6S788C12v7Ev,
  (VTBL_ENTRY)&_ZN6S788C12v8Ev,
};
extern VTBL_ENTRY _ZTI6S788C1[];
extern  VTBL_ENTRY _ZTV6S788C1[];
Class_Descriptor cd_S788C1 = {  "S788C1", // class name
  bases_S788C1, 4,
  &(vtc_S788C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S788C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S788C1),153, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1770C3  : S785C5_nt {
  virtual void  v10(); // _ZN7S1770C33v10Ev
  virtual void  v11(); // _ZN7S1770C33v11Ev
  virtual void  v12(); // _ZN7S1770C33v12Ev
  virtual void  v13(); // _ZN7S1770C33v13Ev
  virtual void  v14(); // _ZN7S1770C33v14Ev
  virtual void  v15(); // _ZN7S1770C33v15Ev
  virtual void  v16(); // _ZN7S1770C33v16Ev
  virtual void  v17(); // _ZN7S1770C33v17Ev
  virtual void  v18(); // _ZN7S1770C33v18Ev
  virtual void  v19(); // _ZN7S1770C33v19Ev
  virtual void  v20(); // _ZN7S1770C33v20Ev
  virtual void  v21(); // _ZN7S1770C33v21Ev
  virtual void  v22(); // _ZN7S1770C33v22Ev
  virtual void  v23(); // _ZN7S1770C33v23Ev
  virtual void  v24(); // _ZN7S1770C33v24Ev
  virtual void  v25(); // _ZN7S1770C33v25Ev
  virtual void  v26(); // _ZN7S1770C33v26Ev
  virtual void  v27(); // _ZN7S1770C33v27Ev
  virtual void  v28(); // _ZN7S1770C33v28Ev
  virtual void  v29(); // _ZN7S1770C33v29Ev
  virtual void  v30(); // _ZN7S1770C33v30Ev
  virtual void  v31(); // _ZN7S1770C33v31Ev
  virtual void  v32(); // _ZN7S1770C33v32Ev
  virtual void  v33(); // _ZN7S1770C33v33Ev
  virtual void  v34(); // _ZN7S1770C33v34Ev
  virtual void  v35(); // _ZN7S1770C33v35Ev
  virtual void  v36(); // _ZN7S1770C33v36Ev
  virtual void  v37(); // _ZN7S1770C33v37Ev
  virtual void  v38(); // _ZN7S1770C33v38Ev
  virtual void  v39(); // _ZN7S1770C33v39Ev
  virtual void  v40(); // _ZN7S1770C33v40Ev
  virtual void  v41(); // _ZN7S1770C33v41Ev
  virtual void  v42(); // _ZN7S1770C33v42Ev
  virtual void  v43(); // _ZN7S1770C33v43Ev
  virtual void  v44(); // _ZN7S1770C33v44Ev
  virtual void  v45(); // _ZN7S1770C33v45Ev
  virtual void  v46(); // _ZN7S1770C33v46Ev
  virtual void  v47(); // _ZN7S1770C33v47Ev
  virtual void  v48(); // _ZN7S1770C33v48Ev
  virtual void  v49(); // _ZN7S1770C33v49Ev
  virtual void  v50(); // _ZN7S1770C33v50Ev
  virtual void  v51(); // _ZN7S1770C33v51Ev
  virtual void  v52(); // _ZN7S1770C33v52Ev
  virtual void  v53(); // _ZN7S1770C33v53Ev
  virtual void  v54(); // _ZN7S1770C33v54Ev
  virtual void  v55(); // _ZN7S1770C33v55Ev
  virtual void  v56(); // _ZN7S1770C33v56Ev
  virtual void  v57(); // _ZN7S1770C33v57Ev
  virtual void  v58(); // _ZN7S1770C33v58Ev
  virtual void  v59(); // _ZN7S1770C33v59Ev
  virtual void  v60(); // _ZN7S1770C33v60Ev
  virtual void  v61(); // _ZN7S1770C33v61Ev
  virtual void  v62(); // _ZN7S1770C33v62Ev
  virtual void  v63(); // _ZN7S1770C33v63Ev
  virtual void  v64(); // _ZN7S1770C33v64Ev
  virtual void  v65(); // _ZN7S1770C33v65Ev
  virtual void  v66(); // _ZN7S1770C33v66Ev
  virtual void  v67(); // _ZN7S1770C33v67Ev
  virtual void  v68(); // _ZN7S1770C33v68Ev
  virtual void  v69(); // _ZN7S1770C33v69Ev
  virtual void  v70(); // _ZN7S1770C33v70Ev
  virtual void  v71(); // _ZN7S1770C33v71Ev
  virtual void  v72(); // _ZN7S1770C33v72Ev
  virtual void  v73(); // _ZN7S1770C33v73Ev
  virtual void  v74(); // _ZN7S1770C33v74Ev
  virtual void  v75(); // _ZN7S1770C33v75Ev
  virtual void  v76(); // _ZN7S1770C33v76Ev
  virtual void  v77(); // _ZN7S1770C33v77Ev
  virtual void  v78(); // _ZN7S1770C33v78Ev
  virtual void  v79(); // _ZN7S1770C33v79Ev
  virtual void  v80(); // _ZN7S1770C33v80Ev
  virtual void  v81(); // _ZN7S1770C33v81Ev
  virtual void  v82(); // _ZN7S1770C33v82Ev
  virtual void  v83(); // _ZN7S1770C33v83Ev
  virtual void  v84(); // _ZN7S1770C33v84Ev
  virtual void  v85(); // _ZN7S1770C33v85Ev
  virtual void  v86(); // _ZN7S1770C33v86Ev
  virtual void  v87(); // _ZN7S1770C33v87Ev
  virtual void  v88(); // _ZN7S1770C33v88Ev
  virtual void  v89(); // _ZN7S1770C33v89Ev
  virtual void  v90(); // _ZN7S1770C33v90Ev
  virtual void  v91(); // _ZN7S1770C33v91Ev
  virtual void  v92(); // _ZN7S1770C33v92Ev
  virtual void  v93(); // _ZN7S1770C33v93Ev
  virtual void  v94(); // _ZN7S1770C33v94Ev
  virtual void  v95(); // _ZN7S1770C33v95Ev
  virtual void  v96(); // _ZN7S1770C33v96Ev
  virtual void  v97(); // _ZN7S1770C33v97Ev
  virtual void  v98(); // _ZN7S1770C33v98Ev
  virtual void  v99(); // _ZN7S1770C33v99Ev
  virtual void  v100(); // _ZN7S1770C34v100Ev
  virtual void  v101(); // _ZN7S1770C34v101Ev
  virtual void  v102(); // _ZN7S1770C34v102Ev
  virtual void  v103(); // _ZN7S1770C34v103Ev
  virtual void  v104(); // _ZN7S1770C34v104Ev
  virtual void  v105(); // _ZN7S1770C34v105Ev
  virtual void  v106(); // _ZN7S1770C34v106Ev
  virtual void  v107(); // _ZN7S1770C34v107Ev
  virtual void  v108(); // _ZN7S1770C34v108Ev
  virtual void  v109(); // _ZN7S1770C34v109Ev
  virtual void  v110(); // _ZN7S1770C34v110Ev
  virtual void  v111(); // _ZN7S1770C34v111Ev
  virtual void  v112(); // _ZN7S1770C34v112Ev
  virtual void  v113(); // _ZN7S1770C34v113Ev
  virtual void  v114(); // _ZN7S1770C34v114Ev
  virtual void  v115(); // _ZN7S1770C34v115Ev
  virtual void  v116(); // _ZN7S1770C34v116Ev
  virtual void  v117(); // _ZN7S1770C34v117Ev
  virtual void  v118(); // _ZN7S1770C34v118Ev
  virtual void  v119(); // _ZN7S1770C34v119Ev
  virtual void  v120(); // _ZN7S1770C34v120Ev
  virtual void  v121(); // _ZN7S1770C34v121Ev
  virtual void  v122(); // _ZN7S1770C34v122Ev
  virtual void  v123(); // _ZN7S1770C34v123Ev
  virtual void  v124(); // _ZN7S1770C34v124Ev
  virtual void  v125(); // _ZN7S1770C34v125Ev
  virtual void  v126(); // _ZN7S1770C34v126Ev
  virtual void  v127(); // _ZN7S1770C34v127Ev
  virtual void  v128(); // _ZN7S1770C34v128Ev
  virtual void  v129(); // _ZN7S1770C34v129Ev
  virtual void  v130(); // _ZN7S1770C34v130Ev
  virtual void  v131(); // _ZN7S1770C34v131Ev
  ~S1770C3(); // tgen
  S1770C3(); // tgen
};
//SIG(-1 S1770C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1770C3 ::v10(){vfunc_called(this, "_ZN7S1770C33v10Ev");}
void  S1770C3 ::v11(){vfunc_called(this, "_ZN7S1770C33v11Ev");}
void  S1770C3 ::v12(){vfunc_called(this, "_ZN7S1770C33v12Ev");}
void  S1770C3 ::v13(){vfunc_called(this, "_ZN7S1770C33v13Ev");}
void  S1770C3 ::v14(){vfunc_called(this, "_ZN7S1770C33v14Ev");}
void  S1770C3 ::v15(){vfunc_called(this, "_ZN7S1770C33v15Ev");}
void  S1770C3 ::v16(){vfunc_called(this, "_ZN7S1770C33v16Ev");}
void  S1770C3 ::v17(){vfunc_called(this, "_ZN7S1770C33v17Ev");}
void  S1770C3 ::v18(){vfunc_called(this, "_ZN7S1770C33v18Ev");}
void  S1770C3 ::v19(){vfunc_called(this, "_ZN7S1770C33v19Ev");}
void  S1770C3 ::v20(){vfunc_called(this, "_ZN7S1770C33v20Ev");}
void  S1770C3 ::v21(){vfunc_called(this, "_ZN7S1770C33v21Ev");}
void  S1770C3 ::v22(){vfunc_called(this, "_ZN7S1770C33v22Ev");}
void  S1770C3 ::v23(){vfunc_called(this, "_ZN7S1770C33v23Ev");}
void  S1770C3 ::v24(){vfunc_called(this, "_ZN7S1770C33v24Ev");}
void  S1770C3 ::v25(){vfunc_called(this, "_ZN7S1770C33v25Ev");}
void  S1770C3 ::v26(){vfunc_called(this, "_ZN7S1770C33v26Ev");}
void  S1770C3 ::v27(){vfunc_called(this, "_ZN7S1770C33v27Ev");}
void  S1770C3 ::v28(){vfunc_called(this, "_ZN7S1770C33v28Ev");}
void  S1770C3 ::v29(){vfunc_called(this, "_ZN7S1770C33v29Ev");}
void  S1770C3 ::v30(){vfunc_called(this, "_ZN7S1770C33v30Ev");}
void  S1770C3 ::v31(){vfunc_called(this, "_ZN7S1770C33v31Ev");}
void  S1770C3 ::v32(){vfunc_called(this, "_ZN7S1770C33v32Ev");}
void  S1770C3 ::v33(){vfunc_called(this, "_ZN7S1770C33v33Ev");}
void  S1770C3 ::v34(){vfunc_called(this, "_ZN7S1770C33v34Ev");}
void  S1770C3 ::v35(){vfunc_called(this, "_ZN7S1770C33v35Ev");}
void  S1770C3 ::v36(){vfunc_called(this, "_ZN7S1770C33v36Ev");}
void  S1770C3 ::v37(){vfunc_called(this, "_ZN7S1770C33v37Ev");}
void  S1770C3 ::v38(){vfunc_called(this, "_ZN7S1770C33v38Ev");}
void  S1770C3 ::v39(){vfunc_called(this, "_ZN7S1770C33v39Ev");}
void  S1770C3 ::v40(){vfunc_called(this, "_ZN7S1770C33v40Ev");}
void  S1770C3 ::v41(){vfunc_called(this, "_ZN7S1770C33v41Ev");}
void  S1770C3 ::v42(){vfunc_called(this, "_ZN7S1770C33v42Ev");}
void  S1770C3 ::v43(){vfunc_called(this, "_ZN7S1770C33v43Ev");}
void  S1770C3 ::v44(){vfunc_called(this, "_ZN7S1770C33v44Ev");}
void  S1770C3 ::v45(){vfunc_called(this, "_ZN7S1770C33v45Ev");}
void  S1770C3 ::v46(){vfunc_called(this, "_ZN7S1770C33v46Ev");}
void  S1770C3 ::v47(){vfunc_called(this, "_ZN7S1770C33v47Ev");}
void  S1770C3 ::v48(){vfunc_called(this, "_ZN7S1770C33v48Ev");}
void  S1770C3 ::v49(){vfunc_called(this, "_ZN7S1770C33v49Ev");}
void  S1770C3 ::v50(){vfunc_called(this, "_ZN7S1770C33v50Ev");}
void  S1770C3 ::v51(){vfunc_called(this, "_ZN7S1770C33v51Ev");}
void  S1770C3 ::v52(){vfunc_called(this, "_ZN7S1770C33v52Ev");}
void  S1770C3 ::v53(){vfunc_called(this, "_ZN7S1770C33v53Ev");}
void  S1770C3 ::v54(){vfunc_called(this, "_ZN7S1770C33v54Ev");}
void  S1770C3 ::v55(){vfunc_called(this, "_ZN7S1770C33v55Ev");}
void  S1770C3 ::v56(){vfunc_called(this, "_ZN7S1770C33v56Ev");}
void  S1770C3 ::v57(){vfunc_called(this, "_ZN7S1770C33v57Ev");}
void  S1770C3 ::v58(){vfunc_called(this, "_ZN7S1770C33v58Ev");}
void  S1770C3 ::v59(){vfunc_called(this, "_ZN7S1770C33v59Ev");}
void  S1770C3 ::v60(){vfunc_called(this, "_ZN7S1770C33v60Ev");}
void  S1770C3 ::v61(){vfunc_called(this, "_ZN7S1770C33v61Ev");}
void  S1770C3 ::v62(){vfunc_called(this, "_ZN7S1770C33v62Ev");}
void  S1770C3 ::v63(){vfunc_called(this, "_ZN7S1770C33v63Ev");}
void  S1770C3 ::v64(){vfunc_called(this, "_ZN7S1770C33v64Ev");}
void  S1770C3 ::v65(){vfunc_called(this, "_ZN7S1770C33v65Ev");}
void  S1770C3 ::v66(){vfunc_called(this, "_ZN7S1770C33v66Ev");}
void  S1770C3 ::v67(){vfunc_called(this, "_ZN7S1770C33v67Ev");}
void  S1770C3 ::v68(){vfunc_called(this, "_ZN7S1770C33v68Ev");}
void  S1770C3 ::v69(){vfunc_called(this, "_ZN7S1770C33v69Ev");}
void  S1770C3 ::v70(){vfunc_called(this, "_ZN7S1770C33v70Ev");}
void  S1770C3 ::v71(){vfunc_called(this, "_ZN7S1770C33v71Ev");}
void  S1770C3 ::v72(){vfunc_called(this, "_ZN7S1770C33v72Ev");}
void  S1770C3 ::v73(){vfunc_called(this, "_ZN7S1770C33v73Ev");}
void  S1770C3 ::v74(){vfunc_called(this, "_ZN7S1770C33v74Ev");}
void  S1770C3 ::v75(){vfunc_called(this, "_ZN7S1770C33v75Ev");}
void  S1770C3 ::v76(){vfunc_called(this, "_ZN7S1770C33v76Ev");}
void  S1770C3 ::v77(){vfunc_called(this, "_ZN7S1770C33v77Ev");}
void  S1770C3 ::v78(){vfunc_called(this, "_ZN7S1770C33v78Ev");}
void  S1770C3 ::v79(){vfunc_called(this, "_ZN7S1770C33v79Ev");}
void  S1770C3 ::v80(){vfunc_called(this, "_ZN7S1770C33v80Ev");}
void  S1770C3 ::v81(){vfunc_called(this, "_ZN7S1770C33v81Ev");}
void  S1770C3 ::v82(){vfunc_called(this, "_ZN7S1770C33v82Ev");}
void  S1770C3 ::v83(){vfunc_called(this, "_ZN7S1770C33v83Ev");}
void  S1770C3 ::v84(){vfunc_called(this, "_ZN7S1770C33v84Ev");}
void  S1770C3 ::v85(){vfunc_called(this, "_ZN7S1770C33v85Ev");}
void  S1770C3 ::v86(){vfunc_called(this, "_ZN7S1770C33v86Ev");}
void  S1770C3 ::v87(){vfunc_called(this, "_ZN7S1770C33v87Ev");}
void  S1770C3 ::v88(){vfunc_called(this, "_ZN7S1770C33v88Ev");}
void  S1770C3 ::v89(){vfunc_called(this, "_ZN7S1770C33v89Ev");}
void  S1770C3 ::v90(){vfunc_called(this, "_ZN7S1770C33v90Ev");}
void  S1770C3 ::v91(){vfunc_called(this, "_ZN7S1770C33v91Ev");}
void  S1770C3 ::v92(){vfunc_called(this, "_ZN7S1770C33v92Ev");}
void  S1770C3 ::v93(){vfunc_called(this, "_ZN7S1770C33v93Ev");}
void  S1770C3 ::v94(){vfunc_called(this, "_ZN7S1770C33v94Ev");}
void  S1770C3 ::v95(){vfunc_called(this, "_ZN7S1770C33v95Ev");}
void  S1770C3 ::v96(){vfunc_called(this, "_ZN7S1770C33v96Ev");}
void  S1770C3 ::v97(){vfunc_called(this, "_ZN7S1770C33v97Ev");}
void  S1770C3 ::v98(){vfunc_called(this, "_ZN7S1770C33v98Ev");}
void  S1770C3 ::v99(){vfunc_called(this, "_ZN7S1770C33v99Ev");}
void  S1770C3 ::v100(){vfunc_called(this, "_ZN7S1770C34v100Ev");}
void  S1770C3 ::v101(){vfunc_called(this, "_ZN7S1770C34v101Ev");}
void  S1770C3 ::v102(){vfunc_called(this, "_ZN7S1770C34v102Ev");}
void  S1770C3 ::v103(){vfunc_called(this, "_ZN7S1770C34v103Ev");}
void  S1770C3 ::v104(){vfunc_called(this, "_ZN7S1770C34v104Ev");}
void  S1770C3 ::v105(){vfunc_called(this, "_ZN7S1770C34v105Ev");}
void  S1770C3 ::v106(){vfunc_called(this, "_ZN7S1770C34v106Ev");}
void  S1770C3 ::v107(){vfunc_called(this, "_ZN7S1770C34v107Ev");}
void  S1770C3 ::v108(){vfunc_called(this, "_ZN7S1770C34v108Ev");}
void  S1770C3 ::v109(){vfunc_called(this, "_ZN7S1770C34v109Ev");}
void  S1770C3 ::v110(){vfunc_called(this, "_ZN7S1770C34v110Ev");}
void  S1770C3 ::v111(){vfunc_called(this, "_ZN7S1770C34v111Ev");}
void  S1770C3 ::v112(){vfunc_called(this, "_ZN7S1770C34v112Ev");}
void  S1770C3 ::v113(){vfunc_called(this, "_ZN7S1770C34v113Ev");}
void  S1770C3 ::v114(){vfunc_called(this, "_ZN7S1770C34v114Ev");}
void  S1770C3 ::v115(){vfunc_called(this, "_ZN7S1770C34v115Ev");}
void  S1770C3 ::v116(){vfunc_called(this, "_ZN7S1770C34v116Ev");}
void  S1770C3 ::v117(){vfunc_called(this, "_ZN7S1770C34v117Ev");}
void  S1770C3 ::v118(){vfunc_called(this, "_ZN7S1770C34v118Ev");}
void  S1770C3 ::v119(){vfunc_called(this, "_ZN7S1770C34v119Ev");}
void  S1770C3 ::v120(){vfunc_called(this, "_ZN7S1770C34v120Ev");}
void  S1770C3 ::v121(){vfunc_called(this, "_ZN7S1770C34v121Ev");}
void  S1770C3 ::v122(){vfunc_called(this, "_ZN7S1770C34v122Ev");}
void  S1770C3 ::v123(){vfunc_called(this, "_ZN7S1770C34v123Ev");}
void  S1770C3 ::v124(){vfunc_called(this, "_ZN7S1770C34v124Ev");}
void  S1770C3 ::v125(){vfunc_called(this, "_ZN7S1770C34v125Ev");}
void  S1770C3 ::v126(){vfunc_called(this, "_ZN7S1770C34v126Ev");}
void  S1770C3 ::v127(){vfunc_called(this, "_ZN7S1770C34v127Ev");}
void  S1770C3 ::v128(){vfunc_called(this, "_ZN7S1770C34v128Ev");}
void  S1770C3 ::v129(){vfunc_called(this, "_ZN7S1770C34v129Ev");}
void  S1770C3 ::v130(){vfunc_called(this, "_ZN7S1770C34v130Ev");}
void  S1770C3 ::v131(){vfunc_called(this, "_ZN7S1770C34v131Ev");}
S1770C3 ::~S1770C3(){ note_dtor("S1770C3", this);} // tgen
S1770C3 ::S1770C3(){ note_ctor("S1770C3", this);} // tgen

static void Test_S1770C3()
{
  extern Class_Descriptor cd_S1770C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1770C3, buf);
    S1770C3 *dp, &lv = *(dp=new (buf) S1770C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1770C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1770C3)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S1770C3");
    test_class_info(&lv, &cd_S1770C3);
    dp->~S1770C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1770C3(Test_S1770C3, "S1770C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1770C3C1Ev();
extern void _ZN7S1770C3D1Ev();
Name_Map name_map_S1770C3[] = {
  NSPAIR(_ZN7S1770C3C1Ev),
  NSPAIR(_ZN7S1770C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S1770C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1770C3[];
extern void _ZN7S1770C3D1Ev();
extern void _ZN7S1770C3D0Ev();
extern void _ZN7S1770C33v10Ev();
extern void _ZN7S1770C33v11Ev();
extern void _ZN7S1770C33v12Ev();
extern void _ZN7S1770C33v13Ev();
extern void _ZN7S1770C33v14Ev();
extern void _ZN7S1770C33v15Ev();
extern void _ZN7S1770C33v16Ev();
extern void _ZN7S1770C33v17Ev();
extern void _ZN7S1770C33v18Ev();
extern void _ZN7S1770C33v19Ev();
extern void _ZN7S1770C33v20Ev();
extern void _ZN7S1770C33v21Ev();
extern void _ZN7S1770C33v22Ev();
extern void _ZN7S1770C33v23Ev();
extern void _ZN7S1770C33v24Ev();
extern void _ZN7S1770C33v25Ev();
extern void _ZN7S1770C33v26Ev();
extern void _ZN7S1770C33v27Ev();
extern void _ZN7S1770C33v28Ev();
extern void _ZN7S1770C33v29Ev();
extern void _ZN7S1770C33v30Ev();
extern void _ZN7S1770C33v31Ev();
extern void _ZN7S1770C33v32Ev();
extern void _ZN7S1770C33v33Ev();
extern void _ZN7S1770C33v34Ev();
extern void _ZN7S1770C33v35Ev();
extern void _ZN7S1770C33v36Ev();
extern void _ZN7S1770C33v37Ev();
extern void _ZN7S1770C33v38Ev();
extern void _ZN7S1770C33v39Ev();
extern void _ZN7S1770C33v40Ev();
extern void _ZN7S1770C33v41Ev();
extern void _ZN7S1770C33v42Ev();
extern void _ZN7S1770C33v43Ev();
extern void _ZN7S1770C33v44Ev();
extern void _ZN7S1770C33v45Ev();
extern void _ZN7S1770C33v46Ev();
extern void _ZN7S1770C33v47Ev();
extern void _ZN7S1770C33v48Ev();
extern void _ZN7S1770C33v49Ev();
extern void _ZN7S1770C33v50Ev();
extern void _ZN7S1770C33v51Ev();
extern void _ZN7S1770C33v52Ev();
extern void _ZN7S1770C33v53Ev();
extern void _ZN7S1770C33v54Ev();
extern void _ZN7S1770C33v55Ev();
extern void _ZN7S1770C33v56Ev();
extern void _ZN7S1770C33v57Ev();
extern void _ZN7S1770C33v58Ev();
extern void _ZN7S1770C33v59Ev();
extern void _ZN7S1770C33v60Ev();
extern void _ZN7S1770C33v61Ev();
extern void _ZN7S1770C33v62Ev();
extern void _ZN7S1770C33v63Ev();
extern void _ZN7S1770C33v64Ev();
extern void _ZN7S1770C33v65Ev();
extern void _ZN7S1770C33v66Ev();
extern void _ZN7S1770C33v67Ev();
extern void _ZN7S1770C33v68Ev();
extern void _ZN7S1770C33v69Ev();
extern void _ZN7S1770C33v70Ev();
extern void _ZN7S1770C33v71Ev();
extern void _ZN7S1770C33v72Ev();
extern void _ZN7S1770C33v73Ev();
extern void _ZN7S1770C33v74Ev();
extern void _ZN7S1770C33v75Ev();
extern void _ZN7S1770C33v76Ev();
extern void _ZN7S1770C33v77Ev();
extern void _ZN7S1770C33v78Ev();
extern void _ZN7S1770C33v79Ev();
extern void _ZN7S1770C33v80Ev();
extern void _ZN7S1770C33v81Ev();
extern void _ZN7S1770C33v82Ev();
extern void _ZN7S1770C33v83Ev();
extern void _ZN7S1770C33v84Ev();
extern void _ZN7S1770C33v85Ev();
extern void _ZN7S1770C33v86Ev();
extern void _ZN7S1770C33v87Ev();
extern void _ZN7S1770C33v88Ev();
extern void _ZN7S1770C33v89Ev();
extern void _ZN7S1770C33v90Ev();
extern void _ZN7S1770C33v91Ev();
extern void _ZN7S1770C33v92Ev();
extern void _ZN7S1770C33v93Ev();
extern void _ZN7S1770C33v94Ev();
extern void _ZN7S1770C33v95Ev();
extern void _ZN7S1770C33v96Ev();
extern void _ZN7S1770C33v97Ev();
extern void _ZN7S1770C33v98Ev();
extern void _ZN7S1770C33v99Ev();
extern void _ZN7S1770C34v100Ev();
extern void _ZN7S1770C34v101Ev();
extern void _ZN7S1770C34v102Ev();
extern void _ZN7S1770C34v103Ev();
extern void _ZN7S1770C34v104Ev();
extern void _ZN7S1770C34v105Ev();
extern void _ZN7S1770C34v106Ev();
extern void _ZN7S1770C34v107Ev();
extern void _ZN7S1770C34v108Ev();
extern void _ZN7S1770C34v109Ev();
extern void _ZN7S1770C34v110Ev();
extern void _ZN7S1770C34v111Ev();
extern void _ZN7S1770C34v112Ev();
extern void _ZN7S1770C34v113Ev();
extern void _ZN7S1770C34v114Ev();
extern void _ZN7S1770C34v115Ev();
extern void _ZN7S1770C34v116Ev();
extern void _ZN7S1770C34v117Ev();
extern void _ZN7S1770C34v118Ev();
extern void _ZN7S1770C34v119Ev();
extern void _ZN7S1770C34v120Ev();
extern void _ZN7S1770C34v121Ev();
extern void _ZN7S1770C34v122Ev();
extern void _ZN7S1770C34v123Ev();
extern void _ZN7S1770C34v124Ev();
extern void _ZN7S1770C34v125Ev();
extern void _ZN7S1770C34v126Ev();
extern void _ZN7S1770C34v127Ev();
extern void _ZN7S1770C34v128Ev();
extern void _ZN7S1770C34v129Ev();
extern void _ZN7S1770C34v130Ev();
extern void _ZN7S1770C34v131Ev();
static  VTBL_ENTRY vtc_S1770C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1770C3[0]),
  (VTBL_ENTRY)&_ZN7S1770C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1770C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v131Ev,
};
extern VTBL_ENTRY _ZTI7S1770C3[];
extern  VTBL_ENTRY _ZTV7S1770C3[];
Class_Descriptor cd_S1770C3 = {  "S1770C3", // class name
  bases_S1770C3, 1,
  &(vtc_S1770C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1770C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1770C3),126, //virtual function table var
  2, // 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  S1770C2  : S1770C3 {
  virtual void  v132(); // _ZN7S1770C24v132Ev
  virtual void  v133(); // _ZN7S1770C24v133Ev
  virtual void  v134(); // _ZN7S1770C24v134Ev
  virtual void  v135(); // _ZN7S1770C24v135Ev
  virtual void  v136(); // _ZN7S1770C24v136Ev
  virtual void  v137(); // _ZN7S1770C24v137Ev
  virtual void  v138(); // _ZN7S1770C24v138Ev
  virtual void  v139(); // _ZN7S1770C24v139Ev
  virtual void  v140(); // _ZN7S1770C24v140Ev
  virtual void  v141(); // _ZN7S1770C24v141Ev
  virtual void  v142(); // _ZN7S1770C24v142Ev
  virtual void  v143(); // _ZN7S1770C24v143Ev
  virtual void  v144(); // _ZN7S1770C24v144Ev
  virtual void  v145(); // _ZN7S1770C24v145Ev
  virtual void  v146(); // _ZN7S1770C24v146Ev
  virtual void  v147(); // _ZN7S1770C24v147Ev
  virtual void  v148(); // _ZN7S1770C24v148Ev
  virtual void  v149(); // _ZN7S1770C24v149Ev
  ~S1770C2(); // tgen
  S1770C2(); // tgen
};
//SIG(-1 S1770C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S1770C2 ::v132(){vfunc_called(this, "_ZN7S1770C24v132Ev");}
void  S1770C2 ::v133(){vfunc_called(this, "_ZN7S1770C24v133Ev");}
void  S1770C2 ::v134(){vfunc_called(this, "_ZN7S1770C24v134Ev");}
void  S1770C2 ::v135(){vfunc_called(this, "_ZN7S1770C24v135Ev");}
void  S1770C2 ::v136(){vfunc_called(this, "_ZN7S1770C24v136Ev");}
void  S1770C2 ::v137(){vfunc_called(this, "_ZN7S1770C24v137Ev");}
void  S1770C2 ::v138(){vfunc_called(this, "_ZN7S1770C24v138Ev");}
void  S1770C2 ::v139(){vfunc_called(this, "_ZN7S1770C24v139Ev");}
void  S1770C2 ::v140(){vfunc_called(this, "_ZN7S1770C24v140Ev");}
void  S1770C2 ::v141(){vfunc_called(this, "_ZN7S1770C24v141Ev");}
void  S1770C2 ::v142(){vfunc_called(this, "_ZN7S1770C24v142Ev");}
void  S1770C2 ::v143(){vfunc_called(this, "_ZN7S1770C24v143Ev");}
void  S1770C2 ::v144(){vfunc_called(this, "_ZN7S1770C24v144Ev");}
void  S1770C2 ::v145(){vfunc_called(this, "_ZN7S1770C24v145Ev");}
void  S1770C2 ::v146(){vfunc_called(this, "_ZN7S1770C24v146Ev");}
void  S1770C2 ::v147(){vfunc_called(this, "_ZN7S1770C24v147Ev");}
void  S1770C2 ::v148(){vfunc_called(this, "_ZN7S1770C24v148Ev");}
void  S1770C2 ::v149(){vfunc_called(this, "_ZN7S1770C24v149Ev");}
S1770C2 ::~S1770C2(){ note_dtor("S1770C2", this);} // tgen
S1770C2 ::S1770C2(){ note_ctor("S1770C2", this);} // tgen

static void Test_S1770C2()
{
  extern Class_Descriptor cd_S1770C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1770C2, buf);
    S1770C2 *dp, &lv = *(dp=new (buf) S1770C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1770C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1770C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S1770C3*), 0, "S1770C2");
    check_base_class_offset(lv, (S1770C3*), 0, "S1770C2");
    test_class_info(&lv, &cd_S1770C2);
    dp->~S1770C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1770C2(Test_S1770C2, "S1770C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1770C2C1Ev();
extern void _ZN7S1770C2D1Ev();
Name_Map name_map_S1770C2[] = {
  NSPAIR(_ZN7S1770C2C1Ev),
  NSPAIR(_ZN7S1770C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1770C3;
extern VTBL_ENTRY _ZTI7S1770C3[];
extern  VTBL_ENTRY _ZTV7S1770C3[];
static Base_Class bases_S1770C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1770C2[];
extern void _ZN7S1770C2D1Ev();
extern void _ZN7S1770C2D0Ev();
extern void _ZN7S1770C33v10Ev();
extern void _ZN7S1770C33v11Ev();
extern void _ZN7S1770C33v12Ev();
extern void _ZN7S1770C33v13Ev();
extern void _ZN7S1770C33v14Ev();
extern void _ZN7S1770C33v15Ev();
extern void _ZN7S1770C33v16Ev();
extern void _ZN7S1770C33v17Ev();
extern void _ZN7S1770C33v18Ev();
extern void _ZN7S1770C33v19Ev();
extern void _ZN7S1770C33v20Ev();
extern void _ZN7S1770C33v21Ev();
extern void _ZN7S1770C33v22Ev();
extern void _ZN7S1770C33v23Ev();
extern void _ZN7S1770C33v24Ev();
extern void _ZN7S1770C33v25Ev();
extern void _ZN7S1770C33v26Ev();
extern void _ZN7S1770C33v27Ev();
extern void _ZN7S1770C33v28Ev();
extern void _ZN7S1770C33v29Ev();
extern void _ZN7S1770C33v30Ev();
extern void _ZN7S1770C33v31Ev();
extern void _ZN7S1770C33v32Ev();
extern void _ZN7S1770C33v33Ev();
extern void _ZN7S1770C33v34Ev();
extern void _ZN7S1770C33v35Ev();
extern void _ZN7S1770C33v36Ev();
extern void _ZN7S1770C33v37Ev();
extern void _ZN7S1770C33v38Ev();
extern void _ZN7S1770C33v39Ev();
extern void _ZN7S1770C33v40Ev();
extern void _ZN7S1770C33v41Ev();
extern void _ZN7S1770C33v42Ev();
extern void _ZN7S1770C33v43Ev();
extern void _ZN7S1770C33v44Ev();
extern void _ZN7S1770C33v45Ev();
extern void _ZN7S1770C33v46Ev();
extern void _ZN7S1770C33v47Ev();
extern void _ZN7S1770C33v48Ev();
extern void _ZN7S1770C33v49Ev();
extern void _ZN7S1770C33v50Ev();
extern void _ZN7S1770C33v51Ev();
extern void _ZN7S1770C33v52Ev();
extern void _ZN7S1770C33v53Ev();
extern void _ZN7S1770C33v54Ev();
extern void _ZN7S1770C33v55Ev();
extern void _ZN7S1770C33v56Ev();
extern void _ZN7S1770C33v57Ev();
extern void _ZN7S1770C33v58Ev();
extern void _ZN7S1770C33v59Ev();
extern void _ZN7S1770C33v60Ev();
extern void _ZN7S1770C33v61Ev();
extern void _ZN7S1770C33v62Ev();
extern void _ZN7S1770C33v63Ev();
extern void _ZN7S1770C33v64Ev();
extern void _ZN7S1770C33v65Ev();
extern void _ZN7S1770C33v66Ev();
extern void _ZN7S1770C33v67Ev();
extern void _ZN7S1770C33v68Ev();
extern void _ZN7S1770C33v69Ev();
extern void _ZN7S1770C33v70Ev();
extern void _ZN7S1770C33v71Ev();
extern void _ZN7S1770C33v72Ev();
extern void _ZN7S1770C33v73Ev();
extern void _ZN7S1770C33v74Ev();
extern void _ZN7S1770C33v75Ev();
extern void _ZN7S1770C33v76Ev();
extern void _ZN7S1770C33v77Ev();
extern void _ZN7S1770C33v78Ev();
extern void _ZN7S1770C33v79Ev();
extern void _ZN7S1770C33v80Ev();
extern void _ZN7S1770C33v81Ev();
extern void _ZN7S1770C33v82Ev();
extern void _ZN7S1770C33v83Ev();
extern void _ZN7S1770C33v84Ev();
extern void _ZN7S1770C33v85Ev();
extern void _ZN7S1770C33v86Ev();
extern void _ZN7S1770C33v87Ev();
extern void _ZN7S1770C33v88Ev();
extern void _ZN7S1770C33v89Ev();
extern void _ZN7S1770C33v90Ev();
extern void _ZN7S1770C33v91Ev();
extern void _ZN7S1770C33v92Ev();
extern void _ZN7S1770C33v93Ev();
extern void _ZN7S1770C33v94Ev();
extern void _ZN7S1770C33v95Ev();
extern void _ZN7S1770C33v96Ev();
extern void _ZN7S1770C33v97Ev();
extern void _ZN7S1770C33v98Ev();
extern void _ZN7S1770C33v99Ev();
extern void _ZN7S1770C34v100Ev();
extern void _ZN7S1770C34v101Ev();
extern void _ZN7S1770C34v102Ev();
extern void _ZN7S1770C34v103Ev();
extern void _ZN7S1770C34v104Ev();
extern void _ZN7S1770C34v105Ev();
extern void _ZN7S1770C34v106Ev();
extern void _ZN7S1770C34v107Ev();
extern void _ZN7S1770C34v108Ev();
extern void _ZN7S1770C34v109Ev();
extern void _ZN7S1770C34v110Ev();
extern void _ZN7S1770C34v111Ev();
extern void _ZN7S1770C34v112Ev();
extern void _ZN7S1770C34v113Ev();
extern void _ZN7S1770C34v114Ev();
extern void _ZN7S1770C34v115Ev();
extern void _ZN7S1770C34v116Ev();
extern void _ZN7S1770C34v117Ev();
extern void _ZN7S1770C34v118Ev();
extern void _ZN7S1770C34v119Ev();
extern void _ZN7S1770C34v120Ev();
extern void _ZN7S1770C34v121Ev();
extern void _ZN7S1770C34v122Ev();
extern void _ZN7S1770C34v123Ev();
extern void _ZN7S1770C34v124Ev();
extern void _ZN7S1770C34v125Ev();
extern void _ZN7S1770C34v126Ev();
extern void _ZN7S1770C34v127Ev();
extern void _ZN7S1770C34v128Ev();
extern void _ZN7S1770C34v129Ev();
extern void _ZN7S1770C34v130Ev();
extern void _ZN7S1770C34v131Ev();
extern void _ZN7S1770C24v132Ev();
extern void _ZN7S1770C24v133Ev();
extern void _ZN7S1770C24v134Ev();
extern void _ZN7S1770C24v135Ev();
extern void _ZN7S1770C24v136Ev();
extern void _ZN7S1770C24v137Ev();
extern void _ZN7S1770C24v138Ev();
extern void _ZN7S1770C24v139Ev();
extern void _ZN7S1770C24v140Ev();
extern void _ZN7S1770C24v141Ev();
extern void _ZN7S1770C24v142Ev();
extern void _ZN7S1770C24v143Ev();
extern void _ZN7S1770C24v144Ev();
extern void _ZN7S1770C24v145Ev();
extern void _ZN7S1770C24v146Ev();
extern void _ZN7S1770C24v147Ev();
extern void _ZN7S1770C24v148Ev();
extern void _ZN7S1770C24v149Ev();
static  VTBL_ENTRY vtc_S1770C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1770C2[0]),
  (VTBL_ENTRY)&_ZN7S1770C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1770C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v149Ev,
};
extern VTBL_ENTRY _ZTI7S1770C2[];
extern  VTBL_ENTRY _ZTV7S1770C2[];
Class_Descriptor cd_S1770C2 = {  "S1770C2", // class name
  bases_S1770C2, 2,
  &(vtc_S1770C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1770C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1770C2),144, //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  S1770C1  : S1770C2 {
  virtual void  v1(); // _ZN7S1770C12v1Ev
  virtual void  v2(); // _ZN7S1770C12v2Ev
  virtual void  v3(); // _ZN7S1770C12v3Ev
  virtual void  v4(); // _ZN7S1770C12v4Ev
  virtual void  v5(); // _ZN7S1770C12v5Ev
  virtual void  v6(); // _ZN7S1770C12v6Ev
  virtual void  v7(); // _ZN7S1770C12v7Ev
  virtual void  v8(); // _ZN7S1770C12v8Ev
  virtual void  v9(); // _ZN7S1770C12v9Ev
  ~S1770C1(); // tgen
  S1770C1(); // tgen
};
//SIG(1 S1770C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 v144 v145 v146 v147 v148 v149} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1770C1 ::v1(){vfunc_called(this, "_ZN7S1770C12v1Ev");}
void  S1770C1 ::v2(){vfunc_called(this, "_ZN7S1770C12v2Ev");}
void  S1770C1 ::v3(){vfunc_called(this, "_ZN7S1770C12v3Ev");}
void  S1770C1 ::v4(){vfunc_called(this, "_ZN7S1770C12v4Ev");}
void  S1770C1 ::v5(){vfunc_called(this, "_ZN7S1770C12v5Ev");}
void  S1770C1 ::v6(){vfunc_called(this, "_ZN7S1770C12v6Ev");}
void  S1770C1 ::v7(){vfunc_called(this, "_ZN7S1770C12v7Ev");}
void  S1770C1 ::v8(){vfunc_called(this, "_ZN7S1770C12v8Ev");}
void  S1770C1 ::v9(){vfunc_called(this, "_ZN7S1770C12v9Ev");}
S1770C1 ::~S1770C1(){ note_dtor("S1770C1", this);} // tgen
S1770C1 ::S1770C1(){ note_ctor("S1770C1", this);} // tgen

static void Test_S1770C1()
{
  extern Class_Descriptor cd_S1770C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1770C1, buf);
    S1770C1 *dp, &lv = *(dp=new (buf) S1770C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1770C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1770C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S1770C3*)(S1770C2*), 0, "S1770C1");
    check_base_class_offset(lv, (S1770C3*)(S1770C2*), 0, "S1770C1");
    check_base_class_offset(lv, (S1770C2*), 0, "S1770C1");
    test_class_info(&lv, &cd_S1770C1);
    dp->~S1770C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1770C1(Test_S1770C1, "S1770C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1770C1C1Ev();
extern void _ZN7S1770C1D1Ev();
Name_Map name_map_S1770C1[] = {
  NSPAIR(_ZN7S1770C1C1Ev),
  NSPAIR(_ZN7S1770C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1770C3;
extern VTBL_ENTRY _ZTI7S1770C3[];
extern  VTBL_ENTRY _ZTV7S1770C3[];
extern Class_Descriptor cd_S1770C2;
extern VTBL_ENTRY _ZTI7S1770C2[];
extern  VTBL_ENTRY _ZTV7S1770C2[];
static Base_Class bases_S1770C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1770C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1770C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1770C1[];
extern void _ZN7S1770C1D1Ev();
extern void _ZN7S1770C1D0Ev();
extern void _ZN7S1770C33v10Ev();
extern void _ZN7S1770C33v11Ev();
extern void _ZN7S1770C33v12Ev();
extern void _ZN7S1770C33v13Ev();
extern void _ZN7S1770C33v14Ev();
extern void _ZN7S1770C33v15Ev();
extern void _ZN7S1770C33v16Ev();
extern void _ZN7S1770C33v17Ev();
extern void _ZN7S1770C33v18Ev();
extern void _ZN7S1770C33v19Ev();
extern void _ZN7S1770C33v20Ev();
extern void _ZN7S1770C33v21Ev();
extern void _ZN7S1770C33v22Ev();
extern void _ZN7S1770C33v23Ev();
extern void _ZN7S1770C33v24Ev();
extern void _ZN7S1770C33v25Ev();
extern void _ZN7S1770C33v26Ev();
extern void _ZN7S1770C33v27Ev();
extern void _ZN7S1770C33v28Ev();
extern void _ZN7S1770C33v29Ev();
extern void _ZN7S1770C33v30Ev();
extern void _ZN7S1770C33v31Ev();
extern void _ZN7S1770C33v32Ev();
extern void _ZN7S1770C33v33Ev();
extern void _ZN7S1770C33v34Ev();
extern void _ZN7S1770C33v35Ev();
extern void _ZN7S1770C33v36Ev();
extern void _ZN7S1770C33v37Ev();
extern void _ZN7S1770C33v38Ev();
extern void _ZN7S1770C33v39Ev();
extern void _ZN7S1770C33v40Ev();
extern void _ZN7S1770C33v41Ev();
extern void _ZN7S1770C33v42Ev();
extern void _ZN7S1770C33v43Ev();
extern void _ZN7S1770C33v44Ev();
extern void _ZN7S1770C33v45Ev();
extern void _ZN7S1770C33v46Ev();
extern void _ZN7S1770C33v47Ev();
extern void _ZN7S1770C33v48Ev();
extern void _ZN7S1770C33v49Ev();
extern void _ZN7S1770C33v50Ev();
extern void _ZN7S1770C33v51Ev();
extern void _ZN7S1770C33v52Ev();
extern void _ZN7S1770C33v53Ev();
extern void _ZN7S1770C33v54Ev();
extern void _ZN7S1770C33v55Ev();
extern void _ZN7S1770C33v56Ev();
extern void _ZN7S1770C33v57Ev();
extern void _ZN7S1770C33v58Ev();
extern void _ZN7S1770C33v59Ev();
extern void _ZN7S1770C33v60Ev();
extern void _ZN7S1770C33v61Ev();
extern void _ZN7S1770C33v62Ev();
extern void _ZN7S1770C33v63Ev();
extern void _ZN7S1770C33v64Ev();
extern void _ZN7S1770C33v65Ev();
extern void _ZN7S1770C33v66Ev();
extern void _ZN7S1770C33v67Ev();
extern void _ZN7S1770C33v68Ev();
extern void _ZN7S1770C33v69Ev();
extern void _ZN7S1770C33v70Ev();
extern void _ZN7S1770C33v71Ev();
extern void _ZN7S1770C33v72Ev();
extern void _ZN7S1770C33v73Ev();
extern void _ZN7S1770C33v74Ev();
extern void _ZN7S1770C33v75Ev();
extern void _ZN7S1770C33v76Ev();
extern void _ZN7S1770C33v77Ev();
extern void _ZN7S1770C33v78Ev();
extern void _ZN7S1770C33v79Ev();
extern void _ZN7S1770C33v80Ev();
extern void _ZN7S1770C33v81Ev();
extern void _ZN7S1770C33v82Ev();
extern void _ZN7S1770C33v83Ev();
extern void _ZN7S1770C33v84Ev();
extern void _ZN7S1770C33v85Ev();
extern void _ZN7S1770C33v86Ev();
extern void _ZN7S1770C33v87Ev();
extern void _ZN7S1770C33v88Ev();
extern void _ZN7S1770C33v89Ev();
extern void _ZN7S1770C33v90Ev();
extern void _ZN7S1770C33v91Ev();
extern void _ZN7S1770C33v92Ev();
extern void _ZN7S1770C33v93Ev();
extern void _ZN7S1770C33v94Ev();
extern void _ZN7S1770C33v95Ev();
extern void _ZN7S1770C33v96Ev();
extern void _ZN7S1770C33v97Ev();
extern void _ZN7S1770C33v98Ev();
extern void _ZN7S1770C33v99Ev();
extern void _ZN7S1770C34v100Ev();
extern void _ZN7S1770C34v101Ev();
extern void _ZN7S1770C34v102Ev();
extern void _ZN7S1770C34v103Ev();
extern void _ZN7S1770C34v104Ev();
extern void _ZN7S1770C34v105Ev();
extern void _ZN7S1770C34v106Ev();
extern void _ZN7S1770C34v107Ev();
extern void _ZN7S1770C34v108Ev();
extern void _ZN7S1770C34v109Ev();
extern void _ZN7S1770C34v110Ev();
extern void _ZN7S1770C34v111Ev();
extern void _ZN7S1770C34v112Ev();
extern void _ZN7S1770C34v113Ev();
extern void _ZN7S1770C34v114Ev();
extern void _ZN7S1770C34v115Ev();
extern void _ZN7S1770C34v116Ev();
extern void _ZN7S1770C34v117Ev();
extern void _ZN7S1770C34v118Ev();
extern void _ZN7S1770C34v119Ev();
extern void _ZN7S1770C34v120Ev();
extern void _ZN7S1770C34v121Ev();
extern void _ZN7S1770C34v122Ev();
extern void _ZN7S1770C34v123Ev();
extern void _ZN7S1770C34v124Ev();
extern void _ZN7S1770C34v125Ev();
extern void _ZN7S1770C34v126Ev();
extern void _ZN7S1770C34v127Ev();
extern void _ZN7S1770C34v128Ev();
extern void _ZN7S1770C34v129Ev();
extern void _ZN7S1770C34v130Ev();
extern void _ZN7S1770C34v131Ev();
extern void _ZN7S1770C24v132Ev();
extern void _ZN7S1770C24v133Ev();
extern void _ZN7S1770C24v134Ev();
extern void _ZN7S1770C24v135Ev();
extern void _ZN7S1770C24v136Ev();
extern void _ZN7S1770C24v137Ev();
extern void _ZN7S1770C24v138Ev();
extern void _ZN7S1770C24v139Ev();
extern void _ZN7S1770C24v140Ev();
extern void _ZN7S1770C24v141Ev();
extern void _ZN7S1770C24v142Ev();
extern void _ZN7S1770C24v143Ev();
extern void _ZN7S1770C24v144Ev();
extern void _ZN7S1770C24v145Ev();
extern void _ZN7S1770C24v146Ev();
extern void _ZN7S1770C24v147Ev();
extern void _ZN7S1770C24v148Ev();
extern void _ZN7S1770C24v149Ev();
extern void _ZN7S1770C12v1Ev();
extern void _ZN7S1770C12v2Ev();
extern void _ZN7S1770C12v3Ev();
extern void _ZN7S1770C12v4Ev();
extern void _ZN7S1770C12v5Ev();
extern void _ZN7S1770C12v6Ev();
extern void _ZN7S1770C12v7Ev();
extern void _ZN7S1770C12v8Ev();
extern void _ZN7S1770C12v9Ev();
static  VTBL_ENTRY vtc_S1770C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1770C1[0]),
  (VTBL_ENTRY)&_ZN7S1770C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1770C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1770C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1770C34v131Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1770C24v149Ev,
  (VTBL_ENTRY)&_ZN7S1770C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1770C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1770C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1770C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1770C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1770C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1770C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1770C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1770C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1770C1[];
extern  VTBL_ENTRY _ZTV7S1770C1[];
Class_Descriptor cd_S1770C1 = {  "S1770C1", // class name
  bases_S1770C1, 3,
  &(vtc_S1770C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1770C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1770C1),153, //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  S779C4  : S785C5_nt {
  virtual void  v3(); // _ZN6S779C42v3Ev
  virtual void  v4(); // _ZN6S779C42v4Ev
  virtual void  v5(); // _ZN6S779C42v5Ev
  virtual void  v6(); // _ZN6S779C42v6Ev
  virtual void  v7(); // _ZN6S779C42v7Ev
  virtual void  v8(); // _ZN6S779C42v8Ev
  virtual void  v9(); // _ZN6S779C42v9Ev
  virtual void  v10(); // _ZN6S779C43v10Ev
  virtual void  v11(); // _ZN6S779C43v11Ev
  virtual void  v12(); // _ZN6S779C43v12Ev
  virtual void  v13(); // _ZN6S779C43v13Ev
  virtual void  v14(); // _ZN6S779C43v14Ev
  virtual void  v15(); // _ZN6S779C43v15Ev
  virtual void  v16(); // _ZN6S779C43v16Ev
  virtual void  v17(); // _ZN6S779C43v17Ev
  virtual void  v18(); // _ZN6S779C43v18Ev
  virtual void  v19(); // _ZN6S779C43v19Ev
  virtual void  v20(); // _ZN6S779C43v20Ev
  virtual void  v21(); // _ZN6S779C43v21Ev
  virtual void  v22(); // _ZN6S779C43v22Ev
  virtual void  v23(); // _ZN6S779C43v23Ev
  virtual void  v24(); // _ZN6S779C43v24Ev
  virtual void  v25(); // _ZN6S779C43v25Ev
  virtual void  v26(); // _ZN6S779C43v26Ev
  virtual void  v27(); // _ZN6S779C43v27Ev
  virtual void  v28(); // _ZN6S779C43v28Ev
  virtual void  v29(); // _ZN6S779C43v29Ev
  virtual void  v30(); // _ZN6S779C43v30Ev
  virtual void  v31(); // _ZN6S779C43v31Ev
  virtual void  v32(); // _ZN6S779C43v32Ev
  virtual void  v33(); // _ZN6S779C43v33Ev
  virtual void  v34(); // _ZN6S779C43v34Ev
  virtual void  v35(); // _ZN6S779C43v35Ev
  virtual void  v36(); // _ZN6S779C43v36Ev
  virtual void  v37(); // _ZN6S779C43v37Ev
  virtual void  v38(); // _ZN6S779C43v38Ev
  virtual void  v39(); // _ZN6S779C43v39Ev
  virtual void  v40(); // _ZN6S779C43v40Ev
  virtual void  v41(); // _ZN6S779C43v41Ev
  virtual void  v42(); // _ZN6S779C43v42Ev
  virtual void  v43(); // _ZN6S779C43v43Ev
  virtual void  v44(); // _ZN6S779C43v44Ev
  virtual void  v45(); // _ZN6S779C43v45Ev
  virtual void  v46(); // _ZN6S779C43v46Ev
  virtual void  v47(); // _ZN6S779C43v47Ev
  virtual void  v48(); // _ZN6S779C43v48Ev
  virtual void  v49(); // _ZN6S779C43v49Ev
  virtual void  v50(); // _ZN6S779C43v50Ev
  virtual void  v51(); // _ZN6S779C43v51Ev
  virtual void  v52(); // _ZN6S779C43v52Ev
  virtual void  v53(); // _ZN6S779C43v53Ev
  virtual void  v54(); // _ZN6S779C43v54Ev
  virtual void  v55(); // _ZN6S779C43v55Ev
  virtual void  v56(); // _ZN6S779C43v56Ev
  virtual void  v57(); // _ZN6S779C43v57Ev
  virtual void  v58(); // _ZN6S779C43v58Ev
  virtual void  v59(); // _ZN6S779C43v59Ev
  virtual void  v60(); // _ZN6S779C43v60Ev
  virtual void  v61(); // _ZN6S779C43v61Ev
  virtual void  v62(); // _ZN6S779C43v62Ev
  virtual void  v63(); // _ZN6S779C43v63Ev
  virtual void  v64(); // _ZN6S779C43v64Ev
  virtual void  v65(); // _ZN6S779C43v65Ev
  virtual void  v66(); // _ZN6S779C43v66Ev
  virtual void  v67(); // _ZN6S779C43v67Ev
  virtual void  v68(); // _ZN6S779C43v68Ev
  virtual void  v69(); // _ZN6S779C43v69Ev
  virtual void  v70(); // _ZN6S779C43v70Ev
  virtual void  v71(); // _ZN6S779C43v71Ev
  virtual void  v72(); // _ZN6S779C43v72Ev
  virtual void  v73(); // _ZN6S779C43v73Ev
  virtual void  v74(); // _ZN6S779C43v74Ev
  virtual void  v75(); // _ZN6S779C43v75Ev
  virtual void  v76(); // _ZN6S779C43v76Ev
  virtual void  v77(); // _ZN6S779C43v77Ev
  virtual void  v78(); // _ZN6S779C43v78Ev
  virtual void  v79(); // _ZN6S779C43v79Ev
  virtual void  v80(); // _ZN6S779C43v80Ev
  virtual void  v81(); // _ZN6S779C43v81Ev
  virtual void  v82(); // _ZN6S779C43v82Ev
  virtual void  v83(); // _ZN6S779C43v83Ev
  virtual void  v84(); // _ZN6S779C43v84Ev
  virtual void  v85(); // _ZN6S779C43v85Ev
  virtual void  v86(); // _ZN6S779C43v86Ev
  virtual void  v87(); // _ZN6S779C43v87Ev
  virtual void  v88(); // _ZN6S779C43v88Ev
  virtual void  v89(); // _ZN6S779C43v89Ev
  virtual void  v90(); // _ZN6S779C43v90Ev
  virtual void  v91(); // _ZN6S779C43v91Ev
  virtual void  v92(); // _ZN6S779C43v92Ev
  virtual void  v93(); // _ZN6S779C43v93Ev
  virtual void  v94(); // _ZN6S779C43v94Ev
  virtual void  v95(); // _ZN6S779C43v95Ev
  virtual void  v96(); // _ZN6S779C43v96Ev
  virtual void  v97(); // _ZN6S779C43v97Ev
  virtual void  v98(); // _ZN6S779C43v98Ev
  virtual void  v99(); // _ZN6S779C43v99Ev
  virtual void  v100(); // _ZN6S779C44v100Ev
  virtual void  v101(); // _ZN6S779C44v101Ev
  virtual void  v102(); // _ZN6S779C44v102Ev
  virtual void  v103(); // _ZN6S779C44v103Ev
  virtual void  v104(); // _ZN6S779C44v104Ev
  virtual void  v105(); // _ZN6S779C44v105Ev
  virtual void  v106(); // _ZN6S779C44v106Ev
  virtual void  v107(); // _ZN6S779C44v107Ev
  virtual void  v108(); // _ZN6S779C44v108Ev
  virtual void  v109(); // _ZN6S779C44v109Ev
  virtual void  v110(); // _ZN6S779C44v110Ev
  virtual void  v111(); // _ZN6S779C44v111Ev
  virtual void  v112(); // _ZN6S779C44v112Ev
  virtual void  v113(); // _ZN6S779C44v113Ev
  virtual void  v114(); // _ZN6S779C44v114Ev
  virtual void  v115(); // _ZN6S779C44v115Ev
  virtual void  v116(); // _ZN6S779C44v116Ev
  virtual void  v117(); // _ZN6S779C44v117Ev
  virtual void  v118(); // _ZN6S779C44v118Ev
  virtual void  v119(); // _ZN6S779C44v119Ev
  virtual void  v120(); // _ZN6S779C44v120Ev
  virtual void  v121(); // _ZN6S779C44v121Ev
  virtual void  v122(); // _ZN6S779C44v122Ev
  virtual void  v123(); // _ZN6S779C44v123Ev
  virtual void  v124(); // _ZN6S779C44v124Ev
  ~S779C4(); // tgen
  S779C4(); // tgen
};
//SIG(-1 S779C4) C1{ BC2{ vd m Fp Fi} 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}


void  S779C4 ::v3(){vfunc_called(this, "_ZN6S779C42v3Ev");}
void  S779C4 ::v4(){vfunc_called(this, "_ZN6S779C42v4Ev");}
void  S779C4 ::v5(){vfunc_called(this, "_ZN6S779C42v5Ev");}
void  S779C4 ::v6(){vfunc_called(this, "_ZN6S779C42v6Ev");}
void  S779C4 ::v7(){vfunc_called(this, "_ZN6S779C42v7Ev");}
void  S779C4 ::v8(){vfunc_called(this, "_ZN6S779C42v8Ev");}
void  S779C4 ::v9(){vfunc_called(this, "_ZN6S779C42v9Ev");}
void  S779C4 ::v10(){vfunc_called(this, "_ZN6S779C43v10Ev");}
void  S779C4 ::v11(){vfunc_called(this, "_ZN6S779C43v11Ev");}
void  S779C4 ::v12(){vfunc_called(this, "_ZN6S779C43v12Ev");}
void  S779C4 ::v13(){vfunc_called(this, "_ZN6S779C43v13Ev");}
void  S779C4 ::v14(){vfunc_called(this, "_ZN6S779C43v14Ev");}
void  S779C4 ::v15(){vfunc_called(this, "_ZN6S779C43v15Ev");}
void  S779C4 ::v16(){vfunc_called(this, "_ZN6S779C43v16Ev");}
void  S779C4 ::v17(){vfunc_called(this, "_ZN6S779C43v17Ev");}
void  S779C4 ::v18(){vfunc_called(this, "_ZN6S779C43v18Ev");}
void  S779C4 ::v19(){vfunc_called(this, "_ZN6S779C43v19Ev");}
void  S779C4 ::v20(){vfunc_called(this, "_ZN6S779C43v20Ev");}
void  S779C4 ::v21(){vfunc_called(this, "_ZN6S779C43v21Ev");}
void  S779C4 ::v22(){vfunc_called(this, "_ZN6S779C43v22Ev");}
void  S779C4 ::v23(){vfunc_called(this, "_ZN6S779C43v23Ev");}
void  S779C4 ::v24(){vfunc_called(this, "_ZN6S779C43v24Ev");}
void  S779C4 ::v25(){vfunc_called(this, "_ZN6S779C43v25Ev");}
void  S779C4 ::v26(){vfunc_called(this, "_ZN6S779C43v26Ev");}
void  S779C4 ::v27(){vfunc_called(this, "_ZN6S779C43v27Ev");}
void  S779C4 ::v28(){vfunc_called(this, "_ZN6S779C43v28Ev");}
void  S779C4 ::v29(){vfunc_called(this, "_ZN6S779C43v29Ev");}
void  S779C4 ::v30(){vfunc_called(this, "_ZN6S779C43v30Ev");}
void  S779C4 ::v31(){vfunc_called(this, "_ZN6S779C43v31Ev");}
void  S779C4 ::v32(){vfunc_called(this, "_ZN6S779C43v32Ev");}
void  S779C4 ::v33(){vfunc_called(this, "_ZN6S779C43v33Ev");}
void  S779C4 ::v34(){vfunc_called(this, "_ZN6S779C43v34Ev");}
void  S779C4 ::v35(){vfunc_called(this, "_ZN6S779C43v35Ev");}
void  S779C4 ::v36(){vfunc_called(this, "_ZN6S779C43v36Ev");}
void  S779C4 ::v37(){vfunc_called(this, "_ZN6S779C43v37Ev");}
void  S779C4 ::v38(){vfunc_called(this, "_ZN6S779C43v38Ev");}
void  S779C4 ::v39(){vfunc_called(this, "_ZN6S779C43v39Ev");}
void  S779C4 ::v40(){vfunc_called(this, "_ZN6S779C43v40Ev");}
void  S779C4 ::v41(){vfunc_called(this, "_ZN6S779C43v41Ev");}
void  S779C4 ::v42(){vfunc_called(this, "_ZN6S779C43v42Ev");}
void  S779C4 ::v43(){vfunc_called(this, "_ZN6S779C43v43Ev");}
void  S779C4 ::v44(){vfunc_called(this, "_ZN6S779C43v44Ev");}
void  S779C4 ::v45(){vfunc_called(this, "_ZN6S779C43v45Ev");}
void  S779C4 ::v46(){vfunc_called(this, "_ZN6S779C43v46Ev");}
void  S779C4 ::v47(){vfunc_called(this, "_ZN6S779C43v47Ev");}
void  S779C4 ::v48(){vfunc_called(this, "_ZN6S779C43v48Ev");}
void  S779C4 ::v49(){vfunc_called(this, "_ZN6S779C43v49Ev");}
void  S779C4 ::v50(){vfunc_called(this, "_ZN6S779C43v50Ev");}
void  S779C4 ::v51(){vfunc_called(this, "_ZN6S779C43v51Ev");}
void  S779C4 ::v52(){vfunc_called(this, "_ZN6S779C43v52Ev");}
void  S779C4 ::v53(){vfunc_called(this, "_ZN6S779C43v53Ev");}
void  S779C4 ::v54(){vfunc_called(this, "_ZN6S779C43v54Ev");}
void  S779C4 ::v55(){vfunc_called(this, "_ZN6S779C43v55Ev");}
void  S779C4 ::v56(){vfunc_called(this, "_ZN6S779C43v56Ev");}
void  S779C4 ::v57(){vfunc_called(this, "_ZN6S779C43v57Ev");}
void  S779C4 ::v58(){vfunc_called(this, "_ZN6S779C43v58Ev");}
void  S779C4 ::v59(){vfunc_called(this, "_ZN6S779C43v59Ev");}
void  S779C4 ::v60(){vfunc_called(this, "_ZN6S779C43v60Ev");}
void  S779C4 ::v61(){vfunc_called(this, "_ZN6S779C43v61Ev");}
void  S779C4 ::v62(){vfunc_called(this, "_ZN6S779C43v62Ev");}
void  S779C4 ::v63(){vfunc_called(this, "_ZN6S779C43v63Ev");}
void  S779C4 ::v64(){vfunc_called(this, "_ZN6S779C43v64Ev");}
void  S779C4 ::v65(){vfunc_called(this, "_ZN6S779C43v65Ev");}
void  S779C4 ::v66(){vfunc_called(this, "_ZN6S779C43v66Ev");}
void  S779C4 ::v67(){vfunc_called(this, "_ZN6S779C43v67Ev");}
void  S779C4 ::v68(){vfunc_called(this, "_ZN6S779C43v68Ev");}
void  S779C4 ::v69(){vfunc_called(this, "_ZN6S779C43v69Ev");}
void  S779C4 ::v70(){vfunc_called(this, "_ZN6S779C43v70Ev");}
void  S779C4 ::v71(){vfunc_called(this, "_ZN6S779C43v71Ev");}
void  S779C4 ::v72(){vfunc_called(this, "_ZN6S779C43v72Ev");}
void  S779C4 ::v73(){vfunc_called(this, "_ZN6S779C43v73Ev");}
void  S779C4 ::v74(){vfunc_called(this, "_ZN6S779C43v74Ev");}
void  S779C4 ::v75(){vfunc_called(this, "_ZN6S779C43v75Ev");}
void  S779C4 ::v76(){vfunc_called(this, "_ZN6S779C43v76Ev");}
void  S779C4 ::v77(){vfunc_called(this, "_ZN6S779C43v77Ev");}
void  S779C4 ::v78(){vfunc_called(this, "_ZN6S779C43v78Ev");}
void  S779C4 ::v79(){vfunc_called(this, "_ZN6S779C43v79Ev");}
void  S779C4 ::v80(){vfunc_called(this, "_ZN6S779C43v80Ev");}
void  S779C4 ::v81(){vfunc_called(this, "_ZN6S779C43v81Ev");}
void  S779C4 ::v82(){vfunc_called(this, "_ZN6S779C43v82Ev");}
void  S779C4 ::v83(){vfunc_called(this, "_ZN6S779C43v83Ev");}
void  S779C4 ::v84(){vfunc_called(this, "_ZN6S779C43v84Ev");}
void  S779C4 ::v85(){vfunc_called(this, "_ZN6S779C43v85Ev");}
void  S779C4 ::v86(){vfunc_called(this, "_ZN6S779C43v86Ev");}
void  S779C4 ::v87(){vfunc_called(this, "_ZN6S779C43v87Ev");}
void  S779C4 ::v88(){vfunc_called(this, "_ZN6S779C43v88Ev");}
void  S779C4 ::v89(){vfunc_called(this, "_ZN6S779C43v89Ev");}
void  S779C4 ::v90(){vfunc_called(this, "_ZN6S779C43v90Ev");}
void  S779C4 ::v91(){vfunc_called(this, "_ZN6S779C43v91Ev");}
void  S779C4 ::v92(){vfunc_called(this, "_ZN6S779C43v92Ev");}
void  S779C4 ::v93(){vfunc_called(this, "_ZN6S779C43v93Ev");}
void  S779C4 ::v94(){vfunc_called(this, "_ZN6S779C43v94Ev");}
void  S779C4 ::v95(){vfunc_called(this, "_ZN6S779C43v95Ev");}
void  S779C4 ::v96(){vfunc_called(this, "_ZN6S779C43v96Ev");}
void  S779C4 ::v97(){vfunc_called(this, "_ZN6S779C43v97Ev");}
void  S779C4 ::v98(){vfunc_called(this, "_ZN6S779C43v98Ev");}
void  S779C4 ::v99(){vfunc_called(this, "_ZN6S779C43v99Ev");}
void  S779C4 ::v100(){vfunc_called(this, "_ZN6S779C44v100Ev");}
void  S779C4 ::v101(){vfunc_called(this, "_ZN6S779C44v101Ev");}
void  S779C4 ::v102(){vfunc_called(this, "_ZN6S779C44v102Ev");}
void  S779C4 ::v103(){vfunc_called(this, "_ZN6S779C44v103Ev");}
void  S779C4 ::v104(){vfunc_called(this, "_ZN6S779C44v104Ev");}
void  S779C4 ::v105(){vfunc_called(this, "_ZN6S779C44v105Ev");}
void  S779C4 ::v106(){vfunc_called(this, "_ZN6S779C44v106Ev");}
void  S779C4 ::v107(){vfunc_called(this, "_ZN6S779C44v107Ev");}
void  S779C4 ::v108(){vfunc_called(this, "_ZN6S779C44v108Ev");}
void  S779C4 ::v109(){vfunc_called(this, "_ZN6S779C44v109Ev");}
void  S779C4 ::v110(){vfunc_called(this, "_ZN6S779C44v110Ev");}
void  S779C4 ::v111(){vfunc_called(this, "_ZN6S779C44v111Ev");}
void  S779C4 ::v112(){vfunc_called(this, "_ZN6S779C44v112Ev");}
void  S779C4 ::v113(){vfunc_called(this, "_ZN6S779C44v113Ev");}
void  S779C4 ::v114(){vfunc_called(this, "_ZN6S779C44v114Ev");}
void  S779C4 ::v115(){vfunc_called(this, "_ZN6S779C44v115Ev");}
void  S779C4 ::v116(){vfunc_called(this, "_ZN6S779C44v116Ev");}
void  S779C4 ::v117(){vfunc_called(this, "_ZN6S779C44v117Ev");}
void  S779C4 ::v118(){vfunc_called(this, "_ZN6S779C44v118Ev");}
void  S779C4 ::v119(){vfunc_called(this, "_ZN6S779C44v119Ev");}
void  S779C4 ::v120(){vfunc_called(this, "_ZN6S779C44v120Ev");}
void  S779C4 ::v121(){vfunc_called(this, "_ZN6S779C44v121Ev");}
void  S779C4 ::v122(){vfunc_called(this, "_ZN6S779C44v122Ev");}
void  S779C4 ::v123(){vfunc_called(this, "_ZN6S779C44v123Ev");}
void  S779C4 ::v124(){vfunc_called(this, "_ZN6S779C44v124Ev");}
S779C4 ::~S779C4(){ note_dtor("S779C4", this);} // tgen
S779C4 ::S779C4(){ note_ctor("S779C4", this);} // tgen

static void Test_S779C4()
{
  extern Class_Descriptor cd_S779C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S779C4, buf);
    S779C4 *dp, &lv = *(dp=new (buf) S779C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S779C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S779C4)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S779C4");
    test_class_info(&lv, &cd_S779C4);
    dp->~S779C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS779C4(Test_S779C4, "S779C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S779C4C1Ev();
extern void _ZN6S779C4D1Ev();
Name_Map name_map_S779C4[] = {
  NSPAIR(_ZN6S779C4C1Ev),
  NSPAIR(_ZN6S779C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S779C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S779C4[];
extern void _ZN6S779C4D1Ev();
extern void _ZN6S779C4D0Ev();
extern void _ZN6S779C42v3Ev();
extern void _ZN6S779C42v4Ev();
extern void _ZN6S779C42v5Ev();
extern void _ZN6S779C42v6Ev();
extern void _ZN6S779C42v7Ev();
extern void _ZN6S779C42v8Ev();
extern void _ZN6S779C42v9Ev();
extern void _ZN6S779C43v10Ev();
extern void _ZN6S779C43v11Ev();
extern void _ZN6S779C43v12Ev();
extern void _ZN6S779C43v13Ev();
extern void _ZN6S779C43v14Ev();
extern void _ZN6S779C43v15Ev();
extern void _ZN6S779C43v16Ev();
extern void _ZN6S779C43v17Ev();
extern void _ZN6S779C43v18Ev();
extern void _ZN6S779C43v19Ev();
extern void _ZN6S779C43v20Ev();
extern void _ZN6S779C43v21Ev();
extern void _ZN6S779C43v22Ev();
extern void _ZN6S779C43v23Ev();
extern void _ZN6S779C43v24Ev();
extern void _ZN6S779C43v25Ev();
extern void _ZN6S779C43v26Ev();
extern void _ZN6S779C43v27Ev();
extern void _ZN6S779C43v28Ev();
extern void _ZN6S779C43v29Ev();
extern void _ZN6S779C43v30Ev();
extern void _ZN6S779C43v31Ev();
extern void _ZN6S779C43v32Ev();
extern void _ZN6S779C43v33Ev();
extern void _ZN6S779C43v34Ev();
extern void _ZN6S779C43v35Ev();
extern void _ZN6S779C43v36Ev();
extern void _ZN6S779C43v37Ev();
extern void _ZN6S779C43v38Ev();
extern void _ZN6S779C43v39Ev();
extern void _ZN6S779C43v40Ev();
extern void _ZN6S779C43v41Ev();
extern void _ZN6S779C43v42Ev();
extern void _ZN6S779C43v43Ev();
extern void _ZN6S779C43v44Ev();
extern void _ZN6S779C43v45Ev();
extern void _ZN6S779C43v46Ev();
extern void _ZN6S779C43v47Ev();
extern void _ZN6S779C43v48Ev();
extern void _ZN6S779C43v49Ev();
extern void _ZN6S779C43v50Ev();
extern void _ZN6S779C43v51Ev();
extern void _ZN6S779C43v52Ev();
extern void _ZN6S779C43v53Ev();
extern void _ZN6S779C43v54Ev();
extern void _ZN6S779C43v55Ev();
extern void _ZN6S779C43v56Ev();
extern void _ZN6S779C43v57Ev();
extern void _ZN6S779C43v58Ev();
extern void _ZN6S779C43v59Ev();
extern void _ZN6S779C43v60Ev();
extern void _ZN6S779C43v61Ev();
extern void _ZN6S779C43v62Ev();
extern void _ZN6S779C43v63Ev();
extern void _ZN6S779C43v64Ev();
extern void _ZN6S779C43v65Ev();
extern void _ZN6S779C43v66Ev();
extern void _ZN6S779C43v67Ev();
extern void _ZN6S779C43v68Ev();
extern void _ZN6S779C43v69Ev();
extern void _ZN6S779C43v70Ev();
extern void _ZN6S779C43v71Ev();
extern void _ZN6S779C43v72Ev();
extern void _ZN6S779C43v73Ev();
extern void _ZN6S779C43v74Ev();
extern void _ZN6S779C43v75Ev();
extern void _ZN6S779C43v76Ev();
extern void _ZN6S779C43v77Ev();
extern void _ZN6S779C43v78Ev();
extern void _ZN6S779C43v79Ev();
extern void _ZN6S779C43v80Ev();
extern void _ZN6S779C43v81Ev();
extern void _ZN6S779C43v82Ev();
extern void _ZN6S779C43v83Ev();
extern void _ZN6S779C43v84Ev();
extern void _ZN6S779C43v85Ev();
extern void _ZN6S779C43v86Ev();
extern void _ZN6S779C43v87Ev();
extern void _ZN6S779C43v88Ev();
extern void _ZN6S779C43v89Ev();
extern void _ZN6S779C43v90Ev();
extern void _ZN6S779C43v91Ev();
extern void _ZN6S779C43v92Ev();
extern void _ZN6S779C43v93Ev();
extern void _ZN6S779C43v94Ev();
extern void _ZN6S779C43v95Ev();
extern void _ZN6S779C43v96Ev();
extern void _ZN6S779C43v97Ev();
extern void _ZN6S779C43v98Ev();
extern void _ZN6S779C43v99Ev();
extern void _ZN6S779C44v100Ev();
extern void _ZN6S779C44v101Ev();
extern void _ZN6S779C44v102Ev();
extern void _ZN6S779C44v103Ev();
extern void _ZN6S779C44v104Ev();
extern void _ZN6S779C44v105Ev();
extern void _ZN6S779C44v106Ev();
extern void _ZN6S779C44v107Ev();
extern void _ZN6S779C44v108Ev();
extern void _ZN6S779C44v109Ev();
extern void _ZN6S779C44v110Ev();
extern void _ZN6S779C44v111Ev();
extern void _ZN6S779C44v112Ev();
extern void _ZN6S779C44v113Ev();
extern void _ZN6S779C44v114Ev();
extern void _ZN6S779C44v115Ev();
extern void _ZN6S779C44v116Ev();
extern void _ZN6S779C44v117Ev();
extern void _ZN6S779C44v118Ev();
extern void _ZN6S779C44v119Ev();
extern void _ZN6S779C44v120Ev();
extern void _ZN6S779C44v121Ev();
extern void _ZN6S779C44v122Ev();
extern void _ZN6S779C44v123Ev();
extern void _ZN6S779C44v124Ev();
static  VTBL_ENTRY vtc_S779C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S779C4[0]),
  (VTBL_ENTRY)&_ZN6S779C4D1Ev,
  (VTBL_ENTRY)&_ZN6S779C4D0Ev,
  (VTBL_ENTRY)&_ZN6S779C42v3Ev,
  (VTBL_ENTRY)&_ZN6S779C42v4Ev,
  (VTBL_ENTRY)&_ZN6S779C42v5Ev,
  (VTBL_ENTRY)&_ZN6S779C42v6Ev,
  (VTBL_ENTRY)&_ZN6S779C42v7Ev,
  (VTBL_ENTRY)&_ZN6S779C42v8Ev,
  (VTBL_ENTRY)&_ZN6S779C42v9Ev,
  (VTBL_ENTRY)&_ZN6S779C43v10Ev,
  (VTBL_ENTRY)&_ZN6S779C43v11Ev,
  (VTBL_ENTRY)&_ZN6S779C43v12Ev,
  (VTBL_ENTRY)&_ZN6S779C43v13Ev,
  (VTBL_ENTRY)&_ZN6S779C43v14Ev,
  (VTBL_ENTRY)&_ZN6S779C43v15Ev,
  (VTBL_ENTRY)&_ZN6S779C43v16Ev,
  (VTBL_ENTRY)&_ZN6S779C43v17Ev,
  (VTBL_ENTRY)&_ZN6S779C43v18Ev,
  (VTBL_ENTRY)&_ZN6S779C43v19Ev,
  (VTBL_ENTRY)&_ZN6S779C43v20Ev,
  (VTBL_ENTRY)&_ZN6S779C43v21Ev,
  (VTBL_ENTRY)&_ZN6S779C43v22Ev,
  (VTBL_ENTRY)&_ZN6S779C43v23Ev,
  (VTBL_ENTRY)&_ZN6S779C43v24Ev,
  (VTBL_ENTRY)&_ZN6S779C43v25Ev,
  (VTBL_ENTRY)&_ZN6S779C43v26Ev,
  (VTBL_ENTRY)&_ZN6S779C43v27Ev,
  (VTBL_ENTRY)&_ZN6S779C43v28Ev,
  (VTBL_ENTRY)&_ZN6S779C43v29Ev,
  (VTBL_ENTRY)&_ZN6S779C43v30Ev,
  (VTBL_ENTRY)&_ZN6S779C43v31Ev,
  (VTBL_ENTRY)&_ZN6S779C43v32Ev,
  (VTBL_ENTRY)&_ZN6S779C43v33Ev,
  (VTBL_ENTRY)&_ZN6S779C43v34Ev,
  (VTBL_ENTRY)&_ZN6S779C43v35Ev,
  (VTBL_ENTRY)&_ZN6S779C43v36Ev,
  (VTBL_ENTRY)&_ZN6S779C43v37Ev,
  (VTBL_ENTRY)&_ZN6S779C43v38Ev,
  (VTBL_ENTRY)&_ZN6S779C43v39Ev,
  (VTBL_ENTRY)&_ZN6S779C43v40Ev,
  (VTBL_ENTRY)&_ZN6S779C43v41Ev,
  (VTBL_ENTRY)&_ZN6S779C43v42Ev,
  (VTBL_ENTRY)&_ZN6S779C43v43Ev,
  (VTBL_ENTRY)&_ZN6S779C43v44Ev,
  (VTBL_ENTRY)&_ZN6S779C43v45Ev,
  (VTBL_ENTRY)&_ZN6S779C43v46Ev,
  (VTBL_ENTRY)&_ZN6S779C43v47Ev,
  (VTBL_ENTRY)&_ZN6S779C43v48Ev,
  (VTBL_ENTRY)&_ZN6S779C43v49Ev,
  (VTBL_ENTRY)&_ZN6S779C43v50Ev,
  (VTBL_ENTRY)&_ZN6S779C43v51Ev,
  (VTBL_ENTRY)&_ZN6S779C43v52Ev,
  (VTBL_ENTRY)&_ZN6S779C43v53Ev,
  (VTBL_ENTRY)&_ZN6S779C43v54Ev,
  (VTBL_ENTRY)&_ZN6S779C43v55Ev,
  (VTBL_ENTRY)&_ZN6S779C43v56Ev,
  (VTBL_ENTRY)&_ZN6S779C43v57Ev,
  (VTBL_ENTRY)&_ZN6S779C43v58Ev,
  (VTBL_ENTRY)&_ZN6S779C43v59Ev,
  (VTBL_ENTRY)&_ZN6S779C43v60Ev,
  (VTBL_ENTRY)&_ZN6S779C43v61Ev,
  (VTBL_ENTRY)&_ZN6S779C43v62Ev,
  (VTBL_ENTRY)&_ZN6S779C43v63Ev,
  (VTBL_ENTRY)&_ZN6S779C43v64Ev,
  (VTBL_ENTRY)&_ZN6S779C43v65Ev,
  (VTBL_ENTRY)&_ZN6S779C43v66Ev,
  (VTBL_ENTRY)&_ZN6S779C43v67Ev,
  (VTBL_ENTRY)&_ZN6S779C43v68Ev,
  (VTBL_ENTRY)&_ZN6S779C43v69Ev,
  (VTBL_ENTRY)&_ZN6S779C43v70Ev,
  (VTBL_ENTRY)&_ZN6S779C43v71Ev,
  (VTBL_ENTRY)&_ZN6S779C43v72Ev,
  (VTBL_ENTRY)&_ZN6S779C43v73Ev,
  (VTBL_ENTRY)&_ZN6S779C43v74Ev,
  (VTBL_ENTRY)&_ZN6S779C43v75Ev,
  (VTBL_ENTRY)&_ZN6S779C43v76Ev,
  (VTBL_ENTRY)&_ZN6S779C43v77Ev,
  (VTBL_ENTRY)&_ZN6S779C43v78Ev,
  (VTBL_ENTRY)&_ZN6S779C43v79Ev,
  (VTBL_ENTRY)&_ZN6S779C43v80Ev,
  (VTBL_ENTRY)&_ZN6S779C43v81Ev,
  (VTBL_ENTRY)&_ZN6S779C43v82Ev,
  (VTBL_ENTRY)&_ZN6S779C43v83Ev,
  (VTBL_ENTRY)&_ZN6S779C43v84Ev,
  (VTBL_ENTRY)&_ZN6S779C43v85Ev,
  (VTBL_ENTRY)&_ZN6S779C43v86Ev,
  (VTBL_ENTRY)&_ZN6S779C43v87Ev,
  (VTBL_ENTRY)&_ZN6S779C43v88Ev,
  (VTBL_ENTRY)&_ZN6S779C43v89Ev,
  (VTBL_ENTRY)&_ZN6S779C43v90Ev,
  (VTBL_ENTRY)&_ZN6S779C43v91Ev,
  (VTBL_ENTRY)&_ZN6S779C43v92Ev,
  (VTBL_ENTRY)&_ZN6S779C43v93Ev,
  (VTBL_ENTRY)&_ZN6S779C43v94Ev,
  (VTBL_ENTRY)&_ZN6S779C43v95Ev,
  (VTBL_ENTRY)&_ZN6S779C43v96Ev,
  (VTBL_ENTRY)&_ZN6S779C43v97Ev,
  (VTBL_ENTRY)&_ZN6S779C43v98Ev,
  (VTBL_ENTRY)&_ZN6S779C43v99Ev,
  (VTBL_ENTRY)&_ZN6S779C44v100Ev,
  (VTBL_ENTRY)&_ZN6S779C44v101Ev,
  (VTBL_ENTRY)&_ZN6S779C44v102Ev,
  (VTBL_ENTRY)&_ZN6S779C44v103Ev,
  (VTBL_ENTRY)&_ZN6S779C44v104Ev,
  (VTBL_ENTRY)&_ZN6S779C44v105Ev,
  (VTBL_ENTRY)&_ZN6S779C44v106Ev,
  (VTBL_ENTRY)&_ZN6S779C44v107Ev,
  (VTBL_ENTRY)&_ZN6S779C44v108Ev,
  (VTBL_ENTRY)&_ZN6S779C44v109Ev,
  (VTBL_ENTRY)&_ZN6S779C44v110Ev,
  (VTBL_ENTRY)&_ZN6S779C44v111Ev,
  (VTBL_ENTRY)&_ZN6S779C44v112Ev,
  (VTBL_ENTRY)&_ZN6S779C44v113Ev,
  (VTBL_ENTRY)&_ZN6S779C44v114Ev,
  (VTBL_ENTRY)&_ZN6S779C44v115Ev,
  (VTBL_ENTRY)&_ZN6S779C44v116Ev,
  (VTBL_ENTRY)&_ZN6S779C44v117Ev,
  (VTBL_ENTRY)&_ZN6S779C44v118Ev,
  (VTBL_ENTRY)&_ZN6S779C44v119Ev,
  (VTBL_ENTRY)&_ZN6S779C44v120Ev,
  (VTBL_ENTRY)&_ZN6S779C44v121Ev,
  (VTBL_ENTRY)&_ZN6S779C44v122Ev,
  (VTBL_ENTRY)&_ZN6S779C44v123Ev,
  (VTBL_ENTRY)&_ZN6S779C44v124Ev,
};
extern VTBL_ENTRY _ZTI6S779C4[];
extern  VTBL_ENTRY _ZTV6S779C4[];
Class_Descriptor cd_S779C4 = {  "S779C4", // class name
  bases_S779C4, 1,
  &(vtc_S779C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S779C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S779C4),126, //virtual function table var
  2, // 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  S779C3  : S779C4 {
  virtual void  v125(); // _ZN6S779C34v125Ev
  virtual void  v126(); // _ZN6S779C34v126Ev
  virtual void  v127(); // _ZN6S779C34v127Ev
  virtual void  v128(); // _ZN6S779C34v128Ev
  virtual void  v129(); // _ZN6S779C34v129Ev
  virtual void  v130(); // _ZN6S779C34v130Ev
  virtual void  v131(); // _ZN6S779C34v131Ev
  virtual void  v132(); // _ZN6S779C34v132Ev
  virtual void  v133(); // _ZN6S779C34v133Ev
  virtual void  v134(); // _ZN6S779C34v134Ev
  virtual void  v135(); // _ZN6S779C34v135Ev
  virtual void  v136(); // _ZN6S779C34v136Ev
  virtual void  v137(); // _ZN6S779C34v137Ev
  virtual void  v138(); // _ZN6S779C34v138Ev
  virtual void  v139(); // _ZN6S779C34v139Ev
  virtual void  v140(); // _ZN6S779C34v140Ev
  virtual void  v141(); // _ZN6S779C34v141Ev
  virtual void  v142(); // _ZN6S779C34v142Ev
  ~S779C3(); // tgen
  S779C3(); // tgen
};
//SIG(-1 S779C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S779C3 ::v125(){vfunc_called(this, "_ZN6S779C34v125Ev");}
void  S779C3 ::v126(){vfunc_called(this, "_ZN6S779C34v126Ev");}
void  S779C3 ::v127(){vfunc_called(this, "_ZN6S779C34v127Ev");}
void  S779C3 ::v128(){vfunc_called(this, "_ZN6S779C34v128Ev");}
void  S779C3 ::v129(){vfunc_called(this, "_ZN6S779C34v129Ev");}
void  S779C3 ::v130(){vfunc_called(this, "_ZN6S779C34v130Ev");}
void  S779C3 ::v131(){vfunc_called(this, "_ZN6S779C34v131Ev");}
void  S779C3 ::v132(){vfunc_called(this, "_ZN6S779C34v132Ev");}
void  S779C3 ::v133(){vfunc_called(this, "_ZN6S779C34v133Ev");}
void  S779C3 ::v134(){vfunc_called(this, "_ZN6S779C34v134Ev");}
void  S779C3 ::v135(){vfunc_called(this, "_ZN6S779C34v135Ev");}
void  S779C3 ::v136(){vfunc_called(this, "_ZN6S779C34v136Ev");}
void  S779C3 ::v137(){vfunc_called(this, "_ZN6S779C34v137Ev");}
void  S779C3 ::v138(){vfunc_called(this, "_ZN6S779C34v138Ev");}
void  S779C3 ::v139(){vfunc_called(this, "_ZN6S779C34v139Ev");}
void  S779C3 ::v140(){vfunc_called(this, "_ZN6S779C34v140Ev");}
void  S779C3 ::v141(){vfunc_called(this, "_ZN6S779C34v141Ev");}
void  S779C3 ::v142(){vfunc_called(this, "_ZN6S779C34v142Ev");}
S779C3 ::~S779C3(){ note_dtor("S779C3", this);} // tgen
S779C3 ::S779C3(){ note_ctor("S779C3", this);} // tgen

static void Test_S779C3()
{
  extern Class_Descriptor cd_S779C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S779C3, buf);
    S779C3 *dp, &lv = *(dp=new (buf) S779C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S779C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S779C3)");
    check_base_class_offset(lv, (S785C5_nt*)(S779C4*), 0, "S779C3");
    check_base_class_offset(lv, (S779C4*), 0, "S779C3");
    test_class_info(&lv, &cd_S779C3);
    dp->~S779C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS779C3(Test_S779C3, "S779C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S779C3C1Ev();
extern void _ZN6S779C3D1Ev();
Name_Map name_map_S779C3[] = {
  NSPAIR(_ZN6S779C3C1Ev),
  NSPAIR(_ZN6S779C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S779C4;
extern VTBL_ENTRY _ZTI6S779C4[];
extern  VTBL_ENTRY _ZTV6S779C4[];
static Base_Class bases_S779C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S779C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S779C3[];
extern void _ZN6S779C3D1Ev();
extern void _ZN6S779C3D0Ev();
extern void _ZN6S779C42v3Ev();
extern void _ZN6S779C42v4Ev();
extern void _ZN6S779C42v5Ev();
extern void _ZN6S779C42v6Ev();
extern void _ZN6S779C42v7Ev();
extern void _ZN6S779C42v8Ev();
extern void _ZN6S779C42v9Ev();
extern void _ZN6S779C43v10Ev();
extern void _ZN6S779C43v11Ev();
extern void _ZN6S779C43v12Ev();
extern void _ZN6S779C43v13Ev();
extern void _ZN6S779C43v14Ev();
extern void _ZN6S779C43v15Ev();
extern void _ZN6S779C43v16Ev();
extern void _ZN6S779C43v17Ev();
extern void _ZN6S779C43v18Ev();
extern void _ZN6S779C43v19Ev();
extern void _ZN6S779C43v20Ev();
extern void _ZN6S779C43v21Ev();
extern void _ZN6S779C43v22Ev();
extern void _ZN6S779C43v23Ev();
extern void _ZN6S779C43v24Ev();
extern void _ZN6S779C43v25Ev();
extern void _ZN6S779C43v26Ev();
extern void _ZN6S779C43v27Ev();
extern void _ZN6S779C43v28Ev();
extern void _ZN6S779C43v29Ev();
extern void _ZN6S779C43v30Ev();
extern void _ZN6S779C43v31Ev();
extern void _ZN6S779C43v32Ev();
extern void _ZN6S779C43v33Ev();
extern void _ZN6S779C43v34Ev();
extern void _ZN6S779C43v35Ev();
extern void _ZN6S779C43v36Ev();
extern void _ZN6S779C43v37Ev();
extern void _ZN6S779C43v38Ev();
extern void _ZN6S779C43v39Ev();
extern void _ZN6S779C43v40Ev();
extern void _ZN6S779C43v41Ev();
extern void _ZN6S779C43v42Ev();
extern void _ZN6S779C43v43Ev();
extern void _ZN6S779C43v44Ev();
extern void _ZN6S779C43v45Ev();
extern void _ZN6S779C43v46Ev();
extern void _ZN6S779C43v47Ev();
extern void _ZN6S779C43v48Ev();
extern void _ZN6S779C43v49Ev();
extern void _ZN6S779C43v50Ev();
extern void _ZN6S779C43v51Ev();
extern void _ZN6S779C43v52Ev();
extern void _ZN6S779C43v53Ev();
extern void _ZN6S779C43v54Ev();
extern void _ZN6S779C43v55Ev();
extern void _ZN6S779C43v56Ev();
extern void _ZN6S779C43v57Ev();
extern void _ZN6S779C43v58Ev();
extern void _ZN6S779C43v59Ev();
extern void _ZN6S779C43v60Ev();
extern void _ZN6S779C43v61Ev();
extern void _ZN6S779C43v62Ev();
extern void _ZN6S779C43v63Ev();
extern void _ZN6S779C43v64Ev();
extern void _ZN6S779C43v65Ev();
extern void _ZN6S779C43v66Ev();
extern void _ZN6S779C43v67Ev();
extern void _ZN6S779C43v68Ev();
extern void _ZN6S779C43v69Ev();
extern void _ZN6S779C43v70Ev();
extern void _ZN6S779C43v71Ev();
extern void _ZN6S779C43v72Ev();
extern void _ZN6S779C43v73Ev();
extern void _ZN6S779C43v74Ev();
extern void _ZN6S779C43v75Ev();
extern void _ZN6S779C43v76Ev();
extern void _ZN6S779C43v77Ev();
extern void _ZN6S779C43v78Ev();
extern void _ZN6S779C43v79Ev();
extern void _ZN6S779C43v80Ev();
extern void _ZN6S779C43v81Ev();
extern void _ZN6S779C43v82Ev();
extern void _ZN6S779C43v83Ev();
extern void _ZN6S779C43v84Ev();
extern void _ZN6S779C43v85Ev();
extern void _ZN6S779C43v86Ev();
extern void _ZN6S779C43v87Ev();
extern void _ZN6S779C43v88Ev();
extern void _ZN6S779C43v89Ev();
extern void _ZN6S779C43v90Ev();
extern void _ZN6S779C43v91Ev();
extern void _ZN6S779C43v92Ev();
extern void _ZN6S779C43v93Ev();
extern void _ZN6S779C43v94Ev();
extern void _ZN6S779C43v95Ev();
extern void _ZN6S779C43v96Ev();
extern void _ZN6S779C43v97Ev();
extern void _ZN6S779C43v98Ev();
extern void _ZN6S779C43v99Ev();
extern void _ZN6S779C44v100Ev();
extern void _ZN6S779C44v101Ev();
extern void _ZN6S779C44v102Ev();
extern void _ZN6S779C44v103Ev();
extern void _ZN6S779C44v104Ev();
extern void _ZN6S779C44v105Ev();
extern void _ZN6S779C44v106Ev();
extern void _ZN6S779C44v107Ev();
extern void _ZN6S779C44v108Ev();
extern void _ZN6S779C44v109Ev();
extern void _ZN6S779C44v110Ev();
extern void _ZN6S779C44v111Ev();
extern void _ZN6S779C44v112Ev();
extern void _ZN6S779C44v113Ev();
extern void _ZN6S779C44v114Ev();
extern void _ZN6S779C44v115Ev();
extern void _ZN6S779C44v116Ev();
extern void _ZN6S779C44v117Ev();
extern void _ZN6S779C44v118Ev();
extern void _ZN6S779C44v119Ev();
extern void _ZN6S779C44v120Ev();
extern void _ZN6S779C44v121Ev();
extern void _ZN6S779C44v122Ev();
extern void _ZN6S779C44v123Ev();
extern void _ZN6S779C44v124Ev();
extern void _ZN6S779C34v125Ev();
extern void _ZN6S779C34v126Ev();
extern void _ZN6S779C34v127Ev();
extern void _ZN6S779C34v128Ev();
extern void _ZN6S779C34v129Ev();
extern void _ZN6S779C34v130Ev();
extern void _ZN6S779C34v131Ev();
extern void _ZN6S779C34v132Ev();
extern void _ZN6S779C34v133Ev();
extern void _ZN6S779C34v134Ev();
extern void _ZN6S779C34v135Ev();
extern void _ZN6S779C34v136Ev();
extern void _ZN6S779C34v137Ev();
extern void _ZN6S779C34v138Ev();
extern void _ZN6S779C34v139Ev();
extern void _ZN6S779C34v140Ev();
extern void _ZN6S779C34v141Ev();
extern void _ZN6S779C34v142Ev();
static  VTBL_ENTRY vtc_S779C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S779C3[0]),
  (VTBL_ENTRY)&_ZN6S779C3D1Ev,
  (VTBL_ENTRY)&_ZN6S779C3D0Ev,
  (VTBL_ENTRY)&_ZN6S779C42v3Ev,
  (VTBL_ENTRY)&_ZN6S779C42v4Ev,
  (VTBL_ENTRY)&_ZN6S779C42v5Ev,
  (VTBL_ENTRY)&_ZN6S779C42v6Ev,
  (VTBL_ENTRY)&_ZN6S779C42v7Ev,
  (VTBL_ENTRY)&_ZN6S779C42v8Ev,
  (VTBL_ENTRY)&_ZN6S779C42v9Ev,
  (VTBL_ENTRY)&_ZN6S779C43v10Ev,
  (VTBL_ENTRY)&_ZN6S779C43v11Ev,
  (VTBL_ENTRY)&_ZN6S779C43v12Ev,
  (VTBL_ENTRY)&_ZN6S779C43v13Ev,
  (VTBL_ENTRY)&_ZN6S779C43v14Ev,
  (VTBL_ENTRY)&_ZN6S779C43v15Ev,
  (VTBL_ENTRY)&_ZN6S779C43v16Ev,
  (VTBL_ENTRY)&_ZN6S779C43v17Ev,
  (VTBL_ENTRY)&_ZN6S779C43v18Ev,
  (VTBL_ENTRY)&_ZN6S779C43v19Ev,
  (VTBL_ENTRY)&_ZN6S779C43v20Ev,
  (VTBL_ENTRY)&_ZN6S779C43v21Ev,
  (VTBL_ENTRY)&_ZN6S779C43v22Ev,
  (VTBL_ENTRY)&_ZN6S779C43v23Ev,
  (VTBL_ENTRY)&_ZN6S779C43v24Ev,
  (VTBL_ENTRY)&_ZN6S779C43v25Ev,
  (VTBL_ENTRY)&_ZN6S779C43v26Ev,
  (VTBL_ENTRY)&_ZN6S779C43v27Ev,
  (VTBL_ENTRY)&_ZN6S779C43v28Ev,
  (VTBL_ENTRY)&_ZN6S779C43v29Ev,
  (VTBL_ENTRY)&_ZN6S779C43v30Ev,
  (VTBL_ENTRY)&_ZN6S779C43v31Ev,
  (VTBL_ENTRY)&_ZN6S779C43v32Ev,
  (VTBL_ENTRY)&_ZN6S779C43v33Ev,
  (VTBL_ENTRY)&_ZN6S779C43v34Ev,
  (VTBL_ENTRY)&_ZN6S779C43v35Ev,
  (VTBL_ENTRY)&_ZN6S779C43v36Ev,
  (VTBL_ENTRY)&_ZN6S779C43v37Ev,
  (VTBL_ENTRY)&_ZN6S779C43v38Ev,
  (VTBL_ENTRY)&_ZN6S779C43v39Ev,
  (VTBL_ENTRY)&_ZN6S779C43v40Ev,
  (VTBL_ENTRY)&_ZN6S779C43v41Ev,
  (VTBL_ENTRY)&_ZN6S779C43v42Ev,
  (VTBL_ENTRY)&_ZN6S779C43v43Ev,
  (VTBL_ENTRY)&_ZN6S779C43v44Ev,
  (VTBL_ENTRY)&_ZN6S779C43v45Ev,
  (VTBL_ENTRY)&_ZN6S779C43v46Ev,
  (VTBL_ENTRY)&_ZN6S779C43v47Ev,
  (VTBL_ENTRY)&_ZN6S779C43v48Ev,
  (VTBL_ENTRY)&_ZN6S779C43v49Ev,
  (VTBL_ENTRY)&_ZN6S779C43v50Ev,
  (VTBL_ENTRY)&_ZN6S779C43v51Ev,
  (VTBL_ENTRY)&_ZN6S779C43v52Ev,
  (VTBL_ENTRY)&_ZN6S779C43v53Ev,
  (VTBL_ENTRY)&_ZN6S779C43v54Ev,
  (VTBL_ENTRY)&_ZN6S779C43v55Ev,
  (VTBL_ENTRY)&_ZN6S779C43v56Ev,
  (VTBL_ENTRY)&_ZN6S779C43v57Ev,
  (VTBL_ENTRY)&_ZN6S779C43v58Ev,
  (VTBL_ENTRY)&_ZN6S779C43v59Ev,
  (VTBL_ENTRY)&_ZN6S779C43v60Ev,
  (VTBL_ENTRY)&_ZN6S779C43v61Ev,
  (VTBL_ENTRY)&_ZN6S779C43v62Ev,
  (VTBL_ENTRY)&_ZN6S779C43v63Ev,
  (VTBL_ENTRY)&_ZN6S779C43v64Ev,
  (VTBL_ENTRY)&_ZN6S779C43v65Ev,
  (VTBL_ENTRY)&_ZN6S779C43v66Ev,
  (VTBL_ENTRY)&_ZN6S779C43v67Ev,
  (VTBL_ENTRY)&_ZN6S779C43v68Ev,
  (VTBL_ENTRY)&_ZN6S779C43v69Ev,
  (VTBL_ENTRY)&_ZN6S779C43v70Ev,
  (VTBL_ENTRY)&_ZN6S779C43v71Ev,
  (VTBL_ENTRY)&_ZN6S779C43v72Ev,
  (VTBL_ENTRY)&_ZN6S779C43v73Ev,
  (VTBL_ENTRY)&_ZN6S779C43v74Ev,
  (VTBL_ENTRY)&_ZN6S779C43v75Ev,
  (VTBL_ENTRY)&_ZN6S779C43v76Ev,
  (VTBL_ENTRY)&_ZN6S779C43v77Ev,
  (VTBL_ENTRY)&_ZN6S779C43v78Ev,
  (VTBL_ENTRY)&_ZN6S779C43v79Ev,
  (VTBL_ENTRY)&_ZN6S779C43v80Ev,
  (VTBL_ENTRY)&_ZN6S779C43v81Ev,
  (VTBL_ENTRY)&_ZN6S779C43v82Ev,
  (VTBL_ENTRY)&_ZN6S779C43v83Ev,
  (VTBL_ENTRY)&_ZN6S779C43v84Ev,
  (VTBL_ENTRY)&_ZN6S779C43v85Ev,
  (VTBL_ENTRY)&_ZN6S779C43v86Ev,
  (VTBL_ENTRY)&_ZN6S779C43v87Ev,
  (VTBL_ENTRY)&_ZN6S779C43v88Ev,
  (VTBL_ENTRY)&_ZN6S779C43v89Ev,
  (VTBL_ENTRY)&_ZN6S779C43v90Ev,
  (VTBL_ENTRY)&_ZN6S779C43v91Ev,
  (VTBL_ENTRY)&_ZN6S779C43v92Ev,
  (VTBL_ENTRY)&_ZN6S779C43v93Ev,
  (VTBL_ENTRY)&_ZN6S779C43v94Ev,
  (VTBL_ENTRY)&_ZN6S779C43v95Ev,
  (VTBL_ENTRY)&_ZN6S779C43v96Ev,
  (VTBL_ENTRY)&_ZN6S779C43v97Ev,
  (VTBL_ENTRY)&_ZN6S779C43v98Ev,
  (VTBL_ENTRY)&_ZN6S779C43v99Ev,
  (VTBL_ENTRY)&_ZN6S779C44v100Ev,
  (VTBL_ENTRY)&_ZN6S779C44v101Ev,
  (VTBL_ENTRY)&_ZN6S779C44v102Ev,
  (VTBL_ENTRY)&_ZN6S779C44v103Ev,
  (VTBL_ENTRY)&_ZN6S779C44v104Ev,
  (VTBL_ENTRY)&_ZN6S779C44v105Ev,
  (VTBL_ENTRY)&_ZN6S779C44v106Ev,
  (VTBL_ENTRY)&_ZN6S779C44v107Ev,
  (VTBL_ENTRY)&_ZN6S779C44v108Ev,
  (VTBL_ENTRY)&_ZN6S779C44v109Ev,
  (VTBL_ENTRY)&_ZN6S779C44v110Ev,
  (VTBL_ENTRY)&_ZN6S779C44v111Ev,
  (VTBL_ENTRY)&_ZN6S779C44v112Ev,
  (VTBL_ENTRY)&_ZN6S779C44v113Ev,
  (VTBL_ENTRY)&_ZN6S779C44v114Ev,
  (VTBL_ENTRY)&_ZN6S779C44v115Ev,
  (VTBL_ENTRY)&_ZN6S779C44v116Ev,
  (VTBL_ENTRY)&_ZN6S779C44v117Ev,
  (VTBL_ENTRY)&_ZN6S779C44v118Ev,
  (VTBL_ENTRY)&_ZN6S779C44v119Ev,
  (VTBL_ENTRY)&_ZN6S779C44v120Ev,
  (VTBL_ENTRY)&_ZN6S779C44v121Ev,
  (VTBL_ENTRY)&_ZN6S779C44v122Ev,
  (VTBL_ENTRY)&_ZN6S779C44v123Ev,
  (VTBL_ENTRY)&_ZN6S779C44v124Ev,
  (VTBL_ENTRY)&_ZN6S779C34v125Ev,
  (VTBL_ENTRY)&_ZN6S779C34v126Ev,
  (VTBL_ENTRY)&_ZN6S779C34v127Ev,
  (VTBL_ENTRY)&_ZN6S779C34v128Ev,
  (VTBL_ENTRY)&_ZN6S779C34v129Ev,
  (VTBL_ENTRY)&_ZN6S779C34v130Ev,
  (VTBL_ENTRY)&_ZN6S779C34v131Ev,
  (VTBL_ENTRY)&_ZN6S779C34v132Ev,
  (VTBL_ENTRY)&_ZN6S779C34v133Ev,
  (VTBL_ENTRY)&_ZN6S779C34v134Ev,
  (VTBL_ENTRY)&_ZN6S779C34v135Ev,
  (VTBL_ENTRY)&_ZN6S779C34v136Ev,
  (VTBL_ENTRY)&_ZN6S779C34v137Ev,
  (VTBL_ENTRY)&_ZN6S779C34v138Ev,
  (VTBL_ENTRY)&_ZN6S779C34v139Ev,
  (VTBL_ENTRY)&_ZN6S779C34v140Ev,
  (VTBL_ENTRY)&_ZN6S779C34v141Ev,
  (VTBL_ENTRY)&_ZN6S779C34v142Ev,
};
extern VTBL_ENTRY _ZTI6S779C3[];
extern  VTBL_ENTRY _ZTV6S779C3[];
Class_Descriptor cd_S779C3 = {  "S779C3", // class name
  bases_S779C3, 2,
  &(vtc_S779C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S779C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S779C3),144, //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  S779C2  : S779C3 {
  virtual void  v143(); // _ZN6S779C24v143Ev
  virtual void  v144(); // _ZN6S779C24v144Ev
  virtual void  v145(); // _ZN6S779C24v145Ev
  virtual void  v146(); // _ZN6S779C24v146Ev
  virtual void  v147(); // _ZN6S779C24v147Ev
  virtual void  v148(); // _ZN6S779C24v148Ev
  ~S779C2(); // tgen
  S779C2(); // tgen
};
//SIG(-1 S779C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 v144 v145 v146} v1 v2 v3 v4 v5 v6}


void  S779C2 ::v143(){vfunc_called(this, "_ZN6S779C24v143Ev");}
void  S779C2 ::v144(){vfunc_called(this, "_ZN6S779C24v144Ev");}
void  S779C2 ::v145(){vfunc_called(this, "_ZN6S779C24v145Ev");}
void  S779C2 ::v146(){vfunc_called(this, "_ZN6S779C24v146Ev");}
void  S779C2 ::v147(){vfunc_called(this, "_ZN6S779C24v147Ev");}
void  S779C2 ::v148(){vfunc_called(this, "_ZN6S779C24v148Ev");}
S779C2 ::~S779C2(){ note_dtor("S779C2", this);} // tgen
S779C2 ::S779C2(){ note_ctor("S779C2", this);} // tgen

static void Test_S779C2()
{
  extern Class_Descriptor cd_S779C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S779C2, buf);
    S779C2 *dp, &lv = *(dp=new (buf) S779C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S779C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S779C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S779C4*)(S779C3*), 0, "S779C2");
    check_base_class_offset(lv, (S779C4*)(S779C3*), 0, "S779C2");
    check_base_class_offset(lv, (S779C3*), 0, "S779C2");
    test_class_info(&lv, &cd_S779C2);
    dp->~S779C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS779C2(Test_S779C2, "S779C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S779C2C1Ev();
extern void _ZN6S779C2D1Ev();
Name_Map name_map_S779C2[] = {
  NSPAIR(_ZN6S779C2C1Ev),
  NSPAIR(_ZN6S779C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S779C4;
extern VTBL_ENTRY _ZTI6S779C4[];
extern  VTBL_ENTRY _ZTV6S779C4[];
extern Class_Descriptor cd_S779C3;
extern VTBL_ENTRY _ZTI6S779C3[];
extern  VTBL_ENTRY _ZTV6S779C3[];
static Base_Class bases_S779C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S779C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S779C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S779C2[];
extern void _ZN6S779C2D1Ev();
extern void _ZN6S779C2D0Ev();
extern void _ZN6S779C42v3Ev();
extern void _ZN6S779C42v4Ev();
extern void _ZN6S779C42v5Ev();
extern void _ZN6S779C42v6Ev();
extern void _ZN6S779C42v7Ev();
extern void _ZN6S779C42v8Ev();
extern void _ZN6S779C42v9Ev();
extern void _ZN6S779C43v10Ev();
extern void _ZN6S779C43v11Ev();
extern void _ZN6S779C43v12Ev();
extern void _ZN6S779C43v13Ev();
extern void _ZN6S779C43v14Ev();
extern void _ZN6S779C43v15Ev();
extern void _ZN6S779C43v16Ev();
extern void _ZN6S779C43v17Ev();
extern void _ZN6S779C43v18Ev();
extern void _ZN6S779C43v19Ev();
extern void _ZN6S779C43v20Ev();
extern void _ZN6S779C43v21Ev();
extern void _ZN6S779C43v22Ev();
extern void _ZN6S779C43v23Ev();
extern void _ZN6S779C43v24Ev();
extern void _ZN6S779C43v25Ev();
extern void _ZN6S779C43v26Ev();
extern void _ZN6S779C43v27Ev();
extern void _ZN6S779C43v28Ev();
extern void _ZN6S779C43v29Ev();
extern void _ZN6S779C43v30Ev();
extern void _ZN6S779C43v31Ev();
extern void _ZN6S779C43v32Ev();
extern void _ZN6S779C43v33Ev();
extern void _ZN6S779C43v34Ev();
extern void _ZN6S779C43v35Ev();
extern void _ZN6S779C43v36Ev();
extern void _ZN6S779C43v37Ev();
extern void _ZN6S779C43v38Ev();
extern void _ZN6S779C43v39Ev();
extern void _ZN6S779C43v40Ev();
extern void _ZN6S779C43v41Ev();
extern void _ZN6S779C43v42Ev();
extern void _ZN6S779C43v43Ev();
extern void _ZN6S779C43v44Ev();
extern void _ZN6S779C43v45Ev();
extern void _ZN6S779C43v46Ev();
extern void _ZN6S779C43v47Ev();
extern void _ZN6S779C43v48Ev();
extern void _ZN6S779C43v49Ev();
extern void _ZN6S779C43v50Ev();
extern void _ZN6S779C43v51Ev();
extern void _ZN6S779C43v52Ev();
extern void _ZN6S779C43v53Ev();
extern void _ZN6S779C43v54Ev();
extern void _ZN6S779C43v55Ev();
extern void _ZN6S779C43v56Ev();
extern void _ZN6S779C43v57Ev();
extern void _ZN6S779C43v58Ev();
extern void _ZN6S779C43v59Ev();
extern void _ZN6S779C43v60Ev();
extern void _ZN6S779C43v61Ev();
extern void _ZN6S779C43v62Ev();
extern void _ZN6S779C43v63Ev();
extern void _ZN6S779C43v64Ev();
extern void _ZN6S779C43v65Ev();
extern void _ZN6S779C43v66Ev();
extern void _ZN6S779C43v67Ev();
extern void _ZN6S779C43v68Ev();
extern void _ZN6S779C43v69Ev();
extern void _ZN6S779C43v70Ev();
extern void _ZN6S779C43v71Ev();
extern void _ZN6S779C43v72Ev();
extern void _ZN6S779C43v73Ev();
extern void _ZN6S779C43v74Ev();
extern void _ZN6S779C43v75Ev();
extern void _ZN6S779C43v76Ev();
extern void _ZN6S779C43v77Ev();
extern void _ZN6S779C43v78Ev();
extern void _ZN6S779C43v79Ev();
extern void _ZN6S779C43v80Ev();
extern void _ZN6S779C43v81Ev();
extern void _ZN6S779C43v82Ev();
extern void _ZN6S779C43v83Ev();
extern void _ZN6S779C43v84Ev();
extern void _ZN6S779C43v85Ev();
extern void _ZN6S779C43v86Ev();
extern void _ZN6S779C43v87Ev();
extern void _ZN6S779C43v88Ev();
extern void _ZN6S779C43v89Ev();
extern void _ZN6S779C43v90Ev();
extern void _ZN6S779C43v91Ev();
extern void _ZN6S779C43v92Ev();
extern void _ZN6S779C43v93Ev();
extern void _ZN6S779C43v94Ev();
extern void _ZN6S779C43v95Ev();
extern void _ZN6S779C43v96Ev();
extern void _ZN6S779C43v97Ev();
extern void _ZN6S779C43v98Ev();
extern void _ZN6S779C43v99Ev();
extern void _ZN6S779C44v100Ev();
extern void _ZN6S779C44v101Ev();
extern void _ZN6S779C44v102Ev();
extern void _ZN6S779C44v103Ev();
extern void _ZN6S779C44v104Ev();
extern void _ZN6S779C44v105Ev();
extern void _ZN6S779C44v106Ev();
extern void _ZN6S779C44v107Ev();
extern void _ZN6S779C44v108Ev();
extern void _ZN6S779C44v109Ev();
extern void _ZN6S779C44v110Ev();
extern void _ZN6S779C44v111Ev();
extern void _ZN6S779C44v112Ev();
extern void _ZN6S779C44v113Ev();
extern void _ZN6S779C44v114Ev();
extern void _ZN6S779C44v115Ev();
extern void _ZN6S779C44v116Ev();
extern void _ZN6S779C44v117Ev();
extern void _ZN6S779C44v118Ev();
extern void _ZN6S779C44v119Ev();
extern void _ZN6S779C44v120Ev();
extern void _ZN6S779C44v121Ev();
extern void _ZN6S779C44v122Ev();
extern void _ZN6S779C44v123Ev();
extern void _ZN6S779C44v124Ev();
extern void _ZN6S779C34v125Ev();
extern void _ZN6S779C34v126Ev();
extern void _ZN6S779C34v127Ev();
extern void _ZN6S779C34v128Ev();
extern void _ZN6S779C34v129Ev();
extern void _ZN6S779C34v130Ev();
extern void _ZN6S779C34v131Ev();
extern void _ZN6S779C34v132Ev();
extern void _ZN6S779C34v133Ev();
extern void _ZN6S779C34v134Ev();
extern void _ZN6S779C34v135Ev();
extern void _ZN6S779C34v136Ev();
extern void _ZN6S779C34v137Ev();
extern void _ZN6S779C34v138Ev();
extern void _ZN6S779C34v139Ev();
extern void _ZN6S779C34v140Ev();
extern void _ZN6S779C34v141Ev();
extern void _ZN6S779C34v142Ev();
extern void _ZN6S779C24v143Ev();
extern void _ZN6S779C24v144Ev();
extern void _ZN6S779C24v145Ev();
extern void _ZN6S779C24v146Ev();
extern void _ZN6S779C24v147Ev();
extern void _ZN6S779C24v148Ev();
static  VTBL_ENTRY vtc_S779C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S779C2[0]),
  (VTBL_ENTRY)&_ZN6S779C2D1Ev,
  (VTBL_ENTRY)&_ZN6S779C2D0Ev,
  (VTBL_ENTRY)&_ZN6S779C42v3Ev,
  (VTBL_ENTRY)&_ZN6S779C42v4Ev,
  (VTBL_ENTRY)&_ZN6S779C42v5Ev,
  (VTBL_ENTRY)&_ZN6S779C42v6Ev,
  (VTBL_ENTRY)&_ZN6S779C42v7Ev,
  (VTBL_ENTRY)&_ZN6S779C42v8Ev,
  (VTBL_ENTRY)&_ZN6S779C42v9Ev,
  (VTBL_ENTRY)&_ZN6S779C43v10Ev,
  (VTBL_ENTRY)&_ZN6S779C43v11Ev,
  (VTBL_ENTRY)&_ZN6S779C43v12Ev,
  (VTBL_ENTRY)&_ZN6S779C43v13Ev,
  (VTBL_ENTRY)&_ZN6S779C43v14Ev,
  (VTBL_ENTRY)&_ZN6S779C43v15Ev,
  (VTBL_ENTRY)&_ZN6S779C43v16Ev,
  (VTBL_ENTRY)&_ZN6S779C43v17Ev,
  (VTBL_ENTRY)&_ZN6S779C43v18Ev,
  (VTBL_ENTRY)&_ZN6S779C43v19Ev,
  (VTBL_ENTRY)&_ZN6S779C43v20Ev,
  (VTBL_ENTRY)&_ZN6S779C43v21Ev,
  (VTBL_ENTRY)&_ZN6S779C43v22Ev,
  (VTBL_ENTRY)&_ZN6S779C43v23Ev,
  (VTBL_ENTRY)&_ZN6S779C43v24Ev,
  (VTBL_ENTRY)&_ZN6S779C43v25Ev,
  (VTBL_ENTRY)&_ZN6S779C43v26Ev,
  (VTBL_ENTRY)&_ZN6S779C43v27Ev,
  (VTBL_ENTRY)&_ZN6S779C43v28Ev,
  (VTBL_ENTRY)&_ZN6S779C43v29Ev,
  (VTBL_ENTRY)&_ZN6S779C43v30Ev,
  (VTBL_ENTRY)&_ZN6S779C43v31Ev,
  (VTBL_ENTRY)&_ZN6S779C43v32Ev,
  (VTBL_ENTRY)&_ZN6S779C43v33Ev,
  (VTBL_ENTRY)&_ZN6S779C43v34Ev,
  (VTBL_ENTRY)&_ZN6S779C43v35Ev,
  (VTBL_ENTRY)&_ZN6S779C43v36Ev,
  (VTBL_ENTRY)&_ZN6S779C43v37Ev,
  (VTBL_ENTRY)&_ZN6S779C43v38Ev,
  (VTBL_ENTRY)&_ZN6S779C43v39Ev,
  (VTBL_ENTRY)&_ZN6S779C43v40Ev,
  (VTBL_ENTRY)&_ZN6S779C43v41Ev,
  (VTBL_ENTRY)&_ZN6S779C43v42Ev,
  (VTBL_ENTRY)&_ZN6S779C43v43Ev,
  (VTBL_ENTRY)&_ZN6S779C43v44Ev,
  (VTBL_ENTRY)&_ZN6S779C43v45Ev,
  (VTBL_ENTRY)&_ZN6S779C43v46Ev,
  (VTBL_ENTRY)&_ZN6S779C43v47Ev,
  (VTBL_ENTRY)&_ZN6S779C43v48Ev,
  (VTBL_ENTRY)&_ZN6S779C43v49Ev,
  (VTBL_ENTRY)&_ZN6S779C43v50Ev,
  (VTBL_ENTRY)&_ZN6S779C43v51Ev,
  (VTBL_ENTRY)&_ZN6S779C43v52Ev,
  (VTBL_ENTRY)&_ZN6S779C43v53Ev,
  (VTBL_ENTRY)&_ZN6S779C43v54Ev,
  (VTBL_ENTRY)&_ZN6S779C43v55Ev,
  (VTBL_ENTRY)&_ZN6S779C43v56Ev,
  (VTBL_ENTRY)&_ZN6S779C43v57Ev,
  (VTBL_ENTRY)&_ZN6S779C43v58Ev,
  (VTBL_ENTRY)&_ZN6S779C43v59Ev,
  (VTBL_ENTRY)&_ZN6S779C43v60Ev,
  (VTBL_ENTRY)&_ZN6S779C43v61Ev,
  (VTBL_ENTRY)&_ZN6S779C43v62Ev,
  (VTBL_ENTRY)&_ZN6S779C43v63Ev,
  (VTBL_ENTRY)&_ZN6S779C43v64Ev,
  (VTBL_ENTRY)&_ZN6S779C43v65Ev,
  (VTBL_ENTRY)&_ZN6S779C43v66Ev,
  (VTBL_ENTRY)&_ZN6S779C43v67Ev,
  (VTBL_ENTRY)&_ZN6S779C43v68Ev,
  (VTBL_ENTRY)&_ZN6S779C43v69Ev,
  (VTBL_ENTRY)&_ZN6S779C43v70Ev,
  (VTBL_ENTRY)&_ZN6S779C43v71Ev,
  (VTBL_ENTRY)&_ZN6S779C43v72Ev,
  (VTBL_ENTRY)&_ZN6S779C43v73Ev,
  (VTBL_ENTRY)&_ZN6S779C43v74Ev,
  (VTBL_ENTRY)&_ZN6S779C43v75Ev,
  (VTBL_ENTRY)&_ZN6S779C43v76Ev,
  (VTBL_ENTRY)&_ZN6S779C43v77Ev,
  (VTBL_ENTRY)&_ZN6S779C43v78Ev,
  (VTBL_ENTRY)&_ZN6S779C43v79Ev,
  (VTBL_ENTRY)&_ZN6S779C43v80Ev,
  (VTBL_ENTRY)&_ZN6S779C43v81Ev,
  (VTBL_ENTRY)&_ZN6S779C43v82Ev,
  (VTBL_ENTRY)&_ZN6S779C43v83Ev,
  (VTBL_ENTRY)&_ZN6S779C43v84Ev,
  (VTBL_ENTRY)&_ZN6S779C43v85Ev,
  (VTBL_ENTRY)&_ZN6S779C43v86Ev,
  (VTBL_ENTRY)&_ZN6S779C43v87Ev,
  (VTBL_ENTRY)&_ZN6S779C43v88Ev,
  (VTBL_ENTRY)&_ZN6S779C43v89Ev,
  (VTBL_ENTRY)&_ZN6S779C43v90Ev,
  (VTBL_ENTRY)&_ZN6S779C43v91Ev,
  (VTBL_ENTRY)&_ZN6S779C43v92Ev,
  (VTBL_ENTRY)&_ZN6S779C43v93Ev,
  (VTBL_ENTRY)&_ZN6S779C43v94Ev,
  (VTBL_ENTRY)&_ZN6S779C43v95Ev,
  (VTBL_ENTRY)&_ZN6S779C43v96Ev,
  (VTBL_ENTRY)&_ZN6S779C43v97Ev,
  (VTBL_ENTRY)&_ZN6S779C43v98Ev,
  (VTBL_ENTRY)&_ZN6S779C43v99Ev,
  (VTBL_ENTRY)&_ZN6S779C44v100Ev,
  (VTBL_ENTRY)&_ZN6S779C44v101Ev,
  (VTBL_ENTRY)&_ZN6S779C44v102Ev,
  (VTBL_ENTRY)&_ZN6S779C44v103Ev,
  (VTBL_ENTRY)&_ZN6S779C44v104Ev,
  (VTBL_ENTRY)&_ZN6S779C44v105Ev,
  (VTBL_ENTRY)&_ZN6S779C44v106Ev,
  (VTBL_ENTRY)&_ZN6S779C44v107Ev,
  (VTBL_ENTRY)&_ZN6S779C44v108Ev,
  (VTBL_ENTRY)&_ZN6S779C44v109Ev,
  (VTBL_ENTRY)&_ZN6S779C44v110Ev,
  (VTBL_ENTRY)&_ZN6S779C44v111Ev,
  (VTBL_ENTRY)&_ZN6S779C44v112Ev,
  (VTBL_ENTRY)&_ZN6S779C44v113Ev,
  (VTBL_ENTRY)&_ZN6S779C44v114Ev,
  (VTBL_ENTRY)&_ZN6S779C44v115Ev,
  (VTBL_ENTRY)&_ZN6S779C44v116Ev,
  (VTBL_ENTRY)&_ZN6S779C44v117Ev,
  (VTBL_ENTRY)&_ZN6S779C44v118Ev,
  (VTBL_ENTRY)&_ZN6S779C44v119Ev,
  (VTBL_ENTRY)&_ZN6S779C44v120Ev,
  (VTBL_ENTRY)&_ZN6S779C44v121Ev,
  (VTBL_ENTRY)&_ZN6S779C44v122Ev,
  (VTBL_ENTRY)&_ZN6S779C44v123Ev,
  (VTBL_ENTRY)&_ZN6S779C44v124Ev,
  (VTBL_ENTRY)&_ZN6S779C34v125Ev,
  (VTBL_ENTRY)&_ZN6S779C34v126Ev,
  (VTBL_ENTRY)&_ZN6S779C34v127Ev,
  (VTBL_ENTRY)&_ZN6S779C34v128Ev,
  (VTBL_ENTRY)&_ZN6S779C34v129Ev,
  (VTBL_ENTRY)&_ZN6S779C34v130Ev,
  (VTBL_ENTRY)&_ZN6S779C34v131Ev,
  (VTBL_ENTRY)&_ZN6S779C34v132Ev,
  (VTBL_ENTRY)&_ZN6S779C34v133Ev,
  (VTBL_ENTRY)&_ZN6S779C34v134Ev,
  (VTBL_ENTRY)&_ZN6S779C34v135Ev,
  (VTBL_ENTRY)&_ZN6S779C34v136Ev,
  (VTBL_ENTRY)&_ZN6S779C34v137Ev,
  (VTBL_ENTRY)&_ZN6S779C34v138Ev,
  (VTBL_ENTRY)&_ZN6S779C34v139Ev,
  (VTBL_ENTRY)&_ZN6S779C34v140Ev,
  (VTBL_ENTRY)&_ZN6S779C34v141Ev,
  (VTBL_ENTRY)&_ZN6S779C34v142Ev,
  (VTBL_ENTRY)&_ZN6S779C24v143Ev,
  (VTBL_ENTRY)&_ZN6S779C24v144Ev,
  (VTBL_ENTRY)&_ZN6S779C24v145Ev,
  (VTBL_ENTRY)&_ZN6S779C24v146Ev,
  (VTBL_ENTRY)&_ZN6S779C24v147Ev,
  (VTBL_ENTRY)&_ZN6S779C24v148Ev,
};
extern VTBL_ENTRY _ZTI6S779C2[];
extern  VTBL_ENTRY _ZTV6S779C2[];
Class_Descriptor cd_S779C2 = {  "S779C2", // class name
  bases_S779C2, 3,
  &(vtc_S779C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S779C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S779C2),150, //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  S779C1  : S779C2 {
  virtual void  v1(); // _ZN6S779C12v1Ev
  virtual void  v2(); // _ZN6S779C12v2Ev
  ~S779C1(); // tgen
  S779C1(); // tgen
};
//SIG(1 S779C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 v144 v145 v146 v147 v148} v1 v2}


void  S779C1 ::v1(){vfunc_called(this, "_ZN6S779C12v1Ev");}
void  S779C1 ::v2(){vfunc_called(this, "_ZN6S779C12v2Ev");}
S779C1 ::~S779C1(){ note_dtor("S779C1", this);} // tgen
S779C1 ::S779C1(){ note_ctor("S779C1", this);} // tgen

static void Test_S779C1()
{
  extern Class_Descriptor cd_S779C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S779C1, buf);
    S779C1 *dp, &lv = *(dp=new (buf) S779C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S779C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S779C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S779C4*)(S779C3*)(S779C2*), 0, "S779C1");
    check_base_class_offset(lv, (S779C4*)(S779C3*)(S779C2*), 0, "S779C1");
    check_base_class_offset(lv, (S779C3*)(S779C2*), 0, "S779C1");
    check_base_class_offset(lv, (S779C2*), 0, "S779C1");
    test_class_info(&lv, &cd_S779C1);
    dp->~S779C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS779C1(Test_S779C1, "S779C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S779C1C1Ev();
extern void _ZN6S779C1D1Ev();
Name_Map name_map_S779C1[] = {
  NSPAIR(_ZN6S779C1C1Ev),
  NSPAIR(_ZN6S779C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S779C4;
extern VTBL_ENTRY _ZTI6S779C4[];
extern  VTBL_ENTRY _ZTV6S779C4[];
extern Class_Descriptor cd_S779C3;
extern VTBL_ENTRY _ZTI6S779C3[];
extern  VTBL_ENTRY _ZTV6S779C3[];
extern Class_Descriptor cd_S779C2;
extern VTBL_ENTRY _ZTI6S779C2[];
extern  VTBL_ENTRY _ZTV6S779C2[];
static Base_Class bases_S779C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S779C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S779C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S779C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S779C1[];
extern void _ZN6S779C1D1Ev();
extern void _ZN6S779C1D0Ev();
extern void _ZN6S779C42v3Ev();
extern void _ZN6S779C42v4Ev();
extern void _ZN6S779C42v5Ev();
extern void _ZN6S779C42v6Ev();
extern void _ZN6S779C42v7Ev();
extern void _ZN6S779C42v8Ev();
extern void _ZN6S779C42v9Ev();
extern void _ZN6S779C43v10Ev();
extern void _ZN6S779C43v11Ev();
extern void _ZN6S779C43v12Ev();
extern void _ZN6S779C43v13Ev();
extern void _ZN6S779C43v14Ev();
extern void _ZN6S779C43v15Ev();
extern void _ZN6S779C43v16Ev();
extern void _ZN6S779C43v17Ev();
extern void _ZN6S779C43v18Ev();
extern void _ZN6S779C43v19Ev();
extern void _ZN6S779C43v20Ev();
extern void _ZN6S779C43v21Ev();
extern void _ZN6S779C43v22Ev();
extern void _ZN6S779C43v23Ev();
extern void _ZN6S779C43v24Ev();
extern void _ZN6S779C43v25Ev();
extern void _ZN6S779C43v26Ev();
extern void _ZN6S779C43v27Ev();
extern void _ZN6S779C43v28Ev();
extern void _ZN6S779C43v29Ev();
extern void _ZN6S779C43v30Ev();
extern void _ZN6S779C43v31Ev();
extern void _ZN6S779C43v32Ev();
extern void _ZN6S779C43v33Ev();
extern void _ZN6S779C43v34Ev();
extern void _ZN6S779C43v35Ev();
extern void _ZN6S779C43v36Ev();
extern void _ZN6S779C43v37Ev();
extern void _ZN6S779C43v38Ev();
extern void _ZN6S779C43v39Ev();
extern void _ZN6S779C43v40Ev();
extern void _ZN6S779C43v41Ev();
extern void _ZN6S779C43v42Ev();
extern void _ZN6S779C43v43Ev();
extern void _ZN6S779C43v44Ev();
extern void _ZN6S779C43v45Ev();
extern void _ZN6S779C43v46Ev();
extern void _ZN6S779C43v47Ev();
extern void _ZN6S779C43v48Ev();
extern void _ZN6S779C43v49Ev();
extern void _ZN6S779C43v50Ev();
extern void _ZN6S779C43v51Ev();
extern void _ZN6S779C43v52Ev();
extern void _ZN6S779C43v53Ev();
extern void _ZN6S779C43v54Ev();
extern void _ZN6S779C43v55Ev();
extern void _ZN6S779C43v56Ev();
extern void _ZN6S779C43v57Ev();
extern void _ZN6S779C43v58Ev();
extern void _ZN6S779C43v59Ev();
extern void _ZN6S779C43v60Ev();
extern void _ZN6S779C43v61Ev();
extern void _ZN6S779C43v62Ev();
extern void _ZN6S779C43v63Ev();
extern void _ZN6S779C43v64Ev();
extern void _ZN6S779C43v65Ev();
extern void _ZN6S779C43v66Ev();
extern void _ZN6S779C43v67Ev();
extern void _ZN6S779C43v68Ev();
extern void _ZN6S779C43v69Ev();
extern void _ZN6S779C43v70Ev();
extern void _ZN6S779C43v71Ev();
extern void _ZN6S779C43v72Ev();
extern void _ZN6S779C43v73Ev();
extern void _ZN6S779C43v74Ev();
extern void _ZN6S779C43v75Ev();
extern void _ZN6S779C43v76Ev();
extern void _ZN6S779C43v77Ev();
extern void _ZN6S779C43v78Ev();
extern void _ZN6S779C43v79Ev();
extern void _ZN6S779C43v80Ev();
extern void _ZN6S779C43v81Ev();
extern void _ZN6S779C43v82Ev();
extern void _ZN6S779C43v83Ev();
extern void _ZN6S779C43v84Ev();
extern void _ZN6S779C43v85Ev();
extern void _ZN6S779C43v86Ev();
extern void _ZN6S779C43v87Ev();
extern void _ZN6S779C43v88Ev();
extern void _ZN6S779C43v89Ev();
extern void _ZN6S779C43v90Ev();
extern void _ZN6S779C43v91Ev();
extern void _ZN6S779C43v92Ev();
extern void _ZN6S779C43v93Ev();
extern void _ZN6S779C43v94Ev();
extern void _ZN6S779C43v95Ev();
extern void _ZN6S779C43v96Ev();
extern void _ZN6S779C43v97Ev();
extern void _ZN6S779C43v98Ev();
extern void _ZN6S779C43v99Ev();
extern void _ZN6S779C44v100Ev();
extern void _ZN6S779C44v101Ev();
extern void _ZN6S779C44v102Ev();
extern void _ZN6S779C44v103Ev();
extern void _ZN6S779C44v104Ev();
extern void _ZN6S779C44v105Ev();
extern void _ZN6S779C44v106Ev();
extern void _ZN6S779C44v107Ev();
extern void _ZN6S779C44v108Ev();
extern void _ZN6S779C44v109Ev();
extern void _ZN6S779C44v110Ev();
extern void _ZN6S779C44v111Ev();
extern void _ZN6S779C44v112Ev();
extern void _ZN6S779C44v113Ev();
extern void _ZN6S779C44v114Ev();
extern void _ZN6S779C44v115Ev();
extern void _ZN6S779C44v116Ev();
extern void _ZN6S779C44v117Ev();
extern void _ZN6S779C44v118Ev();
extern void _ZN6S779C44v119Ev();
extern void _ZN6S779C44v120Ev();
extern void _ZN6S779C44v121Ev();
extern void _ZN6S779C44v122Ev();
extern void _ZN6S779C44v123Ev();
extern void _ZN6S779C44v124Ev();
extern void _ZN6S779C34v125Ev();
extern void _ZN6S779C34v126Ev();
extern void _ZN6S779C34v127Ev();
extern void _ZN6S779C34v128Ev();
extern void _ZN6S779C34v129Ev();
extern void _ZN6S779C34v130Ev();
extern void _ZN6S779C34v131Ev();
extern void _ZN6S779C34v132Ev();
extern void _ZN6S779C34v133Ev();
extern void _ZN6S779C34v134Ev();
extern void _ZN6S779C34v135Ev();
extern void _ZN6S779C34v136Ev();
extern void _ZN6S779C34v137Ev();
extern void _ZN6S779C34v138Ev();
extern void _ZN6S779C34v139Ev();
extern void _ZN6S779C34v140Ev();
extern void _ZN6S779C34v141Ev();
extern void _ZN6S779C34v142Ev();
extern void _ZN6S779C24v143Ev();
extern void _ZN6S779C24v144Ev();
extern void _ZN6S779C24v145Ev();
extern void _ZN6S779C24v146Ev();
extern void _ZN6S779C24v147Ev();
extern void _ZN6S779C24v148Ev();
extern void _ZN6S779C12v1Ev();
extern void _ZN6S779C12v2Ev();
static  VTBL_ENTRY vtc_S779C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S779C1[0]),
  (VTBL_ENTRY)&_ZN6S779C1D1Ev,
  (VTBL_ENTRY)&_ZN6S779C1D0Ev,
  (VTBL_ENTRY)&_ZN6S779C42v3Ev,
  (VTBL_ENTRY)&_ZN6S779C42v4Ev,
  (VTBL_ENTRY)&_ZN6S779C42v5Ev,
  (VTBL_ENTRY)&_ZN6S779C42v6Ev,
  (VTBL_ENTRY)&_ZN6S779C42v7Ev,
  (VTBL_ENTRY)&_ZN6S779C42v8Ev,
  (VTBL_ENTRY)&_ZN6S779C42v9Ev,
  (VTBL_ENTRY)&_ZN6S779C43v10Ev,
  (VTBL_ENTRY)&_ZN6S779C43v11Ev,
  (VTBL_ENTRY)&_ZN6S779C43v12Ev,
  (VTBL_ENTRY)&_ZN6S779C43v13Ev,
  (VTBL_ENTRY)&_ZN6S779C43v14Ev,
  (VTBL_ENTRY)&_ZN6S779C43v15Ev,
  (VTBL_ENTRY)&_ZN6S779C43v16Ev,
  (VTBL_ENTRY)&_ZN6S779C43v17Ev,
  (VTBL_ENTRY)&_ZN6S779C43v18Ev,
  (VTBL_ENTRY)&_ZN6S779C43v19Ev,
  (VTBL_ENTRY)&_ZN6S779C43v20Ev,
  (VTBL_ENTRY)&_ZN6S779C43v21Ev,
  (VTBL_ENTRY)&_ZN6S779C43v22Ev,
  (VTBL_ENTRY)&_ZN6S779C43v23Ev,
  (VTBL_ENTRY)&_ZN6S779C43v24Ev,
  (VTBL_ENTRY)&_ZN6S779C43v25Ev,
  (VTBL_ENTRY)&_ZN6S779C43v26Ev,
  (VTBL_ENTRY)&_ZN6S779C43v27Ev,
  (VTBL_ENTRY)&_ZN6S779C43v28Ev,
  (VTBL_ENTRY)&_ZN6S779C43v29Ev,
  (VTBL_ENTRY)&_ZN6S779C43v30Ev,
  (VTBL_ENTRY)&_ZN6S779C43v31Ev,
  (VTBL_ENTRY)&_ZN6S779C43v32Ev,
  (VTBL_ENTRY)&_ZN6S779C43v33Ev,
  (VTBL_ENTRY)&_ZN6S779C43v34Ev,
  (VTBL_ENTRY)&_ZN6S779C43v35Ev,
  (VTBL_ENTRY)&_ZN6S779C43v36Ev,
  (VTBL_ENTRY)&_ZN6S779C43v37Ev,
  (VTBL_ENTRY)&_ZN6S779C43v38Ev,
  (VTBL_ENTRY)&_ZN6S779C43v39Ev,
  (VTBL_ENTRY)&_ZN6S779C43v40Ev,
  (VTBL_ENTRY)&_ZN6S779C43v41Ev,
  (VTBL_ENTRY)&_ZN6S779C43v42Ev,
  (VTBL_ENTRY)&_ZN6S779C43v43Ev,
  (VTBL_ENTRY)&_ZN6S779C43v44Ev,
  (VTBL_ENTRY)&_ZN6S779C43v45Ev,
  (VTBL_ENTRY)&_ZN6S779C43v46Ev,
  (VTBL_ENTRY)&_ZN6S779C43v47Ev,
  (VTBL_ENTRY)&_ZN6S779C43v48Ev,
  (VTBL_ENTRY)&_ZN6S779C43v49Ev,
  (VTBL_ENTRY)&_ZN6S779C43v50Ev,
  (VTBL_ENTRY)&_ZN6S779C43v51Ev,
  (VTBL_ENTRY)&_ZN6S779C43v52Ev,
  (VTBL_ENTRY)&_ZN6S779C43v53Ev,
  (VTBL_ENTRY)&_ZN6S779C43v54Ev,
  (VTBL_ENTRY)&_ZN6S779C43v55Ev,
  (VTBL_ENTRY)&_ZN6S779C43v56Ev,
  (VTBL_ENTRY)&_ZN6S779C43v57Ev,
  (VTBL_ENTRY)&_ZN6S779C43v58Ev,
  (VTBL_ENTRY)&_ZN6S779C43v59Ev,
  (VTBL_ENTRY)&_ZN6S779C43v60Ev,
  (VTBL_ENTRY)&_ZN6S779C43v61Ev,
  (VTBL_ENTRY)&_ZN6S779C43v62Ev,
  (VTBL_ENTRY)&_ZN6S779C43v63Ev,
  (VTBL_ENTRY)&_ZN6S779C43v64Ev,
  (VTBL_ENTRY)&_ZN6S779C43v65Ev,
  (VTBL_ENTRY)&_ZN6S779C43v66Ev,
  (VTBL_ENTRY)&_ZN6S779C43v67Ev,
  (VTBL_ENTRY)&_ZN6S779C43v68Ev,
  (VTBL_ENTRY)&_ZN6S779C43v69Ev,
  (VTBL_ENTRY)&_ZN6S779C43v70Ev,
  (VTBL_ENTRY)&_ZN6S779C43v71Ev,
  (VTBL_ENTRY)&_ZN6S779C43v72Ev,
  (VTBL_ENTRY)&_ZN6S779C43v73Ev,
  (VTBL_ENTRY)&_ZN6S779C43v74Ev,
  (VTBL_ENTRY)&_ZN6S779C43v75Ev,
  (VTBL_ENTRY)&_ZN6S779C43v76Ev,
  (VTBL_ENTRY)&_ZN6S779C43v77Ev,
  (VTBL_ENTRY)&_ZN6S779C43v78Ev,
  (VTBL_ENTRY)&_ZN6S779C43v79Ev,
  (VTBL_ENTRY)&_ZN6S779C43v80Ev,
  (VTBL_ENTRY)&_ZN6S779C43v81Ev,
  (VTBL_ENTRY)&_ZN6S779C43v82Ev,
  (VTBL_ENTRY)&_ZN6S779C43v83Ev,
  (VTBL_ENTRY)&_ZN6S779C43v84Ev,
  (VTBL_ENTRY)&_ZN6S779C43v85Ev,
  (VTBL_ENTRY)&_ZN6S779C43v86Ev,
  (VTBL_ENTRY)&_ZN6S779C43v87Ev,
  (VTBL_ENTRY)&_ZN6S779C43v88Ev,
  (VTBL_ENTRY)&_ZN6S779C43v89Ev,
  (VTBL_ENTRY)&_ZN6S779C43v90Ev,
  (VTBL_ENTRY)&_ZN6S779C43v91Ev,
  (VTBL_ENTRY)&_ZN6S779C43v92Ev,
  (VTBL_ENTRY)&_ZN6S779C43v93Ev,
  (VTBL_ENTRY)&_ZN6S779C43v94Ev,
  (VTBL_ENTRY)&_ZN6S779C43v95Ev,
  (VTBL_ENTRY)&_ZN6S779C43v96Ev,
  (VTBL_ENTRY)&_ZN6S779C43v97Ev,
  (VTBL_ENTRY)&_ZN6S779C43v98Ev,
  (VTBL_ENTRY)&_ZN6S779C43v99Ev,
  (VTBL_ENTRY)&_ZN6S779C44v100Ev,
  (VTBL_ENTRY)&_ZN6S779C44v101Ev,
  (VTBL_ENTRY)&_ZN6S779C44v102Ev,
  (VTBL_ENTRY)&_ZN6S779C44v103Ev,
  (VTBL_ENTRY)&_ZN6S779C44v104Ev,
  (VTBL_ENTRY)&_ZN6S779C44v105Ev,
  (VTBL_ENTRY)&_ZN6S779C44v106Ev,
  (VTBL_ENTRY)&_ZN6S779C44v107Ev,
  (VTBL_ENTRY)&_ZN6S779C44v108Ev,
  (VTBL_ENTRY)&_ZN6S779C44v109Ev,
  (VTBL_ENTRY)&_ZN6S779C44v110Ev,
  (VTBL_ENTRY)&_ZN6S779C44v111Ev,
  (VTBL_ENTRY)&_ZN6S779C44v112Ev,
  (VTBL_ENTRY)&_ZN6S779C44v113Ev,
  (VTBL_ENTRY)&_ZN6S779C44v114Ev,
  (VTBL_ENTRY)&_ZN6S779C44v115Ev,
  (VTBL_ENTRY)&_ZN6S779C44v116Ev,
  (VTBL_ENTRY)&_ZN6S779C44v117Ev,
  (VTBL_ENTRY)&_ZN6S779C44v118Ev,
  (VTBL_ENTRY)&_ZN6S779C44v119Ev,
  (VTBL_ENTRY)&_ZN6S779C44v120Ev,
  (VTBL_ENTRY)&_ZN6S779C44v121Ev,
  (VTBL_ENTRY)&_ZN6S779C44v122Ev,
  (VTBL_ENTRY)&_ZN6S779C44v123Ev,
  (VTBL_ENTRY)&_ZN6S779C44v124Ev,
  (VTBL_ENTRY)&_ZN6S779C34v125Ev,
  (VTBL_ENTRY)&_ZN6S779C34v126Ev,
  (VTBL_ENTRY)&_ZN6S779C34v127Ev,
  (VTBL_ENTRY)&_ZN6S779C34v128Ev,
  (VTBL_ENTRY)&_ZN6S779C34v129Ev,
  (VTBL_ENTRY)&_ZN6S779C34v130Ev,
  (VTBL_ENTRY)&_ZN6S779C34v131Ev,
  (VTBL_ENTRY)&_ZN6S779C34v132Ev,
  (VTBL_ENTRY)&_ZN6S779C34v133Ev,
  (VTBL_ENTRY)&_ZN6S779C34v134Ev,
  (VTBL_ENTRY)&_ZN6S779C34v135Ev,
  (VTBL_ENTRY)&_ZN6S779C34v136Ev,
  (VTBL_ENTRY)&_ZN6S779C34v137Ev,
  (VTBL_ENTRY)&_ZN6S779C34v138Ev,
  (VTBL_ENTRY)&_ZN6S779C34v139Ev,
  (VTBL_ENTRY)&_ZN6S779C34v140Ev,
  (VTBL_ENTRY)&_ZN6S779C34v141Ev,
  (VTBL_ENTRY)&_ZN6S779C34v142Ev,
  (VTBL_ENTRY)&_ZN6S779C24v143Ev,
  (VTBL_ENTRY)&_ZN6S779C24v144Ev,
  (VTBL_ENTRY)&_ZN6S779C24v145Ev,
  (VTBL_ENTRY)&_ZN6S779C24v146Ev,
  (VTBL_ENTRY)&_ZN6S779C24v147Ev,
  (VTBL_ENTRY)&_ZN6S779C24v148Ev,
  (VTBL_ENTRY)&_ZN6S779C12v1Ev,
  (VTBL_ENTRY)&_ZN6S779C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S779C1[];
extern  VTBL_ENTRY _ZTV6S779C1[];
Class_Descriptor cd_S779C1 = {  "S779C1", // class name
  bases_S779C1, 4,
  &(vtc_S779C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S779C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S779C1),152, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1841C3  : S785C5_nt {
  virtual void  v9(); // _ZN7S1841C32v9Ev
  virtual void  v10(); // _ZN7S1841C33v10Ev
  virtual void  v11(); // _ZN7S1841C33v11Ev
  virtual void  v12(); // _ZN7S1841C33v12Ev
  virtual void  v13(); // _ZN7S1841C33v13Ev
  virtual void  v14(); // _ZN7S1841C33v14Ev
  virtual void  v15(); // _ZN7S1841C33v15Ev
  virtual void  v16(); // _ZN7S1841C33v16Ev
  virtual void  v17(); // _ZN7S1841C33v17Ev
  virtual void  v18(); // _ZN7S1841C33v18Ev
  virtual void  v19(); // _ZN7S1841C33v19Ev
  virtual void  v20(); // _ZN7S1841C33v20Ev
  virtual void  v21(); // _ZN7S1841C33v21Ev
  virtual void  v22(); // _ZN7S1841C33v22Ev
  virtual void  v23(); // _ZN7S1841C33v23Ev
  virtual void  v24(); // _ZN7S1841C33v24Ev
  virtual void  v25(); // _ZN7S1841C33v25Ev
  virtual void  v26(); // _ZN7S1841C33v26Ev
  virtual void  v27(); // _ZN7S1841C33v27Ev
  virtual void  v28(); // _ZN7S1841C33v28Ev
  virtual void  v29(); // _ZN7S1841C33v29Ev
  virtual void  v30(); // _ZN7S1841C33v30Ev
  virtual void  v31(); // _ZN7S1841C33v31Ev
  virtual void  v32(); // _ZN7S1841C33v32Ev
  virtual void  v33(); // _ZN7S1841C33v33Ev
  virtual void  v34(); // _ZN7S1841C33v34Ev
  virtual void  v35(); // _ZN7S1841C33v35Ev
  virtual void  v36(); // _ZN7S1841C33v36Ev
  virtual void  v37(); // _ZN7S1841C33v37Ev
  virtual void  v38(); // _ZN7S1841C33v38Ev
  virtual void  v39(); // _ZN7S1841C33v39Ev
  virtual void  v40(); // _ZN7S1841C33v40Ev
  virtual void  v41(); // _ZN7S1841C33v41Ev
  virtual void  v42(); // _ZN7S1841C33v42Ev
  virtual void  v43(); // _ZN7S1841C33v43Ev
  virtual void  v44(); // _ZN7S1841C33v44Ev
  virtual void  v45(); // _ZN7S1841C33v45Ev
  virtual void  v46(); // _ZN7S1841C33v46Ev
  virtual void  v47(); // _ZN7S1841C33v47Ev
  virtual void  v48(); // _ZN7S1841C33v48Ev
  virtual void  v49(); // _ZN7S1841C33v49Ev
  virtual void  v50(); // _ZN7S1841C33v50Ev
  virtual void  v51(); // _ZN7S1841C33v51Ev
  virtual void  v52(); // _ZN7S1841C33v52Ev
  virtual void  v53(); // _ZN7S1841C33v53Ev
  virtual void  v54(); // _ZN7S1841C33v54Ev
  virtual void  v55(); // _ZN7S1841C33v55Ev
  virtual void  v56(); // _ZN7S1841C33v56Ev
  virtual void  v57(); // _ZN7S1841C33v57Ev
  virtual void  v58(); // _ZN7S1841C33v58Ev
  virtual void  v59(); // _ZN7S1841C33v59Ev
  virtual void  v60(); // _ZN7S1841C33v60Ev
  virtual void  v61(); // _ZN7S1841C33v61Ev
  virtual void  v62(); // _ZN7S1841C33v62Ev
  virtual void  v63(); // _ZN7S1841C33v63Ev
  virtual void  v64(); // _ZN7S1841C33v64Ev
  virtual void  v65(); // _ZN7S1841C33v65Ev
  virtual void  v66(); // _ZN7S1841C33v66Ev
  virtual void  v67(); // _ZN7S1841C33v67Ev
  virtual void  v68(); // _ZN7S1841C33v68Ev
  virtual void  v69(); // _ZN7S1841C33v69Ev
  virtual void  v70(); // _ZN7S1841C33v70Ev
  virtual void  v71(); // _ZN7S1841C33v71Ev
  virtual void  v72(); // _ZN7S1841C33v72Ev
  virtual void  v73(); // _ZN7S1841C33v73Ev
  virtual void  v74(); // _ZN7S1841C33v74Ev
  virtual void  v75(); // _ZN7S1841C33v75Ev
  virtual void  v76(); // _ZN7S1841C33v76Ev
  virtual void  v77(); // _ZN7S1841C33v77Ev
  virtual void  v78(); // _ZN7S1841C33v78Ev
  virtual void  v79(); // _ZN7S1841C33v79Ev
  virtual void  v80(); // _ZN7S1841C33v80Ev
  virtual void  v81(); // _ZN7S1841C33v81Ev
  virtual void  v82(); // _ZN7S1841C33v82Ev
  virtual void  v83(); // _ZN7S1841C33v83Ev
  virtual void  v84(); // _ZN7S1841C33v84Ev
  virtual void  v85(); // _ZN7S1841C33v85Ev
  virtual void  v86(); // _ZN7S1841C33v86Ev
  virtual void  v87(); // _ZN7S1841C33v87Ev
  virtual void  v88(); // _ZN7S1841C33v88Ev
  virtual void  v89(); // _ZN7S1841C33v89Ev
  virtual void  v90(); // _ZN7S1841C33v90Ev
  virtual void  v91(); // _ZN7S1841C33v91Ev
  virtual void  v92(); // _ZN7S1841C33v92Ev
  virtual void  v93(); // _ZN7S1841C33v93Ev
  virtual void  v94(); // _ZN7S1841C33v94Ev
  virtual void  v95(); // _ZN7S1841C33v95Ev
  virtual void  v96(); // _ZN7S1841C33v96Ev
  virtual void  v97(); // _ZN7S1841C33v97Ev
  virtual void  v98(); // _ZN7S1841C33v98Ev
  virtual void  v99(); // _ZN7S1841C33v99Ev
  virtual void  v100(); // _ZN7S1841C34v100Ev
  virtual void  v101(); // _ZN7S1841C34v101Ev
  virtual void  v102(); // _ZN7S1841C34v102Ev
  virtual void  v103(); // _ZN7S1841C34v103Ev
  virtual void  v104(); // _ZN7S1841C34v104Ev
  virtual void  v105(); // _ZN7S1841C34v105Ev
  virtual void  v106(); // _ZN7S1841C34v106Ev
  virtual void  v107(); // _ZN7S1841C34v107Ev
  virtual void  v108(); // _ZN7S1841C34v108Ev
  virtual void  v109(); // _ZN7S1841C34v109Ev
  virtual void  v110(); // _ZN7S1841C34v110Ev
  virtual void  v111(); // _ZN7S1841C34v111Ev
  virtual void  v112(); // _ZN7S1841C34v112Ev
  virtual void  v113(); // _ZN7S1841C34v113Ev
  virtual void  v114(); // _ZN7S1841C34v114Ev
  virtual void  v115(); // _ZN7S1841C34v115Ev
  virtual void  v116(); // _ZN7S1841C34v116Ev
  virtual void  v117(); // _ZN7S1841C34v117Ev
  virtual void  v118(); // _ZN7S1841C34v118Ev
  virtual void  v119(); // _ZN7S1841C34v119Ev
  virtual void  v120(); // _ZN7S1841C34v120Ev
  virtual void  v121(); // _ZN7S1841C34v121Ev
  virtual void  v122(); // _ZN7S1841C34v122Ev
  virtual void  v123(); // _ZN7S1841C34v123Ev
  virtual void  v124(); // _ZN7S1841C34v124Ev
  virtual void  v125(); // _ZN7S1841C34v125Ev
  virtual void  v126(); // _ZN7S1841C34v126Ev
  virtual void  v127(); // _ZN7S1841C34v127Ev
  virtual void  v128(); // _ZN7S1841C34v128Ev
  virtual void  v129(); // _ZN7S1841C34v129Ev
  virtual void  v130(); // _ZN7S1841C34v130Ev
  ~S1841C3(); // tgen
  S1841C3(); // tgen
};
//SIG(-1 S1841C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1841C3 ::v9(){vfunc_called(this, "_ZN7S1841C32v9Ev");}
void  S1841C3 ::v10(){vfunc_called(this, "_ZN7S1841C33v10Ev");}
void  S1841C3 ::v11(){vfunc_called(this, "_ZN7S1841C33v11Ev");}
void  S1841C3 ::v12(){vfunc_called(this, "_ZN7S1841C33v12Ev");}
void  S1841C3 ::v13(){vfunc_called(this, "_ZN7S1841C33v13Ev");}
void  S1841C3 ::v14(){vfunc_called(this, "_ZN7S1841C33v14Ev");}
void  S1841C3 ::v15(){vfunc_called(this, "_ZN7S1841C33v15Ev");}
void  S1841C3 ::v16(){vfunc_called(this, "_ZN7S1841C33v16Ev");}
void  S1841C3 ::v17(){vfunc_called(this, "_ZN7S1841C33v17Ev");}
void  S1841C3 ::v18(){vfunc_called(this, "_ZN7S1841C33v18Ev");}
void  S1841C3 ::v19(){vfunc_called(this, "_ZN7S1841C33v19Ev");}
void  S1841C3 ::v20(){vfunc_called(this, "_ZN7S1841C33v20Ev");}
void  S1841C3 ::v21(){vfunc_called(this, "_ZN7S1841C33v21Ev");}
void  S1841C3 ::v22(){vfunc_called(this, "_ZN7S1841C33v22Ev");}
void  S1841C3 ::v23(){vfunc_called(this, "_ZN7S1841C33v23Ev");}
void  S1841C3 ::v24(){vfunc_called(this, "_ZN7S1841C33v24Ev");}
void  S1841C3 ::v25(){vfunc_called(this, "_ZN7S1841C33v25Ev");}
void  S1841C3 ::v26(){vfunc_called(this, "_ZN7S1841C33v26Ev");}
void  S1841C3 ::v27(){vfunc_called(this, "_ZN7S1841C33v27Ev");}
void  S1841C3 ::v28(){vfunc_called(this, "_ZN7S1841C33v28Ev");}
void  S1841C3 ::v29(){vfunc_called(this, "_ZN7S1841C33v29Ev");}
void  S1841C3 ::v30(){vfunc_called(this, "_ZN7S1841C33v30Ev");}
void  S1841C3 ::v31(){vfunc_called(this, "_ZN7S1841C33v31Ev");}
void  S1841C3 ::v32(){vfunc_called(this, "_ZN7S1841C33v32Ev");}
void  S1841C3 ::v33(){vfunc_called(this, "_ZN7S1841C33v33Ev");}
void  S1841C3 ::v34(){vfunc_called(this, "_ZN7S1841C33v34Ev");}
void  S1841C3 ::v35(){vfunc_called(this, "_ZN7S1841C33v35Ev");}
void  S1841C3 ::v36(){vfunc_called(this, "_ZN7S1841C33v36Ev");}
void  S1841C3 ::v37(){vfunc_called(this, "_ZN7S1841C33v37Ev");}
void  S1841C3 ::v38(){vfunc_called(this, "_ZN7S1841C33v38Ev");}
void  S1841C3 ::v39(){vfunc_called(this, "_ZN7S1841C33v39Ev");}
void  S1841C3 ::v40(){vfunc_called(this, "_ZN7S1841C33v40Ev");}
void  S1841C3 ::v41(){vfunc_called(this, "_ZN7S1841C33v41Ev");}
void  S1841C3 ::v42(){vfunc_called(this, "_ZN7S1841C33v42Ev");}
void  S1841C3 ::v43(){vfunc_called(this, "_ZN7S1841C33v43Ev");}
void  S1841C3 ::v44(){vfunc_called(this, "_ZN7S1841C33v44Ev");}
void  S1841C3 ::v45(){vfunc_called(this, "_ZN7S1841C33v45Ev");}
void  S1841C3 ::v46(){vfunc_called(this, "_ZN7S1841C33v46Ev");}
void  S1841C3 ::v47(){vfunc_called(this, "_ZN7S1841C33v47Ev");}
void  S1841C3 ::v48(){vfunc_called(this, "_ZN7S1841C33v48Ev");}
void  S1841C3 ::v49(){vfunc_called(this, "_ZN7S1841C33v49Ev");}
void  S1841C3 ::v50(){vfunc_called(this, "_ZN7S1841C33v50Ev");}
void  S1841C3 ::v51(){vfunc_called(this, "_ZN7S1841C33v51Ev");}
void  S1841C3 ::v52(){vfunc_called(this, "_ZN7S1841C33v52Ev");}
void  S1841C3 ::v53(){vfunc_called(this, "_ZN7S1841C33v53Ev");}
void  S1841C3 ::v54(){vfunc_called(this, "_ZN7S1841C33v54Ev");}
void  S1841C3 ::v55(){vfunc_called(this, "_ZN7S1841C33v55Ev");}
void  S1841C3 ::v56(){vfunc_called(this, "_ZN7S1841C33v56Ev");}
void  S1841C3 ::v57(){vfunc_called(this, "_ZN7S1841C33v57Ev");}
void  S1841C3 ::v58(){vfunc_called(this, "_ZN7S1841C33v58Ev");}
void  S1841C3 ::v59(){vfunc_called(this, "_ZN7S1841C33v59Ev");}
void  S1841C3 ::v60(){vfunc_called(this, "_ZN7S1841C33v60Ev");}
void  S1841C3 ::v61(){vfunc_called(this, "_ZN7S1841C33v61Ev");}
void  S1841C3 ::v62(){vfunc_called(this, "_ZN7S1841C33v62Ev");}
void  S1841C3 ::v63(){vfunc_called(this, "_ZN7S1841C33v63Ev");}
void  S1841C3 ::v64(){vfunc_called(this, "_ZN7S1841C33v64Ev");}
void  S1841C3 ::v65(){vfunc_called(this, "_ZN7S1841C33v65Ev");}
void  S1841C3 ::v66(){vfunc_called(this, "_ZN7S1841C33v66Ev");}
void  S1841C3 ::v67(){vfunc_called(this, "_ZN7S1841C33v67Ev");}
void  S1841C3 ::v68(){vfunc_called(this, "_ZN7S1841C33v68Ev");}
void  S1841C3 ::v69(){vfunc_called(this, "_ZN7S1841C33v69Ev");}
void  S1841C3 ::v70(){vfunc_called(this, "_ZN7S1841C33v70Ev");}
void  S1841C3 ::v71(){vfunc_called(this, "_ZN7S1841C33v71Ev");}
void  S1841C3 ::v72(){vfunc_called(this, "_ZN7S1841C33v72Ev");}
void  S1841C3 ::v73(){vfunc_called(this, "_ZN7S1841C33v73Ev");}
void  S1841C3 ::v74(){vfunc_called(this, "_ZN7S1841C33v74Ev");}
void  S1841C3 ::v75(){vfunc_called(this, "_ZN7S1841C33v75Ev");}
void  S1841C3 ::v76(){vfunc_called(this, "_ZN7S1841C33v76Ev");}
void  S1841C3 ::v77(){vfunc_called(this, "_ZN7S1841C33v77Ev");}
void  S1841C3 ::v78(){vfunc_called(this, "_ZN7S1841C33v78Ev");}
void  S1841C3 ::v79(){vfunc_called(this, "_ZN7S1841C33v79Ev");}
void  S1841C3 ::v80(){vfunc_called(this, "_ZN7S1841C33v80Ev");}
void  S1841C3 ::v81(){vfunc_called(this, "_ZN7S1841C33v81Ev");}
void  S1841C3 ::v82(){vfunc_called(this, "_ZN7S1841C33v82Ev");}
void  S1841C3 ::v83(){vfunc_called(this, "_ZN7S1841C33v83Ev");}
void  S1841C3 ::v84(){vfunc_called(this, "_ZN7S1841C33v84Ev");}
void  S1841C3 ::v85(){vfunc_called(this, "_ZN7S1841C33v85Ev");}
void  S1841C3 ::v86(){vfunc_called(this, "_ZN7S1841C33v86Ev");}
void  S1841C3 ::v87(){vfunc_called(this, "_ZN7S1841C33v87Ev");}
void  S1841C3 ::v88(){vfunc_called(this, "_ZN7S1841C33v88Ev");}
void  S1841C3 ::v89(){vfunc_called(this, "_ZN7S1841C33v89Ev");}
void  S1841C3 ::v90(){vfunc_called(this, "_ZN7S1841C33v90Ev");}
void  S1841C3 ::v91(){vfunc_called(this, "_ZN7S1841C33v91Ev");}
void  S1841C3 ::v92(){vfunc_called(this, "_ZN7S1841C33v92Ev");}
void  S1841C3 ::v93(){vfunc_called(this, "_ZN7S1841C33v93Ev");}
void  S1841C3 ::v94(){vfunc_called(this, "_ZN7S1841C33v94Ev");}
void  S1841C3 ::v95(){vfunc_called(this, "_ZN7S1841C33v95Ev");}
void  S1841C3 ::v96(){vfunc_called(this, "_ZN7S1841C33v96Ev");}
void  S1841C3 ::v97(){vfunc_called(this, "_ZN7S1841C33v97Ev");}
void  S1841C3 ::v98(){vfunc_called(this, "_ZN7S1841C33v98Ev");}
void  S1841C3 ::v99(){vfunc_called(this, "_ZN7S1841C33v99Ev");}
void  S1841C3 ::v100(){vfunc_called(this, "_ZN7S1841C34v100Ev");}
void  S1841C3 ::v101(){vfunc_called(this, "_ZN7S1841C34v101Ev");}
void  S1841C3 ::v102(){vfunc_called(this, "_ZN7S1841C34v102Ev");}
void  S1841C3 ::v103(){vfunc_called(this, "_ZN7S1841C34v103Ev");}
void  S1841C3 ::v104(){vfunc_called(this, "_ZN7S1841C34v104Ev");}
void  S1841C3 ::v105(){vfunc_called(this, "_ZN7S1841C34v105Ev");}
void  S1841C3 ::v106(){vfunc_called(this, "_ZN7S1841C34v106Ev");}
void  S1841C3 ::v107(){vfunc_called(this, "_ZN7S1841C34v107Ev");}
void  S1841C3 ::v108(){vfunc_called(this, "_ZN7S1841C34v108Ev");}
void  S1841C3 ::v109(){vfunc_called(this, "_ZN7S1841C34v109Ev");}
void  S1841C3 ::v110(){vfunc_called(this, "_ZN7S1841C34v110Ev");}
void  S1841C3 ::v111(){vfunc_called(this, "_ZN7S1841C34v111Ev");}
void  S1841C3 ::v112(){vfunc_called(this, "_ZN7S1841C34v112Ev");}
void  S1841C3 ::v113(){vfunc_called(this, "_ZN7S1841C34v113Ev");}
void  S1841C3 ::v114(){vfunc_called(this, "_ZN7S1841C34v114Ev");}
void  S1841C3 ::v115(){vfunc_called(this, "_ZN7S1841C34v115Ev");}
void  S1841C3 ::v116(){vfunc_called(this, "_ZN7S1841C34v116Ev");}
void  S1841C3 ::v117(){vfunc_called(this, "_ZN7S1841C34v117Ev");}
void  S1841C3 ::v118(){vfunc_called(this, "_ZN7S1841C34v118Ev");}
void  S1841C3 ::v119(){vfunc_called(this, "_ZN7S1841C34v119Ev");}
void  S1841C3 ::v120(){vfunc_called(this, "_ZN7S1841C34v120Ev");}
void  S1841C3 ::v121(){vfunc_called(this, "_ZN7S1841C34v121Ev");}
void  S1841C3 ::v122(){vfunc_called(this, "_ZN7S1841C34v122Ev");}
void  S1841C3 ::v123(){vfunc_called(this, "_ZN7S1841C34v123Ev");}
void  S1841C3 ::v124(){vfunc_called(this, "_ZN7S1841C34v124Ev");}
void  S1841C3 ::v125(){vfunc_called(this, "_ZN7S1841C34v125Ev");}
void  S1841C3 ::v126(){vfunc_called(this, "_ZN7S1841C34v126Ev");}
void  S1841C3 ::v127(){vfunc_called(this, "_ZN7S1841C34v127Ev");}
void  S1841C3 ::v128(){vfunc_called(this, "_ZN7S1841C34v128Ev");}
void  S1841C3 ::v129(){vfunc_called(this, "_ZN7S1841C34v129Ev");}
void  S1841C3 ::v130(){vfunc_called(this, "_ZN7S1841C34v130Ev");}
S1841C3 ::~S1841C3(){ note_dtor("S1841C3", this);} // tgen
S1841C3 ::S1841C3(){ note_ctor("S1841C3", this);} // tgen

static void Test_S1841C3()
{
  extern Class_Descriptor cd_S1841C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1841C3, buf);
    S1841C3 *dp, &lv = *(dp=new (buf) S1841C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1841C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1841C3)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S1841C3");
    test_class_info(&lv, &cd_S1841C3);
    dp->~S1841C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1841C3(Test_S1841C3, "S1841C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1841C3C1Ev();
extern void _ZN7S1841C3D1Ev();
Name_Map name_map_S1841C3[] = {
  NSPAIR(_ZN7S1841C3C1Ev),
  NSPAIR(_ZN7S1841C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S1841C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1841C3[];
extern void _ZN7S1841C3D1Ev();
extern void _ZN7S1841C3D0Ev();
extern void _ZN7S1841C32v9Ev();
extern void _ZN7S1841C33v10Ev();
extern void _ZN7S1841C33v11Ev();
extern void _ZN7S1841C33v12Ev();
extern void _ZN7S1841C33v13Ev();
extern void _ZN7S1841C33v14Ev();
extern void _ZN7S1841C33v15Ev();
extern void _ZN7S1841C33v16Ev();
extern void _ZN7S1841C33v17Ev();
extern void _ZN7S1841C33v18Ev();
extern void _ZN7S1841C33v19Ev();
extern void _ZN7S1841C33v20Ev();
extern void _ZN7S1841C33v21Ev();
extern void _ZN7S1841C33v22Ev();
extern void _ZN7S1841C33v23Ev();
extern void _ZN7S1841C33v24Ev();
extern void _ZN7S1841C33v25Ev();
extern void _ZN7S1841C33v26Ev();
extern void _ZN7S1841C33v27Ev();
extern void _ZN7S1841C33v28Ev();
extern void _ZN7S1841C33v29Ev();
extern void _ZN7S1841C33v30Ev();
extern void _ZN7S1841C33v31Ev();
extern void _ZN7S1841C33v32Ev();
extern void _ZN7S1841C33v33Ev();
extern void _ZN7S1841C33v34Ev();
extern void _ZN7S1841C33v35Ev();
extern void _ZN7S1841C33v36Ev();
extern void _ZN7S1841C33v37Ev();
extern void _ZN7S1841C33v38Ev();
extern void _ZN7S1841C33v39Ev();
extern void _ZN7S1841C33v40Ev();
extern void _ZN7S1841C33v41Ev();
extern void _ZN7S1841C33v42Ev();
extern void _ZN7S1841C33v43Ev();
extern void _ZN7S1841C33v44Ev();
extern void _ZN7S1841C33v45Ev();
extern void _ZN7S1841C33v46Ev();
extern void _ZN7S1841C33v47Ev();
extern void _ZN7S1841C33v48Ev();
extern void _ZN7S1841C33v49Ev();
extern void _ZN7S1841C33v50Ev();
extern void _ZN7S1841C33v51Ev();
extern void _ZN7S1841C33v52Ev();
extern void _ZN7S1841C33v53Ev();
extern void _ZN7S1841C33v54Ev();
extern void _ZN7S1841C33v55Ev();
extern void _ZN7S1841C33v56Ev();
extern void _ZN7S1841C33v57Ev();
extern void _ZN7S1841C33v58Ev();
extern void _ZN7S1841C33v59Ev();
extern void _ZN7S1841C33v60Ev();
extern void _ZN7S1841C33v61Ev();
extern void _ZN7S1841C33v62Ev();
extern void _ZN7S1841C33v63Ev();
extern void _ZN7S1841C33v64Ev();
extern void _ZN7S1841C33v65Ev();
extern void _ZN7S1841C33v66Ev();
extern void _ZN7S1841C33v67Ev();
extern void _ZN7S1841C33v68Ev();
extern void _ZN7S1841C33v69Ev();
extern void _ZN7S1841C33v70Ev();
extern void _ZN7S1841C33v71Ev();
extern void _ZN7S1841C33v72Ev();
extern void _ZN7S1841C33v73Ev();
extern void _ZN7S1841C33v74Ev();
extern void _ZN7S1841C33v75Ev();
extern void _ZN7S1841C33v76Ev();
extern void _ZN7S1841C33v77Ev();
extern void _ZN7S1841C33v78Ev();
extern void _ZN7S1841C33v79Ev();
extern void _ZN7S1841C33v80Ev();
extern void _ZN7S1841C33v81Ev();
extern void _ZN7S1841C33v82Ev();
extern void _ZN7S1841C33v83Ev();
extern void _ZN7S1841C33v84Ev();
extern void _ZN7S1841C33v85Ev();
extern void _ZN7S1841C33v86Ev();
extern void _ZN7S1841C33v87Ev();
extern void _ZN7S1841C33v88Ev();
extern void _ZN7S1841C33v89Ev();
extern void _ZN7S1841C33v90Ev();
extern void _ZN7S1841C33v91Ev();
extern void _ZN7S1841C33v92Ev();
extern void _ZN7S1841C33v93Ev();
extern void _ZN7S1841C33v94Ev();
extern void _ZN7S1841C33v95Ev();
extern void _ZN7S1841C33v96Ev();
extern void _ZN7S1841C33v97Ev();
extern void _ZN7S1841C33v98Ev();
extern void _ZN7S1841C33v99Ev();
extern void _ZN7S1841C34v100Ev();
extern void _ZN7S1841C34v101Ev();
extern void _ZN7S1841C34v102Ev();
extern void _ZN7S1841C34v103Ev();
extern void _ZN7S1841C34v104Ev();
extern void _ZN7S1841C34v105Ev();
extern void _ZN7S1841C34v106Ev();
extern void _ZN7S1841C34v107Ev();
extern void _ZN7S1841C34v108Ev();
extern void _ZN7S1841C34v109Ev();
extern void _ZN7S1841C34v110Ev();
extern void _ZN7S1841C34v111Ev();
extern void _ZN7S1841C34v112Ev();
extern void _ZN7S1841C34v113Ev();
extern void _ZN7S1841C34v114Ev();
extern void _ZN7S1841C34v115Ev();
extern void _ZN7S1841C34v116Ev();
extern void _ZN7S1841C34v117Ev();
extern void _ZN7S1841C34v118Ev();
extern void _ZN7S1841C34v119Ev();
extern void _ZN7S1841C34v120Ev();
extern void _ZN7S1841C34v121Ev();
extern void _ZN7S1841C34v122Ev();
extern void _ZN7S1841C34v123Ev();
extern void _ZN7S1841C34v124Ev();
extern void _ZN7S1841C34v125Ev();
extern void _ZN7S1841C34v126Ev();
extern void _ZN7S1841C34v127Ev();
extern void _ZN7S1841C34v128Ev();
extern void _ZN7S1841C34v129Ev();
extern void _ZN7S1841C34v130Ev();
static  VTBL_ENTRY vtc_S1841C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1841C3[0]),
  (VTBL_ENTRY)&_ZN7S1841C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1841C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1841C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v130Ev,
};
extern VTBL_ENTRY _ZTI7S1841C3[];
extern  VTBL_ENTRY _ZTV7S1841C3[];
Class_Descriptor cd_S1841C3 = {  "S1841C3", // class name
  bases_S1841C3, 1,
  &(vtc_S1841C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1841C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1841C3),126, //virtual function table var
  2, // 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  S1841C2  : S1841C3 {
  virtual void  v131(); // _ZN7S1841C24v131Ev
  virtual void  v132(); // _ZN7S1841C24v132Ev
  virtual void  v133(); // _ZN7S1841C24v133Ev
  virtual void  v134(); // _ZN7S1841C24v134Ev
  virtual void  v135(); // _ZN7S1841C24v135Ev
  virtual void  v136(); // _ZN7S1841C24v136Ev
  virtual void  v137(); // _ZN7S1841C24v137Ev
  virtual void  v138(); // _ZN7S1841C24v138Ev
  virtual void  v139(); // _ZN7S1841C24v139Ev
  virtual void  v140(); // _ZN7S1841C24v140Ev
  virtual void  v141(); // _ZN7S1841C24v141Ev
  virtual void  v142(); // _ZN7S1841C24v142Ev
  virtual void  v143(); // _ZN7S1841C24v143Ev
  virtual void  v144(); // _ZN7S1841C24v144Ev
  virtual void  v145(); // _ZN7S1841C24v145Ev
  virtual void  v146(); // _ZN7S1841C24v146Ev
  virtual void  v147(); // _ZN7S1841C24v147Ev
  virtual void  v148(); // _ZN7S1841C24v148Ev
  ~S1841C2(); // tgen
  S1841C2(); // tgen
};
//SIG(-1 S1841C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S1841C2 ::v131(){vfunc_called(this, "_ZN7S1841C24v131Ev");}
void  S1841C2 ::v132(){vfunc_called(this, "_ZN7S1841C24v132Ev");}
void  S1841C2 ::v133(){vfunc_called(this, "_ZN7S1841C24v133Ev");}
void  S1841C2 ::v134(){vfunc_called(this, "_ZN7S1841C24v134Ev");}
void  S1841C2 ::v135(){vfunc_called(this, "_ZN7S1841C24v135Ev");}
void  S1841C2 ::v136(){vfunc_called(this, "_ZN7S1841C24v136Ev");}
void  S1841C2 ::v137(){vfunc_called(this, "_ZN7S1841C24v137Ev");}
void  S1841C2 ::v138(){vfunc_called(this, "_ZN7S1841C24v138Ev");}
void  S1841C2 ::v139(){vfunc_called(this, "_ZN7S1841C24v139Ev");}
void  S1841C2 ::v140(){vfunc_called(this, "_ZN7S1841C24v140Ev");}
void  S1841C2 ::v141(){vfunc_called(this, "_ZN7S1841C24v141Ev");}
void  S1841C2 ::v142(){vfunc_called(this, "_ZN7S1841C24v142Ev");}
void  S1841C2 ::v143(){vfunc_called(this, "_ZN7S1841C24v143Ev");}
void  S1841C2 ::v144(){vfunc_called(this, "_ZN7S1841C24v144Ev");}
void  S1841C2 ::v145(){vfunc_called(this, "_ZN7S1841C24v145Ev");}
void  S1841C2 ::v146(){vfunc_called(this, "_ZN7S1841C24v146Ev");}
void  S1841C2 ::v147(){vfunc_called(this, "_ZN7S1841C24v147Ev");}
void  S1841C2 ::v148(){vfunc_called(this, "_ZN7S1841C24v148Ev");}
S1841C2 ::~S1841C2(){ note_dtor("S1841C2", this);} // tgen
S1841C2 ::S1841C2(){ note_ctor("S1841C2", this);} // tgen

static void Test_S1841C2()
{
  extern Class_Descriptor cd_S1841C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1841C2, buf);
    S1841C2 *dp, &lv = *(dp=new (buf) S1841C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1841C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1841C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S1841C3*), 0, "S1841C2");
    check_base_class_offset(lv, (S1841C3*), 0, "S1841C2");
    test_class_info(&lv, &cd_S1841C2);
    dp->~S1841C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1841C2(Test_S1841C2, "S1841C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1841C2C1Ev();
extern void _ZN7S1841C2D1Ev();
Name_Map name_map_S1841C2[] = {
  NSPAIR(_ZN7S1841C2C1Ev),
  NSPAIR(_ZN7S1841C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1841C3;
extern VTBL_ENTRY _ZTI7S1841C3[];
extern  VTBL_ENTRY _ZTV7S1841C3[];
static Base_Class bases_S1841C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1841C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1841C2[];
extern void _ZN7S1841C2D1Ev();
extern void _ZN7S1841C2D0Ev();
extern void _ZN7S1841C32v9Ev();
extern void _ZN7S1841C33v10Ev();
extern void _ZN7S1841C33v11Ev();
extern void _ZN7S1841C33v12Ev();
extern void _ZN7S1841C33v13Ev();
extern void _ZN7S1841C33v14Ev();
extern void _ZN7S1841C33v15Ev();
extern void _ZN7S1841C33v16Ev();
extern void _ZN7S1841C33v17Ev();
extern void _ZN7S1841C33v18Ev();
extern void _ZN7S1841C33v19Ev();
extern void _ZN7S1841C33v20Ev();
extern void _ZN7S1841C33v21Ev();
extern void _ZN7S1841C33v22Ev();
extern void _ZN7S1841C33v23Ev();
extern void _ZN7S1841C33v24Ev();
extern void _ZN7S1841C33v25Ev();
extern void _ZN7S1841C33v26Ev();
extern void _ZN7S1841C33v27Ev();
extern void _ZN7S1841C33v28Ev();
extern void _ZN7S1841C33v29Ev();
extern void _ZN7S1841C33v30Ev();
extern void _ZN7S1841C33v31Ev();
extern void _ZN7S1841C33v32Ev();
extern void _ZN7S1841C33v33Ev();
extern void _ZN7S1841C33v34Ev();
extern void _ZN7S1841C33v35Ev();
extern void _ZN7S1841C33v36Ev();
extern void _ZN7S1841C33v37Ev();
extern void _ZN7S1841C33v38Ev();
extern void _ZN7S1841C33v39Ev();
extern void _ZN7S1841C33v40Ev();
extern void _ZN7S1841C33v41Ev();
extern void _ZN7S1841C33v42Ev();
extern void _ZN7S1841C33v43Ev();
extern void _ZN7S1841C33v44Ev();
extern void _ZN7S1841C33v45Ev();
extern void _ZN7S1841C33v46Ev();
extern void _ZN7S1841C33v47Ev();
extern void _ZN7S1841C33v48Ev();
extern void _ZN7S1841C33v49Ev();
extern void _ZN7S1841C33v50Ev();
extern void _ZN7S1841C33v51Ev();
extern void _ZN7S1841C33v52Ev();
extern void _ZN7S1841C33v53Ev();
extern void _ZN7S1841C33v54Ev();
extern void _ZN7S1841C33v55Ev();
extern void _ZN7S1841C33v56Ev();
extern void _ZN7S1841C33v57Ev();
extern void _ZN7S1841C33v58Ev();
extern void _ZN7S1841C33v59Ev();
extern void _ZN7S1841C33v60Ev();
extern void _ZN7S1841C33v61Ev();
extern void _ZN7S1841C33v62Ev();
extern void _ZN7S1841C33v63Ev();
extern void _ZN7S1841C33v64Ev();
extern void _ZN7S1841C33v65Ev();
extern void _ZN7S1841C33v66Ev();
extern void _ZN7S1841C33v67Ev();
extern void _ZN7S1841C33v68Ev();
extern void _ZN7S1841C33v69Ev();
extern void _ZN7S1841C33v70Ev();
extern void _ZN7S1841C33v71Ev();
extern void _ZN7S1841C33v72Ev();
extern void _ZN7S1841C33v73Ev();
extern void _ZN7S1841C33v74Ev();
extern void _ZN7S1841C33v75Ev();
extern void _ZN7S1841C33v76Ev();
extern void _ZN7S1841C33v77Ev();
extern void _ZN7S1841C33v78Ev();
extern void _ZN7S1841C33v79Ev();
extern void _ZN7S1841C33v80Ev();
extern void _ZN7S1841C33v81Ev();
extern void _ZN7S1841C33v82Ev();
extern void _ZN7S1841C33v83Ev();
extern void _ZN7S1841C33v84Ev();
extern void _ZN7S1841C33v85Ev();
extern void _ZN7S1841C33v86Ev();
extern void _ZN7S1841C33v87Ev();
extern void _ZN7S1841C33v88Ev();
extern void _ZN7S1841C33v89Ev();
extern void _ZN7S1841C33v90Ev();
extern void _ZN7S1841C33v91Ev();
extern void _ZN7S1841C33v92Ev();
extern void _ZN7S1841C33v93Ev();
extern void _ZN7S1841C33v94Ev();
extern void _ZN7S1841C33v95Ev();
extern void _ZN7S1841C33v96Ev();
extern void _ZN7S1841C33v97Ev();
extern void _ZN7S1841C33v98Ev();
extern void _ZN7S1841C33v99Ev();
extern void _ZN7S1841C34v100Ev();
extern void _ZN7S1841C34v101Ev();
extern void _ZN7S1841C34v102Ev();
extern void _ZN7S1841C34v103Ev();
extern void _ZN7S1841C34v104Ev();
extern void _ZN7S1841C34v105Ev();
extern void _ZN7S1841C34v106Ev();
extern void _ZN7S1841C34v107Ev();
extern void _ZN7S1841C34v108Ev();
extern void _ZN7S1841C34v109Ev();
extern void _ZN7S1841C34v110Ev();
extern void _ZN7S1841C34v111Ev();
extern void _ZN7S1841C34v112Ev();
extern void _ZN7S1841C34v113Ev();
extern void _ZN7S1841C34v114Ev();
extern void _ZN7S1841C34v115Ev();
extern void _ZN7S1841C34v116Ev();
extern void _ZN7S1841C34v117Ev();
extern void _ZN7S1841C34v118Ev();
extern void _ZN7S1841C34v119Ev();
extern void _ZN7S1841C34v120Ev();
extern void _ZN7S1841C34v121Ev();
extern void _ZN7S1841C34v122Ev();
extern void _ZN7S1841C34v123Ev();
extern void _ZN7S1841C34v124Ev();
extern void _ZN7S1841C34v125Ev();
extern void _ZN7S1841C34v126Ev();
extern void _ZN7S1841C34v127Ev();
extern void _ZN7S1841C34v128Ev();
extern void _ZN7S1841C34v129Ev();
extern void _ZN7S1841C34v130Ev();
extern void _ZN7S1841C24v131Ev();
extern void _ZN7S1841C24v132Ev();
extern void _ZN7S1841C24v133Ev();
extern void _ZN7S1841C24v134Ev();
extern void _ZN7S1841C24v135Ev();
extern void _ZN7S1841C24v136Ev();
extern void _ZN7S1841C24v137Ev();
extern void _ZN7S1841C24v138Ev();
extern void _ZN7S1841C24v139Ev();
extern void _ZN7S1841C24v140Ev();
extern void _ZN7S1841C24v141Ev();
extern void _ZN7S1841C24v142Ev();
extern void _ZN7S1841C24v143Ev();
extern void _ZN7S1841C24v144Ev();
extern void _ZN7S1841C24v145Ev();
extern void _ZN7S1841C24v146Ev();
extern void _ZN7S1841C24v147Ev();
extern void _ZN7S1841C24v148Ev();
static  VTBL_ENTRY vtc_S1841C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1841C2[0]),
  (VTBL_ENTRY)&_ZN7S1841C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1841C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1841C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v148Ev,
};
extern VTBL_ENTRY _ZTI7S1841C2[];
extern  VTBL_ENTRY _ZTV7S1841C2[];
Class_Descriptor cd_S1841C2 = {  "S1841C2", // class name
  bases_S1841C2, 2,
  &(vtc_S1841C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1841C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1841C2),144, //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  S1841C1  : S1841C2 {
  virtual void  v1(); // _ZN7S1841C12v1Ev
  virtual void  v2(); // _ZN7S1841C12v2Ev
  virtual void  v3(); // _ZN7S1841C12v3Ev
  virtual void  v4(); // _ZN7S1841C12v4Ev
  virtual void  v5(); // _ZN7S1841C12v5Ev
  virtual void  v6(); // _ZN7S1841C12v6Ev
  virtual void  v7(); // _ZN7S1841C12v7Ev
  virtual void  v8(); // _ZN7S1841C12v8Ev
  ~S1841C1(); // tgen
  S1841C1(); // tgen
};
//SIG(1 S1841C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 v144 v145 v146 v147 v148} v1 v2 v3 v4 v5 v6 v7 v8}


void  S1841C1 ::v1(){vfunc_called(this, "_ZN7S1841C12v1Ev");}
void  S1841C1 ::v2(){vfunc_called(this, "_ZN7S1841C12v2Ev");}
void  S1841C1 ::v3(){vfunc_called(this, "_ZN7S1841C12v3Ev");}
void  S1841C1 ::v4(){vfunc_called(this, "_ZN7S1841C12v4Ev");}
void  S1841C1 ::v5(){vfunc_called(this, "_ZN7S1841C12v5Ev");}
void  S1841C1 ::v6(){vfunc_called(this, "_ZN7S1841C12v6Ev");}
void  S1841C1 ::v7(){vfunc_called(this, "_ZN7S1841C12v7Ev");}
void  S1841C1 ::v8(){vfunc_called(this, "_ZN7S1841C12v8Ev");}
S1841C1 ::~S1841C1(){ note_dtor("S1841C1", this);} // tgen
S1841C1 ::S1841C1(){ note_ctor("S1841C1", this);} // tgen

static void Test_S1841C1()
{
  extern Class_Descriptor cd_S1841C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1841C1, buf);
    S1841C1 *dp, &lv = *(dp=new (buf) S1841C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1841C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1841C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S1841C3*)(S1841C2*), 0, "S1841C1");
    check_base_class_offset(lv, (S1841C3*)(S1841C2*), 0, "S1841C1");
    check_base_class_offset(lv, (S1841C2*), 0, "S1841C1");
    test_class_info(&lv, &cd_S1841C1);
    dp->~S1841C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1841C1(Test_S1841C1, "S1841C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1841C1C1Ev();
extern void _ZN7S1841C1D1Ev();
Name_Map name_map_S1841C1[] = {
  NSPAIR(_ZN7S1841C1C1Ev),
  NSPAIR(_ZN7S1841C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1841C3;
extern VTBL_ENTRY _ZTI7S1841C3[];
extern  VTBL_ENTRY _ZTV7S1841C3[];
extern Class_Descriptor cd_S1841C2;
extern VTBL_ENTRY _ZTI7S1841C2[];
extern  VTBL_ENTRY _ZTV7S1841C2[];
static Base_Class bases_S1841C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1841C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1841C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1841C1[];
extern void _ZN7S1841C1D1Ev();
extern void _ZN7S1841C1D0Ev();
extern void _ZN7S1841C32v9Ev();
extern void _ZN7S1841C33v10Ev();
extern void _ZN7S1841C33v11Ev();
extern void _ZN7S1841C33v12Ev();
extern void _ZN7S1841C33v13Ev();
extern void _ZN7S1841C33v14Ev();
extern void _ZN7S1841C33v15Ev();
extern void _ZN7S1841C33v16Ev();
extern void _ZN7S1841C33v17Ev();
extern void _ZN7S1841C33v18Ev();
extern void _ZN7S1841C33v19Ev();
extern void _ZN7S1841C33v20Ev();
extern void _ZN7S1841C33v21Ev();
extern void _ZN7S1841C33v22Ev();
extern void _ZN7S1841C33v23Ev();
extern void _ZN7S1841C33v24Ev();
extern void _ZN7S1841C33v25Ev();
extern void _ZN7S1841C33v26Ev();
extern void _ZN7S1841C33v27Ev();
extern void _ZN7S1841C33v28Ev();
extern void _ZN7S1841C33v29Ev();
extern void _ZN7S1841C33v30Ev();
extern void _ZN7S1841C33v31Ev();
extern void _ZN7S1841C33v32Ev();
extern void _ZN7S1841C33v33Ev();
extern void _ZN7S1841C33v34Ev();
extern void _ZN7S1841C33v35Ev();
extern void _ZN7S1841C33v36Ev();
extern void _ZN7S1841C33v37Ev();
extern void _ZN7S1841C33v38Ev();
extern void _ZN7S1841C33v39Ev();
extern void _ZN7S1841C33v40Ev();
extern void _ZN7S1841C33v41Ev();
extern void _ZN7S1841C33v42Ev();
extern void _ZN7S1841C33v43Ev();
extern void _ZN7S1841C33v44Ev();
extern void _ZN7S1841C33v45Ev();
extern void _ZN7S1841C33v46Ev();
extern void _ZN7S1841C33v47Ev();
extern void _ZN7S1841C33v48Ev();
extern void _ZN7S1841C33v49Ev();
extern void _ZN7S1841C33v50Ev();
extern void _ZN7S1841C33v51Ev();
extern void _ZN7S1841C33v52Ev();
extern void _ZN7S1841C33v53Ev();
extern void _ZN7S1841C33v54Ev();
extern void _ZN7S1841C33v55Ev();
extern void _ZN7S1841C33v56Ev();
extern void _ZN7S1841C33v57Ev();
extern void _ZN7S1841C33v58Ev();
extern void _ZN7S1841C33v59Ev();
extern void _ZN7S1841C33v60Ev();
extern void _ZN7S1841C33v61Ev();
extern void _ZN7S1841C33v62Ev();
extern void _ZN7S1841C33v63Ev();
extern void _ZN7S1841C33v64Ev();
extern void _ZN7S1841C33v65Ev();
extern void _ZN7S1841C33v66Ev();
extern void _ZN7S1841C33v67Ev();
extern void _ZN7S1841C33v68Ev();
extern void _ZN7S1841C33v69Ev();
extern void _ZN7S1841C33v70Ev();
extern void _ZN7S1841C33v71Ev();
extern void _ZN7S1841C33v72Ev();
extern void _ZN7S1841C33v73Ev();
extern void _ZN7S1841C33v74Ev();
extern void _ZN7S1841C33v75Ev();
extern void _ZN7S1841C33v76Ev();
extern void _ZN7S1841C33v77Ev();
extern void _ZN7S1841C33v78Ev();
extern void _ZN7S1841C33v79Ev();
extern void _ZN7S1841C33v80Ev();
extern void _ZN7S1841C33v81Ev();
extern void _ZN7S1841C33v82Ev();
extern void _ZN7S1841C33v83Ev();
extern void _ZN7S1841C33v84Ev();
extern void _ZN7S1841C33v85Ev();
extern void _ZN7S1841C33v86Ev();
extern void _ZN7S1841C33v87Ev();
extern void _ZN7S1841C33v88Ev();
extern void _ZN7S1841C33v89Ev();
extern void _ZN7S1841C33v90Ev();
extern void _ZN7S1841C33v91Ev();
extern void _ZN7S1841C33v92Ev();
extern void _ZN7S1841C33v93Ev();
extern void _ZN7S1841C33v94Ev();
extern void _ZN7S1841C33v95Ev();
extern void _ZN7S1841C33v96Ev();
extern void _ZN7S1841C33v97Ev();
extern void _ZN7S1841C33v98Ev();
extern void _ZN7S1841C33v99Ev();
extern void _ZN7S1841C34v100Ev();
extern void _ZN7S1841C34v101Ev();
extern void _ZN7S1841C34v102Ev();
extern void _ZN7S1841C34v103Ev();
extern void _ZN7S1841C34v104Ev();
extern void _ZN7S1841C34v105Ev();
extern void _ZN7S1841C34v106Ev();
extern void _ZN7S1841C34v107Ev();
extern void _ZN7S1841C34v108Ev();
extern void _ZN7S1841C34v109Ev();
extern void _ZN7S1841C34v110Ev();
extern void _ZN7S1841C34v111Ev();
extern void _ZN7S1841C34v112Ev();
extern void _ZN7S1841C34v113Ev();
extern void _ZN7S1841C34v114Ev();
extern void _ZN7S1841C34v115Ev();
extern void _ZN7S1841C34v116Ev();
extern void _ZN7S1841C34v117Ev();
extern void _ZN7S1841C34v118Ev();
extern void _ZN7S1841C34v119Ev();
extern void _ZN7S1841C34v120Ev();
extern void _ZN7S1841C34v121Ev();
extern void _ZN7S1841C34v122Ev();
extern void _ZN7S1841C34v123Ev();
extern void _ZN7S1841C34v124Ev();
extern void _ZN7S1841C34v125Ev();
extern void _ZN7S1841C34v126Ev();
extern void _ZN7S1841C34v127Ev();
extern void _ZN7S1841C34v128Ev();
extern void _ZN7S1841C34v129Ev();
extern void _ZN7S1841C34v130Ev();
extern void _ZN7S1841C24v131Ev();
extern void _ZN7S1841C24v132Ev();
extern void _ZN7S1841C24v133Ev();
extern void _ZN7S1841C24v134Ev();
extern void _ZN7S1841C24v135Ev();
extern void _ZN7S1841C24v136Ev();
extern void _ZN7S1841C24v137Ev();
extern void _ZN7S1841C24v138Ev();
extern void _ZN7S1841C24v139Ev();
extern void _ZN7S1841C24v140Ev();
extern void _ZN7S1841C24v141Ev();
extern void _ZN7S1841C24v142Ev();
extern void _ZN7S1841C24v143Ev();
extern void _ZN7S1841C24v144Ev();
extern void _ZN7S1841C24v145Ev();
extern void _ZN7S1841C24v146Ev();
extern void _ZN7S1841C24v147Ev();
extern void _ZN7S1841C24v148Ev();
extern void _ZN7S1841C12v1Ev();
extern void _ZN7S1841C12v2Ev();
extern void _ZN7S1841C12v3Ev();
extern void _ZN7S1841C12v4Ev();
extern void _ZN7S1841C12v5Ev();
extern void _ZN7S1841C12v6Ev();
extern void _ZN7S1841C12v7Ev();
extern void _ZN7S1841C12v8Ev();
static  VTBL_ENTRY vtc_S1841C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1841C1[0]),
  (VTBL_ENTRY)&_ZN7S1841C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1841C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1841C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1841C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1841C34v130Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1841C24v148Ev,
  (VTBL_ENTRY)&_ZN7S1841C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1841C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1841C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1841C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1841C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1841C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1841C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1841C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S1841C1[];
extern  VTBL_ENTRY _ZTV7S1841C1[];
Class_Descriptor cd_S1841C1 = {  "S1841C1", // class name
  bases_S1841C1, 3,
  &(vtc_S1841C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1841C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1841C1),152, //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  S1836C3  : S785C5_nt {
  virtual void  v8(); // _ZN7S1836C32v8Ev
  virtual void  v9(); // _ZN7S1836C32v9Ev
  virtual void  v10(); // _ZN7S1836C33v10Ev
  virtual void  v11(); // _ZN7S1836C33v11Ev
  virtual void  v12(); // _ZN7S1836C33v12Ev
  virtual void  v13(); // _ZN7S1836C33v13Ev
  virtual void  v14(); // _ZN7S1836C33v14Ev
  virtual void  v15(); // _ZN7S1836C33v15Ev
  virtual void  v16(); // _ZN7S1836C33v16Ev
  virtual void  v17(); // _ZN7S1836C33v17Ev
  virtual void  v18(); // _ZN7S1836C33v18Ev
  virtual void  v19(); // _ZN7S1836C33v19Ev
  virtual void  v20(); // _ZN7S1836C33v20Ev
  virtual void  v21(); // _ZN7S1836C33v21Ev
  virtual void  v22(); // _ZN7S1836C33v22Ev
  virtual void  v23(); // _ZN7S1836C33v23Ev
  virtual void  v24(); // _ZN7S1836C33v24Ev
  virtual void  v25(); // _ZN7S1836C33v25Ev
  virtual void  v26(); // _ZN7S1836C33v26Ev
  virtual void  v27(); // _ZN7S1836C33v27Ev
  virtual void  v28(); // _ZN7S1836C33v28Ev
  virtual void  v29(); // _ZN7S1836C33v29Ev
  virtual void  v30(); // _ZN7S1836C33v30Ev
  virtual void  v31(); // _ZN7S1836C33v31Ev
  virtual void  v32(); // _ZN7S1836C33v32Ev
  virtual void  v33(); // _ZN7S1836C33v33Ev
  virtual void  v34(); // _ZN7S1836C33v34Ev
  virtual void  v35(); // _ZN7S1836C33v35Ev
  virtual void  v36(); // _ZN7S1836C33v36Ev
  virtual void  v37(); // _ZN7S1836C33v37Ev
  virtual void  v38(); // _ZN7S1836C33v38Ev
  virtual void  v39(); // _ZN7S1836C33v39Ev
  virtual void  v40(); // _ZN7S1836C33v40Ev
  virtual void  v41(); // _ZN7S1836C33v41Ev
  virtual void  v42(); // _ZN7S1836C33v42Ev
  virtual void  v43(); // _ZN7S1836C33v43Ev
  virtual void  v44(); // _ZN7S1836C33v44Ev
  virtual void  v45(); // _ZN7S1836C33v45Ev
  virtual void  v46(); // _ZN7S1836C33v46Ev
  virtual void  v47(); // _ZN7S1836C33v47Ev
  virtual void  v48(); // _ZN7S1836C33v48Ev
  virtual void  v49(); // _ZN7S1836C33v49Ev
  virtual void  v50(); // _ZN7S1836C33v50Ev
  virtual void  v51(); // _ZN7S1836C33v51Ev
  virtual void  v52(); // _ZN7S1836C33v52Ev
  virtual void  v53(); // _ZN7S1836C33v53Ev
  virtual void  v54(); // _ZN7S1836C33v54Ev
  virtual void  v55(); // _ZN7S1836C33v55Ev
  virtual void  v56(); // _ZN7S1836C33v56Ev
  virtual void  v57(); // _ZN7S1836C33v57Ev
  virtual void  v58(); // _ZN7S1836C33v58Ev
  virtual void  v59(); // _ZN7S1836C33v59Ev
  virtual void  v60(); // _ZN7S1836C33v60Ev
  virtual void  v61(); // _ZN7S1836C33v61Ev
  virtual void  v62(); // _ZN7S1836C33v62Ev
  virtual void  v63(); // _ZN7S1836C33v63Ev
  virtual void  v64(); // _ZN7S1836C33v64Ev
  virtual void  v65(); // _ZN7S1836C33v65Ev
  virtual void  v66(); // _ZN7S1836C33v66Ev
  virtual void  v67(); // _ZN7S1836C33v67Ev
  virtual void  v68(); // _ZN7S1836C33v68Ev
  virtual void  v69(); // _ZN7S1836C33v69Ev
  virtual void  v70(); // _ZN7S1836C33v70Ev
  virtual void  v71(); // _ZN7S1836C33v71Ev
  virtual void  v72(); // _ZN7S1836C33v72Ev
  virtual void  v73(); // _ZN7S1836C33v73Ev
  virtual void  v74(); // _ZN7S1836C33v74Ev
  virtual void  v75(); // _ZN7S1836C33v75Ev
  virtual void  v76(); // _ZN7S1836C33v76Ev
  virtual void  v77(); // _ZN7S1836C33v77Ev
  virtual void  v78(); // _ZN7S1836C33v78Ev
  virtual void  v79(); // _ZN7S1836C33v79Ev
  virtual void  v80(); // _ZN7S1836C33v80Ev
  virtual void  v81(); // _ZN7S1836C33v81Ev
  virtual void  v82(); // _ZN7S1836C33v82Ev
  virtual void  v83(); // _ZN7S1836C33v83Ev
  virtual void  v84(); // _ZN7S1836C33v84Ev
  virtual void  v85(); // _ZN7S1836C33v85Ev
  virtual void  v86(); // _ZN7S1836C33v86Ev
  virtual void  v87(); // _ZN7S1836C33v87Ev
  virtual void  v88(); // _ZN7S1836C33v88Ev
  virtual void  v89(); // _ZN7S1836C33v89Ev
  virtual void  v90(); // _ZN7S1836C33v90Ev
  virtual void  v91(); // _ZN7S1836C33v91Ev
  virtual void  v92(); // _ZN7S1836C33v92Ev
  virtual void  v93(); // _ZN7S1836C33v93Ev
  virtual void  v94(); // _ZN7S1836C33v94Ev
  virtual void  v95(); // _ZN7S1836C33v95Ev
  virtual void  v96(); // _ZN7S1836C33v96Ev
  virtual void  v97(); // _ZN7S1836C33v97Ev
  virtual void  v98(); // _ZN7S1836C33v98Ev
  virtual void  v99(); // _ZN7S1836C33v99Ev
  virtual void  v100(); // _ZN7S1836C34v100Ev
  virtual void  v101(); // _ZN7S1836C34v101Ev
  virtual void  v102(); // _ZN7S1836C34v102Ev
  virtual void  v103(); // _ZN7S1836C34v103Ev
  virtual void  v104(); // _ZN7S1836C34v104Ev
  virtual void  v105(); // _ZN7S1836C34v105Ev
  virtual void  v106(); // _ZN7S1836C34v106Ev
  virtual void  v107(); // _ZN7S1836C34v107Ev
  virtual void  v108(); // _ZN7S1836C34v108Ev
  virtual void  v109(); // _ZN7S1836C34v109Ev
  virtual void  v110(); // _ZN7S1836C34v110Ev
  virtual void  v111(); // _ZN7S1836C34v111Ev
  virtual void  v112(); // _ZN7S1836C34v112Ev
  virtual void  v113(); // _ZN7S1836C34v113Ev
  virtual void  v114(); // _ZN7S1836C34v114Ev
  virtual void  v115(); // _ZN7S1836C34v115Ev
  virtual void  v116(); // _ZN7S1836C34v116Ev
  virtual void  v117(); // _ZN7S1836C34v117Ev
  virtual void  v118(); // _ZN7S1836C34v118Ev
  virtual void  v119(); // _ZN7S1836C34v119Ev
  virtual void  v120(); // _ZN7S1836C34v120Ev
  virtual void  v121(); // _ZN7S1836C34v121Ev
  virtual void  v122(); // _ZN7S1836C34v122Ev
  virtual void  v123(); // _ZN7S1836C34v123Ev
  virtual void  v124(); // _ZN7S1836C34v124Ev
  virtual void  v125(); // _ZN7S1836C34v125Ev
  virtual void  v126(); // _ZN7S1836C34v126Ev
  virtual void  v127(); // _ZN7S1836C34v127Ev
  virtual void  v128(); // _ZN7S1836C34v128Ev
  virtual void  v129(); // _ZN7S1836C34v129Ev
  ~S1836C3(); // tgen
  S1836C3(); // tgen
};
//SIG(-1 S1836C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1836C3 ::v8(){vfunc_called(this, "_ZN7S1836C32v8Ev");}
void  S1836C3 ::v9(){vfunc_called(this, "_ZN7S1836C32v9Ev");}
void  S1836C3 ::v10(){vfunc_called(this, "_ZN7S1836C33v10Ev");}
void  S1836C3 ::v11(){vfunc_called(this, "_ZN7S1836C33v11Ev");}
void  S1836C3 ::v12(){vfunc_called(this, "_ZN7S1836C33v12Ev");}
void  S1836C3 ::v13(){vfunc_called(this, "_ZN7S1836C33v13Ev");}
void  S1836C3 ::v14(){vfunc_called(this, "_ZN7S1836C33v14Ev");}
void  S1836C3 ::v15(){vfunc_called(this, "_ZN7S1836C33v15Ev");}
void  S1836C3 ::v16(){vfunc_called(this, "_ZN7S1836C33v16Ev");}
void  S1836C3 ::v17(){vfunc_called(this, "_ZN7S1836C33v17Ev");}
void  S1836C3 ::v18(){vfunc_called(this, "_ZN7S1836C33v18Ev");}
void  S1836C3 ::v19(){vfunc_called(this, "_ZN7S1836C33v19Ev");}
void  S1836C3 ::v20(){vfunc_called(this, "_ZN7S1836C33v20Ev");}
void  S1836C3 ::v21(){vfunc_called(this, "_ZN7S1836C33v21Ev");}
void  S1836C3 ::v22(){vfunc_called(this, "_ZN7S1836C33v22Ev");}
void  S1836C3 ::v23(){vfunc_called(this, "_ZN7S1836C33v23Ev");}
void  S1836C3 ::v24(){vfunc_called(this, "_ZN7S1836C33v24Ev");}
void  S1836C3 ::v25(){vfunc_called(this, "_ZN7S1836C33v25Ev");}
void  S1836C3 ::v26(){vfunc_called(this, "_ZN7S1836C33v26Ev");}
void  S1836C3 ::v27(){vfunc_called(this, "_ZN7S1836C33v27Ev");}
void  S1836C3 ::v28(){vfunc_called(this, "_ZN7S1836C33v28Ev");}
void  S1836C3 ::v29(){vfunc_called(this, "_ZN7S1836C33v29Ev");}
void  S1836C3 ::v30(){vfunc_called(this, "_ZN7S1836C33v30Ev");}
void  S1836C3 ::v31(){vfunc_called(this, "_ZN7S1836C33v31Ev");}
void  S1836C3 ::v32(){vfunc_called(this, "_ZN7S1836C33v32Ev");}
void  S1836C3 ::v33(){vfunc_called(this, "_ZN7S1836C33v33Ev");}
void  S1836C3 ::v34(){vfunc_called(this, "_ZN7S1836C33v34Ev");}
void  S1836C3 ::v35(){vfunc_called(this, "_ZN7S1836C33v35Ev");}
void  S1836C3 ::v36(){vfunc_called(this, "_ZN7S1836C33v36Ev");}
void  S1836C3 ::v37(){vfunc_called(this, "_ZN7S1836C33v37Ev");}
void  S1836C3 ::v38(){vfunc_called(this, "_ZN7S1836C33v38Ev");}
void  S1836C3 ::v39(){vfunc_called(this, "_ZN7S1836C33v39Ev");}
void  S1836C3 ::v40(){vfunc_called(this, "_ZN7S1836C33v40Ev");}
void  S1836C3 ::v41(){vfunc_called(this, "_ZN7S1836C33v41Ev");}
void  S1836C3 ::v42(){vfunc_called(this, "_ZN7S1836C33v42Ev");}
void  S1836C3 ::v43(){vfunc_called(this, "_ZN7S1836C33v43Ev");}
void  S1836C3 ::v44(){vfunc_called(this, "_ZN7S1836C33v44Ev");}
void  S1836C3 ::v45(){vfunc_called(this, "_ZN7S1836C33v45Ev");}
void  S1836C3 ::v46(){vfunc_called(this, "_ZN7S1836C33v46Ev");}
void  S1836C3 ::v47(){vfunc_called(this, "_ZN7S1836C33v47Ev");}
void  S1836C3 ::v48(){vfunc_called(this, "_ZN7S1836C33v48Ev");}
void  S1836C3 ::v49(){vfunc_called(this, "_ZN7S1836C33v49Ev");}
void  S1836C3 ::v50(){vfunc_called(this, "_ZN7S1836C33v50Ev");}
void  S1836C3 ::v51(){vfunc_called(this, "_ZN7S1836C33v51Ev");}
void  S1836C3 ::v52(){vfunc_called(this, "_ZN7S1836C33v52Ev");}
void  S1836C3 ::v53(){vfunc_called(this, "_ZN7S1836C33v53Ev");}
void  S1836C3 ::v54(){vfunc_called(this, "_ZN7S1836C33v54Ev");}
void  S1836C3 ::v55(){vfunc_called(this, "_ZN7S1836C33v55Ev");}
void  S1836C3 ::v56(){vfunc_called(this, "_ZN7S1836C33v56Ev");}
void  S1836C3 ::v57(){vfunc_called(this, "_ZN7S1836C33v57Ev");}
void  S1836C3 ::v58(){vfunc_called(this, "_ZN7S1836C33v58Ev");}
void  S1836C3 ::v59(){vfunc_called(this, "_ZN7S1836C33v59Ev");}
void  S1836C3 ::v60(){vfunc_called(this, "_ZN7S1836C33v60Ev");}
void  S1836C3 ::v61(){vfunc_called(this, "_ZN7S1836C33v61Ev");}
void  S1836C3 ::v62(){vfunc_called(this, "_ZN7S1836C33v62Ev");}
void  S1836C3 ::v63(){vfunc_called(this, "_ZN7S1836C33v63Ev");}
void  S1836C3 ::v64(){vfunc_called(this, "_ZN7S1836C33v64Ev");}
void  S1836C3 ::v65(){vfunc_called(this, "_ZN7S1836C33v65Ev");}
void  S1836C3 ::v66(){vfunc_called(this, "_ZN7S1836C33v66Ev");}
void  S1836C3 ::v67(){vfunc_called(this, "_ZN7S1836C33v67Ev");}
void  S1836C3 ::v68(){vfunc_called(this, "_ZN7S1836C33v68Ev");}
void  S1836C3 ::v69(){vfunc_called(this, "_ZN7S1836C33v69Ev");}
void  S1836C3 ::v70(){vfunc_called(this, "_ZN7S1836C33v70Ev");}
void  S1836C3 ::v71(){vfunc_called(this, "_ZN7S1836C33v71Ev");}
void  S1836C3 ::v72(){vfunc_called(this, "_ZN7S1836C33v72Ev");}
void  S1836C3 ::v73(){vfunc_called(this, "_ZN7S1836C33v73Ev");}
void  S1836C3 ::v74(){vfunc_called(this, "_ZN7S1836C33v74Ev");}
void  S1836C3 ::v75(){vfunc_called(this, "_ZN7S1836C33v75Ev");}
void  S1836C3 ::v76(){vfunc_called(this, "_ZN7S1836C33v76Ev");}
void  S1836C3 ::v77(){vfunc_called(this, "_ZN7S1836C33v77Ev");}
void  S1836C3 ::v78(){vfunc_called(this, "_ZN7S1836C33v78Ev");}
void  S1836C3 ::v79(){vfunc_called(this, "_ZN7S1836C33v79Ev");}
void  S1836C3 ::v80(){vfunc_called(this, "_ZN7S1836C33v80Ev");}
void  S1836C3 ::v81(){vfunc_called(this, "_ZN7S1836C33v81Ev");}
void  S1836C3 ::v82(){vfunc_called(this, "_ZN7S1836C33v82Ev");}
void  S1836C3 ::v83(){vfunc_called(this, "_ZN7S1836C33v83Ev");}
void  S1836C3 ::v84(){vfunc_called(this, "_ZN7S1836C33v84Ev");}
void  S1836C3 ::v85(){vfunc_called(this, "_ZN7S1836C33v85Ev");}
void  S1836C3 ::v86(){vfunc_called(this, "_ZN7S1836C33v86Ev");}
void  S1836C3 ::v87(){vfunc_called(this, "_ZN7S1836C33v87Ev");}
void  S1836C3 ::v88(){vfunc_called(this, "_ZN7S1836C33v88Ev");}
void  S1836C3 ::v89(){vfunc_called(this, "_ZN7S1836C33v89Ev");}
void  S1836C3 ::v90(){vfunc_called(this, "_ZN7S1836C33v90Ev");}
void  S1836C3 ::v91(){vfunc_called(this, "_ZN7S1836C33v91Ev");}
void  S1836C3 ::v92(){vfunc_called(this, "_ZN7S1836C33v92Ev");}
void  S1836C3 ::v93(){vfunc_called(this, "_ZN7S1836C33v93Ev");}
void  S1836C3 ::v94(){vfunc_called(this, "_ZN7S1836C33v94Ev");}
void  S1836C3 ::v95(){vfunc_called(this, "_ZN7S1836C33v95Ev");}
void  S1836C3 ::v96(){vfunc_called(this, "_ZN7S1836C33v96Ev");}
void  S1836C3 ::v97(){vfunc_called(this, "_ZN7S1836C33v97Ev");}
void  S1836C3 ::v98(){vfunc_called(this, "_ZN7S1836C33v98Ev");}
void  S1836C3 ::v99(){vfunc_called(this, "_ZN7S1836C33v99Ev");}
void  S1836C3 ::v100(){vfunc_called(this, "_ZN7S1836C34v100Ev");}
void  S1836C3 ::v101(){vfunc_called(this, "_ZN7S1836C34v101Ev");}
void  S1836C3 ::v102(){vfunc_called(this, "_ZN7S1836C34v102Ev");}
void  S1836C3 ::v103(){vfunc_called(this, "_ZN7S1836C34v103Ev");}
void  S1836C3 ::v104(){vfunc_called(this, "_ZN7S1836C34v104Ev");}
void  S1836C3 ::v105(){vfunc_called(this, "_ZN7S1836C34v105Ev");}
void  S1836C3 ::v106(){vfunc_called(this, "_ZN7S1836C34v106Ev");}
void  S1836C3 ::v107(){vfunc_called(this, "_ZN7S1836C34v107Ev");}
void  S1836C3 ::v108(){vfunc_called(this, "_ZN7S1836C34v108Ev");}
void  S1836C3 ::v109(){vfunc_called(this, "_ZN7S1836C34v109Ev");}
void  S1836C3 ::v110(){vfunc_called(this, "_ZN7S1836C34v110Ev");}
void  S1836C3 ::v111(){vfunc_called(this, "_ZN7S1836C34v111Ev");}
void  S1836C3 ::v112(){vfunc_called(this, "_ZN7S1836C34v112Ev");}
void  S1836C3 ::v113(){vfunc_called(this, "_ZN7S1836C34v113Ev");}
void  S1836C3 ::v114(){vfunc_called(this, "_ZN7S1836C34v114Ev");}
void  S1836C3 ::v115(){vfunc_called(this, "_ZN7S1836C34v115Ev");}
void  S1836C3 ::v116(){vfunc_called(this, "_ZN7S1836C34v116Ev");}
void  S1836C3 ::v117(){vfunc_called(this, "_ZN7S1836C34v117Ev");}
void  S1836C3 ::v118(){vfunc_called(this, "_ZN7S1836C34v118Ev");}
void  S1836C3 ::v119(){vfunc_called(this, "_ZN7S1836C34v119Ev");}
void  S1836C3 ::v120(){vfunc_called(this, "_ZN7S1836C34v120Ev");}
void  S1836C3 ::v121(){vfunc_called(this, "_ZN7S1836C34v121Ev");}
void  S1836C3 ::v122(){vfunc_called(this, "_ZN7S1836C34v122Ev");}
void  S1836C3 ::v123(){vfunc_called(this, "_ZN7S1836C34v123Ev");}
void  S1836C3 ::v124(){vfunc_called(this, "_ZN7S1836C34v124Ev");}
void  S1836C3 ::v125(){vfunc_called(this, "_ZN7S1836C34v125Ev");}
void  S1836C3 ::v126(){vfunc_called(this, "_ZN7S1836C34v126Ev");}
void  S1836C3 ::v127(){vfunc_called(this, "_ZN7S1836C34v127Ev");}
void  S1836C3 ::v128(){vfunc_called(this, "_ZN7S1836C34v128Ev");}
void  S1836C3 ::v129(){vfunc_called(this, "_ZN7S1836C34v129Ev");}
S1836C3 ::~S1836C3(){ note_dtor("S1836C3", this);} // tgen
S1836C3 ::S1836C3(){ note_ctor("S1836C3", this);} // tgen

static void Test_S1836C3()
{
  extern Class_Descriptor cd_S1836C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1836C3, buf);
    S1836C3 *dp, &lv = *(dp=new (buf) S1836C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1836C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1836C3)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S1836C3");
    test_class_info(&lv, &cd_S1836C3);
    dp->~S1836C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1836C3(Test_S1836C3, "S1836C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1836C3C1Ev();
extern void _ZN7S1836C3D1Ev();
Name_Map name_map_S1836C3[] = {
  NSPAIR(_ZN7S1836C3C1Ev),
  NSPAIR(_ZN7S1836C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S1836C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1836C3[];
extern void _ZN7S1836C3D1Ev();
extern void _ZN7S1836C3D0Ev();
extern void _ZN7S1836C32v8Ev();
extern void _ZN7S1836C32v9Ev();
extern void _ZN7S1836C33v10Ev();
extern void _ZN7S1836C33v11Ev();
extern void _ZN7S1836C33v12Ev();
extern void _ZN7S1836C33v13Ev();
extern void _ZN7S1836C33v14Ev();
extern void _ZN7S1836C33v15Ev();
extern void _ZN7S1836C33v16Ev();
extern void _ZN7S1836C33v17Ev();
extern void _ZN7S1836C33v18Ev();
extern void _ZN7S1836C33v19Ev();
extern void _ZN7S1836C33v20Ev();
extern void _ZN7S1836C33v21Ev();
extern void _ZN7S1836C33v22Ev();
extern void _ZN7S1836C33v23Ev();
extern void _ZN7S1836C33v24Ev();
extern void _ZN7S1836C33v25Ev();
extern void _ZN7S1836C33v26Ev();
extern void _ZN7S1836C33v27Ev();
extern void _ZN7S1836C33v28Ev();
extern void _ZN7S1836C33v29Ev();
extern void _ZN7S1836C33v30Ev();
extern void _ZN7S1836C33v31Ev();
extern void _ZN7S1836C33v32Ev();
extern void _ZN7S1836C33v33Ev();
extern void _ZN7S1836C33v34Ev();
extern void _ZN7S1836C33v35Ev();
extern void _ZN7S1836C33v36Ev();
extern void _ZN7S1836C33v37Ev();
extern void _ZN7S1836C33v38Ev();
extern void _ZN7S1836C33v39Ev();
extern void _ZN7S1836C33v40Ev();
extern void _ZN7S1836C33v41Ev();
extern void _ZN7S1836C33v42Ev();
extern void _ZN7S1836C33v43Ev();
extern void _ZN7S1836C33v44Ev();
extern void _ZN7S1836C33v45Ev();
extern void _ZN7S1836C33v46Ev();
extern void _ZN7S1836C33v47Ev();
extern void _ZN7S1836C33v48Ev();
extern void _ZN7S1836C33v49Ev();
extern void _ZN7S1836C33v50Ev();
extern void _ZN7S1836C33v51Ev();
extern void _ZN7S1836C33v52Ev();
extern void _ZN7S1836C33v53Ev();
extern void _ZN7S1836C33v54Ev();
extern void _ZN7S1836C33v55Ev();
extern void _ZN7S1836C33v56Ev();
extern void _ZN7S1836C33v57Ev();
extern void _ZN7S1836C33v58Ev();
extern void _ZN7S1836C33v59Ev();
extern void _ZN7S1836C33v60Ev();
extern void _ZN7S1836C33v61Ev();
extern void _ZN7S1836C33v62Ev();
extern void _ZN7S1836C33v63Ev();
extern void _ZN7S1836C33v64Ev();
extern void _ZN7S1836C33v65Ev();
extern void _ZN7S1836C33v66Ev();
extern void _ZN7S1836C33v67Ev();
extern void _ZN7S1836C33v68Ev();
extern void _ZN7S1836C33v69Ev();
extern void _ZN7S1836C33v70Ev();
extern void _ZN7S1836C33v71Ev();
extern void _ZN7S1836C33v72Ev();
extern void _ZN7S1836C33v73Ev();
extern void _ZN7S1836C33v74Ev();
extern void _ZN7S1836C33v75Ev();
extern void _ZN7S1836C33v76Ev();
extern void _ZN7S1836C33v77Ev();
extern void _ZN7S1836C33v78Ev();
extern void _ZN7S1836C33v79Ev();
extern void _ZN7S1836C33v80Ev();
extern void _ZN7S1836C33v81Ev();
extern void _ZN7S1836C33v82Ev();
extern void _ZN7S1836C33v83Ev();
extern void _ZN7S1836C33v84Ev();
extern void _ZN7S1836C33v85Ev();
extern void _ZN7S1836C33v86Ev();
extern void _ZN7S1836C33v87Ev();
extern void _ZN7S1836C33v88Ev();
extern void _ZN7S1836C33v89Ev();
extern void _ZN7S1836C33v90Ev();
extern void _ZN7S1836C33v91Ev();
extern void _ZN7S1836C33v92Ev();
extern void _ZN7S1836C33v93Ev();
extern void _ZN7S1836C33v94Ev();
extern void _ZN7S1836C33v95Ev();
extern void _ZN7S1836C33v96Ev();
extern void _ZN7S1836C33v97Ev();
extern void _ZN7S1836C33v98Ev();
extern void _ZN7S1836C33v99Ev();
extern void _ZN7S1836C34v100Ev();
extern void _ZN7S1836C34v101Ev();
extern void _ZN7S1836C34v102Ev();
extern void _ZN7S1836C34v103Ev();
extern void _ZN7S1836C34v104Ev();
extern void _ZN7S1836C34v105Ev();
extern void _ZN7S1836C34v106Ev();
extern void _ZN7S1836C34v107Ev();
extern void _ZN7S1836C34v108Ev();
extern void _ZN7S1836C34v109Ev();
extern void _ZN7S1836C34v110Ev();
extern void _ZN7S1836C34v111Ev();
extern void _ZN7S1836C34v112Ev();
extern void _ZN7S1836C34v113Ev();
extern void _ZN7S1836C34v114Ev();
extern void _ZN7S1836C34v115Ev();
extern void _ZN7S1836C34v116Ev();
extern void _ZN7S1836C34v117Ev();
extern void _ZN7S1836C34v118Ev();
extern void _ZN7S1836C34v119Ev();
extern void _ZN7S1836C34v120Ev();
extern void _ZN7S1836C34v121Ev();
extern void _ZN7S1836C34v122Ev();
extern void _ZN7S1836C34v123Ev();
extern void _ZN7S1836C34v124Ev();
extern void _ZN7S1836C34v125Ev();
extern void _ZN7S1836C34v126Ev();
extern void _ZN7S1836C34v127Ev();
extern void _ZN7S1836C34v128Ev();
extern void _ZN7S1836C34v129Ev();
static  VTBL_ENTRY vtc_S1836C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1836C3[0]),
  (VTBL_ENTRY)&_ZN7S1836C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1836C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1836C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1836C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v129Ev,
};
extern VTBL_ENTRY _ZTI7S1836C3[];
extern  VTBL_ENTRY _ZTV7S1836C3[];
Class_Descriptor cd_S1836C3 = {  "S1836C3", // class name
  bases_S1836C3, 1,
  &(vtc_S1836C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1836C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1836C3),126, //virtual function table var
  2, // 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  S1836C2  : S1836C3 {
  virtual void  v130(); // _ZN7S1836C24v130Ev
  virtual void  v131(); // _ZN7S1836C24v131Ev
  virtual void  v132(); // _ZN7S1836C24v132Ev
  virtual void  v133(); // _ZN7S1836C24v133Ev
  virtual void  v134(); // _ZN7S1836C24v134Ev
  virtual void  v135(); // _ZN7S1836C24v135Ev
  virtual void  v136(); // _ZN7S1836C24v136Ev
  virtual void  v137(); // _ZN7S1836C24v137Ev
  virtual void  v138(); // _ZN7S1836C24v138Ev
  virtual void  v139(); // _ZN7S1836C24v139Ev
  virtual void  v140(); // _ZN7S1836C24v140Ev
  virtual void  v141(); // _ZN7S1836C24v141Ev
  virtual void  v142(); // _ZN7S1836C24v142Ev
  virtual void  v143(); // _ZN7S1836C24v143Ev
  virtual void  v144(); // _ZN7S1836C24v144Ev
  virtual void  v145(); // _ZN7S1836C24v145Ev
  virtual void  v146(); // _ZN7S1836C24v146Ev
  virtual void  v147(); // _ZN7S1836C24v147Ev
  ~S1836C2(); // tgen
  S1836C2(); // tgen
};
//SIG(-1 S1836C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S1836C2 ::v130(){vfunc_called(this, "_ZN7S1836C24v130Ev");}
void  S1836C2 ::v131(){vfunc_called(this, "_ZN7S1836C24v131Ev");}
void  S1836C2 ::v132(){vfunc_called(this, "_ZN7S1836C24v132Ev");}
void  S1836C2 ::v133(){vfunc_called(this, "_ZN7S1836C24v133Ev");}
void  S1836C2 ::v134(){vfunc_called(this, "_ZN7S1836C24v134Ev");}
void  S1836C2 ::v135(){vfunc_called(this, "_ZN7S1836C24v135Ev");}
void  S1836C2 ::v136(){vfunc_called(this, "_ZN7S1836C24v136Ev");}
void  S1836C2 ::v137(){vfunc_called(this, "_ZN7S1836C24v137Ev");}
void  S1836C2 ::v138(){vfunc_called(this, "_ZN7S1836C24v138Ev");}
void  S1836C2 ::v139(){vfunc_called(this, "_ZN7S1836C24v139Ev");}
void  S1836C2 ::v140(){vfunc_called(this, "_ZN7S1836C24v140Ev");}
void  S1836C2 ::v141(){vfunc_called(this, "_ZN7S1836C24v141Ev");}
void  S1836C2 ::v142(){vfunc_called(this, "_ZN7S1836C24v142Ev");}
void  S1836C2 ::v143(){vfunc_called(this, "_ZN7S1836C24v143Ev");}
void  S1836C2 ::v144(){vfunc_called(this, "_ZN7S1836C24v144Ev");}
void  S1836C2 ::v145(){vfunc_called(this, "_ZN7S1836C24v145Ev");}
void  S1836C2 ::v146(){vfunc_called(this, "_ZN7S1836C24v146Ev");}
void  S1836C2 ::v147(){vfunc_called(this, "_ZN7S1836C24v147Ev");}
S1836C2 ::~S1836C2(){ note_dtor("S1836C2", this);} // tgen
S1836C2 ::S1836C2(){ note_ctor("S1836C2", this);} // tgen

static void Test_S1836C2()
{
  extern Class_Descriptor cd_S1836C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1836C2, buf);
    S1836C2 *dp, &lv = *(dp=new (buf) S1836C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1836C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1836C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S1836C3*), 0, "S1836C2");
    check_base_class_offset(lv, (S1836C3*), 0, "S1836C2");
    test_class_info(&lv, &cd_S1836C2);
    dp->~S1836C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1836C2(Test_S1836C2, "S1836C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1836C2C1Ev();
extern void _ZN7S1836C2D1Ev();
Name_Map name_map_S1836C2[] = {
  NSPAIR(_ZN7S1836C2C1Ev),
  NSPAIR(_ZN7S1836C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1836C3;
extern VTBL_ENTRY _ZTI7S1836C3[];
extern  VTBL_ENTRY _ZTV7S1836C3[];
static Base_Class bases_S1836C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1836C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1836C2[];
extern void _ZN7S1836C2D1Ev();
extern void _ZN7S1836C2D0Ev();
extern void _ZN7S1836C32v8Ev();
extern void _ZN7S1836C32v9Ev();
extern void _ZN7S1836C33v10Ev();
extern void _ZN7S1836C33v11Ev();
extern void _ZN7S1836C33v12Ev();
extern void _ZN7S1836C33v13Ev();
extern void _ZN7S1836C33v14Ev();
extern void _ZN7S1836C33v15Ev();
extern void _ZN7S1836C33v16Ev();
extern void _ZN7S1836C33v17Ev();
extern void _ZN7S1836C33v18Ev();
extern void _ZN7S1836C33v19Ev();
extern void _ZN7S1836C33v20Ev();
extern void _ZN7S1836C33v21Ev();
extern void _ZN7S1836C33v22Ev();
extern void _ZN7S1836C33v23Ev();
extern void _ZN7S1836C33v24Ev();
extern void _ZN7S1836C33v25Ev();
extern void _ZN7S1836C33v26Ev();
extern void _ZN7S1836C33v27Ev();
extern void _ZN7S1836C33v28Ev();
extern void _ZN7S1836C33v29Ev();
extern void _ZN7S1836C33v30Ev();
extern void _ZN7S1836C33v31Ev();
extern void _ZN7S1836C33v32Ev();
extern void _ZN7S1836C33v33Ev();
extern void _ZN7S1836C33v34Ev();
extern void _ZN7S1836C33v35Ev();
extern void _ZN7S1836C33v36Ev();
extern void _ZN7S1836C33v37Ev();
extern void _ZN7S1836C33v38Ev();
extern void _ZN7S1836C33v39Ev();
extern void _ZN7S1836C33v40Ev();
extern void _ZN7S1836C33v41Ev();
extern void _ZN7S1836C33v42Ev();
extern void _ZN7S1836C33v43Ev();
extern void _ZN7S1836C33v44Ev();
extern void _ZN7S1836C33v45Ev();
extern void _ZN7S1836C33v46Ev();
extern void _ZN7S1836C33v47Ev();
extern void _ZN7S1836C33v48Ev();
extern void _ZN7S1836C33v49Ev();
extern void _ZN7S1836C33v50Ev();
extern void _ZN7S1836C33v51Ev();
extern void _ZN7S1836C33v52Ev();
extern void _ZN7S1836C33v53Ev();
extern void _ZN7S1836C33v54Ev();
extern void _ZN7S1836C33v55Ev();
extern void _ZN7S1836C33v56Ev();
extern void _ZN7S1836C33v57Ev();
extern void _ZN7S1836C33v58Ev();
extern void _ZN7S1836C33v59Ev();
extern void _ZN7S1836C33v60Ev();
extern void _ZN7S1836C33v61Ev();
extern void _ZN7S1836C33v62Ev();
extern void _ZN7S1836C33v63Ev();
extern void _ZN7S1836C33v64Ev();
extern void _ZN7S1836C33v65Ev();
extern void _ZN7S1836C33v66Ev();
extern void _ZN7S1836C33v67Ev();
extern void _ZN7S1836C33v68Ev();
extern void _ZN7S1836C33v69Ev();
extern void _ZN7S1836C33v70Ev();
extern void _ZN7S1836C33v71Ev();
extern void _ZN7S1836C33v72Ev();
extern void _ZN7S1836C33v73Ev();
extern void _ZN7S1836C33v74Ev();
extern void _ZN7S1836C33v75Ev();
extern void _ZN7S1836C33v76Ev();
extern void _ZN7S1836C33v77Ev();
extern void _ZN7S1836C33v78Ev();
extern void _ZN7S1836C33v79Ev();
extern void _ZN7S1836C33v80Ev();
extern void _ZN7S1836C33v81Ev();
extern void _ZN7S1836C33v82Ev();
extern void _ZN7S1836C33v83Ev();
extern void _ZN7S1836C33v84Ev();
extern void _ZN7S1836C33v85Ev();
extern void _ZN7S1836C33v86Ev();
extern void _ZN7S1836C33v87Ev();
extern void _ZN7S1836C33v88Ev();
extern void _ZN7S1836C33v89Ev();
extern void _ZN7S1836C33v90Ev();
extern void _ZN7S1836C33v91Ev();
extern void _ZN7S1836C33v92Ev();
extern void _ZN7S1836C33v93Ev();
extern void _ZN7S1836C33v94Ev();
extern void _ZN7S1836C33v95Ev();
extern void _ZN7S1836C33v96Ev();
extern void _ZN7S1836C33v97Ev();
extern void _ZN7S1836C33v98Ev();
extern void _ZN7S1836C33v99Ev();
extern void _ZN7S1836C34v100Ev();
extern void _ZN7S1836C34v101Ev();
extern void _ZN7S1836C34v102Ev();
extern void _ZN7S1836C34v103Ev();
extern void _ZN7S1836C34v104Ev();
extern void _ZN7S1836C34v105Ev();
extern void _ZN7S1836C34v106Ev();
extern void _ZN7S1836C34v107Ev();
extern void _ZN7S1836C34v108Ev();
extern void _ZN7S1836C34v109Ev();
extern void _ZN7S1836C34v110Ev();
extern void _ZN7S1836C34v111Ev();
extern void _ZN7S1836C34v112Ev();
extern void _ZN7S1836C34v113Ev();
extern void _ZN7S1836C34v114Ev();
extern void _ZN7S1836C34v115Ev();
extern void _ZN7S1836C34v116Ev();
extern void _ZN7S1836C34v117Ev();
extern void _ZN7S1836C34v118Ev();
extern void _ZN7S1836C34v119Ev();
extern void _ZN7S1836C34v120Ev();
extern void _ZN7S1836C34v121Ev();
extern void _ZN7S1836C34v122Ev();
extern void _ZN7S1836C34v123Ev();
extern void _ZN7S1836C34v124Ev();
extern void _ZN7S1836C34v125Ev();
extern void _ZN7S1836C34v126Ev();
extern void _ZN7S1836C34v127Ev();
extern void _ZN7S1836C34v128Ev();
extern void _ZN7S1836C34v129Ev();
extern void _ZN7S1836C24v130Ev();
extern void _ZN7S1836C24v131Ev();
extern void _ZN7S1836C24v132Ev();
extern void _ZN7S1836C24v133Ev();
extern void _ZN7S1836C24v134Ev();
extern void _ZN7S1836C24v135Ev();
extern void _ZN7S1836C24v136Ev();
extern void _ZN7S1836C24v137Ev();
extern void _ZN7S1836C24v138Ev();
extern void _ZN7S1836C24v139Ev();
extern void _ZN7S1836C24v140Ev();
extern void _ZN7S1836C24v141Ev();
extern void _ZN7S1836C24v142Ev();
extern void _ZN7S1836C24v143Ev();
extern void _ZN7S1836C24v144Ev();
extern void _ZN7S1836C24v145Ev();
extern void _ZN7S1836C24v146Ev();
extern void _ZN7S1836C24v147Ev();
static  VTBL_ENTRY vtc_S1836C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1836C2[0]),
  (VTBL_ENTRY)&_ZN7S1836C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1836C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1836C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1836C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v147Ev,
};
extern VTBL_ENTRY _ZTI7S1836C2[];
extern  VTBL_ENTRY _ZTV7S1836C2[];
Class_Descriptor cd_S1836C2 = {  "S1836C2", // class name
  bases_S1836C2, 2,
  &(vtc_S1836C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1836C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1836C2),144, //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  S1836C1  : S1836C2 {
  virtual void  v1(); // _ZN7S1836C12v1Ev
  virtual void  v2(); // _ZN7S1836C12v2Ev
  virtual void  v3(); // _ZN7S1836C12v3Ev
  virtual void  v4(); // _ZN7S1836C12v4Ev
  virtual void  v5(); // _ZN7S1836C12v5Ev
  virtual void  v6(); // _ZN7S1836C12v6Ev
  virtual void  v7(); // _ZN7S1836C12v7Ev
  ~S1836C1(); // tgen
  S1836C1(); // tgen
};
//SIG(1 S1836C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 v144 v145 v146 v147} v1 v2 v3 v4 v5 v6 v7}


void  S1836C1 ::v1(){vfunc_called(this, "_ZN7S1836C12v1Ev");}
void  S1836C1 ::v2(){vfunc_called(this, "_ZN7S1836C12v2Ev");}
void  S1836C1 ::v3(){vfunc_called(this, "_ZN7S1836C12v3Ev");}
void  S1836C1 ::v4(){vfunc_called(this, "_ZN7S1836C12v4Ev");}
void  S1836C1 ::v5(){vfunc_called(this, "_ZN7S1836C12v5Ev");}
void  S1836C1 ::v6(){vfunc_called(this, "_ZN7S1836C12v6Ev");}
void  S1836C1 ::v7(){vfunc_called(this, "_ZN7S1836C12v7Ev");}
S1836C1 ::~S1836C1(){ note_dtor("S1836C1", this);} // tgen
S1836C1 ::S1836C1(){ note_ctor("S1836C1", this);} // tgen

static void Test_S1836C1()
{
  extern Class_Descriptor cd_S1836C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1836C1, buf);
    S1836C1 *dp, &lv = *(dp=new (buf) S1836C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1836C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1836C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S1836C3*)(S1836C2*), 0, "S1836C1");
    check_base_class_offset(lv, (S1836C3*)(S1836C2*), 0, "S1836C1");
    check_base_class_offset(lv, (S1836C2*), 0, "S1836C1");
    test_class_info(&lv, &cd_S1836C1);
    dp->~S1836C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1836C1(Test_S1836C1, "S1836C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1836C1C1Ev();
extern void _ZN7S1836C1D1Ev();
Name_Map name_map_S1836C1[] = {
  NSPAIR(_ZN7S1836C1C1Ev),
  NSPAIR(_ZN7S1836C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1836C3;
extern VTBL_ENTRY _ZTI7S1836C3[];
extern  VTBL_ENTRY _ZTV7S1836C3[];
extern Class_Descriptor cd_S1836C2;
extern VTBL_ENTRY _ZTI7S1836C2[];
extern  VTBL_ENTRY _ZTV7S1836C2[];
static Base_Class bases_S1836C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1836C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1836C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1836C1[];
extern void _ZN7S1836C1D1Ev();
extern void _ZN7S1836C1D0Ev();
extern void _ZN7S1836C32v8Ev();
extern void _ZN7S1836C32v9Ev();
extern void _ZN7S1836C33v10Ev();
extern void _ZN7S1836C33v11Ev();
extern void _ZN7S1836C33v12Ev();
extern void _ZN7S1836C33v13Ev();
extern void _ZN7S1836C33v14Ev();
extern void _ZN7S1836C33v15Ev();
extern void _ZN7S1836C33v16Ev();
extern void _ZN7S1836C33v17Ev();
extern void _ZN7S1836C33v18Ev();
extern void _ZN7S1836C33v19Ev();
extern void _ZN7S1836C33v20Ev();
extern void _ZN7S1836C33v21Ev();
extern void _ZN7S1836C33v22Ev();
extern void _ZN7S1836C33v23Ev();
extern void _ZN7S1836C33v24Ev();
extern void _ZN7S1836C33v25Ev();
extern void _ZN7S1836C33v26Ev();
extern void _ZN7S1836C33v27Ev();
extern void _ZN7S1836C33v28Ev();
extern void _ZN7S1836C33v29Ev();
extern void _ZN7S1836C33v30Ev();
extern void _ZN7S1836C33v31Ev();
extern void _ZN7S1836C33v32Ev();
extern void _ZN7S1836C33v33Ev();
extern void _ZN7S1836C33v34Ev();
extern void _ZN7S1836C33v35Ev();
extern void _ZN7S1836C33v36Ev();
extern void _ZN7S1836C33v37Ev();
extern void _ZN7S1836C33v38Ev();
extern void _ZN7S1836C33v39Ev();
extern void _ZN7S1836C33v40Ev();
extern void _ZN7S1836C33v41Ev();
extern void _ZN7S1836C33v42Ev();
extern void _ZN7S1836C33v43Ev();
extern void _ZN7S1836C33v44Ev();
extern void _ZN7S1836C33v45Ev();
extern void _ZN7S1836C33v46Ev();
extern void _ZN7S1836C33v47Ev();
extern void _ZN7S1836C33v48Ev();
extern void _ZN7S1836C33v49Ev();
extern void _ZN7S1836C33v50Ev();
extern void _ZN7S1836C33v51Ev();
extern void _ZN7S1836C33v52Ev();
extern void _ZN7S1836C33v53Ev();
extern void _ZN7S1836C33v54Ev();
extern void _ZN7S1836C33v55Ev();
extern void _ZN7S1836C33v56Ev();
extern void _ZN7S1836C33v57Ev();
extern void _ZN7S1836C33v58Ev();
extern void _ZN7S1836C33v59Ev();
extern void _ZN7S1836C33v60Ev();
extern void _ZN7S1836C33v61Ev();
extern void _ZN7S1836C33v62Ev();
extern void _ZN7S1836C33v63Ev();
extern void _ZN7S1836C33v64Ev();
extern void _ZN7S1836C33v65Ev();
extern void _ZN7S1836C33v66Ev();
extern void _ZN7S1836C33v67Ev();
extern void _ZN7S1836C33v68Ev();
extern void _ZN7S1836C33v69Ev();
extern void _ZN7S1836C33v70Ev();
extern void _ZN7S1836C33v71Ev();
extern void _ZN7S1836C33v72Ev();
extern void _ZN7S1836C33v73Ev();
extern void _ZN7S1836C33v74Ev();
extern void _ZN7S1836C33v75Ev();
extern void _ZN7S1836C33v76Ev();
extern void _ZN7S1836C33v77Ev();
extern void _ZN7S1836C33v78Ev();
extern void _ZN7S1836C33v79Ev();
extern void _ZN7S1836C33v80Ev();
extern void _ZN7S1836C33v81Ev();
extern void _ZN7S1836C33v82Ev();
extern void _ZN7S1836C33v83Ev();
extern void _ZN7S1836C33v84Ev();
extern void _ZN7S1836C33v85Ev();
extern void _ZN7S1836C33v86Ev();
extern void _ZN7S1836C33v87Ev();
extern void _ZN7S1836C33v88Ev();
extern void _ZN7S1836C33v89Ev();
extern void _ZN7S1836C33v90Ev();
extern void _ZN7S1836C33v91Ev();
extern void _ZN7S1836C33v92Ev();
extern void _ZN7S1836C33v93Ev();
extern void _ZN7S1836C33v94Ev();
extern void _ZN7S1836C33v95Ev();
extern void _ZN7S1836C33v96Ev();
extern void _ZN7S1836C33v97Ev();
extern void _ZN7S1836C33v98Ev();
extern void _ZN7S1836C33v99Ev();
extern void _ZN7S1836C34v100Ev();
extern void _ZN7S1836C34v101Ev();
extern void _ZN7S1836C34v102Ev();
extern void _ZN7S1836C34v103Ev();
extern void _ZN7S1836C34v104Ev();
extern void _ZN7S1836C34v105Ev();
extern void _ZN7S1836C34v106Ev();
extern void _ZN7S1836C34v107Ev();
extern void _ZN7S1836C34v108Ev();
extern void _ZN7S1836C34v109Ev();
extern void _ZN7S1836C34v110Ev();
extern void _ZN7S1836C34v111Ev();
extern void _ZN7S1836C34v112Ev();
extern void _ZN7S1836C34v113Ev();
extern void _ZN7S1836C34v114Ev();
extern void _ZN7S1836C34v115Ev();
extern void _ZN7S1836C34v116Ev();
extern void _ZN7S1836C34v117Ev();
extern void _ZN7S1836C34v118Ev();
extern void _ZN7S1836C34v119Ev();
extern void _ZN7S1836C34v120Ev();
extern void _ZN7S1836C34v121Ev();
extern void _ZN7S1836C34v122Ev();
extern void _ZN7S1836C34v123Ev();
extern void _ZN7S1836C34v124Ev();
extern void _ZN7S1836C34v125Ev();
extern void _ZN7S1836C34v126Ev();
extern void _ZN7S1836C34v127Ev();
extern void _ZN7S1836C34v128Ev();
extern void _ZN7S1836C34v129Ev();
extern void _ZN7S1836C24v130Ev();
extern void _ZN7S1836C24v131Ev();
extern void _ZN7S1836C24v132Ev();
extern void _ZN7S1836C24v133Ev();
extern void _ZN7S1836C24v134Ev();
extern void _ZN7S1836C24v135Ev();
extern void _ZN7S1836C24v136Ev();
extern void _ZN7S1836C24v137Ev();
extern void _ZN7S1836C24v138Ev();
extern void _ZN7S1836C24v139Ev();
extern void _ZN7S1836C24v140Ev();
extern void _ZN7S1836C24v141Ev();
extern void _ZN7S1836C24v142Ev();
extern void _ZN7S1836C24v143Ev();
extern void _ZN7S1836C24v144Ev();
extern void _ZN7S1836C24v145Ev();
extern void _ZN7S1836C24v146Ev();
extern void _ZN7S1836C24v147Ev();
extern void _ZN7S1836C12v1Ev();
extern void _ZN7S1836C12v2Ev();
extern void _ZN7S1836C12v3Ev();
extern void _ZN7S1836C12v4Ev();
extern void _ZN7S1836C12v5Ev();
extern void _ZN7S1836C12v6Ev();
extern void _ZN7S1836C12v7Ev();
static  VTBL_ENTRY vtc_S1836C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1836C1[0]),
  (VTBL_ENTRY)&_ZN7S1836C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1836C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1836C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1836C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1836C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v128Ev,
  (VTBL_ENTRY)&_ZN7S1836C34v129Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v146Ev,
  (VTBL_ENTRY)&_ZN7S1836C24v147Ev,
  (VTBL_ENTRY)&_ZN7S1836C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1836C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1836C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1836C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1836C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1836C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1836C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1836C1[];
extern  VTBL_ENTRY _ZTV7S1836C1[];
Class_Descriptor cd_S1836C1 = {  "S1836C1", // class name
  bases_S1836C1, 3,
  &(vtc_S1836C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1836C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1836C1),151, //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  S786C4  : S785C5_nt {
  virtual void  v6(); // _ZN6S786C42v6Ev
  virtual void  v7(); // _ZN6S786C42v7Ev
  virtual void  v8(); // _ZN6S786C42v8Ev
  virtual void  v9(); // _ZN6S786C42v9Ev
  virtual void  v10(); // _ZN6S786C43v10Ev
  virtual void  v11(); // _ZN6S786C43v11Ev
  virtual void  v12(); // _ZN6S786C43v12Ev
  virtual void  v13(); // _ZN6S786C43v13Ev
  virtual void  v14(); // _ZN6S786C43v14Ev
  virtual void  v15(); // _ZN6S786C43v15Ev
  virtual void  v16(); // _ZN6S786C43v16Ev
  virtual void  v17(); // _ZN6S786C43v17Ev
  virtual void  v18(); // _ZN6S786C43v18Ev
  virtual void  v19(); // _ZN6S786C43v19Ev
  virtual void  v20(); // _ZN6S786C43v20Ev
  virtual void  v21(); // _ZN6S786C43v21Ev
  virtual void  v22(); // _ZN6S786C43v22Ev
  virtual void  v23(); // _ZN6S786C43v23Ev
  virtual void  v24(); // _ZN6S786C43v24Ev
  virtual void  v25(); // _ZN6S786C43v25Ev
  virtual void  v26(); // _ZN6S786C43v26Ev
  virtual void  v27(); // _ZN6S786C43v27Ev
  virtual void  v28(); // _ZN6S786C43v28Ev
  virtual void  v29(); // _ZN6S786C43v29Ev
  virtual void  v30(); // _ZN6S786C43v30Ev
  virtual void  v31(); // _ZN6S786C43v31Ev
  virtual void  v32(); // _ZN6S786C43v32Ev
  virtual void  v33(); // _ZN6S786C43v33Ev
  virtual void  v34(); // _ZN6S786C43v34Ev
  virtual void  v35(); // _ZN6S786C43v35Ev
  virtual void  v36(); // _ZN6S786C43v36Ev
  virtual void  v37(); // _ZN6S786C43v37Ev
  virtual void  v38(); // _ZN6S786C43v38Ev
  virtual void  v39(); // _ZN6S786C43v39Ev
  virtual void  v40(); // _ZN6S786C43v40Ev
  virtual void  v41(); // _ZN6S786C43v41Ev
  virtual void  v42(); // _ZN6S786C43v42Ev
  virtual void  v43(); // _ZN6S786C43v43Ev
  virtual void  v44(); // _ZN6S786C43v44Ev
  virtual void  v45(); // _ZN6S786C43v45Ev
  virtual void  v46(); // _ZN6S786C43v46Ev
  virtual void  v47(); // _ZN6S786C43v47Ev
  virtual void  v48(); // _ZN6S786C43v48Ev
  virtual void  v49(); // _ZN6S786C43v49Ev
  virtual void  v50(); // _ZN6S786C43v50Ev
  virtual void  v51(); // _ZN6S786C43v51Ev
  virtual void  v52(); // _ZN6S786C43v52Ev
  virtual void  v53(); // _ZN6S786C43v53Ev
  virtual void  v54(); // _ZN6S786C43v54Ev
  virtual void  v55(); // _ZN6S786C43v55Ev
  virtual void  v56(); // _ZN6S786C43v56Ev
  virtual void  v57(); // _ZN6S786C43v57Ev
  virtual void  v58(); // _ZN6S786C43v58Ev
  virtual void  v59(); // _ZN6S786C43v59Ev
  virtual void  v60(); // _ZN6S786C43v60Ev
  virtual void  v61(); // _ZN6S786C43v61Ev
  virtual void  v62(); // _ZN6S786C43v62Ev
  virtual void  v63(); // _ZN6S786C43v63Ev
  virtual void  v64(); // _ZN6S786C43v64Ev
  virtual void  v65(); // _ZN6S786C43v65Ev
  virtual void  v66(); // _ZN6S786C43v66Ev
  virtual void  v67(); // _ZN6S786C43v67Ev
  virtual void  v68(); // _ZN6S786C43v68Ev
  virtual void  v69(); // _ZN6S786C43v69Ev
  virtual void  v70(); // _ZN6S786C43v70Ev
  virtual void  v71(); // _ZN6S786C43v71Ev
  virtual void  v72(); // _ZN6S786C43v72Ev
  virtual void  v73(); // _ZN6S786C43v73Ev
  virtual void  v74(); // _ZN6S786C43v74Ev
  virtual void  v75(); // _ZN6S786C43v75Ev
  virtual void  v76(); // _ZN6S786C43v76Ev
  virtual void  v77(); // _ZN6S786C43v77Ev
  virtual void  v78(); // _ZN6S786C43v78Ev
  virtual void  v79(); // _ZN6S786C43v79Ev
  virtual void  v80(); // _ZN6S786C43v80Ev
  virtual void  v81(); // _ZN6S786C43v81Ev
  virtual void  v82(); // _ZN6S786C43v82Ev
  virtual void  v83(); // _ZN6S786C43v83Ev
  virtual void  v84(); // _ZN6S786C43v84Ev
  virtual void  v85(); // _ZN6S786C43v85Ev
  virtual void  v86(); // _ZN6S786C43v86Ev
  virtual void  v87(); // _ZN6S786C43v87Ev
  virtual void  v88(); // _ZN6S786C43v88Ev
  virtual void  v89(); // _ZN6S786C43v89Ev
  virtual void  v90(); // _ZN6S786C43v90Ev
  virtual void  v91(); // _ZN6S786C43v91Ev
  virtual void  v92(); // _ZN6S786C43v92Ev
  virtual void  v93(); // _ZN6S786C43v93Ev
  virtual void  v94(); // _ZN6S786C43v94Ev
  virtual void  v95(); // _ZN6S786C43v95Ev
  virtual void  v96(); // _ZN6S786C43v96Ev
  virtual void  v97(); // _ZN6S786C43v97Ev
  virtual void  v98(); // _ZN6S786C43v98Ev
  virtual void  v99(); // _ZN6S786C43v99Ev
  virtual void  v100(); // _ZN6S786C44v100Ev
  virtual void  v101(); // _ZN6S786C44v101Ev
  virtual void  v102(); // _ZN6S786C44v102Ev
  virtual void  v103(); // _ZN6S786C44v103Ev
  virtual void  v104(); // _ZN6S786C44v104Ev
  virtual void  v105(); // _ZN6S786C44v105Ev
  virtual void  v106(); // _ZN6S786C44v106Ev
  virtual void  v107(); // _ZN6S786C44v107Ev
  virtual void  v108(); // _ZN6S786C44v108Ev
  virtual void  v109(); // _ZN6S786C44v109Ev
  virtual void  v110(); // _ZN6S786C44v110Ev
  virtual void  v111(); // _ZN6S786C44v111Ev
  virtual void  v112(); // _ZN6S786C44v112Ev
  virtual void  v113(); // _ZN6S786C44v113Ev
  virtual void  v114(); // _ZN6S786C44v114Ev
  virtual void  v115(); // _ZN6S786C44v115Ev
  virtual void  v116(); // _ZN6S786C44v116Ev
  virtual void  v117(); // _ZN6S786C44v117Ev
  virtual void  v118(); // _ZN6S786C44v118Ev
  virtual void  v119(); // _ZN6S786C44v119Ev
  virtual void  v120(); // _ZN6S786C44v120Ev
  virtual void  v121(); // _ZN6S786C44v121Ev
  virtual void  v122(); // _ZN6S786C44v122Ev
  virtual void  v123(); // _ZN6S786C44v123Ev
  virtual void  v124(); // _ZN6S786C44v124Ev
  virtual void  v125(); // _ZN6S786C44v125Ev
  virtual void  v126(); // _ZN6S786C44v126Ev
  virtual void  v127(); // _ZN6S786C44v127Ev
  ~S786C4(); // tgen
  S786C4(); // tgen
};
//SIG(-1 S786C4) C1{ BC2{ vd m Fp Fi} 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}


void  S786C4 ::v6(){vfunc_called(this, "_ZN6S786C42v6Ev");}
void  S786C4 ::v7(){vfunc_called(this, "_ZN6S786C42v7Ev");}
void  S786C4 ::v8(){vfunc_called(this, "_ZN6S786C42v8Ev");}
void  S786C4 ::v9(){vfunc_called(this, "_ZN6S786C42v9Ev");}
void  S786C4 ::v10(){vfunc_called(this, "_ZN6S786C43v10Ev");}
void  S786C4 ::v11(){vfunc_called(this, "_ZN6S786C43v11Ev");}
void  S786C4 ::v12(){vfunc_called(this, "_ZN6S786C43v12Ev");}
void  S786C4 ::v13(){vfunc_called(this, "_ZN6S786C43v13Ev");}
void  S786C4 ::v14(){vfunc_called(this, "_ZN6S786C43v14Ev");}
void  S786C4 ::v15(){vfunc_called(this, "_ZN6S786C43v15Ev");}
void  S786C4 ::v16(){vfunc_called(this, "_ZN6S786C43v16Ev");}
void  S786C4 ::v17(){vfunc_called(this, "_ZN6S786C43v17Ev");}
void  S786C4 ::v18(){vfunc_called(this, "_ZN6S786C43v18Ev");}
void  S786C4 ::v19(){vfunc_called(this, "_ZN6S786C43v19Ev");}
void  S786C4 ::v20(){vfunc_called(this, "_ZN6S786C43v20Ev");}
void  S786C4 ::v21(){vfunc_called(this, "_ZN6S786C43v21Ev");}
void  S786C4 ::v22(){vfunc_called(this, "_ZN6S786C43v22Ev");}
void  S786C4 ::v23(){vfunc_called(this, "_ZN6S786C43v23Ev");}
void  S786C4 ::v24(){vfunc_called(this, "_ZN6S786C43v24Ev");}
void  S786C4 ::v25(){vfunc_called(this, "_ZN6S786C43v25Ev");}
void  S786C4 ::v26(){vfunc_called(this, "_ZN6S786C43v26Ev");}
void  S786C4 ::v27(){vfunc_called(this, "_ZN6S786C43v27Ev");}
void  S786C4 ::v28(){vfunc_called(this, "_ZN6S786C43v28Ev");}
void  S786C4 ::v29(){vfunc_called(this, "_ZN6S786C43v29Ev");}
void  S786C4 ::v30(){vfunc_called(this, "_ZN6S786C43v30Ev");}
void  S786C4 ::v31(){vfunc_called(this, "_ZN6S786C43v31Ev");}
void  S786C4 ::v32(){vfunc_called(this, "_ZN6S786C43v32Ev");}
void  S786C4 ::v33(){vfunc_called(this, "_ZN6S786C43v33Ev");}
void  S786C4 ::v34(){vfunc_called(this, "_ZN6S786C43v34Ev");}
void  S786C4 ::v35(){vfunc_called(this, "_ZN6S786C43v35Ev");}
void  S786C4 ::v36(){vfunc_called(this, "_ZN6S786C43v36Ev");}
void  S786C4 ::v37(){vfunc_called(this, "_ZN6S786C43v37Ev");}
void  S786C4 ::v38(){vfunc_called(this, "_ZN6S786C43v38Ev");}
void  S786C4 ::v39(){vfunc_called(this, "_ZN6S786C43v39Ev");}
void  S786C4 ::v40(){vfunc_called(this, "_ZN6S786C43v40Ev");}
void  S786C4 ::v41(){vfunc_called(this, "_ZN6S786C43v41Ev");}
void  S786C4 ::v42(){vfunc_called(this, "_ZN6S786C43v42Ev");}
void  S786C4 ::v43(){vfunc_called(this, "_ZN6S786C43v43Ev");}
void  S786C4 ::v44(){vfunc_called(this, "_ZN6S786C43v44Ev");}
void  S786C4 ::v45(){vfunc_called(this, "_ZN6S786C43v45Ev");}
void  S786C4 ::v46(){vfunc_called(this, "_ZN6S786C43v46Ev");}
void  S786C4 ::v47(){vfunc_called(this, "_ZN6S786C43v47Ev");}
void  S786C4 ::v48(){vfunc_called(this, "_ZN6S786C43v48Ev");}
void  S786C4 ::v49(){vfunc_called(this, "_ZN6S786C43v49Ev");}
void  S786C4 ::v50(){vfunc_called(this, "_ZN6S786C43v50Ev");}
void  S786C4 ::v51(){vfunc_called(this, "_ZN6S786C43v51Ev");}
void  S786C4 ::v52(){vfunc_called(this, "_ZN6S786C43v52Ev");}
void  S786C4 ::v53(){vfunc_called(this, "_ZN6S786C43v53Ev");}
void  S786C4 ::v54(){vfunc_called(this, "_ZN6S786C43v54Ev");}
void  S786C4 ::v55(){vfunc_called(this, "_ZN6S786C43v55Ev");}
void  S786C4 ::v56(){vfunc_called(this, "_ZN6S786C43v56Ev");}
void  S786C4 ::v57(){vfunc_called(this, "_ZN6S786C43v57Ev");}
void  S786C4 ::v58(){vfunc_called(this, "_ZN6S786C43v58Ev");}
void  S786C4 ::v59(){vfunc_called(this, "_ZN6S786C43v59Ev");}
void  S786C4 ::v60(){vfunc_called(this, "_ZN6S786C43v60Ev");}
void  S786C4 ::v61(){vfunc_called(this, "_ZN6S786C43v61Ev");}
void  S786C4 ::v62(){vfunc_called(this, "_ZN6S786C43v62Ev");}
void  S786C4 ::v63(){vfunc_called(this, "_ZN6S786C43v63Ev");}
void  S786C4 ::v64(){vfunc_called(this, "_ZN6S786C43v64Ev");}
void  S786C4 ::v65(){vfunc_called(this, "_ZN6S786C43v65Ev");}
void  S786C4 ::v66(){vfunc_called(this, "_ZN6S786C43v66Ev");}
void  S786C4 ::v67(){vfunc_called(this, "_ZN6S786C43v67Ev");}
void  S786C4 ::v68(){vfunc_called(this, "_ZN6S786C43v68Ev");}
void  S786C4 ::v69(){vfunc_called(this, "_ZN6S786C43v69Ev");}
void  S786C4 ::v70(){vfunc_called(this, "_ZN6S786C43v70Ev");}
void  S786C4 ::v71(){vfunc_called(this, "_ZN6S786C43v71Ev");}
void  S786C4 ::v72(){vfunc_called(this, "_ZN6S786C43v72Ev");}
void  S786C4 ::v73(){vfunc_called(this, "_ZN6S786C43v73Ev");}
void  S786C4 ::v74(){vfunc_called(this, "_ZN6S786C43v74Ev");}
void  S786C4 ::v75(){vfunc_called(this, "_ZN6S786C43v75Ev");}
void  S786C4 ::v76(){vfunc_called(this, "_ZN6S786C43v76Ev");}
void  S786C4 ::v77(){vfunc_called(this, "_ZN6S786C43v77Ev");}
void  S786C4 ::v78(){vfunc_called(this, "_ZN6S786C43v78Ev");}
void  S786C4 ::v79(){vfunc_called(this, "_ZN6S786C43v79Ev");}
void  S786C4 ::v80(){vfunc_called(this, "_ZN6S786C43v80Ev");}
void  S786C4 ::v81(){vfunc_called(this, "_ZN6S786C43v81Ev");}
void  S786C4 ::v82(){vfunc_called(this, "_ZN6S786C43v82Ev");}
void  S786C4 ::v83(){vfunc_called(this, "_ZN6S786C43v83Ev");}
void  S786C4 ::v84(){vfunc_called(this, "_ZN6S786C43v84Ev");}
void  S786C4 ::v85(){vfunc_called(this, "_ZN6S786C43v85Ev");}
void  S786C4 ::v86(){vfunc_called(this, "_ZN6S786C43v86Ev");}
void  S786C4 ::v87(){vfunc_called(this, "_ZN6S786C43v87Ev");}
void  S786C4 ::v88(){vfunc_called(this, "_ZN6S786C43v88Ev");}
void  S786C4 ::v89(){vfunc_called(this, "_ZN6S786C43v89Ev");}
void  S786C4 ::v90(){vfunc_called(this, "_ZN6S786C43v90Ev");}
void  S786C4 ::v91(){vfunc_called(this, "_ZN6S786C43v91Ev");}
void  S786C4 ::v92(){vfunc_called(this, "_ZN6S786C43v92Ev");}
void  S786C4 ::v93(){vfunc_called(this, "_ZN6S786C43v93Ev");}
void  S786C4 ::v94(){vfunc_called(this, "_ZN6S786C43v94Ev");}
void  S786C4 ::v95(){vfunc_called(this, "_ZN6S786C43v95Ev");}
void  S786C4 ::v96(){vfunc_called(this, "_ZN6S786C43v96Ev");}
void  S786C4 ::v97(){vfunc_called(this, "_ZN6S786C43v97Ev");}
void  S786C4 ::v98(){vfunc_called(this, "_ZN6S786C43v98Ev");}
void  S786C4 ::v99(){vfunc_called(this, "_ZN6S786C43v99Ev");}
void  S786C4 ::v100(){vfunc_called(this, "_ZN6S786C44v100Ev");}
void  S786C4 ::v101(){vfunc_called(this, "_ZN6S786C44v101Ev");}
void  S786C4 ::v102(){vfunc_called(this, "_ZN6S786C44v102Ev");}
void  S786C4 ::v103(){vfunc_called(this, "_ZN6S786C44v103Ev");}
void  S786C4 ::v104(){vfunc_called(this, "_ZN6S786C44v104Ev");}
void  S786C4 ::v105(){vfunc_called(this, "_ZN6S786C44v105Ev");}
void  S786C4 ::v106(){vfunc_called(this, "_ZN6S786C44v106Ev");}
void  S786C4 ::v107(){vfunc_called(this, "_ZN6S786C44v107Ev");}
void  S786C4 ::v108(){vfunc_called(this, "_ZN6S786C44v108Ev");}
void  S786C4 ::v109(){vfunc_called(this, "_ZN6S786C44v109Ev");}
void  S786C4 ::v110(){vfunc_called(this, "_ZN6S786C44v110Ev");}
void  S786C4 ::v111(){vfunc_called(this, "_ZN6S786C44v111Ev");}
void  S786C4 ::v112(){vfunc_called(this, "_ZN6S786C44v112Ev");}
void  S786C4 ::v113(){vfunc_called(this, "_ZN6S786C44v113Ev");}
void  S786C4 ::v114(){vfunc_called(this, "_ZN6S786C44v114Ev");}
void  S786C4 ::v115(){vfunc_called(this, "_ZN6S786C44v115Ev");}
void  S786C4 ::v116(){vfunc_called(this, "_ZN6S786C44v116Ev");}
void  S786C4 ::v117(){vfunc_called(this, "_ZN6S786C44v117Ev");}
void  S786C4 ::v118(){vfunc_called(this, "_ZN6S786C44v118Ev");}
void  S786C4 ::v119(){vfunc_called(this, "_ZN6S786C44v119Ev");}
void  S786C4 ::v120(){vfunc_called(this, "_ZN6S786C44v120Ev");}
void  S786C4 ::v121(){vfunc_called(this, "_ZN6S786C44v121Ev");}
void  S786C4 ::v122(){vfunc_called(this, "_ZN6S786C44v122Ev");}
void  S786C4 ::v123(){vfunc_called(this, "_ZN6S786C44v123Ev");}
void  S786C4 ::v124(){vfunc_called(this, "_ZN6S786C44v124Ev");}
void  S786C4 ::v125(){vfunc_called(this, "_ZN6S786C44v125Ev");}
void  S786C4 ::v126(){vfunc_called(this, "_ZN6S786C44v126Ev");}
void  S786C4 ::v127(){vfunc_called(this, "_ZN6S786C44v127Ev");}
S786C4 ::~S786C4(){ note_dtor("S786C4", this);} // tgen
S786C4 ::S786C4(){ note_ctor("S786C4", this);} // tgen

static void Test_S786C4()
{
  extern Class_Descriptor cd_S786C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S786C4, buf);
    S786C4 *dp, &lv = *(dp=new (buf) S786C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S786C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S786C4)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S786C4");
    test_class_info(&lv, &cd_S786C4);
    dp->~S786C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS786C4(Test_S786C4, "S786C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S786C4C1Ev();
extern void _ZN6S786C4D1Ev();
Name_Map name_map_S786C4[] = {
  NSPAIR(_ZN6S786C4C1Ev),
  NSPAIR(_ZN6S786C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S786C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S786C4[];
extern void _ZN6S786C4D1Ev();
extern void _ZN6S786C4D0Ev();
extern void _ZN6S786C42v6Ev();
extern void _ZN6S786C42v7Ev();
extern void _ZN6S786C42v8Ev();
extern void _ZN6S786C42v9Ev();
extern void _ZN6S786C43v10Ev();
extern void _ZN6S786C43v11Ev();
extern void _ZN6S786C43v12Ev();
extern void _ZN6S786C43v13Ev();
extern void _ZN6S786C43v14Ev();
extern void _ZN6S786C43v15Ev();
extern void _ZN6S786C43v16Ev();
extern void _ZN6S786C43v17Ev();
extern void _ZN6S786C43v18Ev();
extern void _ZN6S786C43v19Ev();
extern void _ZN6S786C43v20Ev();
extern void _ZN6S786C43v21Ev();
extern void _ZN6S786C43v22Ev();
extern void _ZN6S786C43v23Ev();
extern void _ZN6S786C43v24Ev();
extern void _ZN6S786C43v25Ev();
extern void _ZN6S786C43v26Ev();
extern void _ZN6S786C43v27Ev();
extern void _ZN6S786C43v28Ev();
extern void _ZN6S786C43v29Ev();
extern void _ZN6S786C43v30Ev();
extern void _ZN6S786C43v31Ev();
extern void _ZN6S786C43v32Ev();
extern void _ZN6S786C43v33Ev();
extern void _ZN6S786C43v34Ev();
extern void _ZN6S786C43v35Ev();
extern void _ZN6S786C43v36Ev();
extern void _ZN6S786C43v37Ev();
extern void _ZN6S786C43v38Ev();
extern void _ZN6S786C43v39Ev();
extern void _ZN6S786C43v40Ev();
extern void _ZN6S786C43v41Ev();
extern void _ZN6S786C43v42Ev();
extern void _ZN6S786C43v43Ev();
extern void _ZN6S786C43v44Ev();
extern void _ZN6S786C43v45Ev();
extern void _ZN6S786C43v46Ev();
extern void _ZN6S786C43v47Ev();
extern void _ZN6S786C43v48Ev();
extern void _ZN6S786C43v49Ev();
extern void _ZN6S786C43v50Ev();
extern void _ZN6S786C43v51Ev();
extern void _ZN6S786C43v52Ev();
extern void _ZN6S786C43v53Ev();
extern void _ZN6S786C43v54Ev();
extern void _ZN6S786C43v55Ev();
extern void _ZN6S786C43v56Ev();
extern void _ZN6S786C43v57Ev();
extern void _ZN6S786C43v58Ev();
extern void _ZN6S786C43v59Ev();
extern void _ZN6S786C43v60Ev();
extern void _ZN6S786C43v61Ev();
extern void _ZN6S786C43v62Ev();
extern void _ZN6S786C43v63Ev();
extern void _ZN6S786C43v64Ev();
extern void _ZN6S786C43v65Ev();
extern void _ZN6S786C43v66Ev();
extern void _ZN6S786C43v67Ev();
extern void _ZN6S786C43v68Ev();
extern void _ZN6S786C43v69Ev();
extern void _ZN6S786C43v70Ev();
extern void _ZN6S786C43v71Ev();
extern void _ZN6S786C43v72Ev();
extern void _ZN6S786C43v73Ev();
extern void _ZN6S786C43v74Ev();
extern void _ZN6S786C43v75Ev();
extern void _ZN6S786C43v76Ev();
extern void _ZN6S786C43v77Ev();
extern void _ZN6S786C43v78Ev();
extern void _ZN6S786C43v79Ev();
extern void _ZN6S786C43v80Ev();
extern void _ZN6S786C43v81Ev();
extern void _ZN6S786C43v82Ev();
extern void _ZN6S786C43v83Ev();
extern void _ZN6S786C43v84Ev();
extern void _ZN6S786C43v85Ev();
extern void _ZN6S786C43v86Ev();
extern void _ZN6S786C43v87Ev();
extern void _ZN6S786C43v88Ev();
extern void _ZN6S786C43v89Ev();
extern void _ZN6S786C43v90Ev();
extern void _ZN6S786C43v91Ev();
extern void _ZN6S786C43v92Ev();
extern void _ZN6S786C43v93Ev();
extern void _ZN6S786C43v94Ev();
extern void _ZN6S786C43v95Ev();
extern void _ZN6S786C43v96Ev();
extern void _ZN6S786C43v97Ev();
extern void _ZN6S786C43v98Ev();
extern void _ZN6S786C43v99Ev();
extern void _ZN6S786C44v100Ev();
extern void _ZN6S786C44v101Ev();
extern void _ZN6S786C44v102Ev();
extern void _ZN6S786C44v103Ev();
extern void _ZN6S786C44v104Ev();
extern void _ZN6S786C44v105Ev();
extern void _ZN6S786C44v106Ev();
extern void _ZN6S786C44v107Ev();
extern void _ZN6S786C44v108Ev();
extern void _ZN6S786C44v109Ev();
extern void _ZN6S786C44v110Ev();
extern void _ZN6S786C44v111Ev();
extern void _ZN6S786C44v112Ev();
extern void _ZN6S786C44v113Ev();
extern void _ZN6S786C44v114Ev();
extern void _ZN6S786C44v115Ev();
extern void _ZN6S786C44v116Ev();
extern void _ZN6S786C44v117Ev();
extern void _ZN6S786C44v118Ev();
extern void _ZN6S786C44v119Ev();
extern void _ZN6S786C44v120Ev();
extern void _ZN6S786C44v121Ev();
extern void _ZN6S786C44v122Ev();
extern void _ZN6S786C44v123Ev();
extern void _ZN6S786C44v124Ev();
extern void _ZN6S786C44v125Ev();
extern void _ZN6S786C44v126Ev();
extern void _ZN6S786C44v127Ev();
static  VTBL_ENTRY vtc_S786C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S786C4[0]),
  (VTBL_ENTRY)&_ZN6S786C4D1Ev,
  (VTBL_ENTRY)&_ZN6S786C4D0Ev,
  (VTBL_ENTRY)&_ZN6S786C42v6Ev,
  (VTBL_ENTRY)&_ZN6S786C42v7Ev,
  (VTBL_ENTRY)&_ZN6S786C42v8Ev,
  (VTBL_ENTRY)&_ZN6S786C42v9Ev,
  (VTBL_ENTRY)&_ZN6S786C43v10Ev,
  (VTBL_ENTRY)&_ZN6S786C43v11Ev,
  (VTBL_ENTRY)&_ZN6S786C43v12Ev,
  (VTBL_ENTRY)&_ZN6S786C43v13Ev,
  (VTBL_ENTRY)&_ZN6S786C43v14Ev,
  (VTBL_ENTRY)&_ZN6S786C43v15Ev,
  (VTBL_ENTRY)&_ZN6S786C43v16Ev,
  (VTBL_ENTRY)&_ZN6S786C43v17Ev,
  (VTBL_ENTRY)&_ZN6S786C43v18Ev,
  (VTBL_ENTRY)&_ZN6S786C43v19Ev,
  (VTBL_ENTRY)&_ZN6S786C43v20Ev,
  (VTBL_ENTRY)&_ZN6S786C43v21Ev,
  (VTBL_ENTRY)&_ZN6S786C43v22Ev,
  (VTBL_ENTRY)&_ZN6S786C43v23Ev,
  (VTBL_ENTRY)&_ZN6S786C43v24Ev,
  (VTBL_ENTRY)&_ZN6S786C43v25Ev,
  (VTBL_ENTRY)&_ZN6S786C43v26Ev,
  (VTBL_ENTRY)&_ZN6S786C43v27Ev,
  (VTBL_ENTRY)&_ZN6S786C43v28Ev,
  (VTBL_ENTRY)&_ZN6S786C43v29Ev,
  (VTBL_ENTRY)&_ZN6S786C43v30Ev,
  (VTBL_ENTRY)&_ZN6S786C43v31Ev,
  (VTBL_ENTRY)&_ZN6S786C43v32Ev,
  (VTBL_ENTRY)&_ZN6S786C43v33Ev,
  (VTBL_ENTRY)&_ZN6S786C43v34Ev,
  (VTBL_ENTRY)&_ZN6S786C43v35Ev,
  (VTBL_ENTRY)&_ZN6S786C43v36Ev,
  (VTBL_ENTRY)&_ZN6S786C43v37Ev,
  (VTBL_ENTRY)&_ZN6S786C43v38Ev,
  (VTBL_ENTRY)&_ZN6S786C43v39Ev,
  (VTBL_ENTRY)&_ZN6S786C43v40Ev,
  (VTBL_ENTRY)&_ZN6S786C43v41Ev,
  (VTBL_ENTRY)&_ZN6S786C43v42Ev,
  (VTBL_ENTRY)&_ZN6S786C43v43Ev,
  (VTBL_ENTRY)&_ZN6S786C43v44Ev,
  (VTBL_ENTRY)&_ZN6S786C43v45Ev,
  (VTBL_ENTRY)&_ZN6S786C43v46Ev,
  (VTBL_ENTRY)&_ZN6S786C43v47Ev,
  (VTBL_ENTRY)&_ZN6S786C43v48Ev,
  (VTBL_ENTRY)&_ZN6S786C43v49Ev,
  (VTBL_ENTRY)&_ZN6S786C43v50Ev,
  (VTBL_ENTRY)&_ZN6S786C43v51Ev,
  (VTBL_ENTRY)&_ZN6S786C43v52Ev,
  (VTBL_ENTRY)&_ZN6S786C43v53Ev,
  (VTBL_ENTRY)&_ZN6S786C43v54Ev,
  (VTBL_ENTRY)&_ZN6S786C43v55Ev,
  (VTBL_ENTRY)&_ZN6S786C43v56Ev,
  (VTBL_ENTRY)&_ZN6S786C43v57Ev,
  (VTBL_ENTRY)&_ZN6S786C43v58Ev,
  (VTBL_ENTRY)&_ZN6S786C43v59Ev,
  (VTBL_ENTRY)&_ZN6S786C43v60Ev,
  (VTBL_ENTRY)&_ZN6S786C43v61Ev,
  (VTBL_ENTRY)&_ZN6S786C43v62Ev,
  (VTBL_ENTRY)&_ZN6S786C43v63Ev,
  (VTBL_ENTRY)&_ZN6S786C43v64Ev,
  (VTBL_ENTRY)&_ZN6S786C43v65Ev,
  (VTBL_ENTRY)&_ZN6S786C43v66Ev,
  (VTBL_ENTRY)&_ZN6S786C43v67Ev,
  (VTBL_ENTRY)&_ZN6S786C43v68Ev,
  (VTBL_ENTRY)&_ZN6S786C43v69Ev,
  (VTBL_ENTRY)&_ZN6S786C43v70Ev,
  (VTBL_ENTRY)&_ZN6S786C43v71Ev,
  (VTBL_ENTRY)&_ZN6S786C43v72Ev,
  (VTBL_ENTRY)&_ZN6S786C43v73Ev,
  (VTBL_ENTRY)&_ZN6S786C43v74Ev,
  (VTBL_ENTRY)&_ZN6S786C43v75Ev,
  (VTBL_ENTRY)&_ZN6S786C43v76Ev,
  (VTBL_ENTRY)&_ZN6S786C43v77Ev,
  (VTBL_ENTRY)&_ZN6S786C43v78Ev,
  (VTBL_ENTRY)&_ZN6S786C43v79Ev,
  (VTBL_ENTRY)&_ZN6S786C43v80Ev,
  (VTBL_ENTRY)&_ZN6S786C43v81Ev,
  (VTBL_ENTRY)&_ZN6S786C43v82Ev,
  (VTBL_ENTRY)&_ZN6S786C43v83Ev,
  (VTBL_ENTRY)&_ZN6S786C43v84Ev,
  (VTBL_ENTRY)&_ZN6S786C43v85Ev,
  (VTBL_ENTRY)&_ZN6S786C43v86Ev,
  (VTBL_ENTRY)&_ZN6S786C43v87Ev,
  (VTBL_ENTRY)&_ZN6S786C43v88Ev,
  (VTBL_ENTRY)&_ZN6S786C43v89Ev,
  (VTBL_ENTRY)&_ZN6S786C43v90Ev,
  (VTBL_ENTRY)&_ZN6S786C43v91Ev,
  (VTBL_ENTRY)&_ZN6S786C43v92Ev,
  (VTBL_ENTRY)&_ZN6S786C43v93Ev,
  (VTBL_ENTRY)&_ZN6S786C43v94Ev,
  (VTBL_ENTRY)&_ZN6S786C43v95Ev,
  (VTBL_ENTRY)&_ZN6S786C43v96Ev,
  (VTBL_ENTRY)&_ZN6S786C43v97Ev,
  (VTBL_ENTRY)&_ZN6S786C43v98Ev,
  (VTBL_ENTRY)&_ZN6S786C43v99Ev,
  (VTBL_ENTRY)&_ZN6S786C44v100Ev,
  (VTBL_ENTRY)&_ZN6S786C44v101Ev,
  (VTBL_ENTRY)&_ZN6S786C44v102Ev,
  (VTBL_ENTRY)&_ZN6S786C44v103Ev,
  (VTBL_ENTRY)&_ZN6S786C44v104Ev,
  (VTBL_ENTRY)&_ZN6S786C44v105Ev,
  (VTBL_ENTRY)&_ZN6S786C44v106Ev,
  (VTBL_ENTRY)&_ZN6S786C44v107Ev,
  (VTBL_ENTRY)&_ZN6S786C44v108Ev,
  (VTBL_ENTRY)&_ZN6S786C44v109Ev,
  (VTBL_ENTRY)&_ZN6S786C44v110Ev,
  (VTBL_ENTRY)&_ZN6S786C44v111Ev,
  (VTBL_ENTRY)&_ZN6S786C44v112Ev,
  (VTBL_ENTRY)&_ZN6S786C44v113Ev,
  (VTBL_ENTRY)&_ZN6S786C44v114Ev,
  (VTBL_ENTRY)&_ZN6S786C44v115Ev,
  (VTBL_ENTRY)&_ZN6S786C44v116Ev,
  (VTBL_ENTRY)&_ZN6S786C44v117Ev,
  (VTBL_ENTRY)&_ZN6S786C44v118Ev,
  (VTBL_ENTRY)&_ZN6S786C44v119Ev,
  (VTBL_ENTRY)&_ZN6S786C44v120Ev,
  (VTBL_ENTRY)&_ZN6S786C44v121Ev,
  (VTBL_ENTRY)&_ZN6S786C44v122Ev,
  (VTBL_ENTRY)&_ZN6S786C44v123Ev,
  (VTBL_ENTRY)&_ZN6S786C44v124Ev,
  (VTBL_ENTRY)&_ZN6S786C44v125Ev,
  (VTBL_ENTRY)&_ZN6S786C44v126Ev,
  (VTBL_ENTRY)&_ZN6S786C44v127Ev,
};
extern VTBL_ENTRY _ZTI6S786C4[];
extern  VTBL_ENTRY _ZTV6S786C4[];
Class_Descriptor cd_S786C4 = {  "S786C4", // class name
  bases_S786C4, 1,
  &(vtc_S786C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S786C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S786C4),126, //virtual function table var
  2, // 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  S786C3  : S786C4 {
  virtual void  v128(); // _ZN6S786C34v128Ev
  virtual void  v129(); // _ZN6S786C34v129Ev
  virtual void  v130(); // _ZN6S786C34v130Ev
  virtual void  v131(); // _ZN6S786C34v131Ev
  virtual void  v132(); // _ZN6S786C34v132Ev
  virtual void  v133(); // _ZN6S786C34v133Ev
  virtual void  v134(); // _ZN6S786C34v134Ev
  virtual void  v135(); // _ZN6S786C34v135Ev
  virtual void  v136(); // _ZN6S786C34v136Ev
  virtual void  v137(); // _ZN6S786C34v137Ev
  virtual void  v138(); // _ZN6S786C34v138Ev
  virtual void  v139(); // _ZN6S786C34v139Ev
  virtual void  v140(); // _ZN6S786C34v140Ev
  virtual void  v141(); // _ZN6S786C34v141Ev
  virtual void  v142(); // _ZN6S786C34v142Ev
  virtual void  v143(); // _ZN6S786C34v143Ev
  virtual void  v144(); // _ZN6S786C34v144Ev
  virtual void  v145(); // _ZN6S786C34v145Ev
  ~S786C3(); // tgen
  S786C3(); // tgen
};
//SIG(-1 S786C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S786C3 ::v128(){vfunc_called(this, "_ZN6S786C34v128Ev");}
void  S786C3 ::v129(){vfunc_called(this, "_ZN6S786C34v129Ev");}
void  S786C3 ::v130(){vfunc_called(this, "_ZN6S786C34v130Ev");}
void  S786C3 ::v131(){vfunc_called(this, "_ZN6S786C34v131Ev");}
void  S786C3 ::v132(){vfunc_called(this, "_ZN6S786C34v132Ev");}
void  S786C3 ::v133(){vfunc_called(this, "_ZN6S786C34v133Ev");}
void  S786C3 ::v134(){vfunc_called(this, "_ZN6S786C34v134Ev");}
void  S786C3 ::v135(){vfunc_called(this, "_ZN6S786C34v135Ev");}
void  S786C3 ::v136(){vfunc_called(this, "_ZN6S786C34v136Ev");}
void  S786C3 ::v137(){vfunc_called(this, "_ZN6S786C34v137Ev");}
void  S786C3 ::v138(){vfunc_called(this, "_ZN6S786C34v138Ev");}
void  S786C3 ::v139(){vfunc_called(this, "_ZN6S786C34v139Ev");}
void  S786C3 ::v140(){vfunc_called(this, "_ZN6S786C34v140Ev");}
void  S786C3 ::v141(){vfunc_called(this, "_ZN6S786C34v141Ev");}
void  S786C3 ::v142(){vfunc_called(this, "_ZN6S786C34v142Ev");}
void  S786C3 ::v143(){vfunc_called(this, "_ZN6S786C34v143Ev");}
void  S786C3 ::v144(){vfunc_called(this, "_ZN6S786C34v144Ev");}
void  S786C3 ::v145(){vfunc_called(this, "_ZN6S786C34v145Ev");}
S786C3 ::~S786C3(){ note_dtor("S786C3", this);} // tgen
S786C3 ::S786C3(){ note_ctor("S786C3", this);} // tgen

static void Test_S786C3()
{
  extern Class_Descriptor cd_S786C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S786C3, buf);
    S786C3 *dp, &lv = *(dp=new (buf) S786C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S786C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S786C3)");
    check_base_class_offset(lv, (S785C5_nt*)(S786C4*), 0, "S786C3");
    check_base_class_offset(lv, (S786C4*), 0, "S786C3");
    test_class_info(&lv, &cd_S786C3);
    dp->~S786C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS786C3(Test_S786C3, "S786C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S786C3C1Ev();
extern void _ZN6S786C3D1Ev();
Name_Map name_map_S786C3[] = {
  NSPAIR(_ZN6S786C3C1Ev),
  NSPAIR(_ZN6S786C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S786C4;
extern VTBL_ENTRY _ZTI6S786C4[];
extern  VTBL_ENTRY _ZTV6S786C4[];
static Base_Class bases_S786C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S786C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S786C3[];
extern void _ZN6S786C3D1Ev();
extern void _ZN6S786C3D0Ev();
extern void _ZN6S786C42v6Ev();
extern void _ZN6S786C42v7Ev();
extern void _ZN6S786C42v8Ev();
extern void _ZN6S786C42v9Ev();
extern void _ZN6S786C43v10Ev();
extern void _ZN6S786C43v11Ev();
extern void _ZN6S786C43v12Ev();
extern void _ZN6S786C43v13Ev();
extern void _ZN6S786C43v14Ev();
extern void _ZN6S786C43v15Ev();
extern void _ZN6S786C43v16Ev();
extern void _ZN6S786C43v17Ev();
extern void _ZN6S786C43v18Ev();
extern void _ZN6S786C43v19Ev();
extern void _ZN6S786C43v20Ev();
extern void _ZN6S786C43v21Ev();
extern void _ZN6S786C43v22Ev();
extern void _ZN6S786C43v23Ev();
extern void _ZN6S786C43v24Ev();
extern void _ZN6S786C43v25Ev();
extern void _ZN6S786C43v26Ev();
extern void _ZN6S786C43v27Ev();
extern void _ZN6S786C43v28Ev();
extern void _ZN6S786C43v29Ev();
extern void _ZN6S786C43v30Ev();
extern void _ZN6S786C43v31Ev();
extern void _ZN6S786C43v32Ev();
extern void _ZN6S786C43v33Ev();
extern void _ZN6S786C43v34Ev();
extern void _ZN6S786C43v35Ev();
extern void _ZN6S786C43v36Ev();
extern void _ZN6S786C43v37Ev();
extern void _ZN6S786C43v38Ev();
extern void _ZN6S786C43v39Ev();
extern void _ZN6S786C43v40Ev();
extern void _ZN6S786C43v41Ev();
extern void _ZN6S786C43v42Ev();
extern void _ZN6S786C43v43Ev();
extern void _ZN6S786C43v44Ev();
extern void _ZN6S786C43v45Ev();
extern void _ZN6S786C43v46Ev();
extern void _ZN6S786C43v47Ev();
extern void _ZN6S786C43v48Ev();
extern void _ZN6S786C43v49Ev();
extern void _ZN6S786C43v50Ev();
extern void _ZN6S786C43v51Ev();
extern void _ZN6S786C43v52Ev();
extern void _ZN6S786C43v53Ev();
extern void _ZN6S786C43v54Ev();
extern void _ZN6S786C43v55Ev();
extern void _ZN6S786C43v56Ev();
extern void _ZN6S786C43v57Ev();
extern void _ZN6S786C43v58Ev();
extern void _ZN6S786C43v59Ev();
extern void _ZN6S786C43v60Ev();
extern void _ZN6S786C43v61Ev();
extern void _ZN6S786C43v62Ev();
extern void _ZN6S786C43v63Ev();
extern void _ZN6S786C43v64Ev();
extern void _ZN6S786C43v65Ev();
extern void _ZN6S786C43v66Ev();
extern void _ZN6S786C43v67Ev();
extern void _ZN6S786C43v68Ev();
extern void _ZN6S786C43v69Ev();
extern void _ZN6S786C43v70Ev();
extern void _ZN6S786C43v71Ev();
extern void _ZN6S786C43v72Ev();
extern void _ZN6S786C43v73Ev();
extern void _ZN6S786C43v74Ev();
extern void _ZN6S786C43v75Ev();
extern void _ZN6S786C43v76Ev();
extern void _ZN6S786C43v77Ev();
extern void _ZN6S786C43v78Ev();
extern void _ZN6S786C43v79Ev();
extern void _ZN6S786C43v80Ev();
extern void _ZN6S786C43v81Ev();
extern void _ZN6S786C43v82Ev();
extern void _ZN6S786C43v83Ev();
extern void _ZN6S786C43v84Ev();
extern void _ZN6S786C43v85Ev();
extern void _ZN6S786C43v86Ev();
extern void _ZN6S786C43v87Ev();
extern void _ZN6S786C43v88Ev();
extern void _ZN6S786C43v89Ev();
extern void _ZN6S786C43v90Ev();
extern void _ZN6S786C43v91Ev();
extern void _ZN6S786C43v92Ev();
extern void _ZN6S786C43v93Ev();
extern void _ZN6S786C43v94Ev();
extern void _ZN6S786C43v95Ev();
extern void _ZN6S786C43v96Ev();
extern void _ZN6S786C43v97Ev();
extern void _ZN6S786C43v98Ev();
extern void _ZN6S786C43v99Ev();
extern void _ZN6S786C44v100Ev();
extern void _ZN6S786C44v101Ev();
extern void _ZN6S786C44v102Ev();
extern void _ZN6S786C44v103Ev();
extern void _ZN6S786C44v104Ev();
extern void _ZN6S786C44v105Ev();
extern void _ZN6S786C44v106Ev();
extern void _ZN6S786C44v107Ev();
extern void _ZN6S786C44v108Ev();
extern void _ZN6S786C44v109Ev();
extern void _ZN6S786C44v110Ev();
extern void _ZN6S786C44v111Ev();
extern void _ZN6S786C44v112Ev();
extern void _ZN6S786C44v113Ev();
extern void _ZN6S786C44v114Ev();
extern void _ZN6S786C44v115Ev();
extern void _ZN6S786C44v116Ev();
extern void _ZN6S786C44v117Ev();
extern void _ZN6S786C44v118Ev();
extern void _ZN6S786C44v119Ev();
extern void _ZN6S786C44v120Ev();
extern void _ZN6S786C44v121Ev();
extern void _ZN6S786C44v122Ev();
extern void _ZN6S786C44v123Ev();
extern void _ZN6S786C44v124Ev();
extern void _ZN6S786C44v125Ev();
extern void _ZN6S786C44v126Ev();
extern void _ZN6S786C44v127Ev();
extern void _ZN6S786C34v128Ev();
extern void _ZN6S786C34v129Ev();
extern void _ZN6S786C34v130Ev();
extern void _ZN6S786C34v131Ev();
extern void _ZN6S786C34v132Ev();
extern void _ZN6S786C34v133Ev();
extern void _ZN6S786C34v134Ev();
extern void _ZN6S786C34v135Ev();
extern void _ZN6S786C34v136Ev();
extern void _ZN6S786C34v137Ev();
extern void _ZN6S786C34v138Ev();
extern void _ZN6S786C34v139Ev();
extern void _ZN6S786C34v140Ev();
extern void _ZN6S786C34v141Ev();
extern void _ZN6S786C34v142Ev();
extern void _ZN6S786C34v143Ev();
extern void _ZN6S786C34v144Ev();
extern void _ZN6S786C34v145Ev();
static  VTBL_ENTRY vtc_S786C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S786C3[0]),
  (VTBL_ENTRY)&_ZN6S786C3D1Ev,
  (VTBL_ENTRY)&_ZN6S786C3D0Ev,
  (VTBL_ENTRY)&_ZN6S786C42v6Ev,
  (VTBL_ENTRY)&_ZN6S786C42v7Ev,
  (VTBL_ENTRY)&_ZN6S786C42v8Ev,
  (VTBL_ENTRY)&_ZN6S786C42v9Ev,
  (VTBL_ENTRY)&_ZN6S786C43v10Ev,
  (VTBL_ENTRY)&_ZN6S786C43v11Ev,
  (VTBL_ENTRY)&_ZN6S786C43v12Ev,
  (VTBL_ENTRY)&_ZN6S786C43v13Ev,
  (VTBL_ENTRY)&_ZN6S786C43v14Ev,
  (VTBL_ENTRY)&_ZN6S786C43v15Ev,
  (VTBL_ENTRY)&_ZN6S786C43v16Ev,
  (VTBL_ENTRY)&_ZN6S786C43v17Ev,
  (VTBL_ENTRY)&_ZN6S786C43v18Ev,
  (VTBL_ENTRY)&_ZN6S786C43v19Ev,
  (VTBL_ENTRY)&_ZN6S786C43v20Ev,
  (VTBL_ENTRY)&_ZN6S786C43v21Ev,
  (VTBL_ENTRY)&_ZN6S786C43v22Ev,
  (VTBL_ENTRY)&_ZN6S786C43v23Ev,
  (VTBL_ENTRY)&_ZN6S786C43v24Ev,
  (VTBL_ENTRY)&_ZN6S786C43v25Ev,
  (VTBL_ENTRY)&_ZN6S786C43v26Ev,
  (VTBL_ENTRY)&_ZN6S786C43v27Ev,
  (VTBL_ENTRY)&_ZN6S786C43v28Ev,
  (VTBL_ENTRY)&_ZN6S786C43v29Ev,
  (VTBL_ENTRY)&_ZN6S786C43v30Ev,
  (VTBL_ENTRY)&_ZN6S786C43v31Ev,
  (VTBL_ENTRY)&_ZN6S786C43v32Ev,
  (VTBL_ENTRY)&_ZN6S786C43v33Ev,
  (VTBL_ENTRY)&_ZN6S786C43v34Ev,
  (VTBL_ENTRY)&_ZN6S786C43v35Ev,
  (VTBL_ENTRY)&_ZN6S786C43v36Ev,
  (VTBL_ENTRY)&_ZN6S786C43v37Ev,
  (VTBL_ENTRY)&_ZN6S786C43v38Ev,
  (VTBL_ENTRY)&_ZN6S786C43v39Ev,
  (VTBL_ENTRY)&_ZN6S786C43v40Ev,
  (VTBL_ENTRY)&_ZN6S786C43v41Ev,
  (VTBL_ENTRY)&_ZN6S786C43v42Ev,
  (VTBL_ENTRY)&_ZN6S786C43v43Ev,
  (VTBL_ENTRY)&_ZN6S786C43v44Ev,
  (VTBL_ENTRY)&_ZN6S786C43v45Ev,
  (VTBL_ENTRY)&_ZN6S786C43v46Ev,
  (VTBL_ENTRY)&_ZN6S786C43v47Ev,
  (VTBL_ENTRY)&_ZN6S786C43v48Ev,
  (VTBL_ENTRY)&_ZN6S786C43v49Ev,
  (VTBL_ENTRY)&_ZN6S786C43v50Ev,
  (VTBL_ENTRY)&_ZN6S786C43v51Ev,
  (VTBL_ENTRY)&_ZN6S786C43v52Ev,
  (VTBL_ENTRY)&_ZN6S786C43v53Ev,
  (VTBL_ENTRY)&_ZN6S786C43v54Ev,
  (VTBL_ENTRY)&_ZN6S786C43v55Ev,
  (VTBL_ENTRY)&_ZN6S786C43v56Ev,
  (VTBL_ENTRY)&_ZN6S786C43v57Ev,
  (VTBL_ENTRY)&_ZN6S786C43v58Ev,
  (VTBL_ENTRY)&_ZN6S786C43v59Ev,
  (VTBL_ENTRY)&_ZN6S786C43v60Ev,
  (VTBL_ENTRY)&_ZN6S786C43v61Ev,
  (VTBL_ENTRY)&_ZN6S786C43v62Ev,
  (VTBL_ENTRY)&_ZN6S786C43v63Ev,
  (VTBL_ENTRY)&_ZN6S786C43v64Ev,
  (VTBL_ENTRY)&_ZN6S786C43v65Ev,
  (VTBL_ENTRY)&_ZN6S786C43v66Ev,
  (VTBL_ENTRY)&_ZN6S786C43v67Ev,
  (VTBL_ENTRY)&_ZN6S786C43v68Ev,
  (VTBL_ENTRY)&_ZN6S786C43v69Ev,
  (VTBL_ENTRY)&_ZN6S786C43v70Ev,
  (VTBL_ENTRY)&_ZN6S786C43v71Ev,
  (VTBL_ENTRY)&_ZN6S786C43v72Ev,
  (VTBL_ENTRY)&_ZN6S786C43v73Ev,
  (VTBL_ENTRY)&_ZN6S786C43v74Ev,
  (VTBL_ENTRY)&_ZN6S786C43v75Ev,
  (VTBL_ENTRY)&_ZN6S786C43v76Ev,
  (VTBL_ENTRY)&_ZN6S786C43v77Ev,
  (VTBL_ENTRY)&_ZN6S786C43v78Ev,
  (VTBL_ENTRY)&_ZN6S786C43v79Ev,
  (VTBL_ENTRY)&_ZN6S786C43v80Ev,
  (VTBL_ENTRY)&_ZN6S786C43v81Ev,
  (VTBL_ENTRY)&_ZN6S786C43v82Ev,
  (VTBL_ENTRY)&_ZN6S786C43v83Ev,
  (VTBL_ENTRY)&_ZN6S786C43v84Ev,
  (VTBL_ENTRY)&_ZN6S786C43v85Ev,
  (VTBL_ENTRY)&_ZN6S786C43v86Ev,
  (VTBL_ENTRY)&_ZN6S786C43v87Ev,
  (VTBL_ENTRY)&_ZN6S786C43v88Ev,
  (VTBL_ENTRY)&_ZN6S786C43v89Ev,
  (VTBL_ENTRY)&_ZN6S786C43v90Ev,
  (VTBL_ENTRY)&_ZN6S786C43v91Ev,
  (VTBL_ENTRY)&_ZN6S786C43v92Ev,
  (VTBL_ENTRY)&_ZN6S786C43v93Ev,
  (VTBL_ENTRY)&_ZN6S786C43v94Ev,
  (VTBL_ENTRY)&_ZN6S786C43v95Ev,
  (VTBL_ENTRY)&_ZN6S786C43v96Ev,
  (VTBL_ENTRY)&_ZN6S786C43v97Ev,
  (VTBL_ENTRY)&_ZN6S786C43v98Ev,
  (VTBL_ENTRY)&_ZN6S786C43v99Ev,
  (VTBL_ENTRY)&_ZN6S786C44v100Ev,
  (VTBL_ENTRY)&_ZN6S786C44v101Ev,
  (VTBL_ENTRY)&_ZN6S786C44v102Ev,
  (VTBL_ENTRY)&_ZN6S786C44v103Ev,
  (VTBL_ENTRY)&_ZN6S786C44v104Ev,
  (VTBL_ENTRY)&_ZN6S786C44v105Ev,
  (VTBL_ENTRY)&_ZN6S786C44v106Ev,
  (VTBL_ENTRY)&_ZN6S786C44v107Ev,
  (VTBL_ENTRY)&_ZN6S786C44v108Ev,
  (VTBL_ENTRY)&_ZN6S786C44v109Ev,
  (VTBL_ENTRY)&_ZN6S786C44v110Ev,
  (VTBL_ENTRY)&_ZN6S786C44v111Ev,
  (VTBL_ENTRY)&_ZN6S786C44v112Ev,
  (VTBL_ENTRY)&_ZN6S786C44v113Ev,
  (VTBL_ENTRY)&_ZN6S786C44v114Ev,
  (VTBL_ENTRY)&_ZN6S786C44v115Ev,
  (VTBL_ENTRY)&_ZN6S786C44v116Ev,
  (VTBL_ENTRY)&_ZN6S786C44v117Ev,
  (VTBL_ENTRY)&_ZN6S786C44v118Ev,
  (VTBL_ENTRY)&_ZN6S786C44v119Ev,
  (VTBL_ENTRY)&_ZN6S786C44v120Ev,
  (VTBL_ENTRY)&_ZN6S786C44v121Ev,
  (VTBL_ENTRY)&_ZN6S786C44v122Ev,
  (VTBL_ENTRY)&_ZN6S786C44v123Ev,
  (VTBL_ENTRY)&_ZN6S786C44v124Ev,
  (VTBL_ENTRY)&_ZN6S786C44v125Ev,
  (VTBL_ENTRY)&_ZN6S786C44v126Ev,
  (VTBL_ENTRY)&_ZN6S786C44v127Ev,
  (VTBL_ENTRY)&_ZN6S786C34v128Ev,
  (VTBL_ENTRY)&_ZN6S786C34v129Ev,
  (VTBL_ENTRY)&_ZN6S786C34v130Ev,
  (VTBL_ENTRY)&_ZN6S786C34v131Ev,
  (VTBL_ENTRY)&_ZN6S786C34v132Ev,
  (VTBL_ENTRY)&_ZN6S786C34v133Ev,
  (VTBL_ENTRY)&_ZN6S786C34v134Ev,
  (VTBL_ENTRY)&_ZN6S786C34v135Ev,
  (VTBL_ENTRY)&_ZN6S786C34v136Ev,
  (VTBL_ENTRY)&_ZN6S786C34v137Ev,
  (VTBL_ENTRY)&_ZN6S786C34v138Ev,
  (VTBL_ENTRY)&_ZN6S786C34v139Ev,
  (VTBL_ENTRY)&_ZN6S786C34v140Ev,
  (VTBL_ENTRY)&_ZN6S786C34v141Ev,
  (VTBL_ENTRY)&_ZN6S786C34v142Ev,
  (VTBL_ENTRY)&_ZN6S786C34v143Ev,
  (VTBL_ENTRY)&_ZN6S786C34v144Ev,
  (VTBL_ENTRY)&_ZN6S786C34v145Ev,
};
extern VTBL_ENTRY _ZTI6S786C3[];
extern  VTBL_ENTRY _ZTV6S786C3[];
Class_Descriptor cd_S786C3 = {  "S786C3", // class name
  bases_S786C3, 2,
  &(vtc_S786C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S786C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S786C3),144, //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  S786C2  : S786C3 {
  virtual void  v146(); // _ZN6S786C24v146Ev
  ~S786C2(); // tgen
  S786C2(); // tgen
};
//SIG(-1 S786C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


void  S786C2 ::v146(){vfunc_called(this, "_ZN6S786C24v146Ev");}
S786C2 ::~S786C2(){ note_dtor("S786C2", this);} // tgen
S786C2 ::S786C2(){ note_ctor("S786C2", this);} // tgen

static void Test_S786C2()
{
  extern Class_Descriptor cd_S786C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S786C2, buf);
    S786C2 *dp, &lv = *(dp=new (buf) S786C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S786C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S786C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S786C4*)(S786C3*), 0, "S786C2");
    check_base_class_offset(lv, (S786C4*)(S786C3*), 0, "S786C2");
    check_base_class_offset(lv, (S786C3*), 0, "S786C2");
    test_class_info(&lv, &cd_S786C2);
    dp->~S786C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS786C2(Test_S786C2, "S786C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S786C2C1Ev();
extern void _ZN6S786C2D1Ev();
Name_Map name_map_S786C2[] = {
  NSPAIR(_ZN6S786C2C1Ev),
  NSPAIR(_ZN6S786C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S786C4;
extern VTBL_ENTRY _ZTI6S786C4[];
extern  VTBL_ENTRY _ZTV6S786C4[];
extern Class_Descriptor cd_S786C3;
extern VTBL_ENTRY _ZTI6S786C3[];
extern  VTBL_ENTRY _ZTV6S786C3[];
static Base_Class bases_S786C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S786C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S786C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S786C2[];
extern void _ZN6S786C2D1Ev();
extern void _ZN6S786C2D0Ev();
extern void _ZN6S786C42v6Ev();
extern void _ZN6S786C42v7Ev();
extern void _ZN6S786C42v8Ev();
extern void _ZN6S786C42v9Ev();
extern void _ZN6S786C43v10Ev();
extern void _ZN6S786C43v11Ev();
extern void _ZN6S786C43v12Ev();
extern void _ZN6S786C43v13Ev();
extern void _ZN6S786C43v14Ev();
extern void _ZN6S786C43v15Ev();
extern void _ZN6S786C43v16Ev();
extern void _ZN6S786C43v17Ev();
extern void _ZN6S786C43v18Ev();
extern void _ZN6S786C43v19Ev();
extern void _ZN6S786C43v20Ev();
extern void _ZN6S786C43v21Ev();
extern void _ZN6S786C43v22Ev();
extern void _ZN6S786C43v23Ev();
extern void _ZN6S786C43v24Ev();
extern void _ZN6S786C43v25Ev();
extern void _ZN6S786C43v26Ev();
extern void _ZN6S786C43v27Ev();
extern void _ZN6S786C43v28Ev();
extern void _ZN6S786C43v29Ev();
extern void _ZN6S786C43v30Ev();
extern void _ZN6S786C43v31Ev();
extern void _ZN6S786C43v32Ev();
extern void _ZN6S786C43v33Ev();
extern void _ZN6S786C43v34Ev();
extern void _ZN6S786C43v35Ev();
extern void _ZN6S786C43v36Ev();
extern void _ZN6S786C43v37Ev();
extern void _ZN6S786C43v38Ev();
extern void _ZN6S786C43v39Ev();
extern void _ZN6S786C43v40Ev();
extern void _ZN6S786C43v41Ev();
extern void _ZN6S786C43v42Ev();
extern void _ZN6S786C43v43Ev();
extern void _ZN6S786C43v44Ev();
extern void _ZN6S786C43v45Ev();
extern void _ZN6S786C43v46Ev();
extern void _ZN6S786C43v47Ev();
extern void _ZN6S786C43v48Ev();
extern void _ZN6S786C43v49Ev();
extern void _ZN6S786C43v50Ev();
extern void _ZN6S786C43v51Ev();
extern void _ZN6S786C43v52Ev();
extern void _ZN6S786C43v53Ev();
extern void _ZN6S786C43v54Ev();
extern void _ZN6S786C43v55Ev();
extern void _ZN6S786C43v56Ev();
extern void _ZN6S786C43v57Ev();
extern void _ZN6S786C43v58Ev();
extern void _ZN6S786C43v59Ev();
extern void _ZN6S786C43v60Ev();
extern void _ZN6S786C43v61Ev();
extern void _ZN6S786C43v62Ev();
extern void _ZN6S786C43v63Ev();
extern void _ZN6S786C43v64Ev();
extern void _ZN6S786C43v65Ev();
extern void _ZN6S786C43v66Ev();
extern void _ZN6S786C43v67Ev();
extern void _ZN6S786C43v68Ev();
extern void _ZN6S786C43v69Ev();
extern void _ZN6S786C43v70Ev();
extern void _ZN6S786C43v71Ev();
extern void _ZN6S786C43v72Ev();
extern void _ZN6S786C43v73Ev();
extern void _ZN6S786C43v74Ev();
extern void _ZN6S786C43v75Ev();
extern void _ZN6S786C43v76Ev();
extern void _ZN6S786C43v77Ev();
extern void _ZN6S786C43v78Ev();
extern void _ZN6S786C43v79Ev();
extern void _ZN6S786C43v80Ev();
extern void _ZN6S786C43v81Ev();
extern void _ZN6S786C43v82Ev();
extern void _ZN6S786C43v83Ev();
extern void _ZN6S786C43v84Ev();
extern void _ZN6S786C43v85Ev();
extern void _ZN6S786C43v86Ev();
extern void _ZN6S786C43v87Ev();
extern void _ZN6S786C43v88Ev();
extern void _ZN6S786C43v89Ev();
extern void _ZN6S786C43v90Ev();
extern void _ZN6S786C43v91Ev();
extern void _ZN6S786C43v92Ev();
extern void _ZN6S786C43v93Ev();
extern void _ZN6S786C43v94Ev();
extern void _ZN6S786C43v95Ev();
extern void _ZN6S786C43v96Ev();
extern void _ZN6S786C43v97Ev();
extern void _ZN6S786C43v98Ev();
extern void _ZN6S786C43v99Ev();
extern void _ZN6S786C44v100Ev();
extern void _ZN6S786C44v101Ev();
extern void _ZN6S786C44v102Ev();
extern void _ZN6S786C44v103Ev();
extern void _ZN6S786C44v104Ev();
extern void _ZN6S786C44v105Ev();
extern void _ZN6S786C44v106Ev();
extern void _ZN6S786C44v107Ev();
extern void _ZN6S786C44v108Ev();
extern void _ZN6S786C44v109Ev();
extern void _ZN6S786C44v110Ev();
extern void _ZN6S786C44v111Ev();
extern void _ZN6S786C44v112Ev();
extern void _ZN6S786C44v113Ev();
extern void _ZN6S786C44v114Ev();
extern void _ZN6S786C44v115Ev();
extern void _ZN6S786C44v116Ev();
extern void _ZN6S786C44v117Ev();
extern void _ZN6S786C44v118Ev();
extern void _ZN6S786C44v119Ev();
extern void _ZN6S786C44v120Ev();
extern void _ZN6S786C44v121Ev();
extern void _ZN6S786C44v122Ev();
extern void _ZN6S786C44v123Ev();
extern void _ZN6S786C44v124Ev();
extern void _ZN6S786C44v125Ev();
extern void _ZN6S786C44v126Ev();
extern void _ZN6S786C44v127Ev();
extern void _ZN6S786C34v128Ev();
extern void _ZN6S786C34v129Ev();
extern void _ZN6S786C34v130Ev();
extern void _ZN6S786C34v131Ev();
extern void _ZN6S786C34v132Ev();
extern void _ZN6S786C34v133Ev();
extern void _ZN6S786C34v134Ev();
extern void _ZN6S786C34v135Ev();
extern void _ZN6S786C34v136Ev();
extern void _ZN6S786C34v137Ev();
extern void _ZN6S786C34v138Ev();
extern void _ZN6S786C34v139Ev();
extern void _ZN6S786C34v140Ev();
extern void _ZN6S786C34v141Ev();
extern void _ZN6S786C34v142Ev();
extern void _ZN6S786C34v143Ev();
extern void _ZN6S786C34v144Ev();
extern void _ZN6S786C34v145Ev();
extern void _ZN6S786C24v146Ev();
static  VTBL_ENTRY vtc_S786C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S786C2[0]),
  (VTBL_ENTRY)&_ZN6S786C2D1Ev,
  (VTBL_ENTRY)&_ZN6S786C2D0Ev,
  (VTBL_ENTRY)&_ZN6S786C42v6Ev,
  (VTBL_ENTRY)&_ZN6S786C42v7Ev,
  (VTBL_ENTRY)&_ZN6S786C42v8Ev,
  (VTBL_ENTRY)&_ZN6S786C42v9Ev,
  (VTBL_ENTRY)&_ZN6S786C43v10Ev,
  (VTBL_ENTRY)&_ZN6S786C43v11Ev,
  (VTBL_ENTRY)&_ZN6S786C43v12Ev,
  (VTBL_ENTRY)&_ZN6S786C43v13Ev,
  (VTBL_ENTRY)&_ZN6S786C43v14Ev,
  (VTBL_ENTRY)&_ZN6S786C43v15Ev,
  (VTBL_ENTRY)&_ZN6S786C43v16Ev,
  (VTBL_ENTRY)&_ZN6S786C43v17Ev,
  (VTBL_ENTRY)&_ZN6S786C43v18Ev,
  (VTBL_ENTRY)&_ZN6S786C43v19Ev,
  (VTBL_ENTRY)&_ZN6S786C43v20Ev,
  (VTBL_ENTRY)&_ZN6S786C43v21Ev,
  (VTBL_ENTRY)&_ZN6S786C43v22Ev,
  (VTBL_ENTRY)&_ZN6S786C43v23Ev,
  (VTBL_ENTRY)&_ZN6S786C43v24Ev,
  (VTBL_ENTRY)&_ZN6S786C43v25Ev,
  (VTBL_ENTRY)&_ZN6S786C43v26Ev,
  (VTBL_ENTRY)&_ZN6S786C43v27Ev,
  (VTBL_ENTRY)&_ZN6S786C43v28Ev,
  (VTBL_ENTRY)&_ZN6S786C43v29Ev,
  (VTBL_ENTRY)&_ZN6S786C43v30Ev,
  (VTBL_ENTRY)&_ZN6S786C43v31Ev,
  (VTBL_ENTRY)&_ZN6S786C43v32Ev,
  (VTBL_ENTRY)&_ZN6S786C43v33Ev,
  (VTBL_ENTRY)&_ZN6S786C43v34Ev,
  (VTBL_ENTRY)&_ZN6S786C43v35Ev,
  (VTBL_ENTRY)&_ZN6S786C43v36Ev,
  (VTBL_ENTRY)&_ZN6S786C43v37Ev,
  (VTBL_ENTRY)&_ZN6S786C43v38Ev,
  (VTBL_ENTRY)&_ZN6S786C43v39Ev,
  (VTBL_ENTRY)&_ZN6S786C43v40Ev,
  (VTBL_ENTRY)&_ZN6S786C43v41Ev,
  (VTBL_ENTRY)&_ZN6S786C43v42Ev,
  (VTBL_ENTRY)&_ZN6S786C43v43Ev,
  (VTBL_ENTRY)&_ZN6S786C43v44Ev,
  (VTBL_ENTRY)&_ZN6S786C43v45Ev,
  (VTBL_ENTRY)&_ZN6S786C43v46Ev,
  (VTBL_ENTRY)&_ZN6S786C43v47Ev,
  (VTBL_ENTRY)&_ZN6S786C43v48Ev,
  (VTBL_ENTRY)&_ZN6S786C43v49Ev,
  (VTBL_ENTRY)&_ZN6S786C43v50Ev,
  (VTBL_ENTRY)&_ZN6S786C43v51Ev,
  (VTBL_ENTRY)&_ZN6S786C43v52Ev,
  (VTBL_ENTRY)&_ZN6S786C43v53Ev,
  (VTBL_ENTRY)&_ZN6S786C43v54Ev,
  (VTBL_ENTRY)&_ZN6S786C43v55Ev,
  (VTBL_ENTRY)&_ZN6S786C43v56Ev,
  (VTBL_ENTRY)&_ZN6S786C43v57Ev,
  (VTBL_ENTRY)&_ZN6S786C43v58Ev,
  (VTBL_ENTRY)&_ZN6S786C43v59Ev,
  (VTBL_ENTRY)&_ZN6S786C43v60Ev,
  (VTBL_ENTRY)&_ZN6S786C43v61Ev,
  (VTBL_ENTRY)&_ZN6S786C43v62Ev,
  (VTBL_ENTRY)&_ZN6S786C43v63Ev,
  (VTBL_ENTRY)&_ZN6S786C43v64Ev,
  (VTBL_ENTRY)&_ZN6S786C43v65Ev,
  (VTBL_ENTRY)&_ZN6S786C43v66Ev,
  (VTBL_ENTRY)&_ZN6S786C43v67Ev,
  (VTBL_ENTRY)&_ZN6S786C43v68Ev,
  (VTBL_ENTRY)&_ZN6S786C43v69Ev,
  (VTBL_ENTRY)&_ZN6S786C43v70Ev,
  (VTBL_ENTRY)&_ZN6S786C43v71Ev,
  (VTBL_ENTRY)&_ZN6S786C43v72Ev,
  (VTBL_ENTRY)&_ZN6S786C43v73Ev,
  (VTBL_ENTRY)&_ZN6S786C43v74Ev,
  (VTBL_ENTRY)&_ZN6S786C43v75Ev,
  (VTBL_ENTRY)&_ZN6S786C43v76Ev,
  (VTBL_ENTRY)&_ZN6S786C43v77Ev,
  (VTBL_ENTRY)&_ZN6S786C43v78Ev,
  (VTBL_ENTRY)&_ZN6S786C43v79Ev,
  (VTBL_ENTRY)&_ZN6S786C43v80Ev,
  (VTBL_ENTRY)&_ZN6S786C43v81Ev,
  (VTBL_ENTRY)&_ZN6S786C43v82Ev,
  (VTBL_ENTRY)&_ZN6S786C43v83Ev,
  (VTBL_ENTRY)&_ZN6S786C43v84Ev,
  (VTBL_ENTRY)&_ZN6S786C43v85Ev,
  (VTBL_ENTRY)&_ZN6S786C43v86Ev,
  (VTBL_ENTRY)&_ZN6S786C43v87Ev,
  (VTBL_ENTRY)&_ZN6S786C43v88Ev,
  (VTBL_ENTRY)&_ZN6S786C43v89Ev,
  (VTBL_ENTRY)&_ZN6S786C43v90Ev,
  (VTBL_ENTRY)&_ZN6S786C43v91Ev,
  (VTBL_ENTRY)&_ZN6S786C43v92Ev,
  (VTBL_ENTRY)&_ZN6S786C43v93Ev,
  (VTBL_ENTRY)&_ZN6S786C43v94Ev,
  (VTBL_ENTRY)&_ZN6S786C43v95Ev,
  (VTBL_ENTRY)&_ZN6S786C43v96Ev,
  (VTBL_ENTRY)&_ZN6S786C43v97Ev,
  (VTBL_ENTRY)&_ZN6S786C43v98Ev,
  (VTBL_ENTRY)&_ZN6S786C43v99Ev,
  (VTBL_ENTRY)&_ZN6S786C44v100Ev,
  (VTBL_ENTRY)&_ZN6S786C44v101Ev,
  (VTBL_ENTRY)&_ZN6S786C44v102Ev,
  (VTBL_ENTRY)&_ZN6S786C44v103Ev,
  (VTBL_ENTRY)&_ZN6S786C44v104Ev,
  (VTBL_ENTRY)&_ZN6S786C44v105Ev,
  (VTBL_ENTRY)&_ZN6S786C44v106Ev,
  (VTBL_ENTRY)&_ZN6S786C44v107Ev,
  (VTBL_ENTRY)&_ZN6S786C44v108Ev,
  (VTBL_ENTRY)&_ZN6S786C44v109Ev,
  (VTBL_ENTRY)&_ZN6S786C44v110Ev,
  (VTBL_ENTRY)&_ZN6S786C44v111Ev,
  (VTBL_ENTRY)&_ZN6S786C44v112Ev,
  (VTBL_ENTRY)&_ZN6S786C44v113Ev,
  (VTBL_ENTRY)&_ZN6S786C44v114Ev,
  (VTBL_ENTRY)&_ZN6S786C44v115Ev,
  (VTBL_ENTRY)&_ZN6S786C44v116Ev,
  (VTBL_ENTRY)&_ZN6S786C44v117Ev,
  (VTBL_ENTRY)&_ZN6S786C44v118Ev,
  (VTBL_ENTRY)&_ZN6S786C44v119Ev,
  (VTBL_ENTRY)&_ZN6S786C44v120Ev,
  (VTBL_ENTRY)&_ZN6S786C44v121Ev,
  (VTBL_ENTRY)&_ZN6S786C44v122Ev,
  (VTBL_ENTRY)&_ZN6S786C44v123Ev,
  (VTBL_ENTRY)&_ZN6S786C44v124Ev,
  (VTBL_ENTRY)&_ZN6S786C44v125Ev,
  (VTBL_ENTRY)&_ZN6S786C44v126Ev,
  (VTBL_ENTRY)&_ZN6S786C44v127Ev,
  (VTBL_ENTRY)&_ZN6S786C34v128Ev,
  (VTBL_ENTRY)&_ZN6S786C34v129Ev,
  (VTBL_ENTRY)&_ZN6S786C34v130Ev,
  (VTBL_ENTRY)&_ZN6S786C34v131Ev,
  (VTBL_ENTRY)&_ZN6S786C34v132Ev,
  (VTBL_ENTRY)&_ZN6S786C34v133Ev,
  (VTBL_ENTRY)&_ZN6S786C34v134Ev,
  (VTBL_ENTRY)&_ZN6S786C34v135Ev,
  (VTBL_ENTRY)&_ZN6S786C34v136Ev,
  (VTBL_ENTRY)&_ZN6S786C34v137Ev,
  (VTBL_ENTRY)&_ZN6S786C34v138Ev,
  (VTBL_ENTRY)&_ZN6S786C34v139Ev,
  (VTBL_ENTRY)&_ZN6S786C34v140Ev,
  (VTBL_ENTRY)&_ZN6S786C34v141Ev,
  (VTBL_ENTRY)&_ZN6S786C34v142Ev,
  (VTBL_ENTRY)&_ZN6S786C34v143Ev,
  (VTBL_ENTRY)&_ZN6S786C34v144Ev,
  (VTBL_ENTRY)&_ZN6S786C34v145Ev,
  (VTBL_ENTRY)&_ZN6S786C24v146Ev,
};
extern VTBL_ENTRY _ZTI6S786C2[];
extern  VTBL_ENTRY _ZTV6S786C2[];
Class_Descriptor cd_S786C2 = {  "S786C2", // class name
  bases_S786C2, 3,
  &(vtc_S786C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S786C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S786C2),145, //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  S786C1  : S786C2 {
  virtual void  v1(); // _ZN6S786C12v1Ev
  virtual void  v2(); // _ZN6S786C12v2Ev
  virtual void  v3(); // _ZN6S786C12v3Ev
  virtual void  v4(); // _ZN6S786C12v4Ev
  virtual void  v5(); // _ZN6S786C12v5Ev
  ~S786C1(); // tgen
  S786C1(); // tgen
};
//SIG(1 S786C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 v144 v145} v146} v1 v2 v3 v4 v5}


void  S786C1 ::v1(){vfunc_called(this, "_ZN6S786C12v1Ev");}
void  S786C1 ::v2(){vfunc_called(this, "_ZN6S786C12v2Ev");}
void  S786C1 ::v3(){vfunc_called(this, "_ZN6S786C12v3Ev");}
void  S786C1 ::v4(){vfunc_called(this, "_ZN6S786C12v4Ev");}
void  S786C1 ::v5(){vfunc_called(this, "_ZN6S786C12v5Ev");}
S786C1 ::~S786C1(){ note_dtor("S786C1", this);} // tgen
S786C1 ::S786C1(){ note_ctor("S786C1", this);} // tgen

static void Test_S786C1()
{
  extern Class_Descriptor cd_S786C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S786C1, buf);
    S786C1 *dp, &lv = *(dp=new (buf) S786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S786C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S786C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S786C4*)(S786C3*)(S786C2*), 0, "S786C1");
    check_base_class_offset(lv, (S786C4*)(S786C3*)(S786C2*), 0, "S786C1");
    check_base_class_offset(lv, (S786C3*)(S786C2*), 0, "S786C1");
    check_base_class_offset(lv, (S786C2*), 0, "S786C1");
    test_class_info(&lv, &cd_S786C1);
    dp->~S786C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS786C1(Test_S786C1, "S786C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S786C1C1Ev();
extern void _ZN6S786C1D1Ev();
Name_Map name_map_S786C1[] = {
  NSPAIR(_ZN6S786C1C1Ev),
  NSPAIR(_ZN6S786C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S786C4;
extern VTBL_ENTRY _ZTI6S786C4[];
extern  VTBL_ENTRY _ZTV6S786C4[];
extern Class_Descriptor cd_S786C3;
extern VTBL_ENTRY _ZTI6S786C3[];
extern  VTBL_ENTRY _ZTV6S786C3[];
extern Class_Descriptor cd_S786C2;
extern VTBL_ENTRY _ZTI6S786C2[];
extern  VTBL_ENTRY _ZTV6S786C2[];
static Base_Class bases_S786C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S786C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S786C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S786C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S786C1[];
extern void _ZN6S786C1D1Ev();
extern void _ZN6S786C1D0Ev();
extern void _ZN6S786C42v6Ev();
extern void _ZN6S786C42v7Ev();
extern void _ZN6S786C42v8Ev();
extern void _ZN6S786C42v9Ev();
extern void _ZN6S786C43v10Ev();
extern void _ZN6S786C43v11Ev();
extern void _ZN6S786C43v12Ev();
extern void _ZN6S786C43v13Ev();
extern void _ZN6S786C43v14Ev();
extern void _ZN6S786C43v15Ev();
extern void _ZN6S786C43v16Ev();
extern void _ZN6S786C43v17Ev();
extern void _ZN6S786C43v18Ev();
extern void _ZN6S786C43v19Ev();
extern void _ZN6S786C43v20Ev();
extern void _ZN6S786C43v21Ev();
extern void _ZN6S786C43v22Ev();
extern void _ZN6S786C43v23Ev();
extern void _ZN6S786C43v24Ev();
extern void _ZN6S786C43v25Ev();
extern void _ZN6S786C43v26Ev();
extern void _ZN6S786C43v27Ev();
extern void _ZN6S786C43v28Ev();
extern void _ZN6S786C43v29Ev();
extern void _ZN6S786C43v30Ev();
extern void _ZN6S786C43v31Ev();
extern void _ZN6S786C43v32Ev();
extern void _ZN6S786C43v33Ev();
extern void _ZN6S786C43v34Ev();
extern void _ZN6S786C43v35Ev();
extern void _ZN6S786C43v36Ev();
extern void _ZN6S786C43v37Ev();
extern void _ZN6S786C43v38Ev();
extern void _ZN6S786C43v39Ev();
extern void _ZN6S786C43v40Ev();
extern void _ZN6S786C43v41Ev();
extern void _ZN6S786C43v42Ev();
extern void _ZN6S786C43v43Ev();
extern void _ZN6S786C43v44Ev();
extern void _ZN6S786C43v45Ev();
extern void _ZN6S786C43v46Ev();
extern void _ZN6S786C43v47Ev();
extern void _ZN6S786C43v48Ev();
extern void _ZN6S786C43v49Ev();
extern void _ZN6S786C43v50Ev();
extern void _ZN6S786C43v51Ev();
extern void _ZN6S786C43v52Ev();
extern void _ZN6S786C43v53Ev();
extern void _ZN6S786C43v54Ev();
extern void _ZN6S786C43v55Ev();
extern void _ZN6S786C43v56Ev();
extern void _ZN6S786C43v57Ev();
extern void _ZN6S786C43v58Ev();
extern void _ZN6S786C43v59Ev();
extern void _ZN6S786C43v60Ev();
extern void _ZN6S786C43v61Ev();
extern void _ZN6S786C43v62Ev();
extern void _ZN6S786C43v63Ev();
extern void _ZN6S786C43v64Ev();
extern void _ZN6S786C43v65Ev();
extern void _ZN6S786C43v66Ev();
extern void _ZN6S786C43v67Ev();
extern void _ZN6S786C43v68Ev();
extern void _ZN6S786C43v69Ev();
extern void _ZN6S786C43v70Ev();
extern void _ZN6S786C43v71Ev();
extern void _ZN6S786C43v72Ev();
extern void _ZN6S786C43v73Ev();
extern void _ZN6S786C43v74Ev();
extern void _ZN6S786C43v75Ev();
extern void _ZN6S786C43v76Ev();
extern void _ZN6S786C43v77Ev();
extern void _ZN6S786C43v78Ev();
extern void _ZN6S786C43v79Ev();
extern void _ZN6S786C43v80Ev();
extern void _ZN6S786C43v81Ev();
extern void _ZN6S786C43v82Ev();
extern void _ZN6S786C43v83Ev();
extern void _ZN6S786C43v84Ev();
extern void _ZN6S786C43v85Ev();
extern void _ZN6S786C43v86Ev();
extern void _ZN6S786C43v87Ev();
extern void _ZN6S786C43v88Ev();
extern void _ZN6S786C43v89Ev();
extern void _ZN6S786C43v90Ev();
extern void _ZN6S786C43v91Ev();
extern void _ZN6S786C43v92Ev();
extern void _ZN6S786C43v93Ev();
extern void _ZN6S786C43v94Ev();
extern void _ZN6S786C43v95Ev();
extern void _ZN6S786C43v96Ev();
extern void _ZN6S786C43v97Ev();
extern void _ZN6S786C43v98Ev();
extern void _ZN6S786C43v99Ev();
extern void _ZN6S786C44v100Ev();
extern void _ZN6S786C44v101Ev();
extern void _ZN6S786C44v102Ev();
extern void _ZN6S786C44v103Ev();
extern void _ZN6S786C44v104Ev();
extern void _ZN6S786C44v105Ev();
extern void _ZN6S786C44v106Ev();
extern void _ZN6S786C44v107Ev();
extern void _ZN6S786C44v108Ev();
extern void _ZN6S786C44v109Ev();
extern void _ZN6S786C44v110Ev();
extern void _ZN6S786C44v111Ev();
extern void _ZN6S786C44v112Ev();
extern void _ZN6S786C44v113Ev();
extern void _ZN6S786C44v114Ev();
extern void _ZN6S786C44v115Ev();
extern void _ZN6S786C44v116Ev();
extern void _ZN6S786C44v117Ev();
extern void _ZN6S786C44v118Ev();
extern void _ZN6S786C44v119Ev();
extern void _ZN6S786C44v120Ev();
extern void _ZN6S786C44v121Ev();
extern void _ZN6S786C44v122Ev();
extern void _ZN6S786C44v123Ev();
extern void _ZN6S786C44v124Ev();
extern void _ZN6S786C44v125Ev();
extern void _ZN6S786C44v126Ev();
extern void _ZN6S786C44v127Ev();
extern void _ZN6S786C34v128Ev();
extern void _ZN6S786C34v129Ev();
extern void _ZN6S786C34v130Ev();
extern void _ZN6S786C34v131Ev();
extern void _ZN6S786C34v132Ev();
extern void _ZN6S786C34v133Ev();
extern void _ZN6S786C34v134Ev();
extern void _ZN6S786C34v135Ev();
extern void _ZN6S786C34v136Ev();
extern void _ZN6S786C34v137Ev();
extern void _ZN6S786C34v138Ev();
extern void _ZN6S786C34v139Ev();
extern void _ZN6S786C34v140Ev();
extern void _ZN6S786C34v141Ev();
extern void _ZN6S786C34v142Ev();
extern void _ZN6S786C34v143Ev();
extern void _ZN6S786C34v144Ev();
extern void _ZN6S786C34v145Ev();
extern void _ZN6S786C24v146Ev();
extern void _ZN6S786C12v1Ev();
extern void _ZN6S786C12v2Ev();
extern void _ZN6S786C12v3Ev();
extern void _ZN6S786C12v4Ev();
extern void _ZN6S786C12v5Ev();
static  VTBL_ENTRY vtc_S786C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S786C1[0]),
  (VTBL_ENTRY)&_ZN6S786C1D1Ev,
  (VTBL_ENTRY)&_ZN6S786C1D0Ev,
  (VTBL_ENTRY)&_ZN6S786C42v6Ev,
  (VTBL_ENTRY)&_ZN6S786C42v7Ev,
  (VTBL_ENTRY)&_ZN6S786C42v8Ev,
  (VTBL_ENTRY)&_ZN6S786C42v9Ev,
  (VTBL_ENTRY)&_ZN6S786C43v10Ev,
  (VTBL_ENTRY)&_ZN6S786C43v11Ev,
  (VTBL_ENTRY)&_ZN6S786C43v12Ev,
  (VTBL_ENTRY)&_ZN6S786C43v13Ev,
  (VTBL_ENTRY)&_ZN6S786C43v14Ev,
  (VTBL_ENTRY)&_ZN6S786C43v15Ev,
  (VTBL_ENTRY)&_ZN6S786C43v16Ev,
  (VTBL_ENTRY)&_ZN6S786C43v17Ev,
  (VTBL_ENTRY)&_ZN6S786C43v18Ev,
  (VTBL_ENTRY)&_ZN6S786C43v19Ev,
  (VTBL_ENTRY)&_ZN6S786C43v20Ev,
  (VTBL_ENTRY)&_ZN6S786C43v21Ev,
  (VTBL_ENTRY)&_ZN6S786C43v22Ev,
  (VTBL_ENTRY)&_ZN6S786C43v23Ev,
  (VTBL_ENTRY)&_ZN6S786C43v24Ev,
  (VTBL_ENTRY)&_ZN6S786C43v25Ev,
  (VTBL_ENTRY)&_ZN6S786C43v26Ev,
  (VTBL_ENTRY)&_ZN6S786C43v27Ev,
  (VTBL_ENTRY)&_ZN6S786C43v28Ev,
  (VTBL_ENTRY)&_ZN6S786C43v29Ev,
  (VTBL_ENTRY)&_ZN6S786C43v30Ev,
  (VTBL_ENTRY)&_ZN6S786C43v31Ev,
  (VTBL_ENTRY)&_ZN6S786C43v32Ev,
  (VTBL_ENTRY)&_ZN6S786C43v33Ev,
  (VTBL_ENTRY)&_ZN6S786C43v34Ev,
  (VTBL_ENTRY)&_ZN6S786C43v35Ev,
  (VTBL_ENTRY)&_ZN6S786C43v36Ev,
  (VTBL_ENTRY)&_ZN6S786C43v37Ev,
  (VTBL_ENTRY)&_ZN6S786C43v38Ev,
  (VTBL_ENTRY)&_ZN6S786C43v39Ev,
  (VTBL_ENTRY)&_ZN6S786C43v40Ev,
  (VTBL_ENTRY)&_ZN6S786C43v41Ev,
  (VTBL_ENTRY)&_ZN6S786C43v42Ev,
  (VTBL_ENTRY)&_ZN6S786C43v43Ev,
  (VTBL_ENTRY)&_ZN6S786C43v44Ev,
  (VTBL_ENTRY)&_ZN6S786C43v45Ev,
  (VTBL_ENTRY)&_ZN6S786C43v46Ev,
  (VTBL_ENTRY)&_ZN6S786C43v47Ev,
  (VTBL_ENTRY)&_ZN6S786C43v48Ev,
  (VTBL_ENTRY)&_ZN6S786C43v49Ev,
  (VTBL_ENTRY)&_ZN6S786C43v50Ev,
  (VTBL_ENTRY)&_ZN6S786C43v51Ev,
  (VTBL_ENTRY)&_ZN6S786C43v52Ev,
  (VTBL_ENTRY)&_ZN6S786C43v53Ev,
  (VTBL_ENTRY)&_ZN6S786C43v54Ev,
  (VTBL_ENTRY)&_ZN6S786C43v55Ev,
  (VTBL_ENTRY)&_ZN6S786C43v56Ev,
  (VTBL_ENTRY)&_ZN6S786C43v57Ev,
  (VTBL_ENTRY)&_ZN6S786C43v58Ev,
  (VTBL_ENTRY)&_ZN6S786C43v59Ev,
  (VTBL_ENTRY)&_ZN6S786C43v60Ev,
  (VTBL_ENTRY)&_ZN6S786C43v61Ev,
  (VTBL_ENTRY)&_ZN6S786C43v62Ev,
  (VTBL_ENTRY)&_ZN6S786C43v63Ev,
  (VTBL_ENTRY)&_ZN6S786C43v64Ev,
  (VTBL_ENTRY)&_ZN6S786C43v65Ev,
  (VTBL_ENTRY)&_ZN6S786C43v66Ev,
  (VTBL_ENTRY)&_ZN6S786C43v67Ev,
  (VTBL_ENTRY)&_ZN6S786C43v68Ev,
  (VTBL_ENTRY)&_ZN6S786C43v69Ev,
  (VTBL_ENTRY)&_ZN6S786C43v70Ev,
  (VTBL_ENTRY)&_ZN6S786C43v71Ev,
  (VTBL_ENTRY)&_ZN6S786C43v72Ev,
  (VTBL_ENTRY)&_ZN6S786C43v73Ev,
  (VTBL_ENTRY)&_ZN6S786C43v74Ev,
  (VTBL_ENTRY)&_ZN6S786C43v75Ev,
  (VTBL_ENTRY)&_ZN6S786C43v76Ev,
  (VTBL_ENTRY)&_ZN6S786C43v77Ev,
  (VTBL_ENTRY)&_ZN6S786C43v78Ev,
  (VTBL_ENTRY)&_ZN6S786C43v79Ev,
  (VTBL_ENTRY)&_ZN6S786C43v80Ev,
  (VTBL_ENTRY)&_ZN6S786C43v81Ev,
  (VTBL_ENTRY)&_ZN6S786C43v82Ev,
  (VTBL_ENTRY)&_ZN6S786C43v83Ev,
  (VTBL_ENTRY)&_ZN6S786C43v84Ev,
  (VTBL_ENTRY)&_ZN6S786C43v85Ev,
  (VTBL_ENTRY)&_ZN6S786C43v86Ev,
  (VTBL_ENTRY)&_ZN6S786C43v87Ev,
  (VTBL_ENTRY)&_ZN6S786C43v88Ev,
  (VTBL_ENTRY)&_ZN6S786C43v89Ev,
  (VTBL_ENTRY)&_ZN6S786C43v90Ev,
  (VTBL_ENTRY)&_ZN6S786C43v91Ev,
  (VTBL_ENTRY)&_ZN6S786C43v92Ev,
  (VTBL_ENTRY)&_ZN6S786C43v93Ev,
  (VTBL_ENTRY)&_ZN6S786C43v94Ev,
  (VTBL_ENTRY)&_ZN6S786C43v95Ev,
  (VTBL_ENTRY)&_ZN6S786C43v96Ev,
  (VTBL_ENTRY)&_ZN6S786C43v97Ev,
  (VTBL_ENTRY)&_ZN6S786C43v98Ev,
  (VTBL_ENTRY)&_ZN6S786C43v99Ev,
  (VTBL_ENTRY)&_ZN6S786C44v100Ev,
  (VTBL_ENTRY)&_ZN6S786C44v101Ev,
  (VTBL_ENTRY)&_ZN6S786C44v102Ev,
  (VTBL_ENTRY)&_ZN6S786C44v103Ev,
  (VTBL_ENTRY)&_ZN6S786C44v104Ev,
  (VTBL_ENTRY)&_ZN6S786C44v105Ev,
  (VTBL_ENTRY)&_ZN6S786C44v106Ev,
  (VTBL_ENTRY)&_ZN6S786C44v107Ev,
  (VTBL_ENTRY)&_ZN6S786C44v108Ev,
  (VTBL_ENTRY)&_ZN6S786C44v109Ev,
  (VTBL_ENTRY)&_ZN6S786C44v110Ev,
  (VTBL_ENTRY)&_ZN6S786C44v111Ev,
  (VTBL_ENTRY)&_ZN6S786C44v112Ev,
  (VTBL_ENTRY)&_ZN6S786C44v113Ev,
  (VTBL_ENTRY)&_ZN6S786C44v114Ev,
  (VTBL_ENTRY)&_ZN6S786C44v115Ev,
  (VTBL_ENTRY)&_ZN6S786C44v116Ev,
  (VTBL_ENTRY)&_ZN6S786C44v117Ev,
  (VTBL_ENTRY)&_ZN6S786C44v118Ev,
  (VTBL_ENTRY)&_ZN6S786C44v119Ev,
  (VTBL_ENTRY)&_ZN6S786C44v120Ev,
  (VTBL_ENTRY)&_ZN6S786C44v121Ev,
  (VTBL_ENTRY)&_ZN6S786C44v122Ev,
  (VTBL_ENTRY)&_ZN6S786C44v123Ev,
  (VTBL_ENTRY)&_ZN6S786C44v124Ev,
  (VTBL_ENTRY)&_ZN6S786C44v125Ev,
  (VTBL_ENTRY)&_ZN6S786C44v126Ev,
  (VTBL_ENTRY)&_ZN6S786C44v127Ev,
  (VTBL_ENTRY)&_ZN6S786C34v128Ev,
  (VTBL_ENTRY)&_ZN6S786C34v129Ev,
  (VTBL_ENTRY)&_ZN6S786C34v130Ev,
  (VTBL_ENTRY)&_ZN6S786C34v131Ev,
  (VTBL_ENTRY)&_ZN6S786C34v132Ev,
  (VTBL_ENTRY)&_ZN6S786C34v133Ev,
  (VTBL_ENTRY)&_ZN6S786C34v134Ev,
  (VTBL_ENTRY)&_ZN6S786C34v135Ev,
  (VTBL_ENTRY)&_ZN6S786C34v136Ev,
  (VTBL_ENTRY)&_ZN6S786C34v137Ev,
  (VTBL_ENTRY)&_ZN6S786C34v138Ev,
  (VTBL_ENTRY)&_ZN6S786C34v139Ev,
  (VTBL_ENTRY)&_ZN6S786C34v140Ev,
  (VTBL_ENTRY)&_ZN6S786C34v141Ev,
  (VTBL_ENTRY)&_ZN6S786C34v142Ev,
  (VTBL_ENTRY)&_ZN6S786C34v143Ev,
  (VTBL_ENTRY)&_ZN6S786C34v144Ev,
  (VTBL_ENTRY)&_ZN6S786C34v145Ev,
  (VTBL_ENTRY)&_ZN6S786C24v146Ev,
  (VTBL_ENTRY)&_ZN6S786C12v1Ev,
  (VTBL_ENTRY)&_ZN6S786C12v2Ev,
  (VTBL_ENTRY)&_ZN6S786C12v3Ev,
  (VTBL_ENTRY)&_ZN6S786C12v4Ev,
  (VTBL_ENTRY)&_ZN6S786C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S786C1[];
extern  VTBL_ENTRY _ZTV6S786C1[];
Class_Descriptor cd_S786C1 = {  "S786C1", // class name
  bases_S786C1, 4,
  &(vtc_S786C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S786C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S786C1),150, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S784C4  : S785C5_nt {
  virtual void  v5(); // _ZN6S784C42v5Ev
  virtual void  v6(); // _ZN6S784C42v6Ev
  virtual void  v7(); // _ZN6S784C42v7Ev
  virtual void  v8(); // _ZN6S784C42v8Ev
  virtual void  v9(); // _ZN6S784C42v9Ev
  virtual void  v10(); // _ZN6S784C43v10Ev
  virtual void  v11(); // _ZN6S784C43v11Ev
  virtual void  v12(); // _ZN6S784C43v12Ev
  virtual void  v13(); // _ZN6S784C43v13Ev
  virtual void  v14(); // _ZN6S784C43v14Ev
  virtual void  v15(); // _ZN6S784C43v15Ev
  virtual void  v16(); // _ZN6S784C43v16Ev
  virtual void  v17(); // _ZN6S784C43v17Ev
  virtual void  v18(); // _ZN6S784C43v18Ev
  virtual void  v19(); // _ZN6S784C43v19Ev
  virtual void  v20(); // _ZN6S784C43v20Ev
  virtual void  v21(); // _ZN6S784C43v21Ev
  virtual void  v22(); // _ZN6S784C43v22Ev
  virtual void  v23(); // _ZN6S784C43v23Ev
  virtual void  v24(); // _ZN6S784C43v24Ev
  virtual void  v25(); // _ZN6S784C43v25Ev
  virtual void  v26(); // _ZN6S784C43v26Ev
  virtual void  v27(); // _ZN6S784C43v27Ev
  virtual void  v28(); // _ZN6S784C43v28Ev
  virtual void  v29(); // _ZN6S784C43v29Ev
  virtual void  v30(); // _ZN6S784C43v30Ev
  virtual void  v31(); // _ZN6S784C43v31Ev
  virtual void  v32(); // _ZN6S784C43v32Ev
  virtual void  v33(); // _ZN6S784C43v33Ev
  virtual void  v34(); // _ZN6S784C43v34Ev
  virtual void  v35(); // _ZN6S784C43v35Ev
  virtual void  v36(); // _ZN6S784C43v36Ev
  virtual void  v37(); // _ZN6S784C43v37Ev
  virtual void  v38(); // _ZN6S784C43v38Ev
  virtual void  v39(); // _ZN6S784C43v39Ev
  virtual void  v40(); // _ZN6S784C43v40Ev
  virtual void  v41(); // _ZN6S784C43v41Ev
  virtual void  v42(); // _ZN6S784C43v42Ev
  virtual void  v43(); // _ZN6S784C43v43Ev
  virtual void  v44(); // _ZN6S784C43v44Ev
  virtual void  v45(); // _ZN6S784C43v45Ev
  virtual void  v46(); // _ZN6S784C43v46Ev
  virtual void  v47(); // _ZN6S784C43v47Ev
  virtual void  v48(); // _ZN6S784C43v48Ev
  virtual void  v49(); // _ZN6S784C43v49Ev
  virtual void  v50(); // _ZN6S784C43v50Ev
  virtual void  v51(); // _ZN6S784C43v51Ev
  virtual void  v52(); // _ZN6S784C43v52Ev
  virtual void  v53(); // _ZN6S784C43v53Ev
  virtual void  v54(); // _ZN6S784C43v54Ev
  virtual void  v55(); // _ZN6S784C43v55Ev
  virtual void  v56(); // _ZN6S784C43v56Ev
  virtual void  v57(); // _ZN6S784C43v57Ev
  virtual void  v58(); // _ZN6S784C43v58Ev
  virtual void  v59(); // _ZN6S784C43v59Ev
  virtual void  v60(); // _ZN6S784C43v60Ev
  virtual void  v61(); // _ZN6S784C43v61Ev
  virtual void  v62(); // _ZN6S784C43v62Ev
  virtual void  v63(); // _ZN6S784C43v63Ev
  virtual void  v64(); // _ZN6S784C43v64Ev
  virtual void  v65(); // _ZN6S784C43v65Ev
  virtual void  v66(); // _ZN6S784C43v66Ev
  virtual void  v67(); // _ZN6S784C43v67Ev
  virtual void  v68(); // _ZN6S784C43v68Ev
  virtual void  v69(); // _ZN6S784C43v69Ev
  virtual void  v70(); // _ZN6S784C43v70Ev
  virtual void  v71(); // _ZN6S784C43v71Ev
  virtual void  v72(); // _ZN6S784C43v72Ev
  virtual void  v73(); // _ZN6S784C43v73Ev
  virtual void  v74(); // _ZN6S784C43v74Ev
  virtual void  v75(); // _ZN6S784C43v75Ev
  virtual void  v76(); // _ZN6S784C43v76Ev
  virtual void  v77(); // _ZN6S784C43v77Ev
  virtual void  v78(); // _ZN6S784C43v78Ev
  virtual void  v79(); // _ZN6S784C43v79Ev
  virtual void  v80(); // _ZN6S784C43v80Ev
  virtual void  v81(); // _ZN6S784C43v81Ev
  virtual void  v82(); // _ZN6S784C43v82Ev
  virtual void  v83(); // _ZN6S784C43v83Ev
  virtual void  v84(); // _ZN6S784C43v84Ev
  virtual void  v85(); // _ZN6S784C43v85Ev
  virtual void  v86(); // _ZN6S784C43v86Ev
  virtual void  v87(); // _ZN6S784C43v87Ev
  virtual void  v88(); // _ZN6S784C43v88Ev
  virtual void  v89(); // _ZN6S784C43v89Ev
  virtual void  v90(); // _ZN6S784C43v90Ev
  virtual void  v91(); // _ZN6S784C43v91Ev
  virtual void  v92(); // _ZN6S784C43v92Ev
  virtual void  v93(); // _ZN6S784C43v93Ev
  virtual void  v94(); // _ZN6S784C43v94Ev
  virtual void  v95(); // _ZN6S784C43v95Ev
  virtual void  v96(); // _ZN6S784C43v96Ev
  virtual void  v97(); // _ZN6S784C43v97Ev
  virtual void  v98(); // _ZN6S784C43v98Ev
  virtual void  v99(); // _ZN6S784C43v99Ev
  virtual void  v100(); // _ZN6S784C44v100Ev
  virtual void  v101(); // _ZN6S784C44v101Ev
  virtual void  v102(); // _ZN6S784C44v102Ev
  virtual void  v103(); // _ZN6S784C44v103Ev
  virtual void  v104(); // _ZN6S784C44v104Ev
  virtual void  v105(); // _ZN6S784C44v105Ev
  virtual void  v106(); // _ZN6S784C44v106Ev
  virtual void  v107(); // _ZN6S784C44v107Ev
  virtual void  v108(); // _ZN6S784C44v108Ev
  virtual void  v109(); // _ZN6S784C44v109Ev
  virtual void  v110(); // _ZN6S784C44v110Ev
  virtual void  v111(); // _ZN6S784C44v111Ev
  virtual void  v112(); // _ZN6S784C44v112Ev
  virtual void  v113(); // _ZN6S784C44v113Ev
  virtual void  v114(); // _ZN6S784C44v114Ev
  virtual void  v115(); // _ZN6S784C44v115Ev
  virtual void  v116(); // _ZN6S784C44v116Ev
  virtual void  v117(); // _ZN6S784C44v117Ev
  virtual void  v118(); // _ZN6S784C44v118Ev
  virtual void  v119(); // _ZN6S784C44v119Ev
  virtual void  v120(); // _ZN6S784C44v120Ev
  virtual void  v121(); // _ZN6S784C44v121Ev
  virtual void  v122(); // _ZN6S784C44v122Ev
  virtual void  v123(); // _ZN6S784C44v123Ev
  virtual void  v124(); // _ZN6S784C44v124Ev
  virtual void  v125(); // _ZN6S784C44v125Ev
  virtual void  v126(); // _ZN6S784C44v126Ev
  ~S784C4(); // tgen
  S784C4(); // tgen
};
//SIG(-1 S784C4) C1{ BC2{ vd m Fp Fi} 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}


void  S784C4 ::v5(){vfunc_called(this, "_ZN6S784C42v5Ev");}
void  S784C4 ::v6(){vfunc_called(this, "_ZN6S784C42v6Ev");}
void  S784C4 ::v7(){vfunc_called(this, "_ZN6S784C42v7Ev");}
void  S784C4 ::v8(){vfunc_called(this, "_ZN6S784C42v8Ev");}
void  S784C4 ::v9(){vfunc_called(this, "_ZN6S784C42v9Ev");}
void  S784C4 ::v10(){vfunc_called(this, "_ZN6S784C43v10Ev");}
void  S784C4 ::v11(){vfunc_called(this, "_ZN6S784C43v11Ev");}
void  S784C4 ::v12(){vfunc_called(this, "_ZN6S784C43v12Ev");}
void  S784C4 ::v13(){vfunc_called(this, "_ZN6S784C43v13Ev");}
void  S784C4 ::v14(){vfunc_called(this, "_ZN6S784C43v14Ev");}
void  S784C4 ::v15(){vfunc_called(this, "_ZN6S784C43v15Ev");}
void  S784C4 ::v16(){vfunc_called(this, "_ZN6S784C43v16Ev");}
void  S784C4 ::v17(){vfunc_called(this, "_ZN6S784C43v17Ev");}
void  S784C4 ::v18(){vfunc_called(this, "_ZN6S784C43v18Ev");}
void  S784C4 ::v19(){vfunc_called(this, "_ZN6S784C43v19Ev");}
void  S784C4 ::v20(){vfunc_called(this, "_ZN6S784C43v20Ev");}
void  S784C4 ::v21(){vfunc_called(this, "_ZN6S784C43v21Ev");}
void  S784C4 ::v22(){vfunc_called(this, "_ZN6S784C43v22Ev");}
void  S784C4 ::v23(){vfunc_called(this, "_ZN6S784C43v23Ev");}
void  S784C4 ::v24(){vfunc_called(this, "_ZN6S784C43v24Ev");}
void  S784C4 ::v25(){vfunc_called(this, "_ZN6S784C43v25Ev");}
void  S784C4 ::v26(){vfunc_called(this, "_ZN6S784C43v26Ev");}
void  S784C4 ::v27(){vfunc_called(this, "_ZN6S784C43v27Ev");}
void  S784C4 ::v28(){vfunc_called(this, "_ZN6S784C43v28Ev");}
void  S784C4 ::v29(){vfunc_called(this, "_ZN6S784C43v29Ev");}
void  S784C4 ::v30(){vfunc_called(this, "_ZN6S784C43v30Ev");}
void  S784C4 ::v31(){vfunc_called(this, "_ZN6S784C43v31Ev");}
void  S784C4 ::v32(){vfunc_called(this, "_ZN6S784C43v32Ev");}
void  S784C4 ::v33(){vfunc_called(this, "_ZN6S784C43v33Ev");}
void  S784C4 ::v34(){vfunc_called(this, "_ZN6S784C43v34Ev");}
void  S784C4 ::v35(){vfunc_called(this, "_ZN6S784C43v35Ev");}
void  S784C4 ::v36(){vfunc_called(this, "_ZN6S784C43v36Ev");}
void  S784C4 ::v37(){vfunc_called(this, "_ZN6S784C43v37Ev");}
void  S784C4 ::v38(){vfunc_called(this, "_ZN6S784C43v38Ev");}
void  S784C4 ::v39(){vfunc_called(this, "_ZN6S784C43v39Ev");}
void  S784C4 ::v40(){vfunc_called(this, "_ZN6S784C43v40Ev");}
void  S784C4 ::v41(){vfunc_called(this, "_ZN6S784C43v41Ev");}
void  S784C4 ::v42(){vfunc_called(this, "_ZN6S784C43v42Ev");}
void  S784C4 ::v43(){vfunc_called(this, "_ZN6S784C43v43Ev");}
void  S784C4 ::v44(){vfunc_called(this, "_ZN6S784C43v44Ev");}
void  S784C4 ::v45(){vfunc_called(this, "_ZN6S784C43v45Ev");}
void  S784C4 ::v46(){vfunc_called(this, "_ZN6S784C43v46Ev");}
void  S784C4 ::v47(){vfunc_called(this, "_ZN6S784C43v47Ev");}
void  S784C4 ::v48(){vfunc_called(this, "_ZN6S784C43v48Ev");}
void  S784C4 ::v49(){vfunc_called(this, "_ZN6S784C43v49Ev");}
void  S784C4 ::v50(){vfunc_called(this, "_ZN6S784C43v50Ev");}
void  S784C4 ::v51(){vfunc_called(this, "_ZN6S784C43v51Ev");}
void  S784C4 ::v52(){vfunc_called(this, "_ZN6S784C43v52Ev");}
void  S784C4 ::v53(){vfunc_called(this, "_ZN6S784C43v53Ev");}
void  S784C4 ::v54(){vfunc_called(this, "_ZN6S784C43v54Ev");}
void  S784C4 ::v55(){vfunc_called(this, "_ZN6S784C43v55Ev");}
void  S784C4 ::v56(){vfunc_called(this, "_ZN6S784C43v56Ev");}
void  S784C4 ::v57(){vfunc_called(this, "_ZN6S784C43v57Ev");}
void  S784C4 ::v58(){vfunc_called(this, "_ZN6S784C43v58Ev");}
void  S784C4 ::v59(){vfunc_called(this, "_ZN6S784C43v59Ev");}
void  S784C4 ::v60(){vfunc_called(this, "_ZN6S784C43v60Ev");}
void  S784C4 ::v61(){vfunc_called(this, "_ZN6S784C43v61Ev");}
void  S784C4 ::v62(){vfunc_called(this, "_ZN6S784C43v62Ev");}
void  S784C4 ::v63(){vfunc_called(this, "_ZN6S784C43v63Ev");}
void  S784C4 ::v64(){vfunc_called(this, "_ZN6S784C43v64Ev");}
void  S784C4 ::v65(){vfunc_called(this, "_ZN6S784C43v65Ev");}
void  S784C4 ::v66(){vfunc_called(this, "_ZN6S784C43v66Ev");}
void  S784C4 ::v67(){vfunc_called(this, "_ZN6S784C43v67Ev");}
void  S784C4 ::v68(){vfunc_called(this, "_ZN6S784C43v68Ev");}
void  S784C4 ::v69(){vfunc_called(this, "_ZN6S784C43v69Ev");}
void  S784C4 ::v70(){vfunc_called(this, "_ZN6S784C43v70Ev");}
void  S784C4 ::v71(){vfunc_called(this, "_ZN6S784C43v71Ev");}
void  S784C4 ::v72(){vfunc_called(this, "_ZN6S784C43v72Ev");}
void  S784C4 ::v73(){vfunc_called(this, "_ZN6S784C43v73Ev");}
void  S784C4 ::v74(){vfunc_called(this, "_ZN6S784C43v74Ev");}
void  S784C4 ::v75(){vfunc_called(this, "_ZN6S784C43v75Ev");}
void  S784C4 ::v76(){vfunc_called(this, "_ZN6S784C43v76Ev");}
void  S784C4 ::v77(){vfunc_called(this, "_ZN6S784C43v77Ev");}
void  S784C4 ::v78(){vfunc_called(this, "_ZN6S784C43v78Ev");}
void  S784C4 ::v79(){vfunc_called(this, "_ZN6S784C43v79Ev");}
void  S784C4 ::v80(){vfunc_called(this, "_ZN6S784C43v80Ev");}
void  S784C4 ::v81(){vfunc_called(this, "_ZN6S784C43v81Ev");}
void  S784C4 ::v82(){vfunc_called(this, "_ZN6S784C43v82Ev");}
void  S784C4 ::v83(){vfunc_called(this, "_ZN6S784C43v83Ev");}
void  S784C4 ::v84(){vfunc_called(this, "_ZN6S784C43v84Ev");}
void  S784C4 ::v85(){vfunc_called(this, "_ZN6S784C43v85Ev");}
void  S784C4 ::v86(){vfunc_called(this, "_ZN6S784C43v86Ev");}
void  S784C4 ::v87(){vfunc_called(this, "_ZN6S784C43v87Ev");}
void  S784C4 ::v88(){vfunc_called(this, "_ZN6S784C43v88Ev");}
void  S784C4 ::v89(){vfunc_called(this, "_ZN6S784C43v89Ev");}
void  S784C4 ::v90(){vfunc_called(this, "_ZN6S784C43v90Ev");}
void  S784C4 ::v91(){vfunc_called(this, "_ZN6S784C43v91Ev");}
void  S784C4 ::v92(){vfunc_called(this, "_ZN6S784C43v92Ev");}
void  S784C4 ::v93(){vfunc_called(this, "_ZN6S784C43v93Ev");}
void  S784C4 ::v94(){vfunc_called(this, "_ZN6S784C43v94Ev");}
void  S784C4 ::v95(){vfunc_called(this, "_ZN6S784C43v95Ev");}
void  S784C4 ::v96(){vfunc_called(this, "_ZN6S784C43v96Ev");}
void  S784C4 ::v97(){vfunc_called(this, "_ZN6S784C43v97Ev");}
void  S784C4 ::v98(){vfunc_called(this, "_ZN6S784C43v98Ev");}
void  S784C4 ::v99(){vfunc_called(this, "_ZN6S784C43v99Ev");}
void  S784C4 ::v100(){vfunc_called(this, "_ZN6S784C44v100Ev");}
void  S784C4 ::v101(){vfunc_called(this, "_ZN6S784C44v101Ev");}
void  S784C4 ::v102(){vfunc_called(this, "_ZN6S784C44v102Ev");}
void  S784C4 ::v103(){vfunc_called(this, "_ZN6S784C44v103Ev");}
void  S784C4 ::v104(){vfunc_called(this, "_ZN6S784C44v104Ev");}
void  S784C4 ::v105(){vfunc_called(this, "_ZN6S784C44v105Ev");}
void  S784C4 ::v106(){vfunc_called(this, "_ZN6S784C44v106Ev");}
void  S784C4 ::v107(){vfunc_called(this, "_ZN6S784C44v107Ev");}
void  S784C4 ::v108(){vfunc_called(this, "_ZN6S784C44v108Ev");}
void  S784C4 ::v109(){vfunc_called(this, "_ZN6S784C44v109Ev");}
void  S784C4 ::v110(){vfunc_called(this, "_ZN6S784C44v110Ev");}
void  S784C4 ::v111(){vfunc_called(this, "_ZN6S784C44v111Ev");}
void  S784C4 ::v112(){vfunc_called(this, "_ZN6S784C44v112Ev");}
void  S784C4 ::v113(){vfunc_called(this, "_ZN6S784C44v113Ev");}
void  S784C4 ::v114(){vfunc_called(this, "_ZN6S784C44v114Ev");}
void  S784C4 ::v115(){vfunc_called(this, "_ZN6S784C44v115Ev");}
void  S784C4 ::v116(){vfunc_called(this, "_ZN6S784C44v116Ev");}
void  S784C4 ::v117(){vfunc_called(this, "_ZN6S784C44v117Ev");}
void  S784C4 ::v118(){vfunc_called(this, "_ZN6S784C44v118Ev");}
void  S784C4 ::v119(){vfunc_called(this, "_ZN6S784C44v119Ev");}
void  S784C4 ::v120(){vfunc_called(this, "_ZN6S784C44v120Ev");}
void  S784C4 ::v121(){vfunc_called(this, "_ZN6S784C44v121Ev");}
void  S784C4 ::v122(){vfunc_called(this, "_ZN6S784C44v122Ev");}
void  S784C4 ::v123(){vfunc_called(this, "_ZN6S784C44v123Ev");}
void  S784C4 ::v124(){vfunc_called(this, "_ZN6S784C44v124Ev");}
void  S784C4 ::v125(){vfunc_called(this, "_ZN6S784C44v125Ev");}
void  S784C4 ::v126(){vfunc_called(this, "_ZN6S784C44v126Ev");}
S784C4 ::~S784C4(){ note_dtor("S784C4", this);} // tgen
S784C4 ::S784C4(){ note_ctor("S784C4", this);} // tgen

static void Test_S784C4()
{
  extern Class_Descriptor cd_S784C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S784C4, buf);
    S784C4 *dp, &lv = *(dp=new (buf) S784C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S784C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S784C4)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S784C4");
    test_class_info(&lv, &cd_S784C4);
    dp->~S784C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS784C4(Test_S784C4, "S784C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S784C4C1Ev();
extern void _ZN6S784C4D1Ev();
Name_Map name_map_S784C4[] = {
  NSPAIR(_ZN6S784C4C1Ev),
  NSPAIR(_ZN6S784C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S784C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S784C4[];
extern void _ZN6S784C4D1Ev();
extern void _ZN6S784C4D0Ev();
extern void _ZN6S784C42v5Ev();
extern void _ZN6S784C42v6Ev();
extern void _ZN6S784C42v7Ev();
extern void _ZN6S784C42v8Ev();
extern void _ZN6S784C42v9Ev();
extern void _ZN6S784C43v10Ev();
extern void _ZN6S784C43v11Ev();
extern void _ZN6S784C43v12Ev();
extern void _ZN6S784C43v13Ev();
extern void _ZN6S784C43v14Ev();
extern void _ZN6S784C43v15Ev();
extern void _ZN6S784C43v16Ev();
extern void _ZN6S784C43v17Ev();
extern void _ZN6S784C43v18Ev();
extern void _ZN6S784C43v19Ev();
extern void _ZN6S784C43v20Ev();
extern void _ZN6S784C43v21Ev();
extern void _ZN6S784C43v22Ev();
extern void _ZN6S784C43v23Ev();
extern void _ZN6S784C43v24Ev();
extern void _ZN6S784C43v25Ev();
extern void _ZN6S784C43v26Ev();
extern void _ZN6S784C43v27Ev();
extern void _ZN6S784C43v28Ev();
extern void _ZN6S784C43v29Ev();
extern void _ZN6S784C43v30Ev();
extern void _ZN6S784C43v31Ev();
extern void _ZN6S784C43v32Ev();
extern void _ZN6S784C43v33Ev();
extern void _ZN6S784C43v34Ev();
extern void _ZN6S784C43v35Ev();
extern void _ZN6S784C43v36Ev();
extern void _ZN6S784C43v37Ev();
extern void _ZN6S784C43v38Ev();
extern void _ZN6S784C43v39Ev();
extern void _ZN6S784C43v40Ev();
extern void _ZN6S784C43v41Ev();
extern void _ZN6S784C43v42Ev();
extern void _ZN6S784C43v43Ev();
extern void _ZN6S784C43v44Ev();
extern void _ZN6S784C43v45Ev();
extern void _ZN6S784C43v46Ev();
extern void _ZN6S784C43v47Ev();
extern void _ZN6S784C43v48Ev();
extern void _ZN6S784C43v49Ev();
extern void _ZN6S784C43v50Ev();
extern void _ZN6S784C43v51Ev();
extern void _ZN6S784C43v52Ev();
extern void _ZN6S784C43v53Ev();
extern void _ZN6S784C43v54Ev();
extern void _ZN6S784C43v55Ev();
extern void _ZN6S784C43v56Ev();
extern void _ZN6S784C43v57Ev();
extern void _ZN6S784C43v58Ev();
extern void _ZN6S784C43v59Ev();
extern void _ZN6S784C43v60Ev();
extern void _ZN6S784C43v61Ev();
extern void _ZN6S784C43v62Ev();
extern void _ZN6S784C43v63Ev();
extern void _ZN6S784C43v64Ev();
extern void _ZN6S784C43v65Ev();
extern void _ZN6S784C43v66Ev();
extern void _ZN6S784C43v67Ev();
extern void _ZN6S784C43v68Ev();
extern void _ZN6S784C43v69Ev();
extern void _ZN6S784C43v70Ev();
extern void _ZN6S784C43v71Ev();
extern void _ZN6S784C43v72Ev();
extern void _ZN6S784C43v73Ev();
extern void _ZN6S784C43v74Ev();
extern void _ZN6S784C43v75Ev();
extern void _ZN6S784C43v76Ev();
extern void _ZN6S784C43v77Ev();
extern void _ZN6S784C43v78Ev();
extern void _ZN6S784C43v79Ev();
extern void _ZN6S784C43v80Ev();
extern void _ZN6S784C43v81Ev();
extern void _ZN6S784C43v82Ev();
extern void _ZN6S784C43v83Ev();
extern void _ZN6S784C43v84Ev();
extern void _ZN6S784C43v85Ev();
extern void _ZN6S784C43v86Ev();
extern void _ZN6S784C43v87Ev();
extern void _ZN6S784C43v88Ev();
extern void _ZN6S784C43v89Ev();
extern void _ZN6S784C43v90Ev();
extern void _ZN6S784C43v91Ev();
extern void _ZN6S784C43v92Ev();
extern void _ZN6S784C43v93Ev();
extern void _ZN6S784C43v94Ev();
extern void _ZN6S784C43v95Ev();
extern void _ZN6S784C43v96Ev();
extern void _ZN6S784C43v97Ev();
extern void _ZN6S784C43v98Ev();
extern void _ZN6S784C43v99Ev();
extern void _ZN6S784C44v100Ev();
extern void _ZN6S784C44v101Ev();
extern void _ZN6S784C44v102Ev();
extern void _ZN6S784C44v103Ev();
extern void _ZN6S784C44v104Ev();
extern void _ZN6S784C44v105Ev();
extern void _ZN6S784C44v106Ev();
extern void _ZN6S784C44v107Ev();
extern void _ZN6S784C44v108Ev();
extern void _ZN6S784C44v109Ev();
extern void _ZN6S784C44v110Ev();
extern void _ZN6S784C44v111Ev();
extern void _ZN6S784C44v112Ev();
extern void _ZN6S784C44v113Ev();
extern void _ZN6S784C44v114Ev();
extern void _ZN6S784C44v115Ev();
extern void _ZN6S784C44v116Ev();
extern void _ZN6S784C44v117Ev();
extern void _ZN6S784C44v118Ev();
extern void _ZN6S784C44v119Ev();
extern void _ZN6S784C44v120Ev();
extern void _ZN6S784C44v121Ev();
extern void _ZN6S784C44v122Ev();
extern void _ZN6S784C44v123Ev();
extern void _ZN6S784C44v124Ev();
extern void _ZN6S784C44v125Ev();
extern void _ZN6S784C44v126Ev();
static  VTBL_ENTRY vtc_S784C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S784C4[0]),
  (VTBL_ENTRY)&_ZN6S784C4D1Ev,
  (VTBL_ENTRY)&_ZN6S784C4D0Ev,
  (VTBL_ENTRY)&_ZN6S784C42v5Ev,
  (VTBL_ENTRY)&_ZN6S784C42v6Ev,
  (VTBL_ENTRY)&_ZN6S784C42v7Ev,
  (VTBL_ENTRY)&_ZN6S784C42v8Ev,
  (VTBL_ENTRY)&_ZN6S784C42v9Ev,
  (VTBL_ENTRY)&_ZN6S784C43v10Ev,
  (VTBL_ENTRY)&_ZN6S784C43v11Ev,
  (VTBL_ENTRY)&_ZN6S784C43v12Ev,
  (VTBL_ENTRY)&_ZN6S784C43v13Ev,
  (VTBL_ENTRY)&_ZN6S784C43v14Ev,
  (VTBL_ENTRY)&_ZN6S784C43v15Ev,
  (VTBL_ENTRY)&_ZN6S784C43v16Ev,
  (VTBL_ENTRY)&_ZN6S784C43v17Ev,
  (VTBL_ENTRY)&_ZN6S784C43v18Ev,
  (VTBL_ENTRY)&_ZN6S784C43v19Ev,
  (VTBL_ENTRY)&_ZN6S784C43v20Ev,
  (VTBL_ENTRY)&_ZN6S784C43v21Ev,
  (VTBL_ENTRY)&_ZN6S784C43v22Ev,
  (VTBL_ENTRY)&_ZN6S784C43v23Ev,
  (VTBL_ENTRY)&_ZN6S784C43v24Ev,
  (VTBL_ENTRY)&_ZN6S784C43v25Ev,
  (VTBL_ENTRY)&_ZN6S784C43v26Ev,
  (VTBL_ENTRY)&_ZN6S784C43v27Ev,
  (VTBL_ENTRY)&_ZN6S784C43v28Ev,
  (VTBL_ENTRY)&_ZN6S784C43v29Ev,
  (VTBL_ENTRY)&_ZN6S784C43v30Ev,
  (VTBL_ENTRY)&_ZN6S784C43v31Ev,
  (VTBL_ENTRY)&_ZN6S784C43v32Ev,
  (VTBL_ENTRY)&_ZN6S784C43v33Ev,
  (VTBL_ENTRY)&_ZN6S784C43v34Ev,
  (VTBL_ENTRY)&_ZN6S784C43v35Ev,
  (VTBL_ENTRY)&_ZN6S784C43v36Ev,
  (VTBL_ENTRY)&_ZN6S784C43v37Ev,
  (VTBL_ENTRY)&_ZN6S784C43v38Ev,
  (VTBL_ENTRY)&_ZN6S784C43v39Ev,
  (VTBL_ENTRY)&_ZN6S784C43v40Ev,
  (VTBL_ENTRY)&_ZN6S784C43v41Ev,
  (VTBL_ENTRY)&_ZN6S784C43v42Ev,
  (VTBL_ENTRY)&_ZN6S784C43v43Ev,
  (VTBL_ENTRY)&_ZN6S784C43v44Ev,
  (VTBL_ENTRY)&_ZN6S784C43v45Ev,
  (VTBL_ENTRY)&_ZN6S784C43v46Ev,
  (VTBL_ENTRY)&_ZN6S784C43v47Ev,
  (VTBL_ENTRY)&_ZN6S784C43v48Ev,
  (VTBL_ENTRY)&_ZN6S784C43v49Ev,
  (VTBL_ENTRY)&_ZN6S784C43v50Ev,
  (VTBL_ENTRY)&_ZN6S784C43v51Ev,
  (VTBL_ENTRY)&_ZN6S784C43v52Ev,
  (VTBL_ENTRY)&_ZN6S784C43v53Ev,
  (VTBL_ENTRY)&_ZN6S784C43v54Ev,
  (VTBL_ENTRY)&_ZN6S784C43v55Ev,
  (VTBL_ENTRY)&_ZN6S784C43v56Ev,
  (VTBL_ENTRY)&_ZN6S784C43v57Ev,
  (VTBL_ENTRY)&_ZN6S784C43v58Ev,
  (VTBL_ENTRY)&_ZN6S784C43v59Ev,
  (VTBL_ENTRY)&_ZN6S784C43v60Ev,
  (VTBL_ENTRY)&_ZN6S784C43v61Ev,
  (VTBL_ENTRY)&_ZN6S784C43v62Ev,
  (VTBL_ENTRY)&_ZN6S784C43v63Ev,
  (VTBL_ENTRY)&_ZN6S784C43v64Ev,
  (VTBL_ENTRY)&_ZN6S784C43v65Ev,
  (VTBL_ENTRY)&_ZN6S784C43v66Ev,
  (VTBL_ENTRY)&_ZN6S784C43v67Ev,
  (VTBL_ENTRY)&_ZN6S784C43v68Ev,
  (VTBL_ENTRY)&_ZN6S784C43v69Ev,
  (VTBL_ENTRY)&_ZN6S784C43v70Ev,
  (VTBL_ENTRY)&_ZN6S784C43v71Ev,
  (VTBL_ENTRY)&_ZN6S784C43v72Ev,
  (VTBL_ENTRY)&_ZN6S784C43v73Ev,
  (VTBL_ENTRY)&_ZN6S784C43v74Ev,
  (VTBL_ENTRY)&_ZN6S784C43v75Ev,
  (VTBL_ENTRY)&_ZN6S784C43v76Ev,
  (VTBL_ENTRY)&_ZN6S784C43v77Ev,
  (VTBL_ENTRY)&_ZN6S784C43v78Ev,
  (VTBL_ENTRY)&_ZN6S784C43v79Ev,
  (VTBL_ENTRY)&_ZN6S784C43v80Ev,
  (VTBL_ENTRY)&_ZN6S784C43v81Ev,
  (VTBL_ENTRY)&_ZN6S784C43v82Ev,
  (VTBL_ENTRY)&_ZN6S784C43v83Ev,
  (VTBL_ENTRY)&_ZN6S784C43v84Ev,
  (VTBL_ENTRY)&_ZN6S784C43v85Ev,
  (VTBL_ENTRY)&_ZN6S784C43v86Ev,
  (VTBL_ENTRY)&_ZN6S784C43v87Ev,
  (VTBL_ENTRY)&_ZN6S784C43v88Ev,
  (VTBL_ENTRY)&_ZN6S784C43v89Ev,
  (VTBL_ENTRY)&_ZN6S784C43v90Ev,
  (VTBL_ENTRY)&_ZN6S784C43v91Ev,
  (VTBL_ENTRY)&_ZN6S784C43v92Ev,
  (VTBL_ENTRY)&_ZN6S784C43v93Ev,
  (VTBL_ENTRY)&_ZN6S784C43v94Ev,
  (VTBL_ENTRY)&_ZN6S784C43v95Ev,
  (VTBL_ENTRY)&_ZN6S784C43v96Ev,
  (VTBL_ENTRY)&_ZN6S784C43v97Ev,
  (VTBL_ENTRY)&_ZN6S784C43v98Ev,
  (VTBL_ENTRY)&_ZN6S784C43v99Ev,
  (VTBL_ENTRY)&_ZN6S784C44v100Ev,
  (VTBL_ENTRY)&_ZN6S784C44v101Ev,
  (VTBL_ENTRY)&_ZN6S784C44v102Ev,
  (VTBL_ENTRY)&_ZN6S784C44v103Ev,
  (VTBL_ENTRY)&_ZN6S784C44v104Ev,
  (VTBL_ENTRY)&_ZN6S784C44v105Ev,
  (VTBL_ENTRY)&_ZN6S784C44v106Ev,
  (VTBL_ENTRY)&_ZN6S784C44v107Ev,
  (VTBL_ENTRY)&_ZN6S784C44v108Ev,
  (VTBL_ENTRY)&_ZN6S784C44v109Ev,
  (VTBL_ENTRY)&_ZN6S784C44v110Ev,
  (VTBL_ENTRY)&_ZN6S784C44v111Ev,
  (VTBL_ENTRY)&_ZN6S784C44v112Ev,
  (VTBL_ENTRY)&_ZN6S784C44v113Ev,
  (VTBL_ENTRY)&_ZN6S784C44v114Ev,
  (VTBL_ENTRY)&_ZN6S784C44v115Ev,
  (VTBL_ENTRY)&_ZN6S784C44v116Ev,
  (VTBL_ENTRY)&_ZN6S784C44v117Ev,
  (VTBL_ENTRY)&_ZN6S784C44v118Ev,
  (VTBL_ENTRY)&_ZN6S784C44v119Ev,
  (VTBL_ENTRY)&_ZN6S784C44v120Ev,
  (VTBL_ENTRY)&_ZN6S784C44v121Ev,
  (VTBL_ENTRY)&_ZN6S784C44v122Ev,
  (VTBL_ENTRY)&_ZN6S784C44v123Ev,
  (VTBL_ENTRY)&_ZN6S784C44v124Ev,
  (VTBL_ENTRY)&_ZN6S784C44v125Ev,
  (VTBL_ENTRY)&_ZN6S784C44v126Ev,
};
extern VTBL_ENTRY _ZTI6S784C4[];
extern  VTBL_ENTRY _ZTV6S784C4[];
Class_Descriptor cd_S784C4 = {  "S784C4", // class name
  bases_S784C4, 1,
  &(vtc_S784C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S784C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S784C4),126, //virtual function table var
  2, // 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  S784C3  : S784C4 {
  virtual void  v127(); // _ZN6S784C34v127Ev
  virtual void  v128(); // _ZN6S784C34v128Ev
  virtual void  v129(); // _ZN6S784C34v129Ev
  virtual void  v130(); // _ZN6S784C34v130Ev
  virtual void  v131(); // _ZN6S784C34v131Ev
  virtual void  v132(); // _ZN6S784C34v132Ev
  virtual void  v133(); // _ZN6S784C34v133Ev
  virtual void  v134(); // _ZN6S784C34v134Ev
  virtual void  v135(); // _ZN6S784C34v135Ev
  virtual void  v136(); // _ZN6S784C34v136Ev
  virtual void  v137(); // _ZN6S784C34v137Ev
  virtual void  v138(); // _ZN6S784C34v138Ev
  virtual void  v139(); // _ZN6S784C34v139Ev
  virtual void  v140(); // _ZN6S784C34v140Ev
  virtual void  v141(); // _ZN6S784C34v141Ev
  virtual void  v142(); // _ZN6S784C34v142Ev
  virtual void  v143(); // _ZN6S784C34v143Ev
  virtual void  v144(); // _ZN6S784C34v144Ev
  ~S784C3(); // tgen
  S784C3(); // tgen
};
//SIG(-1 S784C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S784C3 ::v127(){vfunc_called(this, "_ZN6S784C34v127Ev");}
void  S784C3 ::v128(){vfunc_called(this, "_ZN6S784C34v128Ev");}
void  S784C3 ::v129(){vfunc_called(this, "_ZN6S784C34v129Ev");}
void  S784C3 ::v130(){vfunc_called(this, "_ZN6S784C34v130Ev");}
void  S784C3 ::v131(){vfunc_called(this, "_ZN6S784C34v131Ev");}
void  S784C3 ::v132(){vfunc_called(this, "_ZN6S784C34v132Ev");}
void  S784C3 ::v133(){vfunc_called(this, "_ZN6S784C34v133Ev");}
void  S784C3 ::v134(){vfunc_called(this, "_ZN6S784C34v134Ev");}
void  S784C3 ::v135(){vfunc_called(this, "_ZN6S784C34v135Ev");}
void  S784C3 ::v136(){vfunc_called(this, "_ZN6S784C34v136Ev");}
void  S784C3 ::v137(){vfunc_called(this, "_ZN6S784C34v137Ev");}
void  S784C3 ::v138(){vfunc_called(this, "_ZN6S784C34v138Ev");}
void  S784C3 ::v139(){vfunc_called(this, "_ZN6S784C34v139Ev");}
void  S784C3 ::v140(){vfunc_called(this, "_ZN6S784C34v140Ev");}
void  S784C3 ::v141(){vfunc_called(this, "_ZN6S784C34v141Ev");}
void  S784C3 ::v142(){vfunc_called(this, "_ZN6S784C34v142Ev");}
void  S784C3 ::v143(){vfunc_called(this, "_ZN6S784C34v143Ev");}
void  S784C3 ::v144(){vfunc_called(this, "_ZN6S784C34v144Ev");}
S784C3 ::~S784C3(){ note_dtor("S784C3", this);} // tgen
S784C3 ::S784C3(){ note_ctor("S784C3", this);} // tgen

static void Test_S784C3()
{
  extern Class_Descriptor cd_S784C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S784C3, buf);
    S784C3 *dp, &lv = *(dp=new (buf) S784C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S784C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S784C3)");
    check_base_class_offset(lv, (S785C5_nt*)(S784C4*), 0, "S784C3");
    check_base_class_offset(lv, (S784C4*), 0, "S784C3");
    test_class_info(&lv, &cd_S784C3);
    dp->~S784C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS784C3(Test_S784C3, "S784C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S784C3C1Ev();
extern void _ZN6S784C3D1Ev();
Name_Map name_map_S784C3[] = {
  NSPAIR(_ZN6S784C3C1Ev),
  NSPAIR(_ZN6S784C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S784C4;
extern VTBL_ENTRY _ZTI6S784C4[];
extern  VTBL_ENTRY _ZTV6S784C4[];
static Base_Class bases_S784C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S784C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S784C3[];
extern void _ZN6S784C3D1Ev();
extern void _ZN6S784C3D0Ev();
extern void _ZN6S784C42v5Ev();
extern void _ZN6S784C42v6Ev();
extern void _ZN6S784C42v7Ev();
extern void _ZN6S784C42v8Ev();
extern void _ZN6S784C42v9Ev();
extern void _ZN6S784C43v10Ev();
extern void _ZN6S784C43v11Ev();
extern void _ZN6S784C43v12Ev();
extern void _ZN6S784C43v13Ev();
extern void _ZN6S784C43v14Ev();
extern void _ZN6S784C43v15Ev();
extern void _ZN6S784C43v16Ev();
extern void _ZN6S784C43v17Ev();
extern void _ZN6S784C43v18Ev();
extern void _ZN6S784C43v19Ev();
extern void _ZN6S784C43v20Ev();
extern void _ZN6S784C43v21Ev();
extern void _ZN6S784C43v22Ev();
extern void _ZN6S784C43v23Ev();
extern void _ZN6S784C43v24Ev();
extern void _ZN6S784C43v25Ev();
extern void _ZN6S784C43v26Ev();
extern void _ZN6S784C43v27Ev();
extern void _ZN6S784C43v28Ev();
extern void _ZN6S784C43v29Ev();
extern void _ZN6S784C43v30Ev();
extern void _ZN6S784C43v31Ev();
extern void _ZN6S784C43v32Ev();
extern void _ZN6S784C43v33Ev();
extern void _ZN6S784C43v34Ev();
extern void _ZN6S784C43v35Ev();
extern void _ZN6S784C43v36Ev();
extern void _ZN6S784C43v37Ev();
extern void _ZN6S784C43v38Ev();
extern void _ZN6S784C43v39Ev();
extern void _ZN6S784C43v40Ev();
extern void _ZN6S784C43v41Ev();
extern void _ZN6S784C43v42Ev();
extern void _ZN6S784C43v43Ev();
extern void _ZN6S784C43v44Ev();
extern void _ZN6S784C43v45Ev();
extern void _ZN6S784C43v46Ev();
extern void _ZN6S784C43v47Ev();
extern void _ZN6S784C43v48Ev();
extern void _ZN6S784C43v49Ev();
extern void _ZN6S784C43v50Ev();
extern void _ZN6S784C43v51Ev();
extern void _ZN6S784C43v52Ev();
extern void _ZN6S784C43v53Ev();
extern void _ZN6S784C43v54Ev();
extern void _ZN6S784C43v55Ev();
extern void _ZN6S784C43v56Ev();
extern void _ZN6S784C43v57Ev();
extern void _ZN6S784C43v58Ev();
extern void _ZN6S784C43v59Ev();
extern void _ZN6S784C43v60Ev();
extern void _ZN6S784C43v61Ev();
extern void _ZN6S784C43v62Ev();
extern void _ZN6S784C43v63Ev();
extern void _ZN6S784C43v64Ev();
extern void _ZN6S784C43v65Ev();
extern void _ZN6S784C43v66Ev();
extern void _ZN6S784C43v67Ev();
extern void _ZN6S784C43v68Ev();
extern void _ZN6S784C43v69Ev();
extern void _ZN6S784C43v70Ev();
extern void _ZN6S784C43v71Ev();
extern void _ZN6S784C43v72Ev();
extern void _ZN6S784C43v73Ev();
extern void _ZN6S784C43v74Ev();
extern void _ZN6S784C43v75Ev();
extern void _ZN6S784C43v76Ev();
extern void _ZN6S784C43v77Ev();
extern void _ZN6S784C43v78Ev();
extern void _ZN6S784C43v79Ev();
extern void _ZN6S784C43v80Ev();
extern void _ZN6S784C43v81Ev();
extern void _ZN6S784C43v82Ev();
extern void _ZN6S784C43v83Ev();
extern void _ZN6S784C43v84Ev();
extern void _ZN6S784C43v85Ev();
extern void _ZN6S784C43v86Ev();
extern void _ZN6S784C43v87Ev();
extern void _ZN6S784C43v88Ev();
extern void _ZN6S784C43v89Ev();
extern void _ZN6S784C43v90Ev();
extern void _ZN6S784C43v91Ev();
extern void _ZN6S784C43v92Ev();
extern void _ZN6S784C43v93Ev();
extern void _ZN6S784C43v94Ev();
extern void _ZN6S784C43v95Ev();
extern void _ZN6S784C43v96Ev();
extern void _ZN6S784C43v97Ev();
extern void _ZN6S784C43v98Ev();
extern void _ZN6S784C43v99Ev();
extern void _ZN6S784C44v100Ev();
extern void _ZN6S784C44v101Ev();
extern void _ZN6S784C44v102Ev();
extern void _ZN6S784C44v103Ev();
extern void _ZN6S784C44v104Ev();
extern void _ZN6S784C44v105Ev();
extern void _ZN6S784C44v106Ev();
extern void _ZN6S784C44v107Ev();
extern void _ZN6S784C44v108Ev();
extern void _ZN6S784C44v109Ev();
extern void _ZN6S784C44v110Ev();
extern void _ZN6S784C44v111Ev();
extern void _ZN6S784C44v112Ev();
extern void _ZN6S784C44v113Ev();
extern void _ZN6S784C44v114Ev();
extern void _ZN6S784C44v115Ev();
extern void _ZN6S784C44v116Ev();
extern void _ZN6S784C44v117Ev();
extern void _ZN6S784C44v118Ev();
extern void _ZN6S784C44v119Ev();
extern void _ZN6S784C44v120Ev();
extern void _ZN6S784C44v121Ev();
extern void _ZN6S784C44v122Ev();
extern void _ZN6S784C44v123Ev();
extern void _ZN6S784C44v124Ev();
extern void _ZN6S784C44v125Ev();
extern void _ZN6S784C44v126Ev();
extern void _ZN6S784C34v127Ev();
extern void _ZN6S784C34v128Ev();
extern void _ZN6S784C34v129Ev();
extern void _ZN6S784C34v130Ev();
extern void _ZN6S784C34v131Ev();
extern void _ZN6S784C34v132Ev();
extern void _ZN6S784C34v133Ev();
extern void _ZN6S784C34v134Ev();
extern void _ZN6S784C34v135Ev();
extern void _ZN6S784C34v136Ev();
extern void _ZN6S784C34v137Ev();
extern void _ZN6S784C34v138Ev();
extern void _ZN6S784C34v139Ev();
extern void _ZN6S784C34v140Ev();
extern void _ZN6S784C34v141Ev();
extern void _ZN6S784C34v142Ev();
extern void _ZN6S784C34v143Ev();
extern void _ZN6S784C34v144Ev();
static  VTBL_ENTRY vtc_S784C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S784C3[0]),
  (VTBL_ENTRY)&_ZN6S784C3D1Ev,
  (VTBL_ENTRY)&_ZN6S784C3D0Ev,
  (VTBL_ENTRY)&_ZN6S784C42v5Ev,
  (VTBL_ENTRY)&_ZN6S784C42v6Ev,
  (VTBL_ENTRY)&_ZN6S784C42v7Ev,
  (VTBL_ENTRY)&_ZN6S784C42v8Ev,
  (VTBL_ENTRY)&_ZN6S784C42v9Ev,
  (VTBL_ENTRY)&_ZN6S784C43v10Ev,
  (VTBL_ENTRY)&_ZN6S784C43v11Ev,
  (VTBL_ENTRY)&_ZN6S784C43v12Ev,
  (VTBL_ENTRY)&_ZN6S784C43v13Ev,
  (VTBL_ENTRY)&_ZN6S784C43v14Ev,
  (VTBL_ENTRY)&_ZN6S784C43v15Ev,
  (VTBL_ENTRY)&_ZN6S784C43v16Ev,
  (VTBL_ENTRY)&_ZN6S784C43v17Ev,
  (VTBL_ENTRY)&_ZN6S784C43v18Ev,
  (VTBL_ENTRY)&_ZN6S784C43v19Ev,
  (VTBL_ENTRY)&_ZN6S784C43v20Ev,
  (VTBL_ENTRY)&_ZN6S784C43v21Ev,
  (VTBL_ENTRY)&_ZN6S784C43v22Ev,
  (VTBL_ENTRY)&_ZN6S784C43v23Ev,
  (VTBL_ENTRY)&_ZN6S784C43v24Ev,
  (VTBL_ENTRY)&_ZN6S784C43v25Ev,
  (VTBL_ENTRY)&_ZN6S784C43v26Ev,
  (VTBL_ENTRY)&_ZN6S784C43v27Ev,
  (VTBL_ENTRY)&_ZN6S784C43v28Ev,
  (VTBL_ENTRY)&_ZN6S784C43v29Ev,
  (VTBL_ENTRY)&_ZN6S784C43v30Ev,
  (VTBL_ENTRY)&_ZN6S784C43v31Ev,
  (VTBL_ENTRY)&_ZN6S784C43v32Ev,
  (VTBL_ENTRY)&_ZN6S784C43v33Ev,
  (VTBL_ENTRY)&_ZN6S784C43v34Ev,
  (VTBL_ENTRY)&_ZN6S784C43v35Ev,
  (VTBL_ENTRY)&_ZN6S784C43v36Ev,
  (VTBL_ENTRY)&_ZN6S784C43v37Ev,
  (VTBL_ENTRY)&_ZN6S784C43v38Ev,
  (VTBL_ENTRY)&_ZN6S784C43v39Ev,
  (VTBL_ENTRY)&_ZN6S784C43v40Ev,
  (VTBL_ENTRY)&_ZN6S784C43v41Ev,
  (VTBL_ENTRY)&_ZN6S784C43v42Ev,
  (VTBL_ENTRY)&_ZN6S784C43v43Ev,
  (VTBL_ENTRY)&_ZN6S784C43v44Ev,
  (VTBL_ENTRY)&_ZN6S784C43v45Ev,
  (VTBL_ENTRY)&_ZN6S784C43v46Ev,
  (VTBL_ENTRY)&_ZN6S784C43v47Ev,
  (VTBL_ENTRY)&_ZN6S784C43v48Ev,
  (VTBL_ENTRY)&_ZN6S784C43v49Ev,
  (VTBL_ENTRY)&_ZN6S784C43v50Ev,
  (VTBL_ENTRY)&_ZN6S784C43v51Ev,
  (VTBL_ENTRY)&_ZN6S784C43v52Ev,
  (VTBL_ENTRY)&_ZN6S784C43v53Ev,
  (VTBL_ENTRY)&_ZN6S784C43v54Ev,
  (VTBL_ENTRY)&_ZN6S784C43v55Ev,
  (VTBL_ENTRY)&_ZN6S784C43v56Ev,
  (VTBL_ENTRY)&_ZN6S784C43v57Ev,
  (VTBL_ENTRY)&_ZN6S784C43v58Ev,
  (VTBL_ENTRY)&_ZN6S784C43v59Ev,
  (VTBL_ENTRY)&_ZN6S784C43v60Ev,
  (VTBL_ENTRY)&_ZN6S784C43v61Ev,
  (VTBL_ENTRY)&_ZN6S784C43v62Ev,
  (VTBL_ENTRY)&_ZN6S784C43v63Ev,
  (VTBL_ENTRY)&_ZN6S784C43v64Ev,
  (VTBL_ENTRY)&_ZN6S784C43v65Ev,
  (VTBL_ENTRY)&_ZN6S784C43v66Ev,
  (VTBL_ENTRY)&_ZN6S784C43v67Ev,
  (VTBL_ENTRY)&_ZN6S784C43v68Ev,
  (VTBL_ENTRY)&_ZN6S784C43v69Ev,
  (VTBL_ENTRY)&_ZN6S784C43v70Ev,
  (VTBL_ENTRY)&_ZN6S784C43v71Ev,
  (VTBL_ENTRY)&_ZN6S784C43v72Ev,
  (VTBL_ENTRY)&_ZN6S784C43v73Ev,
  (VTBL_ENTRY)&_ZN6S784C43v74Ev,
  (VTBL_ENTRY)&_ZN6S784C43v75Ev,
  (VTBL_ENTRY)&_ZN6S784C43v76Ev,
  (VTBL_ENTRY)&_ZN6S784C43v77Ev,
  (VTBL_ENTRY)&_ZN6S784C43v78Ev,
  (VTBL_ENTRY)&_ZN6S784C43v79Ev,
  (VTBL_ENTRY)&_ZN6S784C43v80Ev,
  (VTBL_ENTRY)&_ZN6S784C43v81Ev,
  (VTBL_ENTRY)&_ZN6S784C43v82Ev,
  (VTBL_ENTRY)&_ZN6S784C43v83Ev,
  (VTBL_ENTRY)&_ZN6S784C43v84Ev,
  (VTBL_ENTRY)&_ZN6S784C43v85Ev,
  (VTBL_ENTRY)&_ZN6S784C43v86Ev,
  (VTBL_ENTRY)&_ZN6S784C43v87Ev,
  (VTBL_ENTRY)&_ZN6S784C43v88Ev,
  (VTBL_ENTRY)&_ZN6S784C43v89Ev,
  (VTBL_ENTRY)&_ZN6S784C43v90Ev,
  (VTBL_ENTRY)&_ZN6S784C43v91Ev,
  (VTBL_ENTRY)&_ZN6S784C43v92Ev,
  (VTBL_ENTRY)&_ZN6S784C43v93Ev,
  (VTBL_ENTRY)&_ZN6S784C43v94Ev,
  (VTBL_ENTRY)&_ZN6S784C43v95Ev,
  (VTBL_ENTRY)&_ZN6S784C43v96Ev,
  (VTBL_ENTRY)&_ZN6S784C43v97Ev,
  (VTBL_ENTRY)&_ZN6S784C43v98Ev,
  (VTBL_ENTRY)&_ZN6S784C43v99Ev,
  (VTBL_ENTRY)&_ZN6S784C44v100Ev,
  (VTBL_ENTRY)&_ZN6S784C44v101Ev,
  (VTBL_ENTRY)&_ZN6S784C44v102Ev,
  (VTBL_ENTRY)&_ZN6S784C44v103Ev,
  (VTBL_ENTRY)&_ZN6S784C44v104Ev,
  (VTBL_ENTRY)&_ZN6S784C44v105Ev,
  (VTBL_ENTRY)&_ZN6S784C44v106Ev,
  (VTBL_ENTRY)&_ZN6S784C44v107Ev,
  (VTBL_ENTRY)&_ZN6S784C44v108Ev,
  (VTBL_ENTRY)&_ZN6S784C44v109Ev,
  (VTBL_ENTRY)&_ZN6S784C44v110Ev,
  (VTBL_ENTRY)&_ZN6S784C44v111Ev,
  (VTBL_ENTRY)&_ZN6S784C44v112Ev,
  (VTBL_ENTRY)&_ZN6S784C44v113Ev,
  (VTBL_ENTRY)&_ZN6S784C44v114Ev,
  (VTBL_ENTRY)&_ZN6S784C44v115Ev,
  (VTBL_ENTRY)&_ZN6S784C44v116Ev,
  (VTBL_ENTRY)&_ZN6S784C44v117Ev,
  (VTBL_ENTRY)&_ZN6S784C44v118Ev,
  (VTBL_ENTRY)&_ZN6S784C44v119Ev,
  (VTBL_ENTRY)&_ZN6S784C44v120Ev,
  (VTBL_ENTRY)&_ZN6S784C44v121Ev,
  (VTBL_ENTRY)&_ZN6S784C44v122Ev,
  (VTBL_ENTRY)&_ZN6S784C44v123Ev,
  (VTBL_ENTRY)&_ZN6S784C44v124Ev,
  (VTBL_ENTRY)&_ZN6S784C44v125Ev,
  (VTBL_ENTRY)&_ZN6S784C44v126Ev,
  (VTBL_ENTRY)&_ZN6S784C34v127Ev,
  (VTBL_ENTRY)&_ZN6S784C34v128Ev,
  (VTBL_ENTRY)&_ZN6S784C34v129Ev,
  (VTBL_ENTRY)&_ZN6S784C34v130Ev,
  (VTBL_ENTRY)&_ZN6S784C34v131Ev,
  (VTBL_ENTRY)&_ZN6S784C34v132Ev,
  (VTBL_ENTRY)&_ZN6S784C34v133Ev,
  (VTBL_ENTRY)&_ZN6S784C34v134Ev,
  (VTBL_ENTRY)&_ZN6S784C34v135Ev,
  (VTBL_ENTRY)&_ZN6S784C34v136Ev,
  (VTBL_ENTRY)&_ZN6S784C34v137Ev,
  (VTBL_ENTRY)&_ZN6S784C34v138Ev,
  (VTBL_ENTRY)&_ZN6S784C34v139Ev,
  (VTBL_ENTRY)&_ZN6S784C34v140Ev,
  (VTBL_ENTRY)&_ZN6S784C34v141Ev,
  (VTBL_ENTRY)&_ZN6S784C34v142Ev,
  (VTBL_ENTRY)&_ZN6S784C34v143Ev,
  (VTBL_ENTRY)&_ZN6S784C34v144Ev,
};
extern VTBL_ENTRY _ZTI6S784C3[];
extern  VTBL_ENTRY _ZTV6S784C3[];
Class_Descriptor cd_S784C3 = {  "S784C3", // class name
  bases_S784C3, 2,
  &(vtc_S784C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S784C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S784C3),144, //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  S784C2  : S784C3 {
  virtual void  v145(); // _ZN6S784C24v145Ev
  ~S784C2(); // tgen
  S784C2(); // tgen
};
//SIG(-1 S784C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


void  S784C2 ::v145(){vfunc_called(this, "_ZN6S784C24v145Ev");}
S784C2 ::~S784C2(){ note_dtor("S784C2", this);} // tgen
S784C2 ::S784C2(){ note_ctor("S784C2", this);} // tgen

static void Test_S784C2()
{
  extern Class_Descriptor cd_S784C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S784C2, buf);
    S784C2 *dp, &lv = *(dp=new (buf) S784C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S784C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S784C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S784C4*)(S784C3*), 0, "S784C2");
    check_base_class_offset(lv, (S784C4*)(S784C3*), 0, "S784C2");
    check_base_class_offset(lv, (S784C3*), 0, "S784C2");
    test_class_info(&lv, &cd_S784C2);
    dp->~S784C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS784C2(Test_S784C2, "S784C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S784C2C1Ev();
extern void _ZN6S784C2D1Ev();
Name_Map name_map_S784C2[] = {
  NSPAIR(_ZN6S784C2C1Ev),
  NSPAIR(_ZN6S784C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S784C4;
extern VTBL_ENTRY _ZTI6S784C4[];
extern  VTBL_ENTRY _ZTV6S784C4[];
extern Class_Descriptor cd_S784C3;
extern VTBL_ENTRY _ZTI6S784C3[];
extern  VTBL_ENTRY _ZTV6S784C3[];
static Base_Class bases_S784C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S784C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S784C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S784C2[];
extern void _ZN6S784C2D1Ev();
extern void _ZN6S784C2D0Ev();
extern void _ZN6S784C42v5Ev();
extern void _ZN6S784C42v6Ev();
extern void _ZN6S784C42v7Ev();
extern void _ZN6S784C42v8Ev();
extern void _ZN6S784C42v9Ev();
extern void _ZN6S784C43v10Ev();
extern void _ZN6S784C43v11Ev();
extern void _ZN6S784C43v12Ev();
extern void _ZN6S784C43v13Ev();
extern void _ZN6S784C43v14Ev();
extern void _ZN6S784C43v15Ev();
extern void _ZN6S784C43v16Ev();
extern void _ZN6S784C43v17Ev();
extern void _ZN6S784C43v18Ev();
extern void _ZN6S784C43v19Ev();
extern void _ZN6S784C43v20Ev();
extern void _ZN6S784C43v21Ev();
extern void _ZN6S784C43v22Ev();
extern void _ZN6S784C43v23Ev();
extern void _ZN6S784C43v24Ev();
extern void _ZN6S784C43v25Ev();
extern void _ZN6S784C43v26Ev();
extern void _ZN6S784C43v27Ev();
extern void _ZN6S784C43v28Ev();
extern void _ZN6S784C43v29Ev();
extern void _ZN6S784C43v30Ev();
extern void _ZN6S784C43v31Ev();
extern void _ZN6S784C43v32Ev();
extern void _ZN6S784C43v33Ev();
extern void _ZN6S784C43v34Ev();
extern void _ZN6S784C43v35Ev();
extern void _ZN6S784C43v36Ev();
extern void _ZN6S784C43v37Ev();
extern void _ZN6S784C43v38Ev();
extern void _ZN6S784C43v39Ev();
extern void _ZN6S784C43v40Ev();
extern void _ZN6S784C43v41Ev();
extern void _ZN6S784C43v42Ev();
extern void _ZN6S784C43v43Ev();
extern void _ZN6S784C43v44Ev();
extern void _ZN6S784C43v45Ev();
extern void _ZN6S784C43v46Ev();
extern void _ZN6S784C43v47Ev();
extern void _ZN6S784C43v48Ev();
extern void _ZN6S784C43v49Ev();
extern void _ZN6S784C43v50Ev();
extern void _ZN6S784C43v51Ev();
extern void _ZN6S784C43v52Ev();
extern void _ZN6S784C43v53Ev();
extern void _ZN6S784C43v54Ev();
extern void _ZN6S784C43v55Ev();
extern void _ZN6S784C43v56Ev();
extern void _ZN6S784C43v57Ev();
extern void _ZN6S784C43v58Ev();
extern void _ZN6S784C43v59Ev();
extern void _ZN6S784C43v60Ev();
extern void _ZN6S784C43v61Ev();
extern void _ZN6S784C43v62Ev();
extern void _ZN6S784C43v63Ev();
extern void _ZN6S784C43v64Ev();
extern void _ZN6S784C43v65Ev();
extern void _ZN6S784C43v66Ev();
extern void _ZN6S784C43v67Ev();
extern void _ZN6S784C43v68Ev();
extern void _ZN6S784C43v69Ev();
extern void _ZN6S784C43v70Ev();
extern void _ZN6S784C43v71Ev();
extern void _ZN6S784C43v72Ev();
extern void _ZN6S784C43v73Ev();
extern void _ZN6S784C43v74Ev();
extern void _ZN6S784C43v75Ev();
extern void _ZN6S784C43v76Ev();
extern void _ZN6S784C43v77Ev();
extern void _ZN6S784C43v78Ev();
extern void _ZN6S784C43v79Ev();
extern void _ZN6S784C43v80Ev();
extern void _ZN6S784C43v81Ev();
extern void _ZN6S784C43v82Ev();
extern void _ZN6S784C43v83Ev();
extern void _ZN6S784C43v84Ev();
extern void _ZN6S784C43v85Ev();
extern void _ZN6S784C43v86Ev();
extern void _ZN6S784C43v87Ev();
extern void _ZN6S784C43v88Ev();
extern void _ZN6S784C43v89Ev();
extern void _ZN6S784C43v90Ev();
extern void _ZN6S784C43v91Ev();
extern void _ZN6S784C43v92Ev();
extern void _ZN6S784C43v93Ev();
extern void _ZN6S784C43v94Ev();
extern void _ZN6S784C43v95Ev();
extern void _ZN6S784C43v96Ev();
extern void _ZN6S784C43v97Ev();
extern void _ZN6S784C43v98Ev();
extern void _ZN6S784C43v99Ev();
extern void _ZN6S784C44v100Ev();
extern void _ZN6S784C44v101Ev();
extern void _ZN6S784C44v102Ev();
extern void _ZN6S784C44v103Ev();
extern void _ZN6S784C44v104Ev();
extern void _ZN6S784C44v105Ev();
extern void _ZN6S784C44v106Ev();
extern void _ZN6S784C44v107Ev();
extern void _ZN6S784C44v108Ev();
extern void _ZN6S784C44v109Ev();
extern void _ZN6S784C44v110Ev();
extern void _ZN6S784C44v111Ev();
extern void _ZN6S784C44v112Ev();
extern void _ZN6S784C44v113Ev();
extern void _ZN6S784C44v114Ev();
extern void _ZN6S784C44v115Ev();
extern void _ZN6S784C44v116Ev();
extern void _ZN6S784C44v117Ev();
extern void _ZN6S784C44v118Ev();
extern void _ZN6S784C44v119Ev();
extern void _ZN6S784C44v120Ev();
extern void _ZN6S784C44v121Ev();
extern void _ZN6S784C44v122Ev();
extern void _ZN6S784C44v123Ev();
extern void _ZN6S784C44v124Ev();
extern void _ZN6S784C44v125Ev();
extern void _ZN6S784C44v126Ev();
extern void _ZN6S784C34v127Ev();
extern void _ZN6S784C34v128Ev();
extern void _ZN6S784C34v129Ev();
extern void _ZN6S784C34v130Ev();
extern void _ZN6S784C34v131Ev();
extern void _ZN6S784C34v132Ev();
extern void _ZN6S784C34v133Ev();
extern void _ZN6S784C34v134Ev();
extern void _ZN6S784C34v135Ev();
extern void _ZN6S784C34v136Ev();
extern void _ZN6S784C34v137Ev();
extern void _ZN6S784C34v138Ev();
extern void _ZN6S784C34v139Ev();
extern void _ZN6S784C34v140Ev();
extern void _ZN6S784C34v141Ev();
extern void _ZN6S784C34v142Ev();
extern void _ZN6S784C34v143Ev();
extern void _ZN6S784C34v144Ev();
extern void _ZN6S784C24v145Ev();
static  VTBL_ENTRY vtc_S784C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S784C2[0]),
  (VTBL_ENTRY)&_ZN6S784C2D1Ev,
  (VTBL_ENTRY)&_ZN6S784C2D0Ev,
  (VTBL_ENTRY)&_ZN6S784C42v5Ev,
  (VTBL_ENTRY)&_ZN6S784C42v6Ev,
  (VTBL_ENTRY)&_ZN6S784C42v7Ev,
  (VTBL_ENTRY)&_ZN6S784C42v8Ev,
  (VTBL_ENTRY)&_ZN6S784C42v9Ev,
  (VTBL_ENTRY)&_ZN6S784C43v10Ev,
  (VTBL_ENTRY)&_ZN6S784C43v11Ev,
  (VTBL_ENTRY)&_ZN6S784C43v12Ev,
  (VTBL_ENTRY)&_ZN6S784C43v13Ev,
  (VTBL_ENTRY)&_ZN6S784C43v14Ev,
  (VTBL_ENTRY)&_ZN6S784C43v15Ev,
  (VTBL_ENTRY)&_ZN6S784C43v16Ev,
  (VTBL_ENTRY)&_ZN6S784C43v17Ev,
  (VTBL_ENTRY)&_ZN6S784C43v18Ev,
  (VTBL_ENTRY)&_ZN6S784C43v19Ev,
  (VTBL_ENTRY)&_ZN6S784C43v20Ev,
  (VTBL_ENTRY)&_ZN6S784C43v21Ev,
  (VTBL_ENTRY)&_ZN6S784C43v22Ev,
  (VTBL_ENTRY)&_ZN6S784C43v23Ev,
  (VTBL_ENTRY)&_ZN6S784C43v24Ev,
  (VTBL_ENTRY)&_ZN6S784C43v25Ev,
  (VTBL_ENTRY)&_ZN6S784C43v26Ev,
  (VTBL_ENTRY)&_ZN6S784C43v27Ev,
  (VTBL_ENTRY)&_ZN6S784C43v28Ev,
  (VTBL_ENTRY)&_ZN6S784C43v29Ev,
  (VTBL_ENTRY)&_ZN6S784C43v30Ev,
  (VTBL_ENTRY)&_ZN6S784C43v31Ev,
  (VTBL_ENTRY)&_ZN6S784C43v32Ev,
  (VTBL_ENTRY)&_ZN6S784C43v33Ev,
  (VTBL_ENTRY)&_ZN6S784C43v34Ev,
  (VTBL_ENTRY)&_ZN6S784C43v35Ev,
  (VTBL_ENTRY)&_ZN6S784C43v36Ev,
  (VTBL_ENTRY)&_ZN6S784C43v37Ev,
  (VTBL_ENTRY)&_ZN6S784C43v38Ev,
  (VTBL_ENTRY)&_ZN6S784C43v39Ev,
  (VTBL_ENTRY)&_ZN6S784C43v40Ev,
  (VTBL_ENTRY)&_ZN6S784C43v41Ev,
  (VTBL_ENTRY)&_ZN6S784C43v42Ev,
  (VTBL_ENTRY)&_ZN6S784C43v43Ev,
  (VTBL_ENTRY)&_ZN6S784C43v44Ev,
  (VTBL_ENTRY)&_ZN6S784C43v45Ev,
  (VTBL_ENTRY)&_ZN6S784C43v46Ev,
  (VTBL_ENTRY)&_ZN6S784C43v47Ev,
  (VTBL_ENTRY)&_ZN6S784C43v48Ev,
  (VTBL_ENTRY)&_ZN6S784C43v49Ev,
  (VTBL_ENTRY)&_ZN6S784C43v50Ev,
  (VTBL_ENTRY)&_ZN6S784C43v51Ev,
  (VTBL_ENTRY)&_ZN6S784C43v52Ev,
  (VTBL_ENTRY)&_ZN6S784C43v53Ev,
  (VTBL_ENTRY)&_ZN6S784C43v54Ev,
  (VTBL_ENTRY)&_ZN6S784C43v55Ev,
  (VTBL_ENTRY)&_ZN6S784C43v56Ev,
  (VTBL_ENTRY)&_ZN6S784C43v57Ev,
  (VTBL_ENTRY)&_ZN6S784C43v58Ev,
  (VTBL_ENTRY)&_ZN6S784C43v59Ev,
  (VTBL_ENTRY)&_ZN6S784C43v60Ev,
  (VTBL_ENTRY)&_ZN6S784C43v61Ev,
  (VTBL_ENTRY)&_ZN6S784C43v62Ev,
  (VTBL_ENTRY)&_ZN6S784C43v63Ev,
  (VTBL_ENTRY)&_ZN6S784C43v64Ev,
  (VTBL_ENTRY)&_ZN6S784C43v65Ev,
  (VTBL_ENTRY)&_ZN6S784C43v66Ev,
  (VTBL_ENTRY)&_ZN6S784C43v67Ev,
  (VTBL_ENTRY)&_ZN6S784C43v68Ev,
  (VTBL_ENTRY)&_ZN6S784C43v69Ev,
  (VTBL_ENTRY)&_ZN6S784C43v70Ev,
  (VTBL_ENTRY)&_ZN6S784C43v71Ev,
  (VTBL_ENTRY)&_ZN6S784C43v72Ev,
  (VTBL_ENTRY)&_ZN6S784C43v73Ev,
  (VTBL_ENTRY)&_ZN6S784C43v74Ev,
  (VTBL_ENTRY)&_ZN6S784C43v75Ev,
  (VTBL_ENTRY)&_ZN6S784C43v76Ev,
  (VTBL_ENTRY)&_ZN6S784C43v77Ev,
  (VTBL_ENTRY)&_ZN6S784C43v78Ev,
  (VTBL_ENTRY)&_ZN6S784C43v79Ev,
  (VTBL_ENTRY)&_ZN6S784C43v80Ev,
  (VTBL_ENTRY)&_ZN6S784C43v81Ev,
  (VTBL_ENTRY)&_ZN6S784C43v82Ev,
  (VTBL_ENTRY)&_ZN6S784C43v83Ev,
  (VTBL_ENTRY)&_ZN6S784C43v84Ev,
  (VTBL_ENTRY)&_ZN6S784C43v85Ev,
  (VTBL_ENTRY)&_ZN6S784C43v86Ev,
  (VTBL_ENTRY)&_ZN6S784C43v87Ev,
  (VTBL_ENTRY)&_ZN6S784C43v88Ev,
  (VTBL_ENTRY)&_ZN6S784C43v89Ev,
  (VTBL_ENTRY)&_ZN6S784C43v90Ev,
  (VTBL_ENTRY)&_ZN6S784C43v91Ev,
  (VTBL_ENTRY)&_ZN6S784C43v92Ev,
  (VTBL_ENTRY)&_ZN6S784C43v93Ev,
  (VTBL_ENTRY)&_ZN6S784C43v94Ev,
  (VTBL_ENTRY)&_ZN6S784C43v95Ev,
  (VTBL_ENTRY)&_ZN6S784C43v96Ev,
  (VTBL_ENTRY)&_ZN6S784C43v97Ev,
  (VTBL_ENTRY)&_ZN6S784C43v98Ev,
  (VTBL_ENTRY)&_ZN6S784C43v99Ev,
  (VTBL_ENTRY)&_ZN6S784C44v100Ev,
  (VTBL_ENTRY)&_ZN6S784C44v101Ev,
  (VTBL_ENTRY)&_ZN6S784C44v102Ev,
  (VTBL_ENTRY)&_ZN6S784C44v103Ev,
  (VTBL_ENTRY)&_ZN6S784C44v104Ev,
  (VTBL_ENTRY)&_ZN6S784C44v105Ev,
  (VTBL_ENTRY)&_ZN6S784C44v106Ev,
  (VTBL_ENTRY)&_ZN6S784C44v107Ev,
  (VTBL_ENTRY)&_ZN6S784C44v108Ev,
  (VTBL_ENTRY)&_ZN6S784C44v109Ev,
  (VTBL_ENTRY)&_ZN6S784C44v110Ev,
  (VTBL_ENTRY)&_ZN6S784C44v111Ev,
  (VTBL_ENTRY)&_ZN6S784C44v112Ev,
  (VTBL_ENTRY)&_ZN6S784C44v113Ev,
  (VTBL_ENTRY)&_ZN6S784C44v114Ev,
  (VTBL_ENTRY)&_ZN6S784C44v115Ev,
  (VTBL_ENTRY)&_ZN6S784C44v116Ev,
  (VTBL_ENTRY)&_ZN6S784C44v117Ev,
  (VTBL_ENTRY)&_ZN6S784C44v118Ev,
  (VTBL_ENTRY)&_ZN6S784C44v119Ev,
  (VTBL_ENTRY)&_ZN6S784C44v120Ev,
  (VTBL_ENTRY)&_ZN6S784C44v121Ev,
  (VTBL_ENTRY)&_ZN6S784C44v122Ev,
  (VTBL_ENTRY)&_ZN6S784C44v123Ev,
  (VTBL_ENTRY)&_ZN6S784C44v124Ev,
  (VTBL_ENTRY)&_ZN6S784C44v125Ev,
  (VTBL_ENTRY)&_ZN6S784C44v126Ev,
  (VTBL_ENTRY)&_ZN6S784C34v127Ev,
  (VTBL_ENTRY)&_ZN6S784C34v128Ev,
  (VTBL_ENTRY)&_ZN6S784C34v129Ev,
  (VTBL_ENTRY)&_ZN6S784C34v130Ev,
  (VTBL_ENTRY)&_ZN6S784C34v131Ev,
  (VTBL_ENTRY)&_ZN6S784C34v132Ev,
  (VTBL_ENTRY)&_ZN6S784C34v133Ev,
  (VTBL_ENTRY)&_ZN6S784C34v134Ev,
  (VTBL_ENTRY)&_ZN6S784C34v135Ev,
  (VTBL_ENTRY)&_ZN6S784C34v136Ev,
  (VTBL_ENTRY)&_ZN6S784C34v137Ev,
  (VTBL_ENTRY)&_ZN6S784C34v138Ev,
  (VTBL_ENTRY)&_ZN6S784C34v139Ev,
  (VTBL_ENTRY)&_ZN6S784C34v140Ev,
  (VTBL_ENTRY)&_ZN6S784C34v141Ev,
  (VTBL_ENTRY)&_ZN6S784C34v142Ev,
  (VTBL_ENTRY)&_ZN6S784C34v143Ev,
  (VTBL_ENTRY)&_ZN6S784C34v144Ev,
  (VTBL_ENTRY)&_ZN6S784C24v145Ev,
};
extern VTBL_ENTRY _ZTI6S784C2[];
extern  VTBL_ENTRY _ZTV6S784C2[];
Class_Descriptor cd_S784C2 = {  "S784C2", // class name
  bases_S784C2, 3,
  &(vtc_S784C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S784C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S784C2),145, //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  S784C1  : S784C2 {
  virtual void  v1(); // _ZN6S784C12v1Ev
  virtual void  v2(); // _ZN6S784C12v2Ev
  virtual void  v3(); // _ZN6S784C12v3Ev
  virtual void  v4(); // _ZN6S784C12v4Ev
  ~S784C1(); // tgen
  S784C1(); // tgen
};
//SIG(1 S784C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 v144} v145} v1 v2 v3 v4}


void  S784C1 ::v1(){vfunc_called(this, "_ZN6S784C12v1Ev");}
void  S784C1 ::v2(){vfunc_called(this, "_ZN6S784C12v2Ev");}
void  S784C1 ::v3(){vfunc_called(this, "_ZN6S784C12v3Ev");}
void  S784C1 ::v4(){vfunc_called(this, "_ZN6S784C12v4Ev");}
S784C1 ::~S784C1(){ note_dtor("S784C1", this);} // tgen
S784C1 ::S784C1(){ note_ctor("S784C1", this);} // tgen

static void Test_S784C1()
{
  extern Class_Descriptor cd_S784C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S784C1, buf);
    S784C1 *dp, &lv = *(dp=new (buf) S784C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S784C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S784C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S784C4*)(S784C3*)(S784C2*), 0, "S784C1");
    check_base_class_offset(lv, (S784C4*)(S784C3*)(S784C2*), 0, "S784C1");
    check_base_class_offset(lv, (S784C3*)(S784C2*), 0, "S784C1");
    check_base_class_offset(lv, (S784C2*), 0, "S784C1");
    test_class_info(&lv, &cd_S784C1);
    dp->~S784C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS784C1(Test_S784C1, "S784C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S784C1C1Ev();
extern void _ZN6S784C1D1Ev();
Name_Map name_map_S784C1[] = {
  NSPAIR(_ZN6S784C1C1Ev),
  NSPAIR(_ZN6S784C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S784C4;
extern VTBL_ENTRY _ZTI6S784C4[];
extern  VTBL_ENTRY _ZTV6S784C4[];
extern Class_Descriptor cd_S784C3;
extern VTBL_ENTRY _ZTI6S784C3[];
extern  VTBL_ENTRY _ZTV6S784C3[];
extern Class_Descriptor cd_S784C2;
extern VTBL_ENTRY _ZTI6S784C2[];
extern  VTBL_ENTRY _ZTV6S784C2[];
static Base_Class bases_S784C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S784C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S784C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S784C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S784C1[];
extern void _ZN6S784C1D1Ev();
extern void _ZN6S784C1D0Ev();
extern void _ZN6S784C42v5Ev();
extern void _ZN6S784C42v6Ev();
extern void _ZN6S784C42v7Ev();
extern void _ZN6S784C42v8Ev();
extern void _ZN6S784C42v9Ev();
extern void _ZN6S784C43v10Ev();
extern void _ZN6S784C43v11Ev();
extern void _ZN6S784C43v12Ev();
extern void _ZN6S784C43v13Ev();
extern void _ZN6S784C43v14Ev();
extern void _ZN6S784C43v15Ev();
extern void _ZN6S784C43v16Ev();
extern void _ZN6S784C43v17Ev();
extern void _ZN6S784C43v18Ev();
extern void _ZN6S784C43v19Ev();
extern void _ZN6S784C43v20Ev();
extern void _ZN6S784C43v21Ev();
extern void _ZN6S784C43v22Ev();
extern void _ZN6S784C43v23Ev();
extern void _ZN6S784C43v24Ev();
extern void _ZN6S784C43v25Ev();
extern void _ZN6S784C43v26Ev();
extern void _ZN6S784C43v27Ev();
extern void _ZN6S784C43v28Ev();
extern void _ZN6S784C43v29Ev();
extern void _ZN6S784C43v30Ev();
extern void _ZN6S784C43v31Ev();
extern void _ZN6S784C43v32Ev();
extern void _ZN6S784C43v33Ev();
extern void _ZN6S784C43v34Ev();
extern void _ZN6S784C43v35Ev();
extern void _ZN6S784C43v36Ev();
extern void _ZN6S784C43v37Ev();
extern void _ZN6S784C43v38Ev();
extern void _ZN6S784C43v39Ev();
extern void _ZN6S784C43v40Ev();
extern void _ZN6S784C43v41Ev();
extern void _ZN6S784C43v42Ev();
extern void _ZN6S784C43v43Ev();
extern void _ZN6S784C43v44Ev();
extern void _ZN6S784C43v45Ev();
extern void _ZN6S784C43v46Ev();
extern void _ZN6S784C43v47Ev();
extern void _ZN6S784C43v48Ev();
extern void _ZN6S784C43v49Ev();
extern void _ZN6S784C43v50Ev();
extern void _ZN6S784C43v51Ev();
extern void _ZN6S784C43v52Ev();
extern void _ZN6S784C43v53Ev();
extern void _ZN6S784C43v54Ev();
extern void _ZN6S784C43v55Ev();
extern void _ZN6S784C43v56Ev();
extern void _ZN6S784C43v57Ev();
extern void _ZN6S784C43v58Ev();
extern void _ZN6S784C43v59Ev();
extern void _ZN6S784C43v60Ev();
extern void _ZN6S784C43v61Ev();
extern void _ZN6S784C43v62Ev();
extern void _ZN6S784C43v63Ev();
extern void _ZN6S784C43v64Ev();
extern void _ZN6S784C43v65Ev();
extern void _ZN6S784C43v66Ev();
extern void _ZN6S784C43v67Ev();
extern void _ZN6S784C43v68Ev();
extern void _ZN6S784C43v69Ev();
extern void _ZN6S784C43v70Ev();
extern void _ZN6S784C43v71Ev();
extern void _ZN6S784C43v72Ev();
extern void _ZN6S784C43v73Ev();
extern void _ZN6S784C43v74Ev();
extern void _ZN6S784C43v75Ev();
extern void _ZN6S784C43v76Ev();
extern void _ZN6S784C43v77Ev();
extern void _ZN6S784C43v78Ev();
extern void _ZN6S784C43v79Ev();
extern void _ZN6S784C43v80Ev();
extern void _ZN6S784C43v81Ev();
extern void _ZN6S784C43v82Ev();
extern void _ZN6S784C43v83Ev();
extern void _ZN6S784C43v84Ev();
extern void _ZN6S784C43v85Ev();
extern void _ZN6S784C43v86Ev();
extern void _ZN6S784C43v87Ev();
extern void _ZN6S784C43v88Ev();
extern void _ZN6S784C43v89Ev();
extern void _ZN6S784C43v90Ev();
extern void _ZN6S784C43v91Ev();
extern void _ZN6S784C43v92Ev();
extern void _ZN6S784C43v93Ev();
extern void _ZN6S784C43v94Ev();
extern void _ZN6S784C43v95Ev();
extern void _ZN6S784C43v96Ev();
extern void _ZN6S784C43v97Ev();
extern void _ZN6S784C43v98Ev();
extern void _ZN6S784C43v99Ev();
extern void _ZN6S784C44v100Ev();
extern void _ZN6S784C44v101Ev();
extern void _ZN6S784C44v102Ev();
extern void _ZN6S784C44v103Ev();
extern void _ZN6S784C44v104Ev();
extern void _ZN6S784C44v105Ev();
extern void _ZN6S784C44v106Ev();
extern void _ZN6S784C44v107Ev();
extern void _ZN6S784C44v108Ev();
extern void _ZN6S784C44v109Ev();
extern void _ZN6S784C44v110Ev();
extern void _ZN6S784C44v111Ev();
extern void _ZN6S784C44v112Ev();
extern void _ZN6S784C44v113Ev();
extern void _ZN6S784C44v114Ev();
extern void _ZN6S784C44v115Ev();
extern void _ZN6S784C44v116Ev();
extern void _ZN6S784C44v117Ev();
extern void _ZN6S784C44v118Ev();
extern void _ZN6S784C44v119Ev();
extern void _ZN6S784C44v120Ev();
extern void _ZN6S784C44v121Ev();
extern void _ZN6S784C44v122Ev();
extern void _ZN6S784C44v123Ev();
extern void _ZN6S784C44v124Ev();
extern void _ZN6S784C44v125Ev();
extern void _ZN6S784C44v126Ev();
extern void _ZN6S784C34v127Ev();
extern void _ZN6S784C34v128Ev();
extern void _ZN6S784C34v129Ev();
extern void _ZN6S784C34v130Ev();
extern void _ZN6S784C34v131Ev();
extern void _ZN6S784C34v132Ev();
extern void _ZN6S784C34v133Ev();
extern void _ZN6S784C34v134Ev();
extern void _ZN6S784C34v135Ev();
extern void _ZN6S784C34v136Ev();
extern void _ZN6S784C34v137Ev();
extern void _ZN6S784C34v138Ev();
extern void _ZN6S784C34v139Ev();
extern void _ZN6S784C34v140Ev();
extern void _ZN6S784C34v141Ev();
extern void _ZN6S784C34v142Ev();
extern void _ZN6S784C34v143Ev();
extern void _ZN6S784C34v144Ev();
extern void _ZN6S784C24v145Ev();
extern void _ZN6S784C12v1Ev();
extern void _ZN6S784C12v2Ev();
extern void _ZN6S784C12v3Ev();
extern void _ZN6S784C12v4Ev();
static  VTBL_ENTRY vtc_S784C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S784C1[0]),
  (VTBL_ENTRY)&_ZN6S784C1D1Ev,
  (VTBL_ENTRY)&_ZN6S784C1D0Ev,
  (VTBL_ENTRY)&_ZN6S784C42v5Ev,
  (VTBL_ENTRY)&_ZN6S784C42v6Ev,
  (VTBL_ENTRY)&_ZN6S784C42v7Ev,
  (VTBL_ENTRY)&_ZN6S784C42v8Ev,
  (VTBL_ENTRY)&_ZN6S784C42v9Ev,
  (VTBL_ENTRY)&_ZN6S784C43v10Ev,
  (VTBL_ENTRY)&_ZN6S784C43v11Ev,
  (VTBL_ENTRY)&_ZN6S784C43v12Ev,
  (VTBL_ENTRY)&_ZN6S784C43v13Ev,
  (VTBL_ENTRY)&_ZN6S784C43v14Ev,
  (VTBL_ENTRY)&_ZN6S784C43v15Ev,
  (VTBL_ENTRY)&_ZN6S784C43v16Ev,
  (VTBL_ENTRY)&_ZN6S784C43v17Ev,
  (VTBL_ENTRY)&_ZN6S784C43v18Ev,
  (VTBL_ENTRY)&_ZN6S784C43v19Ev,
  (VTBL_ENTRY)&_ZN6S784C43v20Ev,
  (VTBL_ENTRY)&_ZN6S784C43v21Ev,
  (VTBL_ENTRY)&_ZN6S784C43v22Ev,
  (VTBL_ENTRY)&_ZN6S784C43v23Ev,
  (VTBL_ENTRY)&_ZN6S784C43v24Ev,
  (VTBL_ENTRY)&_ZN6S784C43v25Ev,
  (VTBL_ENTRY)&_ZN6S784C43v26Ev,
  (VTBL_ENTRY)&_ZN6S784C43v27Ev,
  (VTBL_ENTRY)&_ZN6S784C43v28Ev,
  (VTBL_ENTRY)&_ZN6S784C43v29Ev,
  (VTBL_ENTRY)&_ZN6S784C43v30Ev,
  (VTBL_ENTRY)&_ZN6S784C43v31Ev,
  (VTBL_ENTRY)&_ZN6S784C43v32Ev,
  (VTBL_ENTRY)&_ZN6S784C43v33Ev,
  (VTBL_ENTRY)&_ZN6S784C43v34Ev,
  (VTBL_ENTRY)&_ZN6S784C43v35Ev,
  (VTBL_ENTRY)&_ZN6S784C43v36Ev,
  (VTBL_ENTRY)&_ZN6S784C43v37Ev,
  (VTBL_ENTRY)&_ZN6S784C43v38Ev,
  (VTBL_ENTRY)&_ZN6S784C43v39Ev,
  (VTBL_ENTRY)&_ZN6S784C43v40Ev,
  (VTBL_ENTRY)&_ZN6S784C43v41Ev,
  (VTBL_ENTRY)&_ZN6S784C43v42Ev,
  (VTBL_ENTRY)&_ZN6S784C43v43Ev,
  (VTBL_ENTRY)&_ZN6S784C43v44Ev,
  (VTBL_ENTRY)&_ZN6S784C43v45Ev,
  (VTBL_ENTRY)&_ZN6S784C43v46Ev,
  (VTBL_ENTRY)&_ZN6S784C43v47Ev,
  (VTBL_ENTRY)&_ZN6S784C43v48Ev,
  (VTBL_ENTRY)&_ZN6S784C43v49Ev,
  (VTBL_ENTRY)&_ZN6S784C43v50Ev,
  (VTBL_ENTRY)&_ZN6S784C43v51Ev,
  (VTBL_ENTRY)&_ZN6S784C43v52Ev,
  (VTBL_ENTRY)&_ZN6S784C43v53Ev,
  (VTBL_ENTRY)&_ZN6S784C43v54Ev,
  (VTBL_ENTRY)&_ZN6S784C43v55Ev,
  (VTBL_ENTRY)&_ZN6S784C43v56Ev,
  (VTBL_ENTRY)&_ZN6S784C43v57Ev,
  (VTBL_ENTRY)&_ZN6S784C43v58Ev,
  (VTBL_ENTRY)&_ZN6S784C43v59Ev,
  (VTBL_ENTRY)&_ZN6S784C43v60Ev,
  (VTBL_ENTRY)&_ZN6S784C43v61Ev,
  (VTBL_ENTRY)&_ZN6S784C43v62Ev,
  (VTBL_ENTRY)&_ZN6S784C43v63Ev,
  (VTBL_ENTRY)&_ZN6S784C43v64Ev,
  (VTBL_ENTRY)&_ZN6S784C43v65Ev,
  (VTBL_ENTRY)&_ZN6S784C43v66Ev,
  (VTBL_ENTRY)&_ZN6S784C43v67Ev,
  (VTBL_ENTRY)&_ZN6S784C43v68Ev,
  (VTBL_ENTRY)&_ZN6S784C43v69Ev,
  (VTBL_ENTRY)&_ZN6S784C43v70Ev,
  (VTBL_ENTRY)&_ZN6S784C43v71Ev,
  (VTBL_ENTRY)&_ZN6S784C43v72Ev,
  (VTBL_ENTRY)&_ZN6S784C43v73Ev,
  (VTBL_ENTRY)&_ZN6S784C43v74Ev,
  (VTBL_ENTRY)&_ZN6S784C43v75Ev,
  (VTBL_ENTRY)&_ZN6S784C43v76Ev,
  (VTBL_ENTRY)&_ZN6S784C43v77Ev,
  (VTBL_ENTRY)&_ZN6S784C43v78Ev,
  (VTBL_ENTRY)&_ZN6S784C43v79Ev,
  (VTBL_ENTRY)&_ZN6S784C43v80Ev,
  (VTBL_ENTRY)&_ZN6S784C43v81Ev,
  (VTBL_ENTRY)&_ZN6S784C43v82Ev,
  (VTBL_ENTRY)&_ZN6S784C43v83Ev,
  (VTBL_ENTRY)&_ZN6S784C43v84Ev,
  (VTBL_ENTRY)&_ZN6S784C43v85Ev,
  (VTBL_ENTRY)&_ZN6S784C43v86Ev,
  (VTBL_ENTRY)&_ZN6S784C43v87Ev,
  (VTBL_ENTRY)&_ZN6S784C43v88Ev,
  (VTBL_ENTRY)&_ZN6S784C43v89Ev,
  (VTBL_ENTRY)&_ZN6S784C43v90Ev,
  (VTBL_ENTRY)&_ZN6S784C43v91Ev,
  (VTBL_ENTRY)&_ZN6S784C43v92Ev,
  (VTBL_ENTRY)&_ZN6S784C43v93Ev,
  (VTBL_ENTRY)&_ZN6S784C43v94Ev,
  (VTBL_ENTRY)&_ZN6S784C43v95Ev,
  (VTBL_ENTRY)&_ZN6S784C43v96Ev,
  (VTBL_ENTRY)&_ZN6S784C43v97Ev,
  (VTBL_ENTRY)&_ZN6S784C43v98Ev,
  (VTBL_ENTRY)&_ZN6S784C43v99Ev,
  (VTBL_ENTRY)&_ZN6S784C44v100Ev,
  (VTBL_ENTRY)&_ZN6S784C44v101Ev,
  (VTBL_ENTRY)&_ZN6S784C44v102Ev,
  (VTBL_ENTRY)&_ZN6S784C44v103Ev,
  (VTBL_ENTRY)&_ZN6S784C44v104Ev,
  (VTBL_ENTRY)&_ZN6S784C44v105Ev,
  (VTBL_ENTRY)&_ZN6S784C44v106Ev,
  (VTBL_ENTRY)&_ZN6S784C44v107Ev,
  (VTBL_ENTRY)&_ZN6S784C44v108Ev,
  (VTBL_ENTRY)&_ZN6S784C44v109Ev,
  (VTBL_ENTRY)&_ZN6S784C44v110Ev,
  (VTBL_ENTRY)&_ZN6S784C44v111Ev,
  (VTBL_ENTRY)&_ZN6S784C44v112Ev,
  (VTBL_ENTRY)&_ZN6S784C44v113Ev,
  (VTBL_ENTRY)&_ZN6S784C44v114Ev,
  (VTBL_ENTRY)&_ZN6S784C44v115Ev,
  (VTBL_ENTRY)&_ZN6S784C44v116Ev,
  (VTBL_ENTRY)&_ZN6S784C44v117Ev,
  (VTBL_ENTRY)&_ZN6S784C44v118Ev,
  (VTBL_ENTRY)&_ZN6S784C44v119Ev,
  (VTBL_ENTRY)&_ZN6S784C44v120Ev,
  (VTBL_ENTRY)&_ZN6S784C44v121Ev,
  (VTBL_ENTRY)&_ZN6S784C44v122Ev,
  (VTBL_ENTRY)&_ZN6S784C44v123Ev,
  (VTBL_ENTRY)&_ZN6S784C44v124Ev,
  (VTBL_ENTRY)&_ZN6S784C44v125Ev,
  (VTBL_ENTRY)&_ZN6S784C44v126Ev,
  (VTBL_ENTRY)&_ZN6S784C34v127Ev,
  (VTBL_ENTRY)&_ZN6S784C34v128Ev,
  (VTBL_ENTRY)&_ZN6S784C34v129Ev,
  (VTBL_ENTRY)&_ZN6S784C34v130Ev,
  (VTBL_ENTRY)&_ZN6S784C34v131Ev,
  (VTBL_ENTRY)&_ZN6S784C34v132Ev,
  (VTBL_ENTRY)&_ZN6S784C34v133Ev,
  (VTBL_ENTRY)&_ZN6S784C34v134Ev,
  (VTBL_ENTRY)&_ZN6S784C34v135Ev,
  (VTBL_ENTRY)&_ZN6S784C34v136Ev,
  (VTBL_ENTRY)&_ZN6S784C34v137Ev,
  (VTBL_ENTRY)&_ZN6S784C34v138Ev,
  (VTBL_ENTRY)&_ZN6S784C34v139Ev,
  (VTBL_ENTRY)&_ZN6S784C34v140Ev,
  (VTBL_ENTRY)&_ZN6S784C34v141Ev,
  (VTBL_ENTRY)&_ZN6S784C34v142Ev,
  (VTBL_ENTRY)&_ZN6S784C34v143Ev,
  (VTBL_ENTRY)&_ZN6S784C34v144Ev,
  (VTBL_ENTRY)&_ZN6S784C24v145Ev,
  (VTBL_ENTRY)&_ZN6S784C12v1Ev,
  (VTBL_ENTRY)&_ZN6S784C12v2Ev,
  (VTBL_ENTRY)&_ZN6S784C12v3Ev,
  (VTBL_ENTRY)&_ZN6S784C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S784C1[];
extern  VTBL_ENTRY _ZTV6S784C1[];
Class_Descriptor cd_S784C1 = {  "S784C1", // class name
  bases_S784C1, 4,
  &(vtc_S784C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S784C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S784C1),149, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1821C3  : S785C5_nt {
  virtual void  v6(); // _ZN7S1821C32v6Ev
  virtual void  v7(); // _ZN7S1821C32v7Ev
  virtual void  v8(); // _ZN7S1821C32v8Ev
  virtual void  v9(); // _ZN7S1821C32v9Ev
  virtual void  v10(); // _ZN7S1821C33v10Ev
  virtual void  v11(); // _ZN7S1821C33v11Ev
  virtual void  v12(); // _ZN7S1821C33v12Ev
  virtual void  v13(); // _ZN7S1821C33v13Ev
  virtual void  v14(); // _ZN7S1821C33v14Ev
  virtual void  v15(); // _ZN7S1821C33v15Ev
  virtual void  v16(); // _ZN7S1821C33v16Ev
  virtual void  v17(); // _ZN7S1821C33v17Ev
  virtual void  v18(); // _ZN7S1821C33v18Ev
  virtual void  v19(); // _ZN7S1821C33v19Ev
  virtual void  v20(); // _ZN7S1821C33v20Ev
  virtual void  v21(); // _ZN7S1821C33v21Ev
  virtual void  v22(); // _ZN7S1821C33v22Ev
  virtual void  v23(); // _ZN7S1821C33v23Ev
  virtual void  v24(); // _ZN7S1821C33v24Ev
  virtual void  v25(); // _ZN7S1821C33v25Ev
  virtual void  v26(); // _ZN7S1821C33v26Ev
  virtual void  v27(); // _ZN7S1821C33v27Ev
  virtual void  v28(); // _ZN7S1821C33v28Ev
  virtual void  v29(); // _ZN7S1821C33v29Ev
  virtual void  v30(); // _ZN7S1821C33v30Ev
  virtual void  v31(); // _ZN7S1821C33v31Ev
  virtual void  v32(); // _ZN7S1821C33v32Ev
  virtual void  v33(); // _ZN7S1821C33v33Ev
  virtual void  v34(); // _ZN7S1821C33v34Ev
  virtual void  v35(); // _ZN7S1821C33v35Ev
  virtual void  v36(); // _ZN7S1821C33v36Ev
  virtual void  v37(); // _ZN7S1821C33v37Ev
  virtual void  v38(); // _ZN7S1821C33v38Ev
  virtual void  v39(); // _ZN7S1821C33v39Ev
  virtual void  v40(); // _ZN7S1821C33v40Ev
  virtual void  v41(); // _ZN7S1821C33v41Ev
  virtual void  v42(); // _ZN7S1821C33v42Ev
  virtual void  v43(); // _ZN7S1821C33v43Ev
  virtual void  v44(); // _ZN7S1821C33v44Ev
  virtual void  v45(); // _ZN7S1821C33v45Ev
  virtual void  v46(); // _ZN7S1821C33v46Ev
  virtual void  v47(); // _ZN7S1821C33v47Ev
  virtual void  v48(); // _ZN7S1821C33v48Ev
  virtual void  v49(); // _ZN7S1821C33v49Ev
  virtual void  v50(); // _ZN7S1821C33v50Ev
  virtual void  v51(); // _ZN7S1821C33v51Ev
  virtual void  v52(); // _ZN7S1821C33v52Ev
  virtual void  v53(); // _ZN7S1821C33v53Ev
  virtual void  v54(); // _ZN7S1821C33v54Ev
  virtual void  v55(); // _ZN7S1821C33v55Ev
  virtual void  v56(); // _ZN7S1821C33v56Ev
  virtual void  v57(); // _ZN7S1821C33v57Ev
  virtual void  v58(); // _ZN7S1821C33v58Ev
  virtual void  v59(); // _ZN7S1821C33v59Ev
  virtual void  v60(); // _ZN7S1821C33v60Ev
  virtual void  v61(); // _ZN7S1821C33v61Ev
  virtual void  v62(); // _ZN7S1821C33v62Ev
  virtual void  v63(); // _ZN7S1821C33v63Ev
  virtual void  v64(); // _ZN7S1821C33v64Ev
  virtual void  v65(); // _ZN7S1821C33v65Ev
  virtual void  v66(); // _ZN7S1821C33v66Ev
  virtual void  v67(); // _ZN7S1821C33v67Ev
  virtual void  v68(); // _ZN7S1821C33v68Ev
  virtual void  v69(); // _ZN7S1821C33v69Ev
  virtual void  v70(); // _ZN7S1821C33v70Ev
  virtual void  v71(); // _ZN7S1821C33v71Ev
  virtual void  v72(); // _ZN7S1821C33v72Ev
  virtual void  v73(); // _ZN7S1821C33v73Ev
  virtual void  v74(); // _ZN7S1821C33v74Ev
  virtual void  v75(); // _ZN7S1821C33v75Ev
  virtual void  v76(); // _ZN7S1821C33v76Ev
  virtual void  v77(); // _ZN7S1821C33v77Ev
  virtual void  v78(); // _ZN7S1821C33v78Ev
  virtual void  v79(); // _ZN7S1821C33v79Ev
  virtual void  v80(); // _ZN7S1821C33v80Ev
  virtual void  v81(); // _ZN7S1821C33v81Ev
  virtual void  v82(); // _ZN7S1821C33v82Ev
  virtual void  v83(); // _ZN7S1821C33v83Ev
  virtual void  v84(); // _ZN7S1821C33v84Ev
  virtual void  v85(); // _ZN7S1821C33v85Ev
  virtual void  v86(); // _ZN7S1821C33v86Ev
  virtual void  v87(); // _ZN7S1821C33v87Ev
  virtual void  v88(); // _ZN7S1821C33v88Ev
  virtual void  v89(); // _ZN7S1821C33v89Ev
  virtual void  v90(); // _ZN7S1821C33v90Ev
  virtual void  v91(); // _ZN7S1821C33v91Ev
  virtual void  v92(); // _ZN7S1821C33v92Ev
  virtual void  v93(); // _ZN7S1821C33v93Ev
  virtual void  v94(); // _ZN7S1821C33v94Ev
  virtual void  v95(); // _ZN7S1821C33v95Ev
  virtual void  v96(); // _ZN7S1821C33v96Ev
  virtual void  v97(); // _ZN7S1821C33v97Ev
  virtual void  v98(); // _ZN7S1821C33v98Ev
  virtual void  v99(); // _ZN7S1821C33v99Ev
  virtual void  v100(); // _ZN7S1821C34v100Ev
  virtual void  v101(); // _ZN7S1821C34v101Ev
  virtual void  v102(); // _ZN7S1821C34v102Ev
  virtual void  v103(); // _ZN7S1821C34v103Ev
  virtual void  v104(); // _ZN7S1821C34v104Ev
  virtual void  v105(); // _ZN7S1821C34v105Ev
  virtual void  v106(); // _ZN7S1821C34v106Ev
  virtual void  v107(); // _ZN7S1821C34v107Ev
  virtual void  v108(); // _ZN7S1821C34v108Ev
  virtual void  v109(); // _ZN7S1821C34v109Ev
  virtual void  v110(); // _ZN7S1821C34v110Ev
  virtual void  v111(); // _ZN7S1821C34v111Ev
  virtual void  v112(); // _ZN7S1821C34v112Ev
  virtual void  v113(); // _ZN7S1821C34v113Ev
  virtual void  v114(); // _ZN7S1821C34v114Ev
  virtual void  v115(); // _ZN7S1821C34v115Ev
  virtual void  v116(); // _ZN7S1821C34v116Ev
  virtual void  v117(); // _ZN7S1821C34v117Ev
  virtual void  v118(); // _ZN7S1821C34v118Ev
  virtual void  v119(); // _ZN7S1821C34v119Ev
  virtual void  v120(); // _ZN7S1821C34v120Ev
  virtual void  v121(); // _ZN7S1821C34v121Ev
  virtual void  v122(); // _ZN7S1821C34v122Ev
  virtual void  v123(); // _ZN7S1821C34v123Ev
  virtual void  v124(); // _ZN7S1821C34v124Ev
  virtual void  v125(); // _ZN7S1821C34v125Ev
  virtual void  v126(); // _ZN7S1821C34v126Ev
  virtual void  v127(); // _ZN7S1821C34v127Ev
  ~S1821C3(); // tgen
  S1821C3(); // tgen
};
//SIG(-1 S1821C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1821C3 ::v6(){vfunc_called(this, "_ZN7S1821C32v6Ev");}
void  S1821C3 ::v7(){vfunc_called(this, "_ZN7S1821C32v7Ev");}
void  S1821C3 ::v8(){vfunc_called(this, "_ZN7S1821C32v8Ev");}
void  S1821C3 ::v9(){vfunc_called(this, "_ZN7S1821C32v9Ev");}
void  S1821C3 ::v10(){vfunc_called(this, "_ZN7S1821C33v10Ev");}
void  S1821C3 ::v11(){vfunc_called(this, "_ZN7S1821C33v11Ev");}
void  S1821C3 ::v12(){vfunc_called(this, "_ZN7S1821C33v12Ev");}
void  S1821C3 ::v13(){vfunc_called(this, "_ZN7S1821C33v13Ev");}
void  S1821C3 ::v14(){vfunc_called(this, "_ZN7S1821C33v14Ev");}
void  S1821C3 ::v15(){vfunc_called(this, "_ZN7S1821C33v15Ev");}
void  S1821C3 ::v16(){vfunc_called(this, "_ZN7S1821C33v16Ev");}
void  S1821C3 ::v17(){vfunc_called(this, "_ZN7S1821C33v17Ev");}
void  S1821C3 ::v18(){vfunc_called(this, "_ZN7S1821C33v18Ev");}
void  S1821C3 ::v19(){vfunc_called(this, "_ZN7S1821C33v19Ev");}
void  S1821C3 ::v20(){vfunc_called(this, "_ZN7S1821C33v20Ev");}
void  S1821C3 ::v21(){vfunc_called(this, "_ZN7S1821C33v21Ev");}
void  S1821C3 ::v22(){vfunc_called(this, "_ZN7S1821C33v22Ev");}
void  S1821C3 ::v23(){vfunc_called(this, "_ZN7S1821C33v23Ev");}
void  S1821C3 ::v24(){vfunc_called(this, "_ZN7S1821C33v24Ev");}
void  S1821C3 ::v25(){vfunc_called(this, "_ZN7S1821C33v25Ev");}
void  S1821C3 ::v26(){vfunc_called(this, "_ZN7S1821C33v26Ev");}
void  S1821C3 ::v27(){vfunc_called(this, "_ZN7S1821C33v27Ev");}
void  S1821C3 ::v28(){vfunc_called(this, "_ZN7S1821C33v28Ev");}
void  S1821C3 ::v29(){vfunc_called(this, "_ZN7S1821C33v29Ev");}
void  S1821C3 ::v30(){vfunc_called(this, "_ZN7S1821C33v30Ev");}
void  S1821C3 ::v31(){vfunc_called(this, "_ZN7S1821C33v31Ev");}
void  S1821C3 ::v32(){vfunc_called(this, "_ZN7S1821C33v32Ev");}
void  S1821C3 ::v33(){vfunc_called(this, "_ZN7S1821C33v33Ev");}
void  S1821C3 ::v34(){vfunc_called(this, "_ZN7S1821C33v34Ev");}
void  S1821C3 ::v35(){vfunc_called(this, "_ZN7S1821C33v35Ev");}
void  S1821C3 ::v36(){vfunc_called(this, "_ZN7S1821C33v36Ev");}
void  S1821C3 ::v37(){vfunc_called(this, "_ZN7S1821C33v37Ev");}
void  S1821C3 ::v38(){vfunc_called(this, "_ZN7S1821C33v38Ev");}
void  S1821C3 ::v39(){vfunc_called(this, "_ZN7S1821C33v39Ev");}
void  S1821C3 ::v40(){vfunc_called(this, "_ZN7S1821C33v40Ev");}
void  S1821C3 ::v41(){vfunc_called(this, "_ZN7S1821C33v41Ev");}
void  S1821C3 ::v42(){vfunc_called(this, "_ZN7S1821C33v42Ev");}
void  S1821C3 ::v43(){vfunc_called(this, "_ZN7S1821C33v43Ev");}
void  S1821C3 ::v44(){vfunc_called(this, "_ZN7S1821C33v44Ev");}
void  S1821C3 ::v45(){vfunc_called(this, "_ZN7S1821C33v45Ev");}
void  S1821C3 ::v46(){vfunc_called(this, "_ZN7S1821C33v46Ev");}
void  S1821C3 ::v47(){vfunc_called(this, "_ZN7S1821C33v47Ev");}
void  S1821C3 ::v48(){vfunc_called(this, "_ZN7S1821C33v48Ev");}
void  S1821C3 ::v49(){vfunc_called(this, "_ZN7S1821C33v49Ev");}
void  S1821C3 ::v50(){vfunc_called(this, "_ZN7S1821C33v50Ev");}
void  S1821C3 ::v51(){vfunc_called(this, "_ZN7S1821C33v51Ev");}
void  S1821C3 ::v52(){vfunc_called(this, "_ZN7S1821C33v52Ev");}
void  S1821C3 ::v53(){vfunc_called(this, "_ZN7S1821C33v53Ev");}
void  S1821C3 ::v54(){vfunc_called(this, "_ZN7S1821C33v54Ev");}
void  S1821C3 ::v55(){vfunc_called(this, "_ZN7S1821C33v55Ev");}
void  S1821C3 ::v56(){vfunc_called(this, "_ZN7S1821C33v56Ev");}
void  S1821C3 ::v57(){vfunc_called(this, "_ZN7S1821C33v57Ev");}
void  S1821C3 ::v58(){vfunc_called(this, "_ZN7S1821C33v58Ev");}
void  S1821C3 ::v59(){vfunc_called(this, "_ZN7S1821C33v59Ev");}
void  S1821C3 ::v60(){vfunc_called(this, "_ZN7S1821C33v60Ev");}
void  S1821C3 ::v61(){vfunc_called(this, "_ZN7S1821C33v61Ev");}
void  S1821C3 ::v62(){vfunc_called(this, "_ZN7S1821C33v62Ev");}
void  S1821C3 ::v63(){vfunc_called(this, "_ZN7S1821C33v63Ev");}
void  S1821C3 ::v64(){vfunc_called(this, "_ZN7S1821C33v64Ev");}
void  S1821C3 ::v65(){vfunc_called(this, "_ZN7S1821C33v65Ev");}
void  S1821C3 ::v66(){vfunc_called(this, "_ZN7S1821C33v66Ev");}
void  S1821C3 ::v67(){vfunc_called(this, "_ZN7S1821C33v67Ev");}
void  S1821C3 ::v68(){vfunc_called(this, "_ZN7S1821C33v68Ev");}
void  S1821C3 ::v69(){vfunc_called(this, "_ZN7S1821C33v69Ev");}
void  S1821C3 ::v70(){vfunc_called(this, "_ZN7S1821C33v70Ev");}
void  S1821C3 ::v71(){vfunc_called(this, "_ZN7S1821C33v71Ev");}
void  S1821C3 ::v72(){vfunc_called(this, "_ZN7S1821C33v72Ev");}
void  S1821C3 ::v73(){vfunc_called(this, "_ZN7S1821C33v73Ev");}
void  S1821C3 ::v74(){vfunc_called(this, "_ZN7S1821C33v74Ev");}
void  S1821C3 ::v75(){vfunc_called(this, "_ZN7S1821C33v75Ev");}
void  S1821C3 ::v76(){vfunc_called(this, "_ZN7S1821C33v76Ev");}
void  S1821C3 ::v77(){vfunc_called(this, "_ZN7S1821C33v77Ev");}
void  S1821C3 ::v78(){vfunc_called(this, "_ZN7S1821C33v78Ev");}
void  S1821C3 ::v79(){vfunc_called(this, "_ZN7S1821C33v79Ev");}
void  S1821C3 ::v80(){vfunc_called(this, "_ZN7S1821C33v80Ev");}
void  S1821C3 ::v81(){vfunc_called(this, "_ZN7S1821C33v81Ev");}
void  S1821C3 ::v82(){vfunc_called(this, "_ZN7S1821C33v82Ev");}
void  S1821C3 ::v83(){vfunc_called(this, "_ZN7S1821C33v83Ev");}
void  S1821C3 ::v84(){vfunc_called(this, "_ZN7S1821C33v84Ev");}
void  S1821C3 ::v85(){vfunc_called(this, "_ZN7S1821C33v85Ev");}
void  S1821C3 ::v86(){vfunc_called(this, "_ZN7S1821C33v86Ev");}
void  S1821C3 ::v87(){vfunc_called(this, "_ZN7S1821C33v87Ev");}
void  S1821C3 ::v88(){vfunc_called(this, "_ZN7S1821C33v88Ev");}
void  S1821C3 ::v89(){vfunc_called(this, "_ZN7S1821C33v89Ev");}
void  S1821C3 ::v90(){vfunc_called(this, "_ZN7S1821C33v90Ev");}
void  S1821C3 ::v91(){vfunc_called(this, "_ZN7S1821C33v91Ev");}
void  S1821C3 ::v92(){vfunc_called(this, "_ZN7S1821C33v92Ev");}
void  S1821C3 ::v93(){vfunc_called(this, "_ZN7S1821C33v93Ev");}
void  S1821C3 ::v94(){vfunc_called(this, "_ZN7S1821C33v94Ev");}
void  S1821C3 ::v95(){vfunc_called(this, "_ZN7S1821C33v95Ev");}
void  S1821C3 ::v96(){vfunc_called(this, "_ZN7S1821C33v96Ev");}
void  S1821C3 ::v97(){vfunc_called(this, "_ZN7S1821C33v97Ev");}
void  S1821C3 ::v98(){vfunc_called(this, "_ZN7S1821C33v98Ev");}
void  S1821C3 ::v99(){vfunc_called(this, "_ZN7S1821C33v99Ev");}
void  S1821C3 ::v100(){vfunc_called(this, "_ZN7S1821C34v100Ev");}
void  S1821C3 ::v101(){vfunc_called(this, "_ZN7S1821C34v101Ev");}
void  S1821C3 ::v102(){vfunc_called(this, "_ZN7S1821C34v102Ev");}
void  S1821C3 ::v103(){vfunc_called(this, "_ZN7S1821C34v103Ev");}
void  S1821C3 ::v104(){vfunc_called(this, "_ZN7S1821C34v104Ev");}
void  S1821C3 ::v105(){vfunc_called(this, "_ZN7S1821C34v105Ev");}
void  S1821C3 ::v106(){vfunc_called(this, "_ZN7S1821C34v106Ev");}
void  S1821C3 ::v107(){vfunc_called(this, "_ZN7S1821C34v107Ev");}
void  S1821C3 ::v108(){vfunc_called(this, "_ZN7S1821C34v108Ev");}
void  S1821C3 ::v109(){vfunc_called(this, "_ZN7S1821C34v109Ev");}
void  S1821C3 ::v110(){vfunc_called(this, "_ZN7S1821C34v110Ev");}
void  S1821C3 ::v111(){vfunc_called(this, "_ZN7S1821C34v111Ev");}
void  S1821C3 ::v112(){vfunc_called(this, "_ZN7S1821C34v112Ev");}
void  S1821C3 ::v113(){vfunc_called(this, "_ZN7S1821C34v113Ev");}
void  S1821C3 ::v114(){vfunc_called(this, "_ZN7S1821C34v114Ev");}
void  S1821C3 ::v115(){vfunc_called(this, "_ZN7S1821C34v115Ev");}
void  S1821C3 ::v116(){vfunc_called(this, "_ZN7S1821C34v116Ev");}
void  S1821C3 ::v117(){vfunc_called(this, "_ZN7S1821C34v117Ev");}
void  S1821C3 ::v118(){vfunc_called(this, "_ZN7S1821C34v118Ev");}
void  S1821C3 ::v119(){vfunc_called(this, "_ZN7S1821C34v119Ev");}
void  S1821C3 ::v120(){vfunc_called(this, "_ZN7S1821C34v120Ev");}
void  S1821C3 ::v121(){vfunc_called(this, "_ZN7S1821C34v121Ev");}
void  S1821C3 ::v122(){vfunc_called(this, "_ZN7S1821C34v122Ev");}
void  S1821C3 ::v123(){vfunc_called(this, "_ZN7S1821C34v123Ev");}
void  S1821C3 ::v124(){vfunc_called(this, "_ZN7S1821C34v124Ev");}
void  S1821C3 ::v125(){vfunc_called(this, "_ZN7S1821C34v125Ev");}
void  S1821C3 ::v126(){vfunc_called(this, "_ZN7S1821C34v126Ev");}
void  S1821C3 ::v127(){vfunc_called(this, "_ZN7S1821C34v127Ev");}
S1821C3 ::~S1821C3(){ note_dtor("S1821C3", this);} // tgen
S1821C3 ::S1821C3(){ note_ctor("S1821C3", this);} // tgen

static void Test_S1821C3()
{
  extern Class_Descriptor cd_S1821C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1821C3, buf);
    S1821C3 *dp, &lv = *(dp=new (buf) S1821C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1821C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1821C3)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S1821C3");
    test_class_info(&lv, &cd_S1821C3);
    dp->~S1821C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1821C3(Test_S1821C3, "S1821C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1821C3C1Ev();
extern void _ZN7S1821C3D1Ev();
Name_Map name_map_S1821C3[] = {
  NSPAIR(_ZN7S1821C3C1Ev),
  NSPAIR(_ZN7S1821C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S1821C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1821C3[];
extern void _ZN7S1821C3D1Ev();
extern void _ZN7S1821C3D0Ev();
extern void _ZN7S1821C32v6Ev();
extern void _ZN7S1821C32v7Ev();
extern void _ZN7S1821C32v8Ev();
extern void _ZN7S1821C32v9Ev();
extern void _ZN7S1821C33v10Ev();
extern void _ZN7S1821C33v11Ev();
extern void _ZN7S1821C33v12Ev();
extern void _ZN7S1821C33v13Ev();
extern void _ZN7S1821C33v14Ev();
extern void _ZN7S1821C33v15Ev();
extern void _ZN7S1821C33v16Ev();
extern void _ZN7S1821C33v17Ev();
extern void _ZN7S1821C33v18Ev();
extern void _ZN7S1821C33v19Ev();
extern void _ZN7S1821C33v20Ev();
extern void _ZN7S1821C33v21Ev();
extern void _ZN7S1821C33v22Ev();
extern void _ZN7S1821C33v23Ev();
extern void _ZN7S1821C33v24Ev();
extern void _ZN7S1821C33v25Ev();
extern void _ZN7S1821C33v26Ev();
extern void _ZN7S1821C33v27Ev();
extern void _ZN7S1821C33v28Ev();
extern void _ZN7S1821C33v29Ev();
extern void _ZN7S1821C33v30Ev();
extern void _ZN7S1821C33v31Ev();
extern void _ZN7S1821C33v32Ev();
extern void _ZN7S1821C33v33Ev();
extern void _ZN7S1821C33v34Ev();
extern void _ZN7S1821C33v35Ev();
extern void _ZN7S1821C33v36Ev();
extern void _ZN7S1821C33v37Ev();
extern void _ZN7S1821C33v38Ev();
extern void _ZN7S1821C33v39Ev();
extern void _ZN7S1821C33v40Ev();
extern void _ZN7S1821C33v41Ev();
extern void _ZN7S1821C33v42Ev();
extern void _ZN7S1821C33v43Ev();
extern void _ZN7S1821C33v44Ev();
extern void _ZN7S1821C33v45Ev();
extern void _ZN7S1821C33v46Ev();
extern void _ZN7S1821C33v47Ev();
extern void _ZN7S1821C33v48Ev();
extern void _ZN7S1821C33v49Ev();
extern void _ZN7S1821C33v50Ev();
extern void _ZN7S1821C33v51Ev();
extern void _ZN7S1821C33v52Ev();
extern void _ZN7S1821C33v53Ev();
extern void _ZN7S1821C33v54Ev();
extern void _ZN7S1821C33v55Ev();
extern void _ZN7S1821C33v56Ev();
extern void _ZN7S1821C33v57Ev();
extern void _ZN7S1821C33v58Ev();
extern void _ZN7S1821C33v59Ev();
extern void _ZN7S1821C33v60Ev();
extern void _ZN7S1821C33v61Ev();
extern void _ZN7S1821C33v62Ev();
extern void _ZN7S1821C33v63Ev();
extern void _ZN7S1821C33v64Ev();
extern void _ZN7S1821C33v65Ev();
extern void _ZN7S1821C33v66Ev();
extern void _ZN7S1821C33v67Ev();
extern void _ZN7S1821C33v68Ev();
extern void _ZN7S1821C33v69Ev();
extern void _ZN7S1821C33v70Ev();
extern void _ZN7S1821C33v71Ev();
extern void _ZN7S1821C33v72Ev();
extern void _ZN7S1821C33v73Ev();
extern void _ZN7S1821C33v74Ev();
extern void _ZN7S1821C33v75Ev();
extern void _ZN7S1821C33v76Ev();
extern void _ZN7S1821C33v77Ev();
extern void _ZN7S1821C33v78Ev();
extern void _ZN7S1821C33v79Ev();
extern void _ZN7S1821C33v80Ev();
extern void _ZN7S1821C33v81Ev();
extern void _ZN7S1821C33v82Ev();
extern void _ZN7S1821C33v83Ev();
extern void _ZN7S1821C33v84Ev();
extern void _ZN7S1821C33v85Ev();
extern void _ZN7S1821C33v86Ev();
extern void _ZN7S1821C33v87Ev();
extern void _ZN7S1821C33v88Ev();
extern void _ZN7S1821C33v89Ev();
extern void _ZN7S1821C33v90Ev();
extern void _ZN7S1821C33v91Ev();
extern void _ZN7S1821C33v92Ev();
extern void _ZN7S1821C33v93Ev();
extern void _ZN7S1821C33v94Ev();
extern void _ZN7S1821C33v95Ev();
extern void _ZN7S1821C33v96Ev();
extern void _ZN7S1821C33v97Ev();
extern void _ZN7S1821C33v98Ev();
extern void _ZN7S1821C33v99Ev();
extern void _ZN7S1821C34v100Ev();
extern void _ZN7S1821C34v101Ev();
extern void _ZN7S1821C34v102Ev();
extern void _ZN7S1821C34v103Ev();
extern void _ZN7S1821C34v104Ev();
extern void _ZN7S1821C34v105Ev();
extern void _ZN7S1821C34v106Ev();
extern void _ZN7S1821C34v107Ev();
extern void _ZN7S1821C34v108Ev();
extern void _ZN7S1821C34v109Ev();
extern void _ZN7S1821C34v110Ev();
extern void _ZN7S1821C34v111Ev();
extern void _ZN7S1821C34v112Ev();
extern void _ZN7S1821C34v113Ev();
extern void _ZN7S1821C34v114Ev();
extern void _ZN7S1821C34v115Ev();
extern void _ZN7S1821C34v116Ev();
extern void _ZN7S1821C34v117Ev();
extern void _ZN7S1821C34v118Ev();
extern void _ZN7S1821C34v119Ev();
extern void _ZN7S1821C34v120Ev();
extern void _ZN7S1821C34v121Ev();
extern void _ZN7S1821C34v122Ev();
extern void _ZN7S1821C34v123Ev();
extern void _ZN7S1821C34v124Ev();
extern void _ZN7S1821C34v125Ev();
extern void _ZN7S1821C34v126Ev();
extern void _ZN7S1821C34v127Ev();
static  VTBL_ENTRY vtc_S1821C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1821C3[0]),
  (VTBL_ENTRY)&_ZN7S1821C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1821C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v127Ev,
};
extern VTBL_ENTRY _ZTI7S1821C3[];
extern  VTBL_ENTRY _ZTV7S1821C3[];
Class_Descriptor cd_S1821C3 = {  "S1821C3", // class name
  bases_S1821C3, 1,
  &(vtc_S1821C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1821C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1821C3),126, //virtual function table var
  2, // 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  S1821C2  : S1821C3 {
  virtual void  v128(); // _ZN7S1821C24v128Ev
  virtual void  v129(); // _ZN7S1821C24v129Ev
  virtual void  v130(); // _ZN7S1821C24v130Ev
  virtual void  v131(); // _ZN7S1821C24v131Ev
  virtual void  v132(); // _ZN7S1821C24v132Ev
  virtual void  v133(); // _ZN7S1821C24v133Ev
  virtual void  v134(); // _ZN7S1821C24v134Ev
  virtual void  v135(); // _ZN7S1821C24v135Ev
  virtual void  v136(); // _ZN7S1821C24v136Ev
  virtual void  v137(); // _ZN7S1821C24v137Ev
  virtual void  v138(); // _ZN7S1821C24v138Ev
  virtual void  v139(); // _ZN7S1821C24v139Ev
  virtual void  v140(); // _ZN7S1821C24v140Ev
  virtual void  v141(); // _ZN7S1821C24v141Ev
  virtual void  v142(); // _ZN7S1821C24v142Ev
  virtual void  v143(); // _ZN7S1821C24v143Ev
  virtual void  v144(); // _ZN7S1821C24v144Ev
  virtual void  v145(); // _ZN7S1821C24v145Ev
  ~S1821C2(); // tgen
  S1821C2(); // tgen
};
//SIG(-1 S1821C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S1821C2 ::v128(){vfunc_called(this, "_ZN7S1821C24v128Ev");}
void  S1821C2 ::v129(){vfunc_called(this, "_ZN7S1821C24v129Ev");}
void  S1821C2 ::v130(){vfunc_called(this, "_ZN7S1821C24v130Ev");}
void  S1821C2 ::v131(){vfunc_called(this, "_ZN7S1821C24v131Ev");}
void  S1821C2 ::v132(){vfunc_called(this, "_ZN7S1821C24v132Ev");}
void  S1821C2 ::v133(){vfunc_called(this, "_ZN7S1821C24v133Ev");}
void  S1821C2 ::v134(){vfunc_called(this, "_ZN7S1821C24v134Ev");}
void  S1821C2 ::v135(){vfunc_called(this, "_ZN7S1821C24v135Ev");}
void  S1821C2 ::v136(){vfunc_called(this, "_ZN7S1821C24v136Ev");}
void  S1821C2 ::v137(){vfunc_called(this, "_ZN7S1821C24v137Ev");}
void  S1821C2 ::v138(){vfunc_called(this, "_ZN7S1821C24v138Ev");}
void  S1821C2 ::v139(){vfunc_called(this, "_ZN7S1821C24v139Ev");}
void  S1821C2 ::v140(){vfunc_called(this, "_ZN7S1821C24v140Ev");}
void  S1821C2 ::v141(){vfunc_called(this, "_ZN7S1821C24v141Ev");}
void  S1821C2 ::v142(){vfunc_called(this, "_ZN7S1821C24v142Ev");}
void  S1821C2 ::v143(){vfunc_called(this, "_ZN7S1821C24v143Ev");}
void  S1821C2 ::v144(){vfunc_called(this, "_ZN7S1821C24v144Ev");}
void  S1821C2 ::v145(){vfunc_called(this, "_ZN7S1821C24v145Ev");}
S1821C2 ::~S1821C2(){ note_dtor("S1821C2", this);} // tgen
S1821C2 ::S1821C2(){ note_ctor("S1821C2", this);} // tgen

static void Test_S1821C2()
{
  extern Class_Descriptor cd_S1821C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1821C2, buf);
    S1821C2 *dp, &lv = *(dp=new (buf) S1821C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1821C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1821C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S1821C3*), 0, "S1821C2");
    check_base_class_offset(lv, (S1821C3*), 0, "S1821C2");
    test_class_info(&lv, &cd_S1821C2);
    dp->~S1821C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1821C2(Test_S1821C2, "S1821C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1821C2C1Ev();
extern void _ZN7S1821C2D1Ev();
Name_Map name_map_S1821C2[] = {
  NSPAIR(_ZN7S1821C2C1Ev),
  NSPAIR(_ZN7S1821C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1821C3;
extern VTBL_ENTRY _ZTI7S1821C3[];
extern  VTBL_ENTRY _ZTV7S1821C3[];
static Base_Class bases_S1821C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1821C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1821C2[];
extern void _ZN7S1821C2D1Ev();
extern void _ZN7S1821C2D0Ev();
extern void _ZN7S1821C32v6Ev();
extern void _ZN7S1821C32v7Ev();
extern void _ZN7S1821C32v8Ev();
extern void _ZN7S1821C32v9Ev();
extern void _ZN7S1821C33v10Ev();
extern void _ZN7S1821C33v11Ev();
extern void _ZN7S1821C33v12Ev();
extern void _ZN7S1821C33v13Ev();
extern void _ZN7S1821C33v14Ev();
extern void _ZN7S1821C33v15Ev();
extern void _ZN7S1821C33v16Ev();
extern void _ZN7S1821C33v17Ev();
extern void _ZN7S1821C33v18Ev();
extern void _ZN7S1821C33v19Ev();
extern void _ZN7S1821C33v20Ev();
extern void _ZN7S1821C33v21Ev();
extern void _ZN7S1821C33v22Ev();
extern void _ZN7S1821C33v23Ev();
extern void _ZN7S1821C33v24Ev();
extern void _ZN7S1821C33v25Ev();
extern void _ZN7S1821C33v26Ev();
extern void _ZN7S1821C33v27Ev();
extern void _ZN7S1821C33v28Ev();
extern void _ZN7S1821C33v29Ev();
extern void _ZN7S1821C33v30Ev();
extern void _ZN7S1821C33v31Ev();
extern void _ZN7S1821C33v32Ev();
extern void _ZN7S1821C33v33Ev();
extern void _ZN7S1821C33v34Ev();
extern void _ZN7S1821C33v35Ev();
extern void _ZN7S1821C33v36Ev();
extern void _ZN7S1821C33v37Ev();
extern void _ZN7S1821C33v38Ev();
extern void _ZN7S1821C33v39Ev();
extern void _ZN7S1821C33v40Ev();
extern void _ZN7S1821C33v41Ev();
extern void _ZN7S1821C33v42Ev();
extern void _ZN7S1821C33v43Ev();
extern void _ZN7S1821C33v44Ev();
extern void _ZN7S1821C33v45Ev();
extern void _ZN7S1821C33v46Ev();
extern void _ZN7S1821C33v47Ev();
extern void _ZN7S1821C33v48Ev();
extern void _ZN7S1821C33v49Ev();
extern void _ZN7S1821C33v50Ev();
extern void _ZN7S1821C33v51Ev();
extern void _ZN7S1821C33v52Ev();
extern void _ZN7S1821C33v53Ev();
extern void _ZN7S1821C33v54Ev();
extern void _ZN7S1821C33v55Ev();
extern void _ZN7S1821C33v56Ev();
extern void _ZN7S1821C33v57Ev();
extern void _ZN7S1821C33v58Ev();
extern void _ZN7S1821C33v59Ev();
extern void _ZN7S1821C33v60Ev();
extern void _ZN7S1821C33v61Ev();
extern void _ZN7S1821C33v62Ev();
extern void _ZN7S1821C33v63Ev();
extern void _ZN7S1821C33v64Ev();
extern void _ZN7S1821C33v65Ev();
extern void _ZN7S1821C33v66Ev();
extern void _ZN7S1821C33v67Ev();
extern void _ZN7S1821C33v68Ev();
extern void _ZN7S1821C33v69Ev();
extern void _ZN7S1821C33v70Ev();
extern void _ZN7S1821C33v71Ev();
extern void _ZN7S1821C33v72Ev();
extern void _ZN7S1821C33v73Ev();
extern void _ZN7S1821C33v74Ev();
extern void _ZN7S1821C33v75Ev();
extern void _ZN7S1821C33v76Ev();
extern void _ZN7S1821C33v77Ev();
extern void _ZN7S1821C33v78Ev();
extern void _ZN7S1821C33v79Ev();
extern void _ZN7S1821C33v80Ev();
extern void _ZN7S1821C33v81Ev();
extern void _ZN7S1821C33v82Ev();
extern void _ZN7S1821C33v83Ev();
extern void _ZN7S1821C33v84Ev();
extern void _ZN7S1821C33v85Ev();
extern void _ZN7S1821C33v86Ev();
extern void _ZN7S1821C33v87Ev();
extern void _ZN7S1821C33v88Ev();
extern void _ZN7S1821C33v89Ev();
extern void _ZN7S1821C33v90Ev();
extern void _ZN7S1821C33v91Ev();
extern void _ZN7S1821C33v92Ev();
extern void _ZN7S1821C33v93Ev();
extern void _ZN7S1821C33v94Ev();
extern void _ZN7S1821C33v95Ev();
extern void _ZN7S1821C33v96Ev();
extern void _ZN7S1821C33v97Ev();
extern void _ZN7S1821C33v98Ev();
extern void _ZN7S1821C33v99Ev();
extern void _ZN7S1821C34v100Ev();
extern void _ZN7S1821C34v101Ev();
extern void _ZN7S1821C34v102Ev();
extern void _ZN7S1821C34v103Ev();
extern void _ZN7S1821C34v104Ev();
extern void _ZN7S1821C34v105Ev();
extern void _ZN7S1821C34v106Ev();
extern void _ZN7S1821C34v107Ev();
extern void _ZN7S1821C34v108Ev();
extern void _ZN7S1821C34v109Ev();
extern void _ZN7S1821C34v110Ev();
extern void _ZN7S1821C34v111Ev();
extern void _ZN7S1821C34v112Ev();
extern void _ZN7S1821C34v113Ev();
extern void _ZN7S1821C34v114Ev();
extern void _ZN7S1821C34v115Ev();
extern void _ZN7S1821C34v116Ev();
extern void _ZN7S1821C34v117Ev();
extern void _ZN7S1821C34v118Ev();
extern void _ZN7S1821C34v119Ev();
extern void _ZN7S1821C34v120Ev();
extern void _ZN7S1821C34v121Ev();
extern void _ZN7S1821C34v122Ev();
extern void _ZN7S1821C34v123Ev();
extern void _ZN7S1821C34v124Ev();
extern void _ZN7S1821C34v125Ev();
extern void _ZN7S1821C34v126Ev();
extern void _ZN7S1821C34v127Ev();
extern void _ZN7S1821C24v128Ev();
extern void _ZN7S1821C24v129Ev();
extern void _ZN7S1821C24v130Ev();
extern void _ZN7S1821C24v131Ev();
extern void _ZN7S1821C24v132Ev();
extern void _ZN7S1821C24v133Ev();
extern void _ZN7S1821C24v134Ev();
extern void _ZN7S1821C24v135Ev();
extern void _ZN7S1821C24v136Ev();
extern void _ZN7S1821C24v137Ev();
extern void _ZN7S1821C24v138Ev();
extern void _ZN7S1821C24v139Ev();
extern void _ZN7S1821C24v140Ev();
extern void _ZN7S1821C24v141Ev();
extern void _ZN7S1821C24v142Ev();
extern void _ZN7S1821C24v143Ev();
extern void _ZN7S1821C24v144Ev();
extern void _ZN7S1821C24v145Ev();
static  VTBL_ENTRY vtc_S1821C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1821C2[0]),
  (VTBL_ENTRY)&_ZN7S1821C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1821C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v145Ev,
};
extern VTBL_ENTRY _ZTI7S1821C2[];
extern  VTBL_ENTRY _ZTV7S1821C2[];
Class_Descriptor cd_S1821C2 = {  "S1821C2", // class name
  bases_S1821C2, 2,
  &(vtc_S1821C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1821C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1821C2),144, //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  S1821C1  : S1821C2 {
  virtual void  v1(); // _ZN7S1821C12v1Ev
  virtual void  v2(); // _ZN7S1821C12v2Ev
  virtual void  v3(); // _ZN7S1821C12v3Ev
  virtual void  v4(); // _ZN7S1821C12v4Ev
  virtual void  v5(); // _ZN7S1821C12v5Ev
  ~S1821C1(); // tgen
  S1821C1(); // tgen
};
//SIG(1 S1821C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 v144 v145} v1 v2 v3 v4 v5}


void  S1821C1 ::v1(){vfunc_called(this, "_ZN7S1821C12v1Ev");}
void  S1821C1 ::v2(){vfunc_called(this, "_ZN7S1821C12v2Ev");}
void  S1821C1 ::v3(){vfunc_called(this, "_ZN7S1821C12v3Ev");}
void  S1821C1 ::v4(){vfunc_called(this, "_ZN7S1821C12v4Ev");}
void  S1821C1 ::v5(){vfunc_called(this, "_ZN7S1821C12v5Ev");}
S1821C1 ::~S1821C1(){ note_dtor("S1821C1", this);} // tgen
S1821C1 ::S1821C1(){ note_ctor("S1821C1", this);} // tgen

static void Test_S1821C1()
{
  extern Class_Descriptor cd_S1821C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1821C1, buf);
    S1821C1 *dp, &lv = *(dp=new (buf) S1821C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1821C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1821C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S1821C3*)(S1821C2*), 0, "S1821C1");
    check_base_class_offset(lv, (S1821C3*)(S1821C2*), 0, "S1821C1");
    check_base_class_offset(lv, (S1821C2*), 0, "S1821C1");
    test_class_info(&lv, &cd_S1821C1);
    dp->~S1821C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1821C1(Test_S1821C1, "S1821C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1821C1C1Ev();
extern void _ZN7S1821C1D1Ev();
Name_Map name_map_S1821C1[] = {
  NSPAIR(_ZN7S1821C1C1Ev),
  NSPAIR(_ZN7S1821C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1821C3;
extern VTBL_ENTRY _ZTI7S1821C3[];
extern  VTBL_ENTRY _ZTV7S1821C3[];
extern Class_Descriptor cd_S1821C2;
extern VTBL_ENTRY _ZTI7S1821C2[];
extern  VTBL_ENTRY _ZTV7S1821C2[];
static Base_Class bases_S1821C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1821C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1821C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1821C1[];
extern void _ZN7S1821C1D1Ev();
extern void _ZN7S1821C1D0Ev();
extern void _ZN7S1821C32v6Ev();
extern void _ZN7S1821C32v7Ev();
extern void _ZN7S1821C32v8Ev();
extern void _ZN7S1821C32v9Ev();
extern void _ZN7S1821C33v10Ev();
extern void _ZN7S1821C33v11Ev();
extern void _ZN7S1821C33v12Ev();
extern void _ZN7S1821C33v13Ev();
extern void _ZN7S1821C33v14Ev();
extern void _ZN7S1821C33v15Ev();
extern void _ZN7S1821C33v16Ev();
extern void _ZN7S1821C33v17Ev();
extern void _ZN7S1821C33v18Ev();
extern void _ZN7S1821C33v19Ev();
extern void _ZN7S1821C33v20Ev();
extern void _ZN7S1821C33v21Ev();
extern void _ZN7S1821C33v22Ev();
extern void _ZN7S1821C33v23Ev();
extern void _ZN7S1821C33v24Ev();
extern void _ZN7S1821C33v25Ev();
extern void _ZN7S1821C33v26Ev();
extern void _ZN7S1821C33v27Ev();
extern void _ZN7S1821C33v28Ev();
extern void _ZN7S1821C33v29Ev();
extern void _ZN7S1821C33v30Ev();
extern void _ZN7S1821C33v31Ev();
extern void _ZN7S1821C33v32Ev();
extern void _ZN7S1821C33v33Ev();
extern void _ZN7S1821C33v34Ev();
extern void _ZN7S1821C33v35Ev();
extern void _ZN7S1821C33v36Ev();
extern void _ZN7S1821C33v37Ev();
extern void _ZN7S1821C33v38Ev();
extern void _ZN7S1821C33v39Ev();
extern void _ZN7S1821C33v40Ev();
extern void _ZN7S1821C33v41Ev();
extern void _ZN7S1821C33v42Ev();
extern void _ZN7S1821C33v43Ev();
extern void _ZN7S1821C33v44Ev();
extern void _ZN7S1821C33v45Ev();
extern void _ZN7S1821C33v46Ev();
extern void _ZN7S1821C33v47Ev();
extern void _ZN7S1821C33v48Ev();
extern void _ZN7S1821C33v49Ev();
extern void _ZN7S1821C33v50Ev();
extern void _ZN7S1821C33v51Ev();
extern void _ZN7S1821C33v52Ev();
extern void _ZN7S1821C33v53Ev();
extern void _ZN7S1821C33v54Ev();
extern void _ZN7S1821C33v55Ev();
extern void _ZN7S1821C33v56Ev();
extern void _ZN7S1821C33v57Ev();
extern void _ZN7S1821C33v58Ev();
extern void _ZN7S1821C33v59Ev();
extern void _ZN7S1821C33v60Ev();
extern void _ZN7S1821C33v61Ev();
extern void _ZN7S1821C33v62Ev();
extern void _ZN7S1821C33v63Ev();
extern void _ZN7S1821C33v64Ev();
extern void _ZN7S1821C33v65Ev();
extern void _ZN7S1821C33v66Ev();
extern void _ZN7S1821C33v67Ev();
extern void _ZN7S1821C33v68Ev();
extern void _ZN7S1821C33v69Ev();
extern void _ZN7S1821C33v70Ev();
extern void _ZN7S1821C33v71Ev();
extern void _ZN7S1821C33v72Ev();
extern void _ZN7S1821C33v73Ev();
extern void _ZN7S1821C33v74Ev();
extern void _ZN7S1821C33v75Ev();
extern void _ZN7S1821C33v76Ev();
extern void _ZN7S1821C33v77Ev();
extern void _ZN7S1821C33v78Ev();
extern void _ZN7S1821C33v79Ev();
extern void _ZN7S1821C33v80Ev();
extern void _ZN7S1821C33v81Ev();
extern void _ZN7S1821C33v82Ev();
extern void _ZN7S1821C33v83Ev();
extern void _ZN7S1821C33v84Ev();
extern void _ZN7S1821C33v85Ev();
extern void _ZN7S1821C33v86Ev();
extern void _ZN7S1821C33v87Ev();
extern void _ZN7S1821C33v88Ev();
extern void _ZN7S1821C33v89Ev();
extern void _ZN7S1821C33v90Ev();
extern void _ZN7S1821C33v91Ev();
extern void _ZN7S1821C33v92Ev();
extern void _ZN7S1821C33v93Ev();
extern void _ZN7S1821C33v94Ev();
extern void _ZN7S1821C33v95Ev();
extern void _ZN7S1821C33v96Ev();
extern void _ZN7S1821C33v97Ev();
extern void _ZN7S1821C33v98Ev();
extern void _ZN7S1821C33v99Ev();
extern void _ZN7S1821C34v100Ev();
extern void _ZN7S1821C34v101Ev();
extern void _ZN7S1821C34v102Ev();
extern void _ZN7S1821C34v103Ev();
extern void _ZN7S1821C34v104Ev();
extern void _ZN7S1821C34v105Ev();
extern void _ZN7S1821C34v106Ev();
extern void _ZN7S1821C34v107Ev();
extern void _ZN7S1821C34v108Ev();
extern void _ZN7S1821C34v109Ev();
extern void _ZN7S1821C34v110Ev();
extern void _ZN7S1821C34v111Ev();
extern void _ZN7S1821C34v112Ev();
extern void _ZN7S1821C34v113Ev();
extern void _ZN7S1821C34v114Ev();
extern void _ZN7S1821C34v115Ev();
extern void _ZN7S1821C34v116Ev();
extern void _ZN7S1821C34v117Ev();
extern void _ZN7S1821C34v118Ev();
extern void _ZN7S1821C34v119Ev();
extern void _ZN7S1821C34v120Ev();
extern void _ZN7S1821C34v121Ev();
extern void _ZN7S1821C34v122Ev();
extern void _ZN7S1821C34v123Ev();
extern void _ZN7S1821C34v124Ev();
extern void _ZN7S1821C34v125Ev();
extern void _ZN7S1821C34v126Ev();
extern void _ZN7S1821C34v127Ev();
extern void _ZN7S1821C24v128Ev();
extern void _ZN7S1821C24v129Ev();
extern void _ZN7S1821C24v130Ev();
extern void _ZN7S1821C24v131Ev();
extern void _ZN7S1821C24v132Ev();
extern void _ZN7S1821C24v133Ev();
extern void _ZN7S1821C24v134Ev();
extern void _ZN7S1821C24v135Ev();
extern void _ZN7S1821C24v136Ev();
extern void _ZN7S1821C24v137Ev();
extern void _ZN7S1821C24v138Ev();
extern void _ZN7S1821C24v139Ev();
extern void _ZN7S1821C24v140Ev();
extern void _ZN7S1821C24v141Ev();
extern void _ZN7S1821C24v142Ev();
extern void _ZN7S1821C24v143Ev();
extern void _ZN7S1821C24v144Ev();
extern void _ZN7S1821C24v145Ev();
extern void _ZN7S1821C12v1Ev();
extern void _ZN7S1821C12v2Ev();
extern void _ZN7S1821C12v3Ev();
extern void _ZN7S1821C12v4Ev();
extern void _ZN7S1821C12v5Ev();
static  VTBL_ENTRY vtc_S1821C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1821C1[0]),
  (VTBL_ENTRY)&_ZN7S1821C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1821C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1821C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1821C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1821C34v127Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1821C24v145Ev,
  (VTBL_ENTRY)&_ZN7S1821C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1821C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1821C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1821C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1821C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1821C1[];
extern  VTBL_ENTRY _ZTV7S1821C1[];
Class_Descriptor cd_S1821C1 = {  "S1821C1", // class name
  bases_S1821C1, 3,
  &(vtc_S1821C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1821C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1821C1),149, //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  S782C4  : S785C5_nt {
  virtual void  v4(); // _ZN6S782C42v4Ev
  virtual void  v5(); // _ZN6S782C42v5Ev
  virtual void  v6(); // _ZN6S782C42v6Ev
  virtual void  v7(); // _ZN6S782C42v7Ev
  virtual void  v8(); // _ZN6S782C42v8Ev
  virtual void  v9(); // _ZN6S782C42v9Ev
  virtual void  v10(); // _ZN6S782C43v10Ev
  virtual void  v11(); // _ZN6S782C43v11Ev
  virtual void  v12(); // _ZN6S782C43v12Ev
  virtual void  v13(); // _ZN6S782C43v13Ev
  virtual void  v14(); // _ZN6S782C43v14Ev
  virtual void  v15(); // _ZN6S782C43v15Ev
  virtual void  v16(); // _ZN6S782C43v16Ev
  virtual void  v17(); // _ZN6S782C43v17Ev
  virtual void  v18(); // _ZN6S782C43v18Ev
  virtual void  v19(); // _ZN6S782C43v19Ev
  virtual void  v20(); // _ZN6S782C43v20Ev
  virtual void  v21(); // _ZN6S782C43v21Ev
  virtual void  v22(); // _ZN6S782C43v22Ev
  virtual void  v23(); // _ZN6S782C43v23Ev
  virtual void  v24(); // _ZN6S782C43v24Ev
  virtual void  v25(); // _ZN6S782C43v25Ev
  virtual void  v26(); // _ZN6S782C43v26Ev
  virtual void  v27(); // _ZN6S782C43v27Ev
  virtual void  v28(); // _ZN6S782C43v28Ev
  virtual void  v29(); // _ZN6S782C43v29Ev
  virtual void  v30(); // _ZN6S782C43v30Ev
  virtual void  v31(); // _ZN6S782C43v31Ev
  virtual void  v32(); // _ZN6S782C43v32Ev
  virtual void  v33(); // _ZN6S782C43v33Ev
  virtual void  v34(); // _ZN6S782C43v34Ev
  virtual void  v35(); // _ZN6S782C43v35Ev
  virtual void  v36(); // _ZN6S782C43v36Ev
  virtual void  v37(); // _ZN6S782C43v37Ev
  virtual void  v38(); // _ZN6S782C43v38Ev
  virtual void  v39(); // _ZN6S782C43v39Ev
  virtual void  v40(); // _ZN6S782C43v40Ev
  virtual void  v41(); // _ZN6S782C43v41Ev
  virtual void  v42(); // _ZN6S782C43v42Ev
  virtual void  v43(); // _ZN6S782C43v43Ev
  virtual void  v44(); // _ZN6S782C43v44Ev
  virtual void  v45(); // _ZN6S782C43v45Ev
  virtual void  v46(); // _ZN6S782C43v46Ev
  virtual void  v47(); // _ZN6S782C43v47Ev
  virtual void  v48(); // _ZN6S782C43v48Ev
  virtual void  v49(); // _ZN6S782C43v49Ev
  virtual void  v50(); // _ZN6S782C43v50Ev
  virtual void  v51(); // _ZN6S782C43v51Ev
  virtual void  v52(); // _ZN6S782C43v52Ev
  virtual void  v53(); // _ZN6S782C43v53Ev
  virtual void  v54(); // _ZN6S782C43v54Ev
  virtual void  v55(); // _ZN6S782C43v55Ev
  virtual void  v56(); // _ZN6S782C43v56Ev
  virtual void  v57(); // _ZN6S782C43v57Ev
  virtual void  v58(); // _ZN6S782C43v58Ev
  virtual void  v59(); // _ZN6S782C43v59Ev
  virtual void  v60(); // _ZN6S782C43v60Ev
  virtual void  v61(); // _ZN6S782C43v61Ev
  virtual void  v62(); // _ZN6S782C43v62Ev
  virtual void  v63(); // _ZN6S782C43v63Ev
  virtual void  v64(); // _ZN6S782C43v64Ev
  virtual void  v65(); // _ZN6S782C43v65Ev
  virtual void  v66(); // _ZN6S782C43v66Ev
  virtual void  v67(); // _ZN6S782C43v67Ev
  virtual void  v68(); // _ZN6S782C43v68Ev
  virtual void  v69(); // _ZN6S782C43v69Ev
  virtual void  v70(); // _ZN6S782C43v70Ev
  virtual void  v71(); // _ZN6S782C43v71Ev
  virtual void  v72(); // _ZN6S782C43v72Ev
  virtual void  v73(); // _ZN6S782C43v73Ev
  virtual void  v74(); // _ZN6S782C43v74Ev
  virtual void  v75(); // _ZN6S782C43v75Ev
  virtual void  v76(); // _ZN6S782C43v76Ev
  virtual void  v77(); // _ZN6S782C43v77Ev
  virtual void  v78(); // _ZN6S782C43v78Ev
  virtual void  v79(); // _ZN6S782C43v79Ev
  virtual void  v80(); // _ZN6S782C43v80Ev
  virtual void  v81(); // _ZN6S782C43v81Ev
  virtual void  v82(); // _ZN6S782C43v82Ev
  virtual void  v83(); // _ZN6S782C43v83Ev
  virtual void  v84(); // _ZN6S782C43v84Ev
  virtual void  v85(); // _ZN6S782C43v85Ev
  virtual void  v86(); // _ZN6S782C43v86Ev
  virtual void  v87(); // _ZN6S782C43v87Ev
  virtual void  v88(); // _ZN6S782C43v88Ev
  virtual void  v89(); // _ZN6S782C43v89Ev
  virtual void  v90(); // _ZN6S782C43v90Ev
  virtual void  v91(); // _ZN6S782C43v91Ev
  virtual void  v92(); // _ZN6S782C43v92Ev
  virtual void  v93(); // _ZN6S782C43v93Ev
  virtual void  v94(); // _ZN6S782C43v94Ev
  virtual void  v95(); // _ZN6S782C43v95Ev
  virtual void  v96(); // _ZN6S782C43v96Ev
  virtual void  v97(); // _ZN6S782C43v97Ev
  virtual void  v98(); // _ZN6S782C43v98Ev
  virtual void  v99(); // _ZN6S782C43v99Ev
  virtual void  v100(); // _ZN6S782C44v100Ev
  virtual void  v101(); // _ZN6S782C44v101Ev
  virtual void  v102(); // _ZN6S782C44v102Ev
  virtual void  v103(); // _ZN6S782C44v103Ev
  virtual void  v104(); // _ZN6S782C44v104Ev
  virtual void  v105(); // _ZN6S782C44v105Ev
  virtual void  v106(); // _ZN6S782C44v106Ev
  virtual void  v107(); // _ZN6S782C44v107Ev
  virtual void  v108(); // _ZN6S782C44v108Ev
  virtual void  v109(); // _ZN6S782C44v109Ev
  virtual void  v110(); // _ZN6S782C44v110Ev
  virtual void  v111(); // _ZN6S782C44v111Ev
  virtual void  v112(); // _ZN6S782C44v112Ev
  virtual void  v113(); // _ZN6S782C44v113Ev
  virtual void  v114(); // _ZN6S782C44v114Ev
  virtual void  v115(); // _ZN6S782C44v115Ev
  virtual void  v116(); // _ZN6S782C44v116Ev
  virtual void  v117(); // _ZN6S782C44v117Ev
  virtual void  v118(); // _ZN6S782C44v118Ev
  virtual void  v119(); // _ZN6S782C44v119Ev
  virtual void  v120(); // _ZN6S782C44v120Ev
  virtual void  v121(); // _ZN6S782C44v121Ev
  virtual void  v122(); // _ZN6S782C44v122Ev
  virtual void  v123(); // _ZN6S782C44v123Ev
  virtual void  v124(); // _ZN6S782C44v124Ev
  virtual void  v125(); // _ZN6S782C44v125Ev
  ~S782C4(); // tgen
  S782C4(); // tgen
};
//SIG(-1 S782C4) C1{ BC2{ vd m Fp Fi} 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}


void  S782C4 ::v4(){vfunc_called(this, "_ZN6S782C42v4Ev");}
void  S782C4 ::v5(){vfunc_called(this, "_ZN6S782C42v5Ev");}
void  S782C4 ::v6(){vfunc_called(this, "_ZN6S782C42v6Ev");}
void  S782C4 ::v7(){vfunc_called(this, "_ZN6S782C42v7Ev");}
void  S782C4 ::v8(){vfunc_called(this, "_ZN6S782C42v8Ev");}
void  S782C4 ::v9(){vfunc_called(this, "_ZN6S782C42v9Ev");}
void  S782C4 ::v10(){vfunc_called(this, "_ZN6S782C43v10Ev");}
void  S782C4 ::v11(){vfunc_called(this, "_ZN6S782C43v11Ev");}
void  S782C4 ::v12(){vfunc_called(this, "_ZN6S782C43v12Ev");}
void  S782C4 ::v13(){vfunc_called(this, "_ZN6S782C43v13Ev");}
void  S782C4 ::v14(){vfunc_called(this, "_ZN6S782C43v14Ev");}
void  S782C4 ::v15(){vfunc_called(this, "_ZN6S782C43v15Ev");}
void  S782C4 ::v16(){vfunc_called(this, "_ZN6S782C43v16Ev");}
void  S782C4 ::v17(){vfunc_called(this, "_ZN6S782C43v17Ev");}
void  S782C4 ::v18(){vfunc_called(this, "_ZN6S782C43v18Ev");}
void  S782C4 ::v19(){vfunc_called(this, "_ZN6S782C43v19Ev");}
void  S782C4 ::v20(){vfunc_called(this, "_ZN6S782C43v20Ev");}
void  S782C4 ::v21(){vfunc_called(this, "_ZN6S782C43v21Ev");}
void  S782C4 ::v22(){vfunc_called(this, "_ZN6S782C43v22Ev");}
void  S782C4 ::v23(){vfunc_called(this, "_ZN6S782C43v23Ev");}
void  S782C4 ::v24(){vfunc_called(this, "_ZN6S782C43v24Ev");}
void  S782C4 ::v25(){vfunc_called(this, "_ZN6S782C43v25Ev");}
void  S782C4 ::v26(){vfunc_called(this, "_ZN6S782C43v26Ev");}
void  S782C4 ::v27(){vfunc_called(this, "_ZN6S782C43v27Ev");}
void  S782C4 ::v28(){vfunc_called(this, "_ZN6S782C43v28Ev");}
void  S782C4 ::v29(){vfunc_called(this, "_ZN6S782C43v29Ev");}
void  S782C4 ::v30(){vfunc_called(this, "_ZN6S782C43v30Ev");}
void  S782C4 ::v31(){vfunc_called(this, "_ZN6S782C43v31Ev");}
void  S782C4 ::v32(){vfunc_called(this, "_ZN6S782C43v32Ev");}
void  S782C4 ::v33(){vfunc_called(this, "_ZN6S782C43v33Ev");}
void  S782C4 ::v34(){vfunc_called(this, "_ZN6S782C43v34Ev");}
void  S782C4 ::v35(){vfunc_called(this, "_ZN6S782C43v35Ev");}
void  S782C4 ::v36(){vfunc_called(this, "_ZN6S782C43v36Ev");}
void  S782C4 ::v37(){vfunc_called(this, "_ZN6S782C43v37Ev");}
void  S782C4 ::v38(){vfunc_called(this, "_ZN6S782C43v38Ev");}
void  S782C4 ::v39(){vfunc_called(this, "_ZN6S782C43v39Ev");}
void  S782C4 ::v40(){vfunc_called(this, "_ZN6S782C43v40Ev");}
void  S782C4 ::v41(){vfunc_called(this, "_ZN6S782C43v41Ev");}
void  S782C4 ::v42(){vfunc_called(this, "_ZN6S782C43v42Ev");}
void  S782C4 ::v43(){vfunc_called(this, "_ZN6S782C43v43Ev");}
void  S782C4 ::v44(){vfunc_called(this, "_ZN6S782C43v44Ev");}
void  S782C4 ::v45(){vfunc_called(this, "_ZN6S782C43v45Ev");}
void  S782C4 ::v46(){vfunc_called(this, "_ZN6S782C43v46Ev");}
void  S782C4 ::v47(){vfunc_called(this, "_ZN6S782C43v47Ev");}
void  S782C4 ::v48(){vfunc_called(this, "_ZN6S782C43v48Ev");}
void  S782C4 ::v49(){vfunc_called(this, "_ZN6S782C43v49Ev");}
void  S782C4 ::v50(){vfunc_called(this, "_ZN6S782C43v50Ev");}
void  S782C4 ::v51(){vfunc_called(this, "_ZN6S782C43v51Ev");}
void  S782C4 ::v52(){vfunc_called(this, "_ZN6S782C43v52Ev");}
void  S782C4 ::v53(){vfunc_called(this, "_ZN6S782C43v53Ev");}
void  S782C4 ::v54(){vfunc_called(this, "_ZN6S782C43v54Ev");}
void  S782C4 ::v55(){vfunc_called(this, "_ZN6S782C43v55Ev");}
void  S782C4 ::v56(){vfunc_called(this, "_ZN6S782C43v56Ev");}
void  S782C4 ::v57(){vfunc_called(this, "_ZN6S782C43v57Ev");}
void  S782C4 ::v58(){vfunc_called(this, "_ZN6S782C43v58Ev");}
void  S782C4 ::v59(){vfunc_called(this, "_ZN6S782C43v59Ev");}
void  S782C4 ::v60(){vfunc_called(this, "_ZN6S782C43v60Ev");}
void  S782C4 ::v61(){vfunc_called(this, "_ZN6S782C43v61Ev");}
void  S782C4 ::v62(){vfunc_called(this, "_ZN6S782C43v62Ev");}
void  S782C4 ::v63(){vfunc_called(this, "_ZN6S782C43v63Ev");}
void  S782C4 ::v64(){vfunc_called(this, "_ZN6S782C43v64Ev");}
void  S782C4 ::v65(){vfunc_called(this, "_ZN6S782C43v65Ev");}
void  S782C4 ::v66(){vfunc_called(this, "_ZN6S782C43v66Ev");}
void  S782C4 ::v67(){vfunc_called(this, "_ZN6S782C43v67Ev");}
void  S782C4 ::v68(){vfunc_called(this, "_ZN6S782C43v68Ev");}
void  S782C4 ::v69(){vfunc_called(this, "_ZN6S782C43v69Ev");}
void  S782C4 ::v70(){vfunc_called(this, "_ZN6S782C43v70Ev");}
void  S782C4 ::v71(){vfunc_called(this, "_ZN6S782C43v71Ev");}
void  S782C4 ::v72(){vfunc_called(this, "_ZN6S782C43v72Ev");}
void  S782C4 ::v73(){vfunc_called(this, "_ZN6S782C43v73Ev");}
void  S782C4 ::v74(){vfunc_called(this, "_ZN6S782C43v74Ev");}
void  S782C4 ::v75(){vfunc_called(this, "_ZN6S782C43v75Ev");}
void  S782C4 ::v76(){vfunc_called(this, "_ZN6S782C43v76Ev");}
void  S782C4 ::v77(){vfunc_called(this, "_ZN6S782C43v77Ev");}
void  S782C4 ::v78(){vfunc_called(this, "_ZN6S782C43v78Ev");}
void  S782C4 ::v79(){vfunc_called(this, "_ZN6S782C43v79Ev");}
void  S782C4 ::v80(){vfunc_called(this, "_ZN6S782C43v80Ev");}
void  S782C4 ::v81(){vfunc_called(this, "_ZN6S782C43v81Ev");}
void  S782C4 ::v82(){vfunc_called(this, "_ZN6S782C43v82Ev");}
void  S782C4 ::v83(){vfunc_called(this, "_ZN6S782C43v83Ev");}
void  S782C4 ::v84(){vfunc_called(this, "_ZN6S782C43v84Ev");}
void  S782C4 ::v85(){vfunc_called(this, "_ZN6S782C43v85Ev");}
void  S782C4 ::v86(){vfunc_called(this, "_ZN6S782C43v86Ev");}
void  S782C4 ::v87(){vfunc_called(this, "_ZN6S782C43v87Ev");}
void  S782C4 ::v88(){vfunc_called(this, "_ZN6S782C43v88Ev");}
void  S782C4 ::v89(){vfunc_called(this, "_ZN6S782C43v89Ev");}
void  S782C4 ::v90(){vfunc_called(this, "_ZN6S782C43v90Ev");}
void  S782C4 ::v91(){vfunc_called(this, "_ZN6S782C43v91Ev");}
void  S782C4 ::v92(){vfunc_called(this, "_ZN6S782C43v92Ev");}
void  S782C4 ::v93(){vfunc_called(this, "_ZN6S782C43v93Ev");}
void  S782C4 ::v94(){vfunc_called(this, "_ZN6S782C43v94Ev");}
void  S782C4 ::v95(){vfunc_called(this, "_ZN6S782C43v95Ev");}
void  S782C4 ::v96(){vfunc_called(this, "_ZN6S782C43v96Ev");}
void  S782C4 ::v97(){vfunc_called(this, "_ZN6S782C43v97Ev");}
void  S782C4 ::v98(){vfunc_called(this, "_ZN6S782C43v98Ev");}
void  S782C4 ::v99(){vfunc_called(this, "_ZN6S782C43v99Ev");}
void  S782C4 ::v100(){vfunc_called(this, "_ZN6S782C44v100Ev");}
void  S782C4 ::v101(){vfunc_called(this, "_ZN6S782C44v101Ev");}
void  S782C4 ::v102(){vfunc_called(this, "_ZN6S782C44v102Ev");}
void  S782C4 ::v103(){vfunc_called(this, "_ZN6S782C44v103Ev");}
void  S782C4 ::v104(){vfunc_called(this, "_ZN6S782C44v104Ev");}
void  S782C4 ::v105(){vfunc_called(this, "_ZN6S782C44v105Ev");}
void  S782C4 ::v106(){vfunc_called(this, "_ZN6S782C44v106Ev");}
void  S782C4 ::v107(){vfunc_called(this, "_ZN6S782C44v107Ev");}
void  S782C4 ::v108(){vfunc_called(this, "_ZN6S782C44v108Ev");}
void  S782C4 ::v109(){vfunc_called(this, "_ZN6S782C44v109Ev");}
void  S782C4 ::v110(){vfunc_called(this, "_ZN6S782C44v110Ev");}
void  S782C4 ::v111(){vfunc_called(this, "_ZN6S782C44v111Ev");}
void  S782C4 ::v112(){vfunc_called(this, "_ZN6S782C44v112Ev");}
void  S782C4 ::v113(){vfunc_called(this, "_ZN6S782C44v113Ev");}
void  S782C4 ::v114(){vfunc_called(this, "_ZN6S782C44v114Ev");}
void  S782C4 ::v115(){vfunc_called(this, "_ZN6S782C44v115Ev");}
void  S782C4 ::v116(){vfunc_called(this, "_ZN6S782C44v116Ev");}
void  S782C4 ::v117(){vfunc_called(this, "_ZN6S782C44v117Ev");}
void  S782C4 ::v118(){vfunc_called(this, "_ZN6S782C44v118Ev");}
void  S782C4 ::v119(){vfunc_called(this, "_ZN6S782C44v119Ev");}
void  S782C4 ::v120(){vfunc_called(this, "_ZN6S782C44v120Ev");}
void  S782C4 ::v121(){vfunc_called(this, "_ZN6S782C44v121Ev");}
void  S782C4 ::v122(){vfunc_called(this, "_ZN6S782C44v122Ev");}
void  S782C4 ::v123(){vfunc_called(this, "_ZN6S782C44v123Ev");}
void  S782C4 ::v124(){vfunc_called(this, "_ZN6S782C44v124Ev");}
void  S782C4 ::v125(){vfunc_called(this, "_ZN6S782C44v125Ev");}
S782C4 ::~S782C4(){ note_dtor("S782C4", this);} // tgen
S782C4 ::S782C4(){ note_ctor("S782C4", this);} // tgen

static void Test_S782C4()
{
  extern Class_Descriptor cd_S782C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S782C4, buf);
    S782C4 *dp, &lv = *(dp=new (buf) S782C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S782C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S782C4)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S782C4");
    test_class_info(&lv, &cd_S782C4);
    dp->~S782C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS782C4(Test_S782C4, "S782C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S782C4C1Ev();
extern void _ZN6S782C4D1Ev();
Name_Map name_map_S782C4[] = {
  NSPAIR(_ZN6S782C4C1Ev),
  NSPAIR(_ZN6S782C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S782C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S782C4[];
extern void _ZN6S782C4D1Ev();
extern void _ZN6S782C4D0Ev();
extern void _ZN6S782C42v4Ev();
extern void _ZN6S782C42v5Ev();
extern void _ZN6S782C42v6Ev();
extern void _ZN6S782C42v7Ev();
extern void _ZN6S782C42v8Ev();
extern void _ZN6S782C42v9Ev();
extern void _ZN6S782C43v10Ev();
extern void _ZN6S782C43v11Ev();
extern void _ZN6S782C43v12Ev();
extern void _ZN6S782C43v13Ev();
extern void _ZN6S782C43v14Ev();
extern void _ZN6S782C43v15Ev();
extern void _ZN6S782C43v16Ev();
extern void _ZN6S782C43v17Ev();
extern void _ZN6S782C43v18Ev();
extern void _ZN6S782C43v19Ev();
extern void _ZN6S782C43v20Ev();
extern void _ZN6S782C43v21Ev();
extern void _ZN6S782C43v22Ev();
extern void _ZN6S782C43v23Ev();
extern void _ZN6S782C43v24Ev();
extern void _ZN6S782C43v25Ev();
extern void _ZN6S782C43v26Ev();
extern void _ZN6S782C43v27Ev();
extern void _ZN6S782C43v28Ev();
extern void _ZN6S782C43v29Ev();
extern void _ZN6S782C43v30Ev();
extern void _ZN6S782C43v31Ev();
extern void _ZN6S782C43v32Ev();
extern void _ZN6S782C43v33Ev();
extern void _ZN6S782C43v34Ev();
extern void _ZN6S782C43v35Ev();
extern void _ZN6S782C43v36Ev();
extern void _ZN6S782C43v37Ev();
extern void _ZN6S782C43v38Ev();
extern void _ZN6S782C43v39Ev();
extern void _ZN6S782C43v40Ev();
extern void _ZN6S782C43v41Ev();
extern void _ZN6S782C43v42Ev();
extern void _ZN6S782C43v43Ev();
extern void _ZN6S782C43v44Ev();
extern void _ZN6S782C43v45Ev();
extern void _ZN6S782C43v46Ev();
extern void _ZN6S782C43v47Ev();
extern void _ZN6S782C43v48Ev();
extern void _ZN6S782C43v49Ev();
extern void _ZN6S782C43v50Ev();
extern void _ZN6S782C43v51Ev();
extern void _ZN6S782C43v52Ev();
extern void _ZN6S782C43v53Ev();
extern void _ZN6S782C43v54Ev();
extern void _ZN6S782C43v55Ev();
extern void _ZN6S782C43v56Ev();
extern void _ZN6S782C43v57Ev();
extern void _ZN6S782C43v58Ev();
extern void _ZN6S782C43v59Ev();
extern void _ZN6S782C43v60Ev();
extern void _ZN6S782C43v61Ev();
extern void _ZN6S782C43v62Ev();
extern void _ZN6S782C43v63Ev();
extern void _ZN6S782C43v64Ev();
extern void _ZN6S782C43v65Ev();
extern void _ZN6S782C43v66Ev();
extern void _ZN6S782C43v67Ev();
extern void _ZN6S782C43v68Ev();
extern void _ZN6S782C43v69Ev();
extern void _ZN6S782C43v70Ev();
extern void _ZN6S782C43v71Ev();
extern void _ZN6S782C43v72Ev();
extern void _ZN6S782C43v73Ev();
extern void _ZN6S782C43v74Ev();
extern void _ZN6S782C43v75Ev();
extern void _ZN6S782C43v76Ev();
extern void _ZN6S782C43v77Ev();
extern void _ZN6S782C43v78Ev();
extern void _ZN6S782C43v79Ev();
extern void _ZN6S782C43v80Ev();
extern void _ZN6S782C43v81Ev();
extern void _ZN6S782C43v82Ev();
extern void _ZN6S782C43v83Ev();
extern void _ZN6S782C43v84Ev();
extern void _ZN6S782C43v85Ev();
extern void _ZN6S782C43v86Ev();
extern void _ZN6S782C43v87Ev();
extern void _ZN6S782C43v88Ev();
extern void _ZN6S782C43v89Ev();
extern void _ZN6S782C43v90Ev();
extern void _ZN6S782C43v91Ev();
extern void _ZN6S782C43v92Ev();
extern void _ZN6S782C43v93Ev();
extern void _ZN6S782C43v94Ev();
extern void _ZN6S782C43v95Ev();
extern void _ZN6S782C43v96Ev();
extern void _ZN6S782C43v97Ev();
extern void _ZN6S782C43v98Ev();
extern void _ZN6S782C43v99Ev();
extern void _ZN6S782C44v100Ev();
extern void _ZN6S782C44v101Ev();
extern void _ZN6S782C44v102Ev();
extern void _ZN6S782C44v103Ev();
extern void _ZN6S782C44v104Ev();
extern void _ZN6S782C44v105Ev();
extern void _ZN6S782C44v106Ev();
extern void _ZN6S782C44v107Ev();
extern void _ZN6S782C44v108Ev();
extern void _ZN6S782C44v109Ev();
extern void _ZN6S782C44v110Ev();
extern void _ZN6S782C44v111Ev();
extern void _ZN6S782C44v112Ev();
extern void _ZN6S782C44v113Ev();
extern void _ZN6S782C44v114Ev();
extern void _ZN6S782C44v115Ev();
extern void _ZN6S782C44v116Ev();
extern void _ZN6S782C44v117Ev();
extern void _ZN6S782C44v118Ev();
extern void _ZN6S782C44v119Ev();
extern void _ZN6S782C44v120Ev();
extern void _ZN6S782C44v121Ev();
extern void _ZN6S782C44v122Ev();
extern void _ZN6S782C44v123Ev();
extern void _ZN6S782C44v124Ev();
extern void _ZN6S782C44v125Ev();
static  VTBL_ENTRY vtc_S782C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S782C4[0]),
  (VTBL_ENTRY)&_ZN6S782C4D1Ev,
  (VTBL_ENTRY)&_ZN6S782C4D0Ev,
  (VTBL_ENTRY)&_ZN6S782C42v4Ev,
  (VTBL_ENTRY)&_ZN6S782C42v5Ev,
  (VTBL_ENTRY)&_ZN6S782C42v6Ev,
  (VTBL_ENTRY)&_ZN6S782C42v7Ev,
  (VTBL_ENTRY)&_ZN6S782C42v8Ev,
  (VTBL_ENTRY)&_ZN6S782C42v9Ev,
  (VTBL_ENTRY)&_ZN6S782C43v10Ev,
  (VTBL_ENTRY)&_ZN6S782C43v11Ev,
  (VTBL_ENTRY)&_ZN6S782C43v12Ev,
  (VTBL_ENTRY)&_ZN6S782C43v13Ev,
  (VTBL_ENTRY)&_ZN6S782C43v14Ev,
  (VTBL_ENTRY)&_ZN6S782C43v15Ev,
  (VTBL_ENTRY)&_ZN6S782C43v16Ev,
  (VTBL_ENTRY)&_ZN6S782C43v17Ev,
  (VTBL_ENTRY)&_ZN6S782C43v18Ev,
  (VTBL_ENTRY)&_ZN6S782C43v19Ev,
  (VTBL_ENTRY)&_ZN6S782C43v20Ev,
  (VTBL_ENTRY)&_ZN6S782C43v21Ev,
  (VTBL_ENTRY)&_ZN6S782C43v22Ev,
  (VTBL_ENTRY)&_ZN6S782C43v23Ev,
  (VTBL_ENTRY)&_ZN6S782C43v24Ev,
  (VTBL_ENTRY)&_ZN6S782C43v25Ev,
  (VTBL_ENTRY)&_ZN6S782C43v26Ev,
  (VTBL_ENTRY)&_ZN6S782C43v27Ev,
  (VTBL_ENTRY)&_ZN6S782C43v28Ev,
  (VTBL_ENTRY)&_ZN6S782C43v29Ev,
  (VTBL_ENTRY)&_ZN6S782C43v30Ev,
  (VTBL_ENTRY)&_ZN6S782C43v31Ev,
  (VTBL_ENTRY)&_ZN6S782C43v32Ev,
  (VTBL_ENTRY)&_ZN6S782C43v33Ev,
  (VTBL_ENTRY)&_ZN6S782C43v34Ev,
  (VTBL_ENTRY)&_ZN6S782C43v35Ev,
  (VTBL_ENTRY)&_ZN6S782C43v36Ev,
  (VTBL_ENTRY)&_ZN6S782C43v37Ev,
  (VTBL_ENTRY)&_ZN6S782C43v38Ev,
  (VTBL_ENTRY)&_ZN6S782C43v39Ev,
  (VTBL_ENTRY)&_ZN6S782C43v40Ev,
  (VTBL_ENTRY)&_ZN6S782C43v41Ev,
  (VTBL_ENTRY)&_ZN6S782C43v42Ev,
  (VTBL_ENTRY)&_ZN6S782C43v43Ev,
  (VTBL_ENTRY)&_ZN6S782C43v44Ev,
  (VTBL_ENTRY)&_ZN6S782C43v45Ev,
  (VTBL_ENTRY)&_ZN6S782C43v46Ev,
  (VTBL_ENTRY)&_ZN6S782C43v47Ev,
  (VTBL_ENTRY)&_ZN6S782C43v48Ev,
  (VTBL_ENTRY)&_ZN6S782C43v49Ev,
  (VTBL_ENTRY)&_ZN6S782C43v50Ev,
  (VTBL_ENTRY)&_ZN6S782C43v51Ev,
  (VTBL_ENTRY)&_ZN6S782C43v52Ev,
  (VTBL_ENTRY)&_ZN6S782C43v53Ev,
  (VTBL_ENTRY)&_ZN6S782C43v54Ev,
  (VTBL_ENTRY)&_ZN6S782C43v55Ev,
  (VTBL_ENTRY)&_ZN6S782C43v56Ev,
  (VTBL_ENTRY)&_ZN6S782C43v57Ev,
  (VTBL_ENTRY)&_ZN6S782C43v58Ev,
  (VTBL_ENTRY)&_ZN6S782C43v59Ev,
  (VTBL_ENTRY)&_ZN6S782C43v60Ev,
  (VTBL_ENTRY)&_ZN6S782C43v61Ev,
  (VTBL_ENTRY)&_ZN6S782C43v62Ev,
  (VTBL_ENTRY)&_ZN6S782C43v63Ev,
  (VTBL_ENTRY)&_ZN6S782C43v64Ev,
  (VTBL_ENTRY)&_ZN6S782C43v65Ev,
  (VTBL_ENTRY)&_ZN6S782C43v66Ev,
  (VTBL_ENTRY)&_ZN6S782C43v67Ev,
  (VTBL_ENTRY)&_ZN6S782C43v68Ev,
  (VTBL_ENTRY)&_ZN6S782C43v69Ev,
  (VTBL_ENTRY)&_ZN6S782C43v70Ev,
  (VTBL_ENTRY)&_ZN6S782C43v71Ev,
  (VTBL_ENTRY)&_ZN6S782C43v72Ev,
  (VTBL_ENTRY)&_ZN6S782C43v73Ev,
  (VTBL_ENTRY)&_ZN6S782C43v74Ev,
  (VTBL_ENTRY)&_ZN6S782C43v75Ev,
  (VTBL_ENTRY)&_ZN6S782C43v76Ev,
  (VTBL_ENTRY)&_ZN6S782C43v77Ev,
  (VTBL_ENTRY)&_ZN6S782C43v78Ev,
  (VTBL_ENTRY)&_ZN6S782C43v79Ev,
  (VTBL_ENTRY)&_ZN6S782C43v80Ev,
  (VTBL_ENTRY)&_ZN6S782C43v81Ev,
  (VTBL_ENTRY)&_ZN6S782C43v82Ev,
  (VTBL_ENTRY)&_ZN6S782C43v83Ev,
  (VTBL_ENTRY)&_ZN6S782C43v84Ev,
  (VTBL_ENTRY)&_ZN6S782C43v85Ev,
  (VTBL_ENTRY)&_ZN6S782C43v86Ev,
  (VTBL_ENTRY)&_ZN6S782C43v87Ev,
  (VTBL_ENTRY)&_ZN6S782C43v88Ev,
  (VTBL_ENTRY)&_ZN6S782C43v89Ev,
  (VTBL_ENTRY)&_ZN6S782C43v90Ev,
  (VTBL_ENTRY)&_ZN6S782C43v91Ev,
  (VTBL_ENTRY)&_ZN6S782C43v92Ev,
  (VTBL_ENTRY)&_ZN6S782C43v93Ev,
  (VTBL_ENTRY)&_ZN6S782C43v94Ev,
  (VTBL_ENTRY)&_ZN6S782C43v95Ev,
  (VTBL_ENTRY)&_ZN6S782C43v96Ev,
  (VTBL_ENTRY)&_ZN6S782C43v97Ev,
  (VTBL_ENTRY)&_ZN6S782C43v98Ev,
  (VTBL_ENTRY)&_ZN6S782C43v99Ev,
  (VTBL_ENTRY)&_ZN6S782C44v100Ev,
  (VTBL_ENTRY)&_ZN6S782C44v101Ev,
  (VTBL_ENTRY)&_ZN6S782C44v102Ev,
  (VTBL_ENTRY)&_ZN6S782C44v103Ev,
  (VTBL_ENTRY)&_ZN6S782C44v104Ev,
  (VTBL_ENTRY)&_ZN6S782C44v105Ev,
  (VTBL_ENTRY)&_ZN6S782C44v106Ev,
  (VTBL_ENTRY)&_ZN6S782C44v107Ev,
  (VTBL_ENTRY)&_ZN6S782C44v108Ev,
  (VTBL_ENTRY)&_ZN6S782C44v109Ev,
  (VTBL_ENTRY)&_ZN6S782C44v110Ev,
  (VTBL_ENTRY)&_ZN6S782C44v111Ev,
  (VTBL_ENTRY)&_ZN6S782C44v112Ev,
  (VTBL_ENTRY)&_ZN6S782C44v113Ev,
  (VTBL_ENTRY)&_ZN6S782C44v114Ev,
  (VTBL_ENTRY)&_ZN6S782C44v115Ev,
  (VTBL_ENTRY)&_ZN6S782C44v116Ev,
  (VTBL_ENTRY)&_ZN6S782C44v117Ev,
  (VTBL_ENTRY)&_ZN6S782C44v118Ev,
  (VTBL_ENTRY)&_ZN6S782C44v119Ev,
  (VTBL_ENTRY)&_ZN6S782C44v120Ev,
  (VTBL_ENTRY)&_ZN6S782C44v121Ev,
  (VTBL_ENTRY)&_ZN6S782C44v122Ev,
  (VTBL_ENTRY)&_ZN6S782C44v123Ev,
  (VTBL_ENTRY)&_ZN6S782C44v124Ev,
  (VTBL_ENTRY)&_ZN6S782C44v125Ev,
};
extern VTBL_ENTRY _ZTI6S782C4[];
extern  VTBL_ENTRY _ZTV6S782C4[];
Class_Descriptor cd_S782C4 = {  "S782C4", // class name
  bases_S782C4, 1,
  &(vtc_S782C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S782C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S782C4),126, //virtual function table var
  2, // 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  S782C3  : S782C4 {
  virtual void  v126(); // _ZN6S782C34v126Ev
  virtual void  v127(); // _ZN6S782C34v127Ev
  virtual void  v128(); // _ZN6S782C34v128Ev
  virtual void  v129(); // _ZN6S782C34v129Ev
  virtual void  v130(); // _ZN6S782C34v130Ev
  virtual void  v131(); // _ZN6S782C34v131Ev
  virtual void  v132(); // _ZN6S782C34v132Ev
  virtual void  v133(); // _ZN6S782C34v133Ev
  virtual void  v134(); // _ZN6S782C34v134Ev
  virtual void  v135(); // _ZN6S782C34v135Ev
  virtual void  v136(); // _ZN6S782C34v136Ev
  virtual void  v137(); // _ZN6S782C34v137Ev
  virtual void  v138(); // _ZN6S782C34v138Ev
  virtual void  v139(); // _ZN6S782C34v139Ev
  virtual void  v140(); // _ZN6S782C34v140Ev
  virtual void  v141(); // _ZN6S782C34v141Ev
  virtual void  v142(); // _ZN6S782C34v142Ev
  virtual void  v143(); // _ZN6S782C34v143Ev
  ~S782C3(); // tgen
  S782C3(); // tgen
};
//SIG(-1 S782C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S782C3 ::v126(){vfunc_called(this, "_ZN6S782C34v126Ev");}
void  S782C3 ::v127(){vfunc_called(this, "_ZN6S782C34v127Ev");}
void  S782C3 ::v128(){vfunc_called(this, "_ZN6S782C34v128Ev");}
void  S782C3 ::v129(){vfunc_called(this, "_ZN6S782C34v129Ev");}
void  S782C3 ::v130(){vfunc_called(this, "_ZN6S782C34v130Ev");}
void  S782C3 ::v131(){vfunc_called(this, "_ZN6S782C34v131Ev");}
void  S782C3 ::v132(){vfunc_called(this, "_ZN6S782C34v132Ev");}
void  S782C3 ::v133(){vfunc_called(this, "_ZN6S782C34v133Ev");}
void  S782C3 ::v134(){vfunc_called(this, "_ZN6S782C34v134Ev");}
void  S782C3 ::v135(){vfunc_called(this, "_ZN6S782C34v135Ev");}
void  S782C3 ::v136(){vfunc_called(this, "_ZN6S782C34v136Ev");}
void  S782C3 ::v137(){vfunc_called(this, "_ZN6S782C34v137Ev");}
void  S782C3 ::v138(){vfunc_called(this, "_ZN6S782C34v138Ev");}
void  S782C3 ::v139(){vfunc_called(this, "_ZN6S782C34v139Ev");}
void  S782C3 ::v140(){vfunc_called(this, "_ZN6S782C34v140Ev");}
void  S782C3 ::v141(){vfunc_called(this, "_ZN6S782C34v141Ev");}
void  S782C3 ::v142(){vfunc_called(this, "_ZN6S782C34v142Ev");}
void  S782C3 ::v143(){vfunc_called(this, "_ZN6S782C34v143Ev");}
S782C3 ::~S782C3(){ note_dtor("S782C3", this);} // tgen
S782C3 ::S782C3(){ note_ctor("S782C3", this);} // tgen

static void Test_S782C3()
{
  extern Class_Descriptor cd_S782C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S782C3, buf);
    S782C3 *dp, &lv = *(dp=new (buf) S782C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S782C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S782C3)");
    check_base_class_offset(lv, (S785C5_nt*)(S782C4*), 0, "S782C3");
    check_base_class_offset(lv, (S782C4*), 0, "S782C3");
    test_class_info(&lv, &cd_S782C3);
    dp->~S782C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS782C3(Test_S782C3, "S782C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S782C3C1Ev();
extern void _ZN6S782C3D1Ev();
Name_Map name_map_S782C3[] = {
  NSPAIR(_ZN6S782C3C1Ev),
  NSPAIR(_ZN6S782C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S782C4;
extern VTBL_ENTRY _ZTI6S782C4[];
extern  VTBL_ENTRY _ZTV6S782C4[];
static Base_Class bases_S782C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S782C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S782C3[];
extern void _ZN6S782C3D1Ev();
extern void _ZN6S782C3D0Ev();
extern void _ZN6S782C42v4Ev();
extern void _ZN6S782C42v5Ev();
extern void _ZN6S782C42v6Ev();
extern void _ZN6S782C42v7Ev();
extern void _ZN6S782C42v8Ev();
extern void _ZN6S782C42v9Ev();
extern void _ZN6S782C43v10Ev();
extern void _ZN6S782C43v11Ev();
extern void _ZN6S782C43v12Ev();
extern void _ZN6S782C43v13Ev();
extern void _ZN6S782C43v14Ev();
extern void _ZN6S782C43v15Ev();
extern void _ZN6S782C43v16Ev();
extern void _ZN6S782C43v17Ev();
extern void _ZN6S782C43v18Ev();
extern void _ZN6S782C43v19Ev();
extern void _ZN6S782C43v20Ev();
extern void _ZN6S782C43v21Ev();
extern void _ZN6S782C43v22Ev();
extern void _ZN6S782C43v23Ev();
extern void _ZN6S782C43v24Ev();
extern void _ZN6S782C43v25Ev();
extern void _ZN6S782C43v26Ev();
extern void _ZN6S782C43v27Ev();
extern void _ZN6S782C43v28Ev();
extern void _ZN6S782C43v29Ev();
extern void _ZN6S782C43v30Ev();
extern void _ZN6S782C43v31Ev();
extern void _ZN6S782C43v32Ev();
extern void _ZN6S782C43v33Ev();
extern void _ZN6S782C43v34Ev();
extern void _ZN6S782C43v35Ev();
extern void _ZN6S782C43v36Ev();
extern void _ZN6S782C43v37Ev();
extern void _ZN6S782C43v38Ev();
extern void _ZN6S782C43v39Ev();
extern void _ZN6S782C43v40Ev();
extern void _ZN6S782C43v41Ev();
extern void _ZN6S782C43v42Ev();
extern void _ZN6S782C43v43Ev();
extern void _ZN6S782C43v44Ev();
extern void _ZN6S782C43v45Ev();
extern void _ZN6S782C43v46Ev();
extern void _ZN6S782C43v47Ev();
extern void _ZN6S782C43v48Ev();
extern void _ZN6S782C43v49Ev();
extern void _ZN6S782C43v50Ev();
extern void _ZN6S782C43v51Ev();
extern void _ZN6S782C43v52Ev();
extern void _ZN6S782C43v53Ev();
extern void _ZN6S782C43v54Ev();
extern void _ZN6S782C43v55Ev();
extern void _ZN6S782C43v56Ev();
extern void _ZN6S782C43v57Ev();
extern void _ZN6S782C43v58Ev();
extern void _ZN6S782C43v59Ev();
extern void _ZN6S782C43v60Ev();
extern void _ZN6S782C43v61Ev();
extern void _ZN6S782C43v62Ev();
extern void _ZN6S782C43v63Ev();
extern void _ZN6S782C43v64Ev();
extern void _ZN6S782C43v65Ev();
extern void _ZN6S782C43v66Ev();
extern void _ZN6S782C43v67Ev();
extern void _ZN6S782C43v68Ev();
extern void _ZN6S782C43v69Ev();
extern void _ZN6S782C43v70Ev();
extern void _ZN6S782C43v71Ev();
extern void _ZN6S782C43v72Ev();
extern void _ZN6S782C43v73Ev();
extern void _ZN6S782C43v74Ev();
extern void _ZN6S782C43v75Ev();
extern void _ZN6S782C43v76Ev();
extern void _ZN6S782C43v77Ev();
extern void _ZN6S782C43v78Ev();
extern void _ZN6S782C43v79Ev();
extern void _ZN6S782C43v80Ev();
extern void _ZN6S782C43v81Ev();
extern void _ZN6S782C43v82Ev();
extern void _ZN6S782C43v83Ev();
extern void _ZN6S782C43v84Ev();
extern void _ZN6S782C43v85Ev();
extern void _ZN6S782C43v86Ev();
extern void _ZN6S782C43v87Ev();
extern void _ZN6S782C43v88Ev();
extern void _ZN6S782C43v89Ev();
extern void _ZN6S782C43v90Ev();
extern void _ZN6S782C43v91Ev();
extern void _ZN6S782C43v92Ev();
extern void _ZN6S782C43v93Ev();
extern void _ZN6S782C43v94Ev();
extern void _ZN6S782C43v95Ev();
extern void _ZN6S782C43v96Ev();
extern void _ZN6S782C43v97Ev();
extern void _ZN6S782C43v98Ev();
extern void _ZN6S782C43v99Ev();
extern void _ZN6S782C44v100Ev();
extern void _ZN6S782C44v101Ev();
extern void _ZN6S782C44v102Ev();
extern void _ZN6S782C44v103Ev();
extern void _ZN6S782C44v104Ev();
extern void _ZN6S782C44v105Ev();
extern void _ZN6S782C44v106Ev();
extern void _ZN6S782C44v107Ev();
extern void _ZN6S782C44v108Ev();
extern void _ZN6S782C44v109Ev();
extern void _ZN6S782C44v110Ev();
extern void _ZN6S782C44v111Ev();
extern void _ZN6S782C44v112Ev();
extern void _ZN6S782C44v113Ev();
extern void _ZN6S782C44v114Ev();
extern void _ZN6S782C44v115Ev();
extern void _ZN6S782C44v116Ev();
extern void _ZN6S782C44v117Ev();
extern void _ZN6S782C44v118Ev();
extern void _ZN6S782C44v119Ev();
extern void _ZN6S782C44v120Ev();
extern void _ZN6S782C44v121Ev();
extern void _ZN6S782C44v122Ev();
extern void _ZN6S782C44v123Ev();
extern void _ZN6S782C44v124Ev();
extern void _ZN6S782C44v125Ev();
extern void _ZN6S782C34v126Ev();
extern void _ZN6S782C34v127Ev();
extern void _ZN6S782C34v128Ev();
extern void _ZN6S782C34v129Ev();
extern void _ZN6S782C34v130Ev();
extern void _ZN6S782C34v131Ev();
extern void _ZN6S782C34v132Ev();
extern void _ZN6S782C34v133Ev();
extern void _ZN6S782C34v134Ev();
extern void _ZN6S782C34v135Ev();
extern void _ZN6S782C34v136Ev();
extern void _ZN6S782C34v137Ev();
extern void _ZN6S782C34v138Ev();
extern void _ZN6S782C34v139Ev();
extern void _ZN6S782C34v140Ev();
extern void _ZN6S782C34v141Ev();
extern void _ZN6S782C34v142Ev();
extern void _ZN6S782C34v143Ev();
static  VTBL_ENTRY vtc_S782C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S782C3[0]),
  (VTBL_ENTRY)&_ZN6S782C3D1Ev,
  (VTBL_ENTRY)&_ZN6S782C3D0Ev,
  (VTBL_ENTRY)&_ZN6S782C42v4Ev,
  (VTBL_ENTRY)&_ZN6S782C42v5Ev,
  (VTBL_ENTRY)&_ZN6S782C42v6Ev,
  (VTBL_ENTRY)&_ZN6S782C42v7Ev,
  (VTBL_ENTRY)&_ZN6S782C42v8Ev,
  (VTBL_ENTRY)&_ZN6S782C42v9Ev,
  (VTBL_ENTRY)&_ZN6S782C43v10Ev,
  (VTBL_ENTRY)&_ZN6S782C43v11Ev,
  (VTBL_ENTRY)&_ZN6S782C43v12Ev,
  (VTBL_ENTRY)&_ZN6S782C43v13Ev,
  (VTBL_ENTRY)&_ZN6S782C43v14Ev,
  (VTBL_ENTRY)&_ZN6S782C43v15Ev,
  (VTBL_ENTRY)&_ZN6S782C43v16Ev,
  (VTBL_ENTRY)&_ZN6S782C43v17Ev,
  (VTBL_ENTRY)&_ZN6S782C43v18Ev,
  (VTBL_ENTRY)&_ZN6S782C43v19Ev,
  (VTBL_ENTRY)&_ZN6S782C43v20Ev,
  (VTBL_ENTRY)&_ZN6S782C43v21Ev,
  (VTBL_ENTRY)&_ZN6S782C43v22Ev,
  (VTBL_ENTRY)&_ZN6S782C43v23Ev,
  (VTBL_ENTRY)&_ZN6S782C43v24Ev,
  (VTBL_ENTRY)&_ZN6S782C43v25Ev,
  (VTBL_ENTRY)&_ZN6S782C43v26Ev,
  (VTBL_ENTRY)&_ZN6S782C43v27Ev,
  (VTBL_ENTRY)&_ZN6S782C43v28Ev,
  (VTBL_ENTRY)&_ZN6S782C43v29Ev,
  (VTBL_ENTRY)&_ZN6S782C43v30Ev,
  (VTBL_ENTRY)&_ZN6S782C43v31Ev,
  (VTBL_ENTRY)&_ZN6S782C43v32Ev,
  (VTBL_ENTRY)&_ZN6S782C43v33Ev,
  (VTBL_ENTRY)&_ZN6S782C43v34Ev,
  (VTBL_ENTRY)&_ZN6S782C43v35Ev,
  (VTBL_ENTRY)&_ZN6S782C43v36Ev,
  (VTBL_ENTRY)&_ZN6S782C43v37Ev,
  (VTBL_ENTRY)&_ZN6S782C43v38Ev,
  (VTBL_ENTRY)&_ZN6S782C43v39Ev,
  (VTBL_ENTRY)&_ZN6S782C43v40Ev,
  (VTBL_ENTRY)&_ZN6S782C43v41Ev,
  (VTBL_ENTRY)&_ZN6S782C43v42Ev,
  (VTBL_ENTRY)&_ZN6S782C43v43Ev,
  (VTBL_ENTRY)&_ZN6S782C43v44Ev,
  (VTBL_ENTRY)&_ZN6S782C43v45Ev,
  (VTBL_ENTRY)&_ZN6S782C43v46Ev,
  (VTBL_ENTRY)&_ZN6S782C43v47Ev,
  (VTBL_ENTRY)&_ZN6S782C43v48Ev,
  (VTBL_ENTRY)&_ZN6S782C43v49Ev,
  (VTBL_ENTRY)&_ZN6S782C43v50Ev,
  (VTBL_ENTRY)&_ZN6S782C43v51Ev,
  (VTBL_ENTRY)&_ZN6S782C43v52Ev,
  (VTBL_ENTRY)&_ZN6S782C43v53Ev,
  (VTBL_ENTRY)&_ZN6S782C43v54Ev,
  (VTBL_ENTRY)&_ZN6S782C43v55Ev,
  (VTBL_ENTRY)&_ZN6S782C43v56Ev,
  (VTBL_ENTRY)&_ZN6S782C43v57Ev,
  (VTBL_ENTRY)&_ZN6S782C43v58Ev,
  (VTBL_ENTRY)&_ZN6S782C43v59Ev,
  (VTBL_ENTRY)&_ZN6S782C43v60Ev,
  (VTBL_ENTRY)&_ZN6S782C43v61Ev,
  (VTBL_ENTRY)&_ZN6S782C43v62Ev,
  (VTBL_ENTRY)&_ZN6S782C43v63Ev,
  (VTBL_ENTRY)&_ZN6S782C43v64Ev,
  (VTBL_ENTRY)&_ZN6S782C43v65Ev,
  (VTBL_ENTRY)&_ZN6S782C43v66Ev,
  (VTBL_ENTRY)&_ZN6S782C43v67Ev,
  (VTBL_ENTRY)&_ZN6S782C43v68Ev,
  (VTBL_ENTRY)&_ZN6S782C43v69Ev,
  (VTBL_ENTRY)&_ZN6S782C43v70Ev,
  (VTBL_ENTRY)&_ZN6S782C43v71Ev,
  (VTBL_ENTRY)&_ZN6S782C43v72Ev,
  (VTBL_ENTRY)&_ZN6S782C43v73Ev,
  (VTBL_ENTRY)&_ZN6S782C43v74Ev,
  (VTBL_ENTRY)&_ZN6S782C43v75Ev,
  (VTBL_ENTRY)&_ZN6S782C43v76Ev,
  (VTBL_ENTRY)&_ZN6S782C43v77Ev,
  (VTBL_ENTRY)&_ZN6S782C43v78Ev,
  (VTBL_ENTRY)&_ZN6S782C43v79Ev,
  (VTBL_ENTRY)&_ZN6S782C43v80Ev,
  (VTBL_ENTRY)&_ZN6S782C43v81Ev,
  (VTBL_ENTRY)&_ZN6S782C43v82Ev,
  (VTBL_ENTRY)&_ZN6S782C43v83Ev,
  (VTBL_ENTRY)&_ZN6S782C43v84Ev,
  (VTBL_ENTRY)&_ZN6S782C43v85Ev,
  (VTBL_ENTRY)&_ZN6S782C43v86Ev,
  (VTBL_ENTRY)&_ZN6S782C43v87Ev,
  (VTBL_ENTRY)&_ZN6S782C43v88Ev,
  (VTBL_ENTRY)&_ZN6S782C43v89Ev,
  (VTBL_ENTRY)&_ZN6S782C43v90Ev,
  (VTBL_ENTRY)&_ZN6S782C43v91Ev,
  (VTBL_ENTRY)&_ZN6S782C43v92Ev,
  (VTBL_ENTRY)&_ZN6S782C43v93Ev,
  (VTBL_ENTRY)&_ZN6S782C43v94Ev,
  (VTBL_ENTRY)&_ZN6S782C43v95Ev,
  (VTBL_ENTRY)&_ZN6S782C43v96Ev,
  (VTBL_ENTRY)&_ZN6S782C43v97Ev,
  (VTBL_ENTRY)&_ZN6S782C43v98Ev,
  (VTBL_ENTRY)&_ZN6S782C43v99Ev,
  (VTBL_ENTRY)&_ZN6S782C44v100Ev,
  (VTBL_ENTRY)&_ZN6S782C44v101Ev,
  (VTBL_ENTRY)&_ZN6S782C44v102Ev,
  (VTBL_ENTRY)&_ZN6S782C44v103Ev,
  (VTBL_ENTRY)&_ZN6S782C44v104Ev,
  (VTBL_ENTRY)&_ZN6S782C44v105Ev,
  (VTBL_ENTRY)&_ZN6S782C44v106Ev,
  (VTBL_ENTRY)&_ZN6S782C44v107Ev,
  (VTBL_ENTRY)&_ZN6S782C44v108Ev,
  (VTBL_ENTRY)&_ZN6S782C44v109Ev,
  (VTBL_ENTRY)&_ZN6S782C44v110Ev,
  (VTBL_ENTRY)&_ZN6S782C44v111Ev,
  (VTBL_ENTRY)&_ZN6S782C44v112Ev,
  (VTBL_ENTRY)&_ZN6S782C44v113Ev,
  (VTBL_ENTRY)&_ZN6S782C44v114Ev,
  (VTBL_ENTRY)&_ZN6S782C44v115Ev,
  (VTBL_ENTRY)&_ZN6S782C44v116Ev,
  (VTBL_ENTRY)&_ZN6S782C44v117Ev,
  (VTBL_ENTRY)&_ZN6S782C44v118Ev,
  (VTBL_ENTRY)&_ZN6S782C44v119Ev,
  (VTBL_ENTRY)&_ZN6S782C44v120Ev,
  (VTBL_ENTRY)&_ZN6S782C44v121Ev,
  (VTBL_ENTRY)&_ZN6S782C44v122Ev,
  (VTBL_ENTRY)&_ZN6S782C44v123Ev,
  (VTBL_ENTRY)&_ZN6S782C44v124Ev,
  (VTBL_ENTRY)&_ZN6S782C44v125Ev,
  (VTBL_ENTRY)&_ZN6S782C34v126Ev,
  (VTBL_ENTRY)&_ZN6S782C34v127Ev,
  (VTBL_ENTRY)&_ZN6S782C34v128Ev,
  (VTBL_ENTRY)&_ZN6S782C34v129Ev,
  (VTBL_ENTRY)&_ZN6S782C34v130Ev,
  (VTBL_ENTRY)&_ZN6S782C34v131Ev,
  (VTBL_ENTRY)&_ZN6S782C34v132Ev,
  (VTBL_ENTRY)&_ZN6S782C34v133Ev,
  (VTBL_ENTRY)&_ZN6S782C34v134Ev,
  (VTBL_ENTRY)&_ZN6S782C34v135Ev,
  (VTBL_ENTRY)&_ZN6S782C34v136Ev,
  (VTBL_ENTRY)&_ZN6S782C34v137Ev,
  (VTBL_ENTRY)&_ZN6S782C34v138Ev,
  (VTBL_ENTRY)&_ZN6S782C34v139Ev,
  (VTBL_ENTRY)&_ZN6S782C34v140Ev,
  (VTBL_ENTRY)&_ZN6S782C34v141Ev,
  (VTBL_ENTRY)&_ZN6S782C34v142Ev,
  (VTBL_ENTRY)&_ZN6S782C34v143Ev,
};
extern VTBL_ENTRY _ZTI6S782C3[];
extern  VTBL_ENTRY _ZTV6S782C3[];
Class_Descriptor cd_S782C3 = {  "S782C3", // class name
  bases_S782C3, 2,
  &(vtc_S782C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S782C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S782C3),144, //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  S782C2  : S782C3 {
  virtual void  v144(); // _ZN6S782C24v144Ev
  ~S782C2(); // tgen
  S782C2(); // tgen
};
//SIG(-1 S782C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


void  S782C2 ::v144(){vfunc_called(this, "_ZN6S782C24v144Ev");}
S782C2 ::~S782C2(){ note_dtor("S782C2", this);} // tgen
S782C2 ::S782C2(){ note_ctor("S782C2", this);} // tgen

static void Test_S782C2()
{
  extern Class_Descriptor cd_S782C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S782C2, buf);
    S782C2 *dp, &lv = *(dp=new (buf) S782C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S782C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S782C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S782C4*)(S782C3*), 0, "S782C2");
    check_base_class_offset(lv, (S782C4*)(S782C3*), 0, "S782C2");
    check_base_class_offset(lv, (S782C3*), 0, "S782C2");
    test_class_info(&lv, &cd_S782C2);
    dp->~S782C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS782C2(Test_S782C2, "S782C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S782C2C1Ev();
extern void _ZN6S782C2D1Ev();
Name_Map name_map_S782C2[] = {
  NSPAIR(_ZN6S782C2C1Ev),
  NSPAIR(_ZN6S782C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S782C4;
extern VTBL_ENTRY _ZTI6S782C4[];
extern  VTBL_ENTRY _ZTV6S782C4[];
extern Class_Descriptor cd_S782C3;
extern VTBL_ENTRY _ZTI6S782C3[];
extern  VTBL_ENTRY _ZTV6S782C3[];
static Base_Class bases_S782C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S782C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S782C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S782C2[];
extern void _ZN6S782C2D1Ev();
extern void _ZN6S782C2D0Ev();
extern void _ZN6S782C42v4Ev();
extern void _ZN6S782C42v5Ev();
extern void _ZN6S782C42v6Ev();
extern void _ZN6S782C42v7Ev();
extern void _ZN6S782C42v8Ev();
extern void _ZN6S782C42v9Ev();
extern void _ZN6S782C43v10Ev();
extern void _ZN6S782C43v11Ev();
extern void _ZN6S782C43v12Ev();
extern void _ZN6S782C43v13Ev();
extern void _ZN6S782C43v14Ev();
extern void _ZN6S782C43v15Ev();
extern void _ZN6S782C43v16Ev();
extern void _ZN6S782C43v17Ev();
extern void _ZN6S782C43v18Ev();
extern void _ZN6S782C43v19Ev();
extern void _ZN6S782C43v20Ev();
extern void _ZN6S782C43v21Ev();
extern void _ZN6S782C43v22Ev();
extern void _ZN6S782C43v23Ev();
extern void _ZN6S782C43v24Ev();
extern void _ZN6S782C43v25Ev();
extern void _ZN6S782C43v26Ev();
extern void _ZN6S782C43v27Ev();
extern void _ZN6S782C43v28Ev();
extern void _ZN6S782C43v29Ev();
extern void _ZN6S782C43v30Ev();
extern void _ZN6S782C43v31Ev();
extern void _ZN6S782C43v32Ev();
extern void _ZN6S782C43v33Ev();
extern void _ZN6S782C43v34Ev();
extern void _ZN6S782C43v35Ev();
extern void _ZN6S782C43v36Ev();
extern void _ZN6S782C43v37Ev();
extern void _ZN6S782C43v38Ev();
extern void _ZN6S782C43v39Ev();
extern void _ZN6S782C43v40Ev();
extern void _ZN6S782C43v41Ev();
extern void _ZN6S782C43v42Ev();
extern void _ZN6S782C43v43Ev();
extern void _ZN6S782C43v44Ev();
extern void _ZN6S782C43v45Ev();
extern void _ZN6S782C43v46Ev();
extern void _ZN6S782C43v47Ev();
extern void _ZN6S782C43v48Ev();
extern void _ZN6S782C43v49Ev();
extern void _ZN6S782C43v50Ev();
extern void _ZN6S782C43v51Ev();
extern void _ZN6S782C43v52Ev();
extern void _ZN6S782C43v53Ev();
extern void _ZN6S782C43v54Ev();
extern void _ZN6S782C43v55Ev();
extern void _ZN6S782C43v56Ev();
extern void _ZN6S782C43v57Ev();
extern void _ZN6S782C43v58Ev();
extern void _ZN6S782C43v59Ev();
extern void _ZN6S782C43v60Ev();
extern void _ZN6S782C43v61Ev();
extern void _ZN6S782C43v62Ev();
extern void _ZN6S782C43v63Ev();
extern void _ZN6S782C43v64Ev();
extern void _ZN6S782C43v65Ev();
extern void _ZN6S782C43v66Ev();
extern void _ZN6S782C43v67Ev();
extern void _ZN6S782C43v68Ev();
extern void _ZN6S782C43v69Ev();
extern void _ZN6S782C43v70Ev();
extern void _ZN6S782C43v71Ev();
extern void _ZN6S782C43v72Ev();
extern void _ZN6S782C43v73Ev();
extern void _ZN6S782C43v74Ev();
extern void _ZN6S782C43v75Ev();
extern void _ZN6S782C43v76Ev();
extern void _ZN6S782C43v77Ev();
extern void _ZN6S782C43v78Ev();
extern void _ZN6S782C43v79Ev();
extern void _ZN6S782C43v80Ev();
extern void _ZN6S782C43v81Ev();
extern void _ZN6S782C43v82Ev();
extern void _ZN6S782C43v83Ev();
extern void _ZN6S782C43v84Ev();
extern void _ZN6S782C43v85Ev();
extern void _ZN6S782C43v86Ev();
extern void _ZN6S782C43v87Ev();
extern void _ZN6S782C43v88Ev();
extern void _ZN6S782C43v89Ev();
extern void _ZN6S782C43v90Ev();
extern void _ZN6S782C43v91Ev();
extern void _ZN6S782C43v92Ev();
extern void _ZN6S782C43v93Ev();
extern void _ZN6S782C43v94Ev();
extern void _ZN6S782C43v95Ev();
extern void _ZN6S782C43v96Ev();
extern void _ZN6S782C43v97Ev();
extern void _ZN6S782C43v98Ev();
extern void _ZN6S782C43v99Ev();
extern void _ZN6S782C44v100Ev();
extern void _ZN6S782C44v101Ev();
extern void _ZN6S782C44v102Ev();
extern void _ZN6S782C44v103Ev();
extern void _ZN6S782C44v104Ev();
extern void _ZN6S782C44v105Ev();
extern void _ZN6S782C44v106Ev();
extern void _ZN6S782C44v107Ev();
extern void _ZN6S782C44v108Ev();
extern void _ZN6S782C44v109Ev();
extern void _ZN6S782C44v110Ev();
extern void _ZN6S782C44v111Ev();
extern void _ZN6S782C44v112Ev();
extern void _ZN6S782C44v113Ev();
extern void _ZN6S782C44v114Ev();
extern void _ZN6S782C44v115Ev();
extern void _ZN6S782C44v116Ev();
extern void _ZN6S782C44v117Ev();
extern void _ZN6S782C44v118Ev();
extern void _ZN6S782C44v119Ev();
extern void _ZN6S782C44v120Ev();
extern void _ZN6S782C44v121Ev();
extern void _ZN6S782C44v122Ev();
extern void _ZN6S782C44v123Ev();
extern void _ZN6S782C44v124Ev();
extern void _ZN6S782C44v125Ev();
extern void _ZN6S782C34v126Ev();
extern void _ZN6S782C34v127Ev();
extern void _ZN6S782C34v128Ev();
extern void _ZN6S782C34v129Ev();
extern void _ZN6S782C34v130Ev();
extern void _ZN6S782C34v131Ev();
extern void _ZN6S782C34v132Ev();
extern void _ZN6S782C34v133Ev();
extern void _ZN6S782C34v134Ev();
extern void _ZN6S782C34v135Ev();
extern void _ZN6S782C34v136Ev();
extern void _ZN6S782C34v137Ev();
extern void _ZN6S782C34v138Ev();
extern void _ZN6S782C34v139Ev();
extern void _ZN6S782C34v140Ev();
extern void _ZN6S782C34v141Ev();
extern void _ZN6S782C34v142Ev();
extern void _ZN6S782C34v143Ev();
extern void _ZN6S782C24v144Ev();
static  VTBL_ENTRY vtc_S782C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S782C2[0]),
  (VTBL_ENTRY)&_ZN6S782C2D1Ev,
  (VTBL_ENTRY)&_ZN6S782C2D0Ev,
  (VTBL_ENTRY)&_ZN6S782C42v4Ev,
  (VTBL_ENTRY)&_ZN6S782C42v5Ev,
  (VTBL_ENTRY)&_ZN6S782C42v6Ev,
  (VTBL_ENTRY)&_ZN6S782C42v7Ev,
  (VTBL_ENTRY)&_ZN6S782C42v8Ev,
  (VTBL_ENTRY)&_ZN6S782C42v9Ev,
  (VTBL_ENTRY)&_ZN6S782C43v10Ev,
  (VTBL_ENTRY)&_ZN6S782C43v11Ev,
  (VTBL_ENTRY)&_ZN6S782C43v12Ev,
  (VTBL_ENTRY)&_ZN6S782C43v13Ev,
  (VTBL_ENTRY)&_ZN6S782C43v14Ev,
  (VTBL_ENTRY)&_ZN6S782C43v15Ev,
  (VTBL_ENTRY)&_ZN6S782C43v16Ev,
  (VTBL_ENTRY)&_ZN6S782C43v17Ev,
  (VTBL_ENTRY)&_ZN6S782C43v18Ev,
  (VTBL_ENTRY)&_ZN6S782C43v19Ev,
  (VTBL_ENTRY)&_ZN6S782C43v20Ev,
  (VTBL_ENTRY)&_ZN6S782C43v21Ev,
  (VTBL_ENTRY)&_ZN6S782C43v22Ev,
  (VTBL_ENTRY)&_ZN6S782C43v23Ev,
  (VTBL_ENTRY)&_ZN6S782C43v24Ev,
  (VTBL_ENTRY)&_ZN6S782C43v25Ev,
  (VTBL_ENTRY)&_ZN6S782C43v26Ev,
  (VTBL_ENTRY)&_ZN6S782C43v27Ev,
  (VTBL_ENTRY)&_ZN6S782C43v28Ev,
  (VTBL_ENTRY)&_ZN6S782C43v29Ev,
  (VTBL_ENTRY)&_ZN6S782C43v30Ev,
  (VTBL_ENTRY)&_ZN6S782C43v31Ev,
  (VTBL_ENTRY)&_ZN6S782C43v32Ev,
  (VTBL_ENTRY)&_ZN6S782C43v33Ev,
  (VTBL_ENTRY)&_ZN6S782C43v34Ev,
  (VTBL_ENTRY)&_ZN6S782C43v35Ev,
  (VTBL_ENTRY)&_ZN6S782C43v36Ev,
  (VTBL_ENTRY)&_ZN6S782C43v37Ev,
  (VTBL_ENTRY)&_ZN6S782C43v38Ev,
  (VTBL_ENTRY)&_ZN6S782C43v39Ev,
  (VTBL_ENTRY)&_ZN6S782C43v40Ev,
  (VTBL_ENTRY)&_ZN6S782C43v41Ev,
  (VTBL_ENTRY)&_ZN6S782C43v42Ev,
  (VTBL_ENTRY)&_ZN6S782C43v43Ev,
  (VTBL_ENTRY)&_ZN6S782C43v44Ev,
  (VTBL_ENTRY)&_ZN6S782C43v45Ev,
  (VTBL_ENTRY)&_ZN6S782C43v46Ev,
  (VTBL_ENTRY)&_ZN6S782C43v47Ev,
  (VTBL_ENTRY)&_ZN6S782C43v48Ev,
  (VTBL_ENTRY)&_ZN6S782C43v49Ev,
  (VTBL_ENTRY)&_ZN6S782C43v50Ev,
  (VTBL_ENTRY)&_ZN6S782C43v51Ev,
  (VTBL_ENTRY)&_ZN6S782C43v52Ev,
  (VTBL_ENTRY)&_ZN6S782C43v53Ev,
  (VTBL_ENTRY)&_ZN6S782C43v54Ev,
  (VTBL_ENTRY)&_ZN6S782C43v55Ev,
  (VTBL_ENTRY)&_ZN6S782C43v56Ev,
  (VTBL_ENTRY)&_ZN6S782C43v57Ev,
  (VTBL_ENTRY)&_ZN6S782C43v58Ev,
  (VTBL_ENTRY)&_ZN6S782C43v59Ev,
  (VTBL_ENTRY)&_ZN6S782C43v60Ev,
  (VTBL_ENTRY)&_ZN6S782C43v61Ev,
  (VTBL_ENTRY)&_ZN6S782C43v62Ev,
  (VTBL_ENTRY)&_ZN6S782C43v63Ev,
  (VTBL_ENTRY)&_ZN6S782C43v64Ev,
  (VTBL_ENTRY)&_ZN6S782C43v65Ev,
  (VTBL_ENTRY)&_ZN6S782C43v66Ev,
  (VTBL_ENTRY)&_ZN6S782C43v67Ev,
  (VTBL_ENTRY)&_ZN6S782C43v68Ev,
  (VTBL_ENTRY)&_ZN6S782C43v69Ev,
  (VTBL_ENTRY)&_ZN6S782C43v70Ev,
  (VTBL_ENTRY)&_ZN6S782C43v71Ev,
  (VTBL_ENTRY)&_ZN6S782C43v72Ev,
  (VTBL_ENTRY)&_ZN6S782C43v73Ev,
  (VTBL_ENTRY)&_ZN6S782C43v74Ev,
  (VTBL_ENTRY)&_ZN6S782C43v75Ev,
  (VTBL_ENTRY)&_ZN6S782C43v76Ev,
  (VTBL_ENTRY)&_ZN6S782C43v77Ev,
  (VTBL_ENTRY)&_ZN6S782C43v78Ev,
  (VTBL_ENTRY)&_ZN6S782C43v79Ev,
  (VTBL_ENTRY)&_ZN6S782C43v80Ev,
  (VTBL_ENTRY)&_ZN6S782C43v81Ev,
  (VTBL_ENTRY)&_ZN6S782C43v82Ev,
  (VTBL_ENTRY)&_ZN6S782C43v83Ev,
  (VTBL_ENTRY)&_ZN6S782C43v84Ev,
  (VTBL_ENTRY)&_ZN6S782C43v85Ev,
  (VTBL_ENTRY)&_ZN6S782C43v86Ev,
  (VTBL_ENTRY)&_ZN6S782C43v87Ev,
  (VTBL_ENTRY)&_ZN6S782C43v88Ev,
  (VTBL_ENTRY)&_ZN6S782C43v89Ev,
  (VTBL_ENTRY)&_ZN6S782C43v90Ev,
  (VTBL_ENTRY)&_ZN6S782C43v91Ev,
  (VTBL_ENTRY)&_ZN6S782C43v92Ev,
  (VTBL_ENTRY)&_ZN6S782C43v93Ev,
  (VTBL_ENTRY)&_ZN6S782C43v94Ev,
  (VTBL_ENTRY)&_ZN6S782C43v95Ev,
  (VTBL_ENTRY)&_ZN6S782C43v96Ev,
  (VTBL_ENTRY)&_ZN6S782C43v97Ev,
  (VTBL_ENTRY)&_ZN6S782C43v98Ev,
  (VTBL_ENTRY)&_ZN6S782C43v99Ev,
  (VTBL_ENTRY)&_ZN6S782C44v100Ev,
  (VTBL_ENTRY)&_ZN6S782C44v101Ev,
  (VTBL_ENTRY)&_ZN6S782C44v102Ev,
  (VTBL_ENTRY)&_ZN6S782C44v103Ev,
  (VTBL_ENTRY)&_ZN6S782C44v104Ev,
  (VTBL_ENTRY)&_ZN6S782C44v105Ev,
  (VTBL_ENTRY)&_ZN6S782C44v106Ev,
  (VTBL_ENTRY)&_ZN6S782C44v107Ev,
  (VTBL_ENTRY)&_ZN6S782C44v108Ev,
  (VTBL_ENTRY)&_ZN6S782C44v109Ev,
  (VTBL_ENTRY)&_ZN6S782C44v110Ev,
  (VTBL_ENTRY)&_ZN6S782C44v111Ev,
  (VTBL_ENTRY)&_ZN6S782C44v112Ev,
  (VTBL_ENTRY)&_ZN6S782C44v113Ev,
  (VTBL_ENTRY)&_ZN6S782C44v114Ev,
  (VTBL_ENTRY)&_ZN6S782C44v115Ev,
  (VTBL_ENTRY)&_ZN6S782C44v116Ev,
  (VTBL_ENTRY)&_ZN6S782C44v117Ev,
  (VTBL_ENTRY)&_ZN6S782C44v118Ev,
  (VTBL_ENTRY)&_ZN6S782C44v119Ev,
  (VTBL_ENTRY)&_ZN6S782C44v120Ev,
  (VTBL_ENTRY)&_ZN6S782C44v121Ev,
  (VTBL_ENTRY)&_ZN6S782C44v122Ev,
  (VTBL_ENTRY)&_ZN6S782C44v123Ev,
  (VTBL_ENTRY)&_ZN6S782C44v124Ev,
  (VTBL_ENTRY)&_ZN6S782C44v125Ev,
  (VTBL_ENTRY)&_ZN6S782C34v126Ev,
  (VTBL_ENTRY)&_ZN6S782C34v127Ev,
  (VTBL_ENTRY)&_ZN6S782C34v128Ev,
  (VTBL_ENTRY)&_ZN6S782C34v129Ev,
  (VTBL_ENTRY)&_ZN6S782C34v130Ev,
  (VTBL_ENTRY)&_ZN6S782C34v131Ev,
  (VTBL_ENTRY)&_ZN6S782C34v132Ev,
  (VTBL_ENTRY)&_ZN6S782C34v133Ev,
  (VTBL_ENTRY)&_ZN6S782C34v134Ev,
  (VTBL_ENTRY)&_ZN6S782C34v135Ev,
  (VTBL_ENTRY)&_ZN6S782C34v136Ev,
  (VTBL_ENTRY)&_ZN6S782C34v137Ev,
  (VTBL_ENTRY)&_ZN6S782C34v138Ev,
  (VTBL_ENTRY)&_ZN6S782C34v139Ev,
  (VTBL_ENTRY)&_ZN6S782C34v140Ev,
  (VTBL_ENTRY)&_ZN6S782C34v141Ev,
  (VTBL_ENTRY)&_ZN6S782C34v142Ev,
  (VTBL_ENTRY)&_ZN6S782C34v143Ev,
  (VTBL_ENTRY)&_ZN6S782C24v144Ev,
};
extern VTBL_ENTRY _ZTI6S782C2[];
extern  VTBL_ENTRY _ZTV6S782C2[];
Class_Descriptor cd_S782C2 = {  "S782C2", // class name
  bases_S782C2, 3,
  &(vtc_S782C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S782C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S782C2),145, //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  S782C1  : S782C2 {
  virtual void  v1(); // _ZN6S782C12v1Ev
  virtual void  v2(); // _ZN6S782C12v2Ev
  virtual void  v3(); // _ZN6S782C12v3Ev
  ~S782C1(); // tgen
  S782C1(); // tgen
};
//SIG(1 S782C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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} v144} v1 v2 v3}


void  S782C1 ::v1(){vfunc_called(this, "_ZN6S782C12v1Ev");}
void  S782C1 ::v2(){vfunc_called(this, "_ZN6S782C12v2Ev");}
void  S782C1 ::v3(){vfunc_called(this, "_ZN6S782C12v3Ev");}
S782C1 ::~S782C1(){ note_dtor("S782C1", this);} // tgen
S782C1 ::S782C1(){ note_ctor("S782C1", this);} // tgen

static void Test_S782C1()
{
  extern Class_Descriptor cd_S782C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S782C1, buf);
    S782C1 *dp, &lv = *(dp=new (buf) S782C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S782C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S782C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S782C4*)(S782C3*)(S782C2*), 0, "S782C1");
    check_base_class_offset(lv, (S782C4*)(S782C3*)(S782C2*), 0, "S782C1");
    check_base_class_offset(lv, (S782C3*)(S782C2*), 0, "S782C1");
    check_base_class_offset(lv, (S782C2*), 0, "S782C1");
    test_class_info(&lv, &cd_S782C1);
    dp->~S782C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS782C1(Test_S782C1, "S782C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S782C1C1Ev();
extern void _ZN6S782C1D1Ev();
Name_Map name_map_S782C1[] = {
  NSPAIR(_ZN6S782C1C1Ev),
  NSPAIR(_ZN6S782C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S782C4;
extern VTBL_ENTRY _ZTI6S782C4[];
extern  VTBL_ENTRY _ZTV6S782C4[];
extern Class_Descriptor cd_S782C3;
extern VTBL_ENTRY _ZTI6S782C3[];
extern  VTBL_ENTRY _ZTV6S782C3[];
extern Class_Descriptor cd_S782C2;
extern VTBL_ENTRY _ZTI6S782C2[];
extern  VTBL_ENTRY _ZTV6S782C2[];
static Base_Class bases_S782C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S782C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S782C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S782C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S782C1[];
extern void _ZN6S782C1D1Ev();
extern void _ZN6S782C1D0Ev();
extern void _ZN6S782C42v4Ev();
extern void _ZN6S782C42v5Ev();
extern void _ZN6S782C42v6Ev();
extern void _ZN6S782C42v7Ev();
extern void _ZN6S782C42v8Ev();
extern void _ZN6S782C42v9Ev();
extern void _ZN6S782C43v10Ev();
extern void _ZN6S782C43v11Ev();
extern void _ZN6S782C43v12Ev();
extern void _ZN6S782C43v13Ev();
extern void _ZN6S782C43v14Ev();
extern void _ZN6S782C43v15Ev();
extern void _ZN6S782C43v16Ev();
extern void _ZN6S782C43v17Ev();
extern void _ZN6S782C43v18Ev();
extern void _ZN6S782C43v19Ev();
extern void _ZN6S782C43v20Ev();
extern void _ZN6S782C43v21Ev();
extern void _ZN6S782C43v22Ev();
extern void _ZN6S782C43v23Ev();
extern void _ZN6S782C43v24Ev();
extern void _ZN6S782C43v25Ev();
extern void _ZN6S782C43v26Ev();
extern void _ZN6S782C43v27Ev();
extern void _ZN6S782C43v28Ev();
extern void _ZN6S782C43v29Ev();
extern void _ZN6S782C43v30Ev();
extern void _ZN6S782C43v31Ev();
extern void _ZN6S782C43v32Ev();
extern void _ZN6S782C43v33Ev();
extern void _ZN6S782C43v34Ev();
extern void _ZN6S782C43v35Ev();
extern void _ZN6S782C43v36Ev();
extern void _ZN6S782C43v37Ev();
extern void _ZN6S782C43v38Ev();
extern void _ZN6S782C43v39Ev();
extern void _ZN6S782C43v40Ev();
extern void _ZN6S782C43v41Ev();
extern void _ZN6S782C43v42Ev();
extern void _ZN6S782C43v43Ev();
extern void _ZN6S782C43v44Ev();
extern void _ZN6S782C43v45Ev();
extern void _ZN6S782C43v46Ev();
extern void _ZN6S782C43v47Ev();
extern void _ZN6S782C43v48Ev();
extern void _ZN6S782C43v49Ev();
extern void _ZN6S782C43v50Ev();
extern void _ZN6S782C43v51Ev();
extern void _ZN6S782C43v52Ev();
extern void _ZN6S782C43v53Ev();
extern void _ZN6S782C43v54Ev();
extern void _ZN6S782C43v55Ev();
extern void _ZN6S782C43v56Ev();
extern void _ZN6S782C43v57Ev();
extern void _ZN6S782C43v58Ev();
extern void _ZN6S782C43v59Ev();
extern void _ZN6S782C43v60Ev();
extern void _ZN6S782C43v61Ev();
extern void _ZN6S782C43v62Ev();
extern void _ZN6S782C43v63Ev();
extern void _ZN6S782C43v64Ev();
extern void _ZN6S782C43v65Ev();
extern void _ZN6S782C43v66Ev();
extern void _ZN6S782C43v67Ev();
extern void _ZN6S782C43v68Ev();
extern void _ZN6S782C43v69Ev();
extern void _ZN6S782C43v70Ev();
extern void _ZN6S782C43v71Ev();
extern void _ZN6S782C43v72Ev();
extern void _ZN6S782C43v73Ev();
extern void _ZN6S782C43v74Ev();
extern void _ZN6S782C43v75Ev();
extern void _ZN6S782C43v76Ev();
extern void _ZN6S782C43v77Ev();
extern void _ZN6S782C43v78Ev();
extern void _ZN6S782C43v79Ev();
extern void _ZN6S782C43v80Ev();
extern void _ZN6S782C43v81Ev();
extern void _ZN6S782C43v82Ev();
extern void _ZN6S782C43v83Ev();
extern void _ZN6S782C43v84Ev();
extern void _ZN6S782C43v85Ev();
extern void _ZN6S782C43v86Ev();
extern void _ZN6S782C43v87Ev();
extern void _ZN6S782C43v88Ev();
extern void _ZN6S782C43v89Ev();
extern void _ZN6S782C43v90Ev();
extern void _ZN6S782C43v91Ev();
extern void _ZN6S782C43v92Ev();
extern void _ZN6S782C43v93Ev();
extern void _ZN6S782C43v94Ev();
extern void _ZN6S782C43v95Ev();
extern void _ZN6S782C43v96Ev();
extern void _ZN6S782C43v97Ev();
extern void _ZN6S782C43v98Ev();
extern void _ZN6S782C43v99Ev();
extern void _ZN6S782C44v100Ev();
extern void _ZN6S782C44v101Ev();
extern void _ZN6S782C44v102Ev();
extern void _ZN6S782C44v103Ev();
extern void _ZN6S782C44v104Ev();
extern void _ZN6S782C44v105Ev();
extern void _ZN6S782C44v106Ev();
extern void _ZN6S782C44v107Ev();
extern void _ZN6S782C44v108Ev();
extern void _ZN6S782C44v109Ev();
extern void _ZN6S782C44v110Ev();
extern void _ZN6S782C44v111Ev();
extern void _ZN6S782C44v112Ev();
extern void _ZN6S782C44v113Ev();
extern void _ZN6S782C44v114Ev();
extern void _ZN6S782C44v115Ev();
extern void _ZN6S782C44v116Ev();
extern void _ZN6S782C44v117Ev();
extern void _ZN6S782C44v118Ev();
extern void _ZN6S782C44v119Ev();
extern void _ZN6S782C44v120Ev();
extern void _ZN6S782C44v121Ev();
extern void _ZN6S782C44v122Ev();
extern void _ZN6S782C44v123Ev();
extern void _ZN6S782C44v124Ev();
extern void _ZN6S782C44v125Ev();
extern void _ZN6S782C34v126Ev();
extern void _ZN6S782C34v127Ev();
extern void _ZN6S782C34v128Ev();
extern void _ZN6S782C34v129Ev();
extern void _ZN6S782C34v130Ev();
extern void _ZN6S782C34v131Ev();
extern void _ZN6S782C34v132Ev();
extern void _ZN6S782C34v133Ev();
extern void _ZN6S782C34v134Ev();
extern void _ZN6S782C34v135Ev();
extern void _ZN6S782C34v136Ev();
extern void _ZN6S782C34v137Ev();
extern void _ZN6S782C34v138Ev();
extern void _ZN6S782C34v139Ev();
extern void _ZN6S782C34v140Ev();
extern void _ZN6S782C34v141Ev();
extern void _ZN6S782C34v142Ev();
extern void _ZN6S782C34v143Ev();
extern void _ZN6S782C24v144Ev();
extern void _ZN6S782C12v1Ev();
extern void _ZN6S782C12v2Ev();
extern void _ZN6S782C12v3Ev();
static  VTBL_ENTRY vtc_S782C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S782C1[0]),
  (VTBL_ENTRY)&_ZN6S782C1D1Ev,
  (VTBL_ENTRY)&_ZN6S782C1D0Ev,
  (VTBL_ENTRY)&_ZN6S782C42v4Ev,
  (VTBL_ENTRY)&_ZN6S782C42v5Ev,
  (VTBL_ENTRY)&_ZN6S782C42v6Ev,
  (VTBL_ENTRY)&_ZN6S782C42v7Ev,
  (VTBL_ENTRY)&_ZN6S782C42v8Ev,
  (VTBL_ENTRY)&_ZN6S782C42v9Ev,
  (VTBL_ENTRY)&_ZN6S782C43v10Ev,
  (VTBL_ENTRY)&_ZN6S782C43v11Ev,
  (VTBL_ENTRY)&_ZN6S782C43v12Ev,
  (VTBL_ENTRY)&_ZN6S782C43v13Ev,
  (VTBL_ENTRY)&_ZN6S782C43v14Ev,
  (VTBL_ENTRY)&_ZN6S782C43v15Ev,
  (VTBL_ENTRY)&_ZN6S782C43v16Ev,
  (VTBL_ENTRY)&_ZN6S782C43v17Ev,
  (VTBL_ENTRY)&_ZN6S782C43v18Ev,
  (VTBL_ENTRY)&_ZN6S782C43v19Ev,
  (VTBL_ENTRY)&_ZN6S782C43v20Ev,
  (VTBL_ENTRY)&_ZN6S782C43v21Ev,
  (VTBL_ENTRY)&_ZN6S782C43v22Ev,
  (VTBL_ENTRY)&_ZN6S782C43v23Ev,
  (VTBL_ENTRY)&_ZN6S782C43v24Ev,
  (VTBL_ENTRY)&_ZN6S782C43v25Ev,
  (VTBL_ENTRY)&_ZN6S782C43v26Ev,
  (VTBL_ENTRY)&_ZN6S782C43v27Ev,
  (VTBL_ENTRY)&_ZN6S782C43v28Ev,
  (VTBL_ENTRY)&_ZN6S782C43v29Ev,
  (VTBL_ENTRY)&_ZN6S782C43v30Ev,
  (VTBL_ENTRY)&_ZN6S782C43v31Ev,
  (VTBL_ENTRY)&_ZN6S782C43v32Ev,
  (VTBL_ENTRY)&_ZN6S782C43v33Ev,
  (VTBL_ENTRY)&_ZN6S782C43v34Ev,
  (VTBL_ENTRY)&_ZN6S782C43v35Ev,
  (VTBL_ENTRY)&_ZN6S782C43v36Ev,
  (VTBL_ENTRY)&_ZN6S782C43v37Ev,
  (VTBL_ENTRY)&_ZN6S782C43v38Ev,
  (VTBL_ENTRY)&_ZN6S782C43v39Ev,
  (VTBL_ENTRY)&_ZN6S782C43v40Ev,
  (VTBL_ENTRY)&_ZN6S782C43v41Ev,
  (VTBL_ENTRY)&_ZN6S782C43v42Ev,
  (VTBL_ENTRY)&_ZN6S782C43v43Ev,
  (VTBL_ENTRY)&_ZN6S782C43v44Ev,
  (VTBL_ENTRY)&_ZN6S782C43v45Ev,
  (VTBL_ENTRY)&_ZN6S782C43v46Ev,
  (VTBL_ENTRY)&_ZN6S782C43v47Ev,
  (VTBL_ENTRY)&_ZN6S782C43v48Ev,
  (VTBL_ENTRY)&_ZN6S782C43v49Ev,
  (VTBL_ENTRY)&_ZN6S782C43v50Ev,
  (VTBL_ENTRY)&_ZN6S782C43v51Ev,
  (VTBL_ENTRY)&_ZN6S782C43v52Ev,
  (VTBL_ENTRY)&_ZN6S782C43v53Ev,
  (VTBL_ENTRY)&_ZN6S782C43v54Ev,
  (VTBL_ENTRY)&_ZN6S782C43v55Ev,
  (VTBL_ENTRY)&_ZN6S782C43v56Ev,
  (VTBL_ENTRY)&_ZN6S782C43v57Ev,
  (VTBL_ENTRY)&_ZN6S782C43v58Ev,
  (VTBL_ENTRY)&_ZN6S782C43v59Ev,
  (VTBL_ENTRY)&_ZN6S782C43v60Ev,
  (VTBL_ENTRY)&_ZN6S782C43v61Ev,
  (VTBL_ENTRY)&_ZN6S782C43v62Ev,
  (VTBL_ENTRY)&_ZN6S782C43v63Ev,
  (VTBL_ENTRY)&_ZN6S782C43v64Ev,
  (VTBL_ENTRY)&_ZN6S782C43v65Ev,
  (VTBL_ENTRY)&_ZN6S782C43v66Ev,
  (VTBL_ENTRY)&_ZN6S782C43v67Ev,
  (VTBL_ENTRY)&_ZN6S782C43v68Ev,
  (VTBL_ENTRY)&_ZN6S782C43v69Ev,
  (VTBL_ENTRY)&_ZN6S782C43v70Ev,
  (VTBL_ENTRY)&_ZN6S782C43v71Ev,
  (VTBL_ENTRY)&_ZN6S782C43v72Ev,
  (VTBL_ENTRY)&_ZN6S782C43v73Ev,
  (VTBL_ENTRY)&_ZN6S782C43v74Ev,
  (VTBL_ENTRY)&_ZN6S782C43v75Ev,
  (VTBL_ENTRY)&_ZN6S782C43v76Ev,
  (VTBL_ENTRY)&_ZN6S782C43v77Ev,
  (VTBL_ENTRY)&_ZN6S782C43v78Ev,
  (VTBL_ENTRY)&_ZN6S782C43v79Ev,
  (VTBL_ENTRY)&_ZN6S782C43v80Ev,
  (VTBL_ENTRY)&_ZN6S782C43v81Ev,
  (VTBL_ENTRY)&_ZN6S782C43v82Ev,
  (VTBL_ENTRY)&_ZN6S782C43v83Ev,
  (VTBL_ENTRY)&_ZN6S782C43v84Ev,
  (VTBL_ENTRY)&_ZN6S782C43v85Ev,
  (VTBL_ENTRY)&_ZN6S782C43v86Ev,
  (VTBL_ENTRY)&_ZN6S782C43v87Ev,
  (VTBL_ENTRY)&_ZN6S782C43v88Ev,
  (VTBL_ENTRY)&_ZN6S782C43v89Ev,
  (VTBL_ENTRY)&_ZN6S782C43v90Ev,
  (VTBL_ENTRY)&_ZN6S782C43v91Ev,
  (VTBL_ENTRY)&_ZN6S782C43v92Ev,
  (VTBL_ENTRY)&_ZN6S782C43v93Ev,
  (VTBL_ENTRY)&_ZN6S782C43v94Ev,
  (VTBL_ENTRY)&_ZN6S782C43v95Ev,
  (VTBL_ENTRY)&_ZN6S782C43v96Ev,
  (VTBL_ENTRY)&_ZN6S782C43v97Ev,
  (VTBL_ENTRY)&_ZN6S782C43v98Ev,
  (VTBL_ENTRY)&_ZN6S782C43v99Ev,
  (VTBL_ENTRY)&_ZN6S782C44v100Ev,
  (VTBL_ENTRY)&_ZN6S782C44v101Ev,
  (VTBL_ENTRY)&_ZN6S782C44v102Ev,
  (VTBL_ENTRY)&_ZN6S782C44v103Ev,
  (VTBL_ENTRY)&_ZN6S782C44v104Ev,
  (VTBL_ENTRY)&_ZN6S782C44v105Ev,
  (VTBL_ENTRY)&_ZN6S782C44v106Ev,
  (VTBL_ENTRY)&_ZN6S782C44v107Ev,
  (VTBL_ENTRY)&_ZN6S782C44v108Ev,
  (VTBL_ENTRY)&_ZN6S782C44v109Ev,
  (VTBL_ENTRY)&_ZN6S782C44v110Ev,
  (VTBL_ENTRY)&_ZN6S782C44v111Ev,
  (VTBL_ENTRY)&_ZN6S782C44v112Ev,
  (VTBL_ENTRY)&_ZN6S782C44v113Ev,
  (VTBL_ENTRY)&_ZN6S782C44v114Ev,
  (VTBL_ENTRY)&_ZN6S782C44v115Ev,
  (VTBL_ENTRY)&_ZN6S782C44v116Ev,
  (VTBL_ENTRY)&_ZN6S782C44v117Ev,
  (VTBL_ENTRY)&_ZN6S782C44v118Ev,
  (VTBL_ENTRY)&_ZN6S782C44v119Ev,
  (VTBL_ENTRY)&_ZN6S782C44v120Ev,
  (VTBL_ENTRY)&_ZN6S782C44v121Ev,
  (VTBL_ENTRY)&_ZN6S782C44v122Ev,
  (VTBL_ENTRY)&_ZN6S782C44v123Ev,
  (VTBL_ENTRY)&_ZN6S782C44v124Ev,
  (VTBL_ENTRY)&_ZN6S782C44v125Ev,
  (VTBL_ENTRY)&_ZN6S782C34v126Ev,
  (VTBL_ENTRY)&_ZN6S782C34v127Ev,
  (VTBL_ENTRY)&_ZN6S782C34v128Ev,
  (VTBL_ENTRY)&_ZN6S782C34v129Ev,
  (VTBL_ENTRY)&_ZN6S782C34v130Ev,
  (VTBL_ENTRY)&_ZN6S782C34v131Ev,
  (VTBL_ENTRY)&_ZN6S782C34v132Ev,
  (VTBL_ENTRY)&_ZN6S782C34v133Ev,
  (VTBL_ENTRY)&_ZN6S782C34v134Ev,
  (VTBL_ENTRY)&_ZN6S782C34v135Ev,
  (VTBL_ENTRY)&_ZN6S782C34v136Ev,
  (VTBL_ENTRY)&_ZN6S782C34v137Ev,
  (VTBL_ENTRY)&_ZN6S782C34v138Ev,
  (VTBL_ENTRY)&_ZN6S782C34v139Ev,
  (VTBL_ENTRY)&_ZN6S782C34v140Ev,
  (VTBL_ENTRY)&_ZN6S782C34v141Ev,
  (VTBL_ENTRY)&_ZN6S782C34v142Ev,
  (VTBL_ENTRY)&_ZN6S782C34v143Ev,
  (VTBL_ENTRY)&_ZN6S782C24v144Ev,
  (VTBL_ENTRY)&_ZN6S782C12v1Ev,
  (VTBL_ENTRY)&_ZN6S782C12v2Ev,
  (VTBL_ENTRY)&_ZN6S782C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S782C1[];
extern  VTBL_ENTRY _ZTV6S782C1[];
Class_Descriptor cd_S782C1 = {  "S782C1", // class name
  bases_S782C1, 4,
  &(vtc_S782C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S782C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S782C1),148, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1811C3  : S785C5_nt {
  virtual void  v5(); // _ZN7S1811C32v5Ev
  virtual void  v6(); // _ZN7S1811C32v6Ev
  virtual void  v7(); // _ZN7S1811C32v7Ev
  virtual void  v8(); // _ZN7S1811C32v8Ev
  virtual void  v9(); // _ZN7S1811C32v9Ev
  virtual void  v10(); // _ZN7S1811C33v10Ev
  virtual void  v11(); // _ZN7S1811C33v11Ev
  virtual void  v12(); // _ZN7S1811C33v12Ev
  virtual void  v13(); // _ZN7S1811C33v13Ev
  virtual void  v14(); // _ZN7S1811C33v14Ev
  virtual void  v15(); // _ZN7S1811C33v15Ev
  virtual void  v16(); // _ZN7S1811C33v16Ev
  virtual void  v17(); // _ZN7S1811C33v17Ev
  virtual void  v18(); // _ZN7S1811C33v18Ev
  virtual void  v19(); // _ZN7S1811C33v19Ev
  virtual void  v20(); // _ZN7S1811C33v20Ev
  virtual void  v21(); // _ZN7S1811C33v21Ev
  virtual void  v22(); // _ZN7S1811C33v22Ev
  virtual void  v23(); // _ZN7S1811C33v23Ev
  virtual void  v24(); // _ZN7S1811C33v24Ev
  virtual void  v25(); // _ZN7S1811C33v25Ev
  virtual void  v26(); // _ZN7S1811C33v26Ev
  virtual void  v27(); // _ZN7S1811C33v27Ev
  virtual void  v28(); // _ZN7S1811C33v28Ev
  virtual void  v29(); // _ZN7S1811C33v29Ev
  virtual void  v30(); // _ZN7S1811C33v30Ev
  virtual void  v31(); // _ZN7S1811C33v31Ev
  virtual void  v32(); // _ZN7S1811C33v32Ev
  virtual void  v33(); // _ZN7S1811C33v33Ev
  virtual void  v34(); // _ZN7S1811C33v34Ev
  virtual void  v35(); // _ZN7S1811C33v35Ev
  virtual void  v36(); // _ZN7S1811C33v36Ev
  virtual void  v37(); // _ZN7S1811C33v37Ev
  virtual void  v38(); // _ZN7S1811C33v38Ev
  virtual void  v39(); // _ZN7S1811C33v39Ev
  virtual void  v40(); // _ZN7S1811C33v40Ev
  virtual void  v41(); // _ZN7S1811C33v41Ev
  virtual void  v42(); // _ZN7S1811C33v42Ev
  virtual void  v43(); // _ZN7S1811C33v43Ev
  virtual void  v44(); // _ZN7S1811C33v44Ev
  virtual void  v45(); // _ZN7S1811C33v45Ev
  virtual void  v46(); // _ZN7S1811C33v46Ev
  virtual void  v47(); // _ZN7S1811C33v47Ev
  virtual void  v48(); // _ZN7S1811C33v48Ev
  virtual void  v49(); // _ZN7S1811C33v49Ev
  virtual void  v50(); // _ZN7S1811C33v50Ev
  virtual void  v51(); // _ZN7S1811C33v51Ev
  virtual void  v52(); // _ZN7S1811C33v52Ev
  virtual void  v53(); // _ZN7S1811C33v53Ev
  virtual void  v54(); // _ZN7S1811C33v54Ev
  virtual void  v55(); // _ZN7S1811C33v55Ev
  virtual void  v56(); // _ZN7S1811C33v56Ev
  virtual void  v57(); // _ZN7S1811C33v57Ev
  virtual void  v58(); // _ZN7S1811C33v58Ev
  virtual void  v59(); // _ZN7S1811C33v59Ev
  virtual void  v60(); // _ZN7S1811C33v60Ev
  virtual void  v61(); // _ZN7S1811C33v61Ev
  virtual void  v62(); // _ZN7S1811C33v62Ev
  virtual void  v63(); // _ZN7S1811C33v63Ev
  virtual void  v64(); // _ZN7S1811C33v64Ev
  virtual void  v65(); // _ZN7S1811C33v65Ev
  virtual void  v66(); // _ZN7S1811C33v66Ev
  virtual void  v67(); // _ZN7S1811C33v67Ev
  virtual void  v68(); // _ZN7S1811C33v68Ev
  virtual void  v69(); // _ZN7S1811C33v69Ev
  virtual void  v70(); // _ZN7S1811C33v70Ev
  virtual void  v71(); // _ZN7S1811C33v71Ev
  virtual void  v72(); // _ZN7S1811C33v72Ev
  virtual void  v73(); // _ZN7S1811C33v73Ev
  virtual void  v74(); // _ZN7S1811C33v74Ev
  virtual void  v75(); // _ZN7S1811C33v75Ev
  virtual void  v76(); // _ZN7S1811C33v76Ev
  virtual void  v77(); // _ZN7S1811C33v77Ev
  virtual void  v78(); // _ZN7S1811C33v78Ev
  virtual void  v79(); // _ZN7S1811C33v79Ev
  virtual void  v80(); // _ZN7S1811C33v80Ev
  virtual void  v81(); // _ZN7S1811C33v81Ev
  virtual void  v82(); // _ZN7S1811C33v82Ev
  virtual void  v83(); // _ZN7S1811C33v83Ev
  virtual void  v84(); // _ZN7S1811C33v84Ev
  virtual void  v85(); // _ZN7S1811C33v85Ev
  virtual void  v86(); // _ZN7S1811C33v86Ev
  virtual void  v87(); // _ZN7S1811C33v87Ev
  virtual void  v88(); // _ZN7S1811C33v88Ev
  virtual void  v89(); // _ZN7S1811C33v89Ev
  virtual void  v90(); // _ZN7S1811C33v90Ev
  virtual void  v91(); // _ZN7S1811C33v91Ev
  virtual void  v92(); // _ZN7S1811C33v92Ev
  virtual void  v93(); // _ZN7S1811C33v93Ev
  virtual void  v94(); // _ZN7S1811C33v94Ev
  virtual void  v95(); // _ZN7S1811C33v95Ev
  virtual void  v96(); // _ZN7S1811C33v96Ev
  virtual void  v97(); // _ZN7S1811C33v97Ev
  virtual void  v98(); // _ZN7S1811C33v98Ev
  virtual void  v99(); // _ZN7S1811C33v99Ev
  virtual void  v100(); // _ZN7S1811C34v100Ev
  virtual void  v101(); // _ZN7S1811C34v101Ev
  virtual void  v102(); // _ZN7S1811C34v102Ev
  virtual void  v103(); // _ZN7S1811C34v103Ev
  virtual void  v104(); // _ZN7S1811C34v104Ev
  virtual void  v105(); // _ZN7S1811C34v105Ev
  virtual void  v106(); // _ZN7S1811C34v106Ev
  virtual void  v107(); // _ZN7S1811C34v107Ev
  virtual void  v108(); // _ZN7S1811C34v108Ev
  virtual void  v109(); // _ZN7S1811C34v109Ev
  virtual void  v110(); // _ZN7S1811C34v110Ev
  virtual void  v111(); // _ZN7S1811C34v111Ev
  virtual void  v112(); // _ZN7S1811C34v112Ev
  virtual void  v113(); // _ZN7S1811C34v113Ev
  virtual void  v114(); // _ZN7S1811C34v114Ev
  virtual void  v115(); // _ZN7S1811C34v115Ev
  virtual void  v116(); // _ZN7S1811C34v116Ev
  virtual void  v117(); // _ZN7S1811C34v117Ev
  virtual void  v118(); // _ZN7S1811C34v118Ev
  virtual void  v119(); // _ZN7S1811C34v119Ev
  virtual void  v120(); // _ZN7S1811C34v120Ev
  virtual void  v121(); // _ZN7S1811C34v121Ev
  virtual void  v122(); // _ZN7S1811C34v122Ev
  virtual void  v123(); // _ZN7S1811C34v123Ev
  virtual void  v124(); // _ZN7S1811C34v124Ev
  virtual void  v125(); // _ZN7S1811C34v125Ev
  virtual void  v126(); // _ZN7S1811C34v126Ev
  ~S1811C3(); // tgen
  S1811C3(); // tgen
};
//SIG(-1 S1811C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1811C3 ::v5(){vfunc_called(this, "_ZN7S1811C32v5Ev");}
void  S1811C3 ::v6(){vfunc_called(this, "_ZN7S1811C32v6Ev");}
void  S1811C3 ::v7(){vfunc_called(this, "_ZN7S1811C32v7Ev");}
void  S1811C3 ::v8(){vfunc_called(this, "_ZN7S1811C32v8Ev");}
void  S1811C3 ::v9(){vfunc_called(this, "_ZN7S1811C32v9Ev");}
void  S1811C3 ::v10(){vfunc_called(this, "_ZN7S1811C33v10Ev");}
void  S1811C3 ::v11(){vfunc_called(this, "_ZN7S1811C33v11Ev");}
void  S1811C3 ::v12(){vfunc_called(this, "_ZN7S1811C33v12Ev");}
void  S1811C3 ::v13(){vfunc_called(this, "_ZN7S1811C33v13Ev");}
void  S1811C3 ::v14(){vfunc_called(this, "_ZN7S1811C33v14Ev");}
void  S1811C3 ::v15(){vfunc_called(this, "_ZN7S1811C33v15Ev");}
void  S1811C3 ::v16(){vfunc_called(this, "_ZN7S1811C33v16Ev");}
void  S1811C3 ::v17(){vfunc_called(this, "_ZN7S1811C33v17Ev");}
void  S1811C3 ::v18(){vfunc_called(this, "_ZN7S1811C33v18Ev");}
void  S1811C3 ::v19(){vfunc_called(this, "_ZN7S1811C33v19Ev");}
void  S1811C3 ::v20(){vfunc_called(this, "_ZN7S1811C33v20Ev");}
void  S1811C3 ::v21(){vfunc_called(this, "_ZN7S1811C33v21Ev");}
void  S1811C3 ::v22(){vfunc_called(this, "_ZN7S1811C33v22Ev");}
void  S1811C3 ::v23(){vfunc_called(this, "_ZN7S1811C33v23Ev");}
void  S1811C3 ::v24(){vfunc_called(this, "_ZN7S1811C33v24Ev");}
void  S1811C3 ::v25(){vfunc_called(this, "_ZN7S1811C33v25Ev");}
void  S1811C3 ::v26(){vfunc_called(this, "_ZN7S1811C33v26Ev");}
void  S1811C3 ::v27(){vfunc_called(this, "_ZN7S1811C33v27Ev");}
void  S1811C3 ::v28(){vfunc_called(this, "_ZN7S1811C33v28Ev");}
void  S1811C3 ::v29(){vfunc_called(this, "_ZN7S1811C33v29Ev");}
void  S1811C3 ::v30(){vfunc_called(this, "_ZN7S1811C33v30Ev");}
void  S1811C3 ::v31(){vfunc_called(this, "_ZN7S1811C33v31Ev");}
void  S1811C3 ::v32(){vfunc_called(this, "_ZN7S1811C33v32Ev");}
void  S1811C3 ::v33(){vfunc_called(this, "_ZN7S1811C33v33Ev");}
void  S1811C3 ::v34(){vfunc_called(this, "_ZN7S1811C33v34Ev");}
void  S1811C3 ::v35(){vfunc_called(this, "_ZN7S1811C33v35Ev");}
void  S1811C3 ::v36(){vfunc_called(this, "_ZN7S1811C33v36Ev");}
void  S1811C3 ::v37(){vfunc_called(this, "_ZN7S1811C33v37Ev");}
void  S1811C3 ::v38(){vfunc_called(this, "_ZN7S1811C33v38Ev");}
void  S1811C3 ::v39(){vfunc_called(this, "_ZN7S1811C33v39Ev");}
void  S1811C3 ::v40(){vfunc_called(this, "_ZN7S1811C33v40Ev");}
void  S1811C3 ::v41(){vfunc_called(this, "_ZN7S1811C33v41Ev");}
void  S1811C3 ::v42(){vfunc_called(this, "_ZN7S1811C33v42Ev");}
void  S1811C3 ::v43(){vfunc_called(this, "_ZN7S1811C33v43Ev");}
void  S1811C3 ::v44(){vfunc_called(this, "_ZN7S1811C33v44Ev");}
void  S1811C3 ::v45(){vfunc_called(this, "_ZN7S1811C33v45Ev");}
void  S1811C3 ::v46(){vfunc_called(this, "_ZN7S1811C33v46Ev");}
void  S1811C3 ::v47(){vfunc_called(this, "_ZN7S1811C33v47Ev");}
void  S1811C3 ::v48(){vfunc_called(this, "_ZN7S1811C33v48Ev");}
void  S1811C3 ::v49(){vfunc_called(this, "_ZN7S1811C33v49Ev");}
void  S1811C3 ::v50(){vfunc_called(this, "_ZN7S1811C33v50Ev");}
void  S1811C3 ::v51(){vfunc_called(this, "_ZN7S1811C33v51Ev");}
void  S1811C3 ::v52(){vfunc_called(this, "_ZN7S1811C33v52Ev");}
void  S1811C3 ::v53(){vfunc_called(this, "_ZN7S1811C33v53Ev");}
void  S1811C3 ::v54(){vfunc_called(this, "_ZN7S1811C33v54Ev");}
void  S1811C3 ::v55(){vfunc_called(this, "_ZN7S1811C33v55Ev");}
void  S1811C3 ::v56(){vfunc_called(this, "_ZN7S1811C33v56Ev");}
void  S1811C3 ::v57(){vfunc_called(this, "_ZN7S1811C33v57Ev");}
void  S1811C3 ::v58(){vfunc_called(this, "_ZN7S1811C33v58Ev");}
void  S1811C3 ::v59(){vfunc_called(this, "_ZN7S1811C33v59Ev");}
void  S1811C3 ::v60(){vfunc_called(this, "_ZN7S1811C33v60Ev");}
void  S1811C3 ::v61(){vfunc_called(this, "_ZN7S1811C33v61Ev");}
void  S1811C3 ::v62(){vfunc_called(this, "_ZN7S1811C33v62Ev");}
void  S1811C3 ::v63(){vfunc_called(this, "_ZN7S1811C33v63Ev");}
void  S1811C3 ::v64(){vfunc_called(this, "_ZN7S1811C33v64Ev");}
void  S1811C3 ::v65(){vfunc_called(this, "_ZN7S1811C33v65Ev");}
void  S1811C3 ::v66(){vfunc_called(this, "_ZN7S1811C33v66Ev");}
void  S1811C3 ::v67(){vfunc_called(this, "_ZN7S1811C33v67Ev");}
void  S1811C3 ::v68(){vfunc_called(this, "_ZN7S1811C33v68Ev");}
void  S1811C3 ::v69(){vfunc_called(this, "_ZN7S1811C33v69Ev");}
void  S1811C3 ::v70(){vfunc_called(this, "_ZN7S1811C33v70Ev");}
void  S1811C3 ::v71(){vfunc_called(this, "_ZN7S1811C33v71Ev");}
void  S1811C3 ::v72(){vfunc_called(this, "_ZN7S1811C33v72Ev");}
void  S1811C3 ::v73(){vfunc_called(this, "_ZN7S1811C33v73Ev");}
void  S1811C3 ::v74(){vfunc_called(this, "_ZN7S1811C33v74Ev");}
void  S1811C3 ::v75(){vfunc_called(this, "_ZN7S1811C33v75Ev");}
void  S1811C3 ::v76(){vfunc_called(this, "_ZN7S1811C33v76Ev");}
void  S1811C3 ::v77(){vfunc_called(this, "_ZN7S1811C33v77Ev");}
void  S1811C3 ::v78(){vfunc_called(this, "_ZN7S1811C33v78Ev");}
void  S1811C3 ::v79(){vfunc_called(this, "_ZN7S1811C33v79Ev");}
void  S1811C3 ::v80(){vfunc_called(this, "_ZN7S1811C33v80Ev");}
void  S1811C3 ::v81(){vfunc_called(this, "_ZN7S1811C33v81Ev");}
void  S1811C3 ::v82(){vfunc_called(this, "_ZN7S1811C33v82Ev");}
void  S1811C3 ::v83(){vfunc_called(this, "_ZN7S1811C33v83Ev");}
void  S1811C3 ::v84(){vfunc_called(this, "_ZN7S1811C33v84Ev");}
void  S1811C3 ::v85(){vfunc_called(this, "_ZN7S1811C33v85Ev");}
void  S1811C3 ::v86(){vfunc_called(this, "_ZN7S1811C33v86Ev");}
void  S1811C3 ::v87(){vfunc_called(this, "_ZN7S1811C33v87Ev");}
void  S1811C3 ::v88(){vfunc_called(this, "_ZN7S1811C33v88Ev");}
void  S1811C3 ::v89(){vfunc_called(this, "_ZN7S1811C33v89Ev");}
void  S1811C3 ::v90(){vfunc_called(this, "_ZN7S1811C33v90Ev");}
void  S1811C3 ::v91(){vfunc_called(this, "_ZN7S1811C33v91Ev");}
void  S1811C3 ::v92(){vfunc_called(this, "_ZN7S1811C33v92Ev");}
void  S1811C3 ::v93(){vfunc_called(this, "_ZN7S1811C33v93Ev");}
void  S1811C3 ::v94(){vfunc_called(this, "_ZN7S1811C33v94Ev");}
void  S1811C3 ::v95(){vfunc_called(this, "_ZN7S1811C33v95Ev");}
void  S1811C3 ::v96(){vfunc_called(this, "_ZN7S1811C33v96Ev");}
void  S1811C3 ::v97(){vfunc_called(this, "_ZN7S1811C33v97Ev");}
void  S1811C3 ::v98(){vfunc_called(this, "_ZN7S1811C33v98Ev");}
void  S1811C3 ::v99(){vfunc_called(this, "_ZN7S1811C33v99Ev");}
void  S1811C3 ::v100(){vfunc_called(this, "_ZN7S1811C34v100Ev");}
void  S1811C3 ::v101(){vfunc_called(this, "_ZN7S1811C34v101Ev");}
void  S1811C3 ::v102(){vfunc_called(this, "_ZN7S1811C34v102Ev");}
void  S1811C3 ::v103(){vfunc_called(this, "_ZN7S1811C34v103Ev");}
void  S1811C3 ::v104(){vfunc_called(this, "_ZN7S1811C34v104Ev");}
void  S1811C3 ::v105(){vfunc_called(this, "_ZN7S1811C34v105Ev");}
void  S1811C3 ::v106(){vfunc_called(this, "_ZN7S1811C34v106Ev");}
void  S1811C3 ::v107(){vfunc_called(this, "_ZN7S1811C34v107Ev");}
void  S1811C3 ::v108(){vfunc_called(this, "_ZN7S1811C34v108Ev");}
void  S1811C3 ::v109(){vfunc_called(this, "_ZN7S1811C34v109Ev");}
void  S1811C3 ::v110(){vfunc_called(this, "_ZN7S1811C34v110Ev");}
void  S1811C3 ::v111(){vfunc_called(this, "_ZN7S1811C34v111Ev");}
void  S1811C3 ::v112(){vfunc_called(this, "_ZN7S1811C34v112Ev");}
void  S1811C3 ::v113(){vfunc_called(this, "_ZN7S1811C34v113Ev");}
void  S1811C3 ::v114(){vfunc_called(this, "_ZN7S1811C34v114Ev");}
void  S1811C3 ::v115(){vfunc_called(this, "_ZN7S1811C34v115Ev");}
void  S1811C3 ::v116(){vfunc_called(this, "_ZN7S1811C34v116Ev");}
void  S1811C3 ::v117(){vfunc_called(this, "_ZN7S1811C34v117Ev");}
void  S1811C3 ::v118(){vfunc_called(this, "_ZN7S1811C34v118Ev");}
void  S1811C3 ::v119(){vfunc_called(this, "_ZN7S1811C34v119Ev");}
void  S1811C3 ::v120(){vfunc_called(this, "_ZN7S1811C34v120Ev");}
void  S1811C3 ::v121(){vfunc_called(this, "_ZN7S1811C34v121Ev");}
void  S1811C3 ::v122(){vfunc_called(this, "_ZN7S1811C34v122Ev");}
void  S1811C3 ::v123(){vfunc_called(this, "_ZN7S1811C34v123Ev");}
void  S1811C3 ::v124(){vfunc_called(this, "_ZN7S1811C34v124Ev");}
void  S1811C3 ::v125(){vfunc_called(this, "_ZN7S1811C34v125Ev");}
void  S1811C3 ::v126(){vfunc_called(this, "_ZN7S1811C34v126Ev");}
S1811C3 ::~S1811C3(){ note_dtor("S1811C3", this);} // tgen
S1811C3 ::S1811C3(){ note_ctor("S1811C3", this);} // tgen

static void Test_S1811C3()
{
  extern Class_Descriptor cd_S1811C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1811C3, buf);
    S1811C3 *dp, &lv = *(dp=new (buf) S1811C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1811C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1811C3)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S1811C3");
    test_class_info(&lv, &cd_S1811C3);
    dp->~S1811C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1811C3(Test_S1811C3, "S1811C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1811C3C1Ev();
extern void _ZN7S1811C3D1Ev();
Name_Map name_map_S1811C3[] = {
  NSPAIR(_ZN7S1811C3C1Ev),
  NSPAIR(_ZN7S1811C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S1811C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1811C3[];
extern void _ZN7S1811C3D1Ev();
extern void _ZN7S1811C3D0Ev();
extern void _ZN7S1811C32v5Ev();
extern void _ZN7S1811C32v6Ev();
extern void _ZN7S1811C32v7Ev();
extern void _ZN7S1811C32v8Ev();
extern void _ZN7S1811C32v9Ev();
extern void _ZN7S1811C33v10Ev();
extern void _ZN7S1811C33v11Ev();
extern void _ZN7S1811C33v12Ev();
extern void _ZN7S1811C33v13Ev();
extern void _ZN7S1811C33v14Ev();
extern void _ZN7S1811C33v15Ev();
extern void _ZN7S1811C33v16Ev();
extern void _ZN7S1811C33v17Ev();
extern void _ZN7S1811C33v18Ev();
extern void _ZN7S1811C33v19Ev();
extern void _ZN7S1811C33v20Ev();
extern void _ZN7S1811C33v21Ev();
extern void _ZN7S1811C33v22Ev();
extern void _ZN7S1811C33v23Ev();
extern void _ZN7S1811C33v24Ev();
extern void _ZN7S1811C33v25Ev();
extern void _ZN7S1811C33v26Ev();
extern void _ZN7S1811C33v27Ev();
extern void _ZN7S1811C33v28Ev();
extern void _ZN7S1811C33v29Ev();
extern void _ZN7S1811C33v30Ev();
extern void _ZN7S1811C33v31Ev();
extern void _ZN7S1811C33v32Ev();
extern void _ZN7S1811C33v33Ev();
extern void _ZN7S1811C33v34Ev();
extern void _ZN7S1811C33v35Ev();
extern void _ZN7S1811C33v36Ev();
extern void _ZN7S1811C33v37Ev();
extern void _ZN7S1811C33v38Ev();
extern void _ZN7S1811C33v39Ev();
extern void _ZN7S1811C33v40Ev();
extern void _ZN7S1811C33v41Ev();
extern void _ZN7S1811C33v42Ev();
extern void _ZN7S1811C33v43Ev();
extern void _ZN7S1811C33v44Ev();
extern void _ZN7S1811C33v45Ev();
extern void _ZN7S1811C33v46Ev();
extern void _ZN7S1811C33v47Ev();
extern void _ZN7S1811C33v48Ev();
extern void _ZN7S1811C33v49Ev();
extern void _ZN7S1811C33v50Ev();
extern void _ZN7S1811C33v51Ev();
extern void _ZN7S1811C33v52Ev();
extern void _ZN7S1811C33v53Ev();
extern void _ZN7S1811C33v54Ev();
extern void _ZN7S1811C33v55Ev();
extern void _ZN7S1811C33v56Ev();
extern void _ZN7S1811C33v57Ev();
extern void _ZN7S1811C33v58Ev();
extern void _ZN7S1811C33v59Ev();
extern void _ZN7S1811C33v60Ev();
extern void _ZN7S1811C33v61Ev();
extern void _ZN7S1811C33v62Ev();
extern void _ZN7S1811C33v63Ev();
extern void _ZN7S1811C33v64Ev();
extern void _ZN7S1811C33v65Ev();
extern void _ZN7S1811C33v66Ev();
extern void _ZN7S1811C33v67Ev();
extern void _ZN7S1811C33v68Ev();
extern void _ZN7S1811C33v69Ev();
extern void _ZN7S1811C33v70Ev();
extern void _ZN7S1811C33v71Ev();
extern void _ZN7S1811C33v72Ev();
extern void _ZN7S1811C33v73Ev();
extern void _ZN7S1811C33v74Ev();
extern void _ZN7S1811C33v75Ev();
extern void _ZN7S1811C33v76Ev();
extern void _ZN7S1811C33v77Ev();
extern void _ZN7S1811C33v78Ev();
extern void _ZN7S1811C33v79Ev();
extern void _ZN7S1811C33v80Ev();
extern void _ZN7S1811C33v81Ev();
extern void _ZN7S1811C33v82Ev();
extern void _ZN7S1811C33v83Ev();
extern void _ZN7S1811C33v84Ev();
extern void _ZN7S1811C33v85Ev();
extern void _ZN7S1811C33v86Ev();
extern void _ZN7S1811C33v87Ev();
extern void _ZN7S1811C33v88Ev();
extern void _ZN7S1811C33v89Ev();
extern void _ZN7S1811C33v90Ev();
extern void _ZN7S1811C33v91Ev();
extern void _ZN7S1811C33v92Ev();
extern void _ZN7S1811C33v93Ev();
extern void _ZN7S1811C33v94Ev();
extern void _ZN7S1811C33v95Ev();
extern void _ZN7S1811C33v96Ev();
extern void _ZN7S1811C33v97Ev();
extern void _ZN7S1811C33v98Ev();
extern void _ZN7S1811C33v99Ev();
extern void _ZN7S1811C34v100Ev();
extern void _ZN7S1811C34v101Ev();
extern void _ZN7S1811C34v102Ev();
extern void _ZN7S1811C34v103Ev();
extern void _ZN7S1811C34v104Ev();
extern void _ZN7S1811C34v105Ev();
extern void _ZN7S1811C34v106Ev();
extern void _ZN7S1811C34v107Ev();
extern void _ZN7S1811C34v108Ev();
extern void _ZN7S1811C34v109Ev();
extern void _ZN7S1811C34v110Ev();
extern void _ZN7S1811C34v111Ev();
extern void _ZN7S1811C34v112Ev();
extern void _ZN7S1811C34v113Ev();
extern void _ZN7S1811C34v114Ev();
extern void _ZN7S1811C34v115Ev();
extern void _ZN7S1811C34v116Ev();
extern void _ZN7S1811C34v117Ev();
extern void _ZN7S1811C34v118Ev();
extern void _ZN7S1811C34v119Ev();
extern void _ZN7S1811C34v120Ev();
extern void _ZN7S1811C34v121Ev();
extern void _ZN7S1811C34v122Ev();
extern void _ZN7S1811C34v123Ev();
extern void _ZN7S1811C34v124Ev();
extern void _ZN7S1811C34v125Ev();
extern void _ZN7S1811C34v126Ev();
static  VTBL_ENTRY vtc_S1811C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1811C3[0]),
  (VTBL_ENTRY)&_ZN7S1811C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1811C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v126Ev,
};
extern VTBL_ENTRY _ZTI7S1811C3[];
extern  VTBL_ENTRY _ZTV7S1811C3[];
Class_Descriptor cd_S1811C3 = {  "S1811C3", // class name
  bases_S1811C3, 1,
  &(vtc_S1811C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1811C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1811C3),126, //virtual function table var
  2, // 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  S1811C2  : S1811C3 {
  virtual void  v127(); // _ZN7S1811C24v127Ev
  virtual void  v128(); // _ZN7S1811C24v128Ev
  virtual void  v129(); // _ZN7S1811C24v129Ev
  virtual void  v130(); // _ZN7S1811C24v130Ev
  virtual void  v131(); // _ZN7S1811C24v131Ev
  virtual void  v132(); // _ZN7S1811C24v132Ev
  virtual void  v133(); // _ZN7S1811C24v133Ev
  virtual void  v134(); // _ZN7S1811C24v134Ev
  virtual void  v135(); // _ZN7S1811C24v135Ev
  virtual void  v136(); // _ZN7S1811C24v136Ev
  virtual void  v137(); // _ZN7S1811C24v137Ev
  virtual void  v138(); // _ZN7S1811C24v138Ev
  virtual void  v139(); // _ZN7S1811C24v139Ev
  virtual void  v140(); // _ZN7S1811C24v140Ev
  virtual void  v141(); // _ZN7S1811C24v141Ev
  virtual void  v142(); // _ZN7S1811C24v142Ev
  virtual void  v143(); // _ZN7S1811C24v143Ev
  virtual void  v144(); // _ZN7S1811C24v144Ev
  ~S1811C2(); // tgen
  S1811C2(); // tgen
};
//SIG(-1 S1811C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S1811C2 ::v127(){vfunc_called(this, "_ZN7S1811C24v127Ev");}
void  S1811C2 ::v128(){vfunc_called(this, "_ZN7S1811C24v128Ev");}
void  S1811C2 ::v129(){vfunc_called(this, "_ZN7S1811C24v129Ev");}
void  S1811C2 ::v130(){vfunc_called(this, "_ZN7S1811C24v130Ev");}
void  S1811C2 ::v131(){vfunc_called(this, "_ZN7S1811C24v131Ev");}
void  S1811C2 ::v132(){vfunc_called(this, "_ZN7S1811C24v132Ev");}
void  S1811C2 ::v133(){vfunc_called(this, "_ZN7S1811C24v133Ev");}
void  S1811C2 ::v134(){vfunc_called(this, "_ZN7S1811C24v134Ev");}
void  S1811C2 ::v135(){vfunc_called(this, "_ZN7S1811C24v135Ev");}
void  S1811C2 ::v136(){vfunc_called(this, "_ZN7S1811C24v136Ev");}
void  S1811C2 ::v137(){vfunc_called(this, "_ZN7S1811C24v137Ev");}
void  S1811C2 ::v138(){vfunc_called(this, "_ZN7S1811C24v138Ev");}
void  S1811C2 ::v139(){vfunc_called(this, "_ZN7S1811C24v139Ev");}
void  S1811C2 ::v140(){vfunc_called(this, "_ZN7S1811C24v140Ev");}
void  S1811C2 ::v141(){vfunc_called(this, "_ZN7S1811C24v141Ev");}
void  S1811C2 ::v142(){vfunc_called(this, "_ZN7S1811C24v142Ev");}
void  S1811C2 ::v143(){vfunc_called(this, "_ZN7S1811C24v143Ev");}
void  S1811C2 ::v144(){vfunc_called(this, "_ZN7S1811C24v144Ev");}
S1811C2 ::~S1811C2(){ note_dtor("S1811C2", this);} // tgen
S1811C2 ::S1811C2(){ note_ctor("S1811C2", this);} // tgen

static void Test_S1811C2()
{
  extern Class_Descriptor cd_S1811C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1811C2, buf);
    S1811C2 *dp, &lv = *(dp=new (buf) S1811C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1811C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1811C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S1811C3*), 0, "S1811C2");
    check_base_class_offset(lv, (S1811C3*), 0, "S1811C2");
    test_class_info(&lv, &cd_S1811C2);
    dp->~S1811C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1811C2(Test_S1811C2, "S1811C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1811C2C1Ev();
extern void _ZN7S1811C2D1Ev();
Name_Map name_map_S1811C2[] = {
  NSPAIR(_ZN7S1811C2C1Ev),
  NSPAIR(_ZN7S1811C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1811C3;
extern VTBL_ENTRY _ZTI7S1811C3[];
extern  VTBL_ENTRY _ZTV7S1811C3[];
static Base_Class bases_S1811C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1811C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1811C2[];
extern void _ZN7S1811C2D1Ev();
extern void _ZN7S1811C2D0Ev();
extern void _ZN7S1811C32v5Ev();
extern void _ZN7S1811C32v6Ev();
extern void _ZN7S1811C32v7Ev();
extern void _ZN7S1811C32v8Ev();
extern void _ZN7S1811C32v9Ev();
extern void _ZN7S1811C33v10Ev();
extern void _ZN7S1811C33v11Ev();
extern void _ZN7S1811C33v12Ev();
extern void _ZN7S1811C33v13Ev();
extern void _ZN7S1811C33v14Ev();
extern void _ZN7S1811C33v15Ev();
extern void _ZN7S1811C33v16Ev();
extern void _ZN7S1811C33v17Ev();
extern void _ZN7S1811C33v18Ev();
extern void _ZN7S1811C33v19Ev();
extern void _ZN7S1811C33v20Ev();
extern void _ZN7S1811C33v21Ev();
extern void _ZN7S1811C33v22Ev();
extern void _ZN7S1811C33v23Ev();
extern void _ZN7S1811C33v24Ev();
extern void _ZN7S1811C33v25Ev();
extern void _ZN7S1811C33v26Ev();
extern void _ZN7S1811C33v27Ev();
extern void _ZN7S1811C33v28Ev();
extern void _ZN7S1811C33v29Ev();
extern void _ZN7S1811C33v30Ev();
extern void _ZN7S1811C33v31Ev();
extern void _ZN7S1811C33v32Ev();
extern void _ZN7S1811C33v33Ev();
extern void _ZN7S1811C33v34Ev();
extern void _ZN7S1811C33v35Ev();
extern void _ZN7S1811C33v36Ev();
extern void _ZN7S1811C33v37Ev();
extern void _ZN7S1811C33v38Ev();
extern void _ZN7S1811C33v39Ev();
extern void _ZN7S1811C33v40Ev();
extern void _ZN7S1811C33v41Ev();
extern void _ZN7S1811C33v42Ev();
extern void _ZN7S1811C33v43Ev();
extern void _ZN7S1811C33v44Ev();
extern void _ZN7S1811C33v45Ev();
extern void _ZN7S1811C33v46Ev();
extern void _ZN7S1811C33v47Ev();
extern void _ZN7S1811C33v48Ev();
extern void _ZN7S1811C33v49Ev();
extern void _ZN7S1811C33v50Ev();
extern void _ZN7S1811C33v51Ev();
extern void _ZN7S1811C33v52Ev();
extern void _ZN7S1811C33v53Ev();
extern void _ZN7S1811C33v54Ev();
extern void _ZN7S1811C33v55Ev();
extern void _ZN7S1811C33v56Ev();
extern void _ZN7S1811C33v57Ev();
extern void _ZN7S1811C33v58Ev();
extern void _ZN7S1811C33v59Ev();
extern void _ZN7S1811C33v60Ev();
extern void _ZN7S1811C33v61Ev();
extern void _ZN7S1811C33v62Ev();
extern void _ZN7S1811C33v63Ev();
extern void _ZN7S1811C33v64Ev();
extern void _ZN7S1811C33v65Ev();
extern void _ZN7S1811C33v66Ev();
extern void _ZN7S1811C33v67Ev();
extern void _ZN7S1811C33v68Ev();
extern void _ZN7S1811C33v69Ev();
extern void _ZN7S1811C33v70Ev();
extern void _ZN7S1811C33v71Ev();
extern void _ZN7S1811C33v72Ev();
extern void _ZN7S1811C33v73Ev();
extern void _ZN7S1811C33v74Ev();
extern void _ZN7S1811C33v75Ev();
extern void _ZN7S1811C33v76Ev();
extern void _ZN7S1811C33v77Ev();
extern void _ZN7S1811C33v78Ev();
extern void _ZN7S1811C33v79Ev();
extern void _ZN7S1811C33v80Ev();
extern void _ZN7S1811C33v81Ev();
extern void _ZN7S1811C33v82Ev();
extern void _ZN7S1811C33v83Ev();
extern void _ZN7S1811C33v84Ev();
extern void _ZN7S1811C33v85Ev();
extern void _ZN7S1811C33v86Ev();
extern void _ZN7S1811C33v87Ev();
extern void _ZN7S1811C33v88Ev();
extern void _ZN7S1811C33v89Ev();
extern void _ZN7S1811C33v90Ev();
extern void _ZN7S1811C33v91Ev();
extern void _ZN7S1811C33v92Ev();
extern void _ZN7S1811C33v93Ev();
extern void _ZN7S1811C33v94Ev();
extern void _ZN7S1811C33v95Ev();
extern void _ZN7S1811C33v96Ev();
extern void _ZN7S1811C33v97Ev();
extern void _ZN7S1811C33v98Ev();
extern void _ZN7S1811C33v99Ev();
extern void _ZN7S1811C34v100Ev();
extern void _ZN7S1811C34v101Ev();
extern void _ZN7S1811C34v102Ev();
extern void _ZN7S1811C34v103Ev();
extern void _ZN7S1811C34v104Ev();
extern void _ZN7S1811C34v105Ev();
extern void _ZN7S1811C34v106Ev();
extern void _ZN7S1811C34v107Ev();
extern void _ZN7S1811C34v108Ev();
extern void _ZN7S1811C34v109Ev();
extern void _ZN7S1811C34v110Ev();
extern void _ZN7S1811C34v111Ev();
extern void _ZN7S1811C34v112Ev();
extern void _ZN7S1811C34v113Ev();
extern void _ZN7S1811C34v114Ev();
extern void _ZN7S1811C34v115Ev();
extern void _ZN7S1811C34v116Ev();
extern void _ZN7S1811C34v117Ev();
extern void _ZN7S1811C34v118Ev();
extern void _ZN7S1811C34v119Ev();
extern void _ZN7S1811C34v120Ev();
extern void _ZN7S1811C34v121Ev();
extern void _ZN7S1811C34v122Ev();
extern void _ZN7S1811C34v123Ev();
extern void _ZN7S1811C34v124Ev();
extern void _ZN7S1811C34v125Ev();
extern void _ZN7S1811C34v126Ev();
extern void _ZN7S1811C24v127Ev();
extern void _ZN7S1811C24v128Ev();
extern void _ZN7S1811C24v129Ev();
extern void _ZN7S1811C24v130Ev();
extern void _ZN7S1811C24v131Ev();
extern void _ZN7S1811C24v132Ev();
extern void _ZN7S1811C24v133Ev();
extern void _ZN7S1811C24v134Ev();
extern void _ZN7S1811C24v135Ev();
extern void _ZN7S1811C24v136Ev();
extern void _ZN7S1811C24v137Ev();
extern void _ZN7S1811C24v138Ev();
extern void _ZN7S1811C24v139Ev();
extern void _ZN7S1811C24v140Ev();
extern void _ZN7S1811C24v141Ev();
extern void _ZN7S1811C24v142Ev();
extern void _ZN7S1811C24v143Ev();
extern void _ZN7S1811C24v144Ev();
static  VTBL_ENTRY vtc_S1811C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1811C2[0]),
  (VTBL_ENTRY)&_ZN7S1811C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1811C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v144Ev,
};
extern VTBL_ENTRY _ZTI7S1811C2[];
extern  VTBL_ENTRY _ZTV7S1811C2[];
Class_Descriptor cd_S1811C2 = {  "S1811C2", // class name
  bases_S1811C2, 2,
  &(vtc_S1811C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1811C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1811C2),144, //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  S1811C1  : S1811C2 {
  virtual void  v1(); // _ZN7S1811C12v1Ev
  virtual void  v2(); // _ZN7S1811C12v2Ev
  virtual void  v3(); // _ZN7S1811C12v3Ev
  virtual void  v4(); // _ZN7S1811C12v4Ev
  ~S1811C1(); // tgen
  S1811C1(); // tgen
};
//SIG(1 S1811C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 v144} v1 v2 v3 v4}


void  S1811C1 ::v1(){vfunc_called(this, "_ZN7S1811C12v1Ev");}
void  S1811C1 ::v2(){vfunc_called(this, "_ZN7S1811C12v2Ev");}
void  S1811C1 ::v3(){vfunc_called(this, "_ZN7S1811C12v3Ev");}
void  S1811C1 ::v4(){vfunc_called(this, "_ZN7S1811C12v4Ev");}
S1811C1 ::~S1811C1(){ note_dtor("S1811C1", this);} // tgen
S1811C1 ::S1811C1(){ note_ctor("S1811C1", this);} // tgen

static void Test_S1811C1()
{
  extern Class_Descriptor cd_S1811C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1811C1, buf);
    S1811C1 *dp, &lv = *(dp=new (buf) S1811C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1811C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1811C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S1811C3*)(S1811C2*), 0, "S1811C1");
    check_base_class_offset(lv, (S1811C3*)(S1811C2*), 0, "S1811C1");
    check_base_class_offset(lv, (S1811C2*), 0, "S1811C1");
    test_class_info(&lv, &cd_S1811C1);
    dp->~S1811C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1811C1(Test_S1811C1, "S1811C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1811C1C1Ev();
extern void _ZN7S1811C1D1Ev();
Name_Map name_map_S1811C1[] = {
  NSPAIR(_ZN7S1811C1C1Ev),
  NSPAIR(_ZN7S1811C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1811C3;
extern VTBL_ENTRY _ZTI7S1811C3[];
extern  VTBL_ENTRY _ZTV7S1811C3[];
extern Class_Descriptor cd_S1811C2;
extern VTBL_ENTRY _ZTI7S1811C2[];
extern  VTBL_ENTRY _ZTV7S1811C2[];
static Base_Class bases_S1811C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1811C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1811C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1811C1[];
extern void _ZN7S1811C1D1Ev();
extern void _ZN7S1811C1D0Ev();
extern void _ZN7S1811C32v5Ev();
extern void _ZN7S1811C32v6Ev();
extern void _ZN7S1811C32v7Ev();
extern void _ZN7S1811C32v8Ev();
extern void _ZN7S1811C32v9Ev();
extern void _ZN7S1811C33v10Ev();
extern void _ZN7S1811C33v11Ev();
extern void _ZN7S1811C33v12Ev();
extern void _ZN7S1811C33v13Ev();
extern void _ZN7S1811C33v14Ev();
extern void _ZN7S1811C33v15Ev();
extern void _ZN7S1811C33v16Ev();
extern void _ZN7S1811C33v17Ev();
extern void _ZN7S1811C33v18Ev();
extern void _ZN7S1811C33v19Ev();
extern void _ZN7S1811C33v20Ev();
extern void _ZN7S1811C33v21Ev();
extern void _ZN7S1811C33v22Ev();
extern void _ZN7S1811C33v23Ev();
extern void _ZN7S1811C33v24Ev();
extern void _ZN7S1811C33v25Ev();
extern void _ZN7S1811C33v26Ev();
extern void _ZN7S1811C33v27Ev();
extern void _ZN7S1811C33v28Ev();
extern void _ZN7S1811C33v29Ev();
extern void _ZN7S1811C33v30Ev();
extern void _ZN7S1811C33v31Ev();
extern void _ZN7S1811C33v32Ev();
extern void _ZN7S1811C33v33Ev();
extern void _ZN7S1811C33v34Ev();
extern void _ZN7S1811C33v35Ev();
extern void _ZN7S1811C33v36Ev();
extern void _ZN7S1811C33v37Ev();
extern void _ZN7S1811C33v38Ev();
extern void _ZN7S1811C33v39Ev();
extern void _ZN7S1811C33v40Ev();
extern void _ZN7S1811C33v41Ev();
extern void _ZN7S1811C33v42Ev();
extern void _ZN7S1811C33v43Ev();
extern void _ZN7S1811C33v44Ev();
extern void _ZN7S1811C33v45Ev();
extern void _ZN7S1811C33v46Ev();
extern void _ZN7S1811C33v47Ev();
extern void _ZN7S1811C33v48Ev();
extern void _ZN7S1811C33v49Ev();
extern void _ZN7S1811C33v50Ev();
extern void _ZN7S1811C33v51Ev();
extern void _ZN7S1811C33v52Ev();
extern void _ZN7S1811C33v53Ev();
extern void _ZN7S1811C33v54Ev();
extern void _ZN7S1811C33v55Ev();
extern void _ZN7S1811C33v56Ev();
extern void _ZN7S1811C33v57Ev();
extern void _ZN7S1811C33v58Ev();
extern void _ZN7S1811C33v59Ev();
extern void _ZN7S1811C33v60Ev();
extern void _ZN7S1811C33v61Ev();
extern void _ZN7S1811C33v62Ev();
extern void _ZN7S1811C33v63Ev();
extern void _ZN7S1811C33v64Ev();
extern void _ZN7S1811C33v65Ev();
extern void _ZN7S1811C33v66Ev();
extern void _ZN7S1811C33v67Ev();
extern void _ZN7S1811C33v68Ev();
extern void _ZN7S1811C33v69Ev();
extern void _ZN7S1811C33v70Ev();
extern void _ZN7S1811C33v71Ev();
extern void _ZN7S1811C33v72Ev();
extern void _ZN7S1811C33v73Ev();
extern void _ZN7S1811C33v74Ev();
extern void _ZN7S1811C33v75Ev();
extern void _ZN7S1811C33v76Ev();
extern void _ZN7S1811C33v77Ev();
extern void _ZN7S1811C33v78Ev();
extern void _ZN7S1811C33v79Ev();
extern void _ZN7S1811C33v80Ev();
extern void _ZN7S1811C33v81Ev();
extern void _ZN7S1811C33v82Ev();
extern void _ZN7S1811C33v83Ev();
extern void _ZN7S1811C33v84Ev();
extern void _ZN7S1811C33v85Ev();
extern void _ZN7S1811C33v86Ev();
extern void _ZN7S1811C33v87Ev();
extern void _ZN7S1811C33v88Ev();
extern void _ZN7S1811C33v89Ev();
extern void _ZN7S1811C33v90Ev();
extern void _ZN7S1811C33v91Ev();
extern void _ZN7S1811C33v92Ev();
extern void _ZN7S1811C33v93Ev();
extern void _ZN7S1811C33v94Ev();
extern void _ZN7S1811C33v95Ev();
extern void _ZN7S1811C33v96Ev();
extern void _ZN7S1811C33v97Ev();
extern void _ZN7S1811C33v98Ev();
extern void _ZN7S1811C33v99Ev();
extern void _ZN7S1811C34v100Ev();
extern void _ZN7S1811C34v101Ev();
extern void _ZN7S1811C34v102Ev();
extern void _ZN7S1811C34v103Ev();
extern void _ZN7S1811C34v104Ev();
extern void _ZN7S1811C34v105Ev();
extern void _ZN7S1811C34v106Ev();
extern void _ZN7S1811C34v107Ev();
extern void _ZN7S1811C34v108Ev();
extern void _ZN7S1811C34v109Ev();
extern void _ZN7S1811C34v110Ev();
extern void _ZN7S1811C34v111Ev();
extern void _ZN7S1811C34v112Ev();
extern void _ZN7S1811C34v113Ev();
extern void _ZN7S1811C34v114Ev();
extern void _ZN7S1811C34v115Ev();
extern void _ZN7S1811C34v116Ev();
extern void _ZN7S1811C34v117Ev();
extern void _ZN7S1811C34v118Ev();
extern void _ZN7S1811C34v119Ev();
extern void _ZN7S1811C34v120Ev();
extern void _ZN7S1811C34v121Ev();
extern void _ZN7S1811C34v122Ev();
extern void _ZN7S1811C34v123Ev();
extern void _ZN7S1811C34v124Ev();
extern void _ZN7S1811C34v125Ev();
extern void _ZN7S1811C34v126Ev();
extern void _ZN7S1811C24v127Ev();
extern void _ZN7S1811C24v128Ev();
extern void _ZN7S1811C24v129Ev();
extern void _ZN7S1811C24v130Ev();
extern void _ZN7S1811C24v131Ev();
extern void _ZN7S1811C24v132Ev();
extern void _ZN7S1811C24v133Ev();
extern void _ZN7S1811C24v134Ev();
extern void _ZN7S1811C24v135Ev();
extern void _ZN7S1811C24v136Ev();
extern void _ZN7S1811C24v137Ev();
extern void _ZN7S1811C24v138Ev();
extern void _ZN7S1811C24v139Ev();
extern void _ZN7S1811C24v140Ev();
extern void _ZN7S1811C24v141Ev();
extern void _ZN7S1811C24v142Ev();
extern void _ZN7S1811C24v143Ev();
extern void _ZN7S1811C24v144Ev();
extern void _ZN7S1811C12v1Ev();
extern void _ZN7S1811C12v2Ev();
extern void _ZN7S1811C12v3Ev();
extern void _ZN7S1811C12v4Ev();
static  VTBL_ENTRY vtc_S1811C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1811C1[0]),
  (VTBL_ENTRY)&_ZN7S1811C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1811C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1811C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1811C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1811C34v126Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1811C24v144Ev,
  (VTBL_ENTRY)&_ZN7S1811C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1811C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1811C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1811C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1811C1[];
extern  VTBL_ENTRY _ZTV7S1811C1[];
Class_Descriptor cd_S1811C1 = {  "S1811C1", // class name
  bases_S1811C1, 3,
  &(vtc_S1811C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1811C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1811C1),148, //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  S1800C3  : S785C5_nt {
  virtual void  v4(); // _ZN7S1800C32v4Ev
  virtual void  v5(); // _ZN7S1800C32v5Ev
  virtual void  v6(); // _ZN7S1800C32v6Ev
  virtual void  v7(); // _ZN7S1800C32v7Ev
  virtual void  v8(); // _ZN7S1800C32v8Ev
  virtual void  v9(); // _ZN7S1800C32v9Ev
  virtual void  v10(); // _ZN7S1800C33v10Ev
  virtual void  v11(); // _ZN7S1800C33v11Ev
  virtual void  v12(); // _ZN7S1800C33v12Ev
  virtual void  v13(); // _ZN7S1800C33v13Ev
  virtual void  v14(); // _ZN7S1800C33v14Ev
  virtual void  v15(); // _ZN7S1800C33v15Ev
  virtual void  v16(); // _ZN7S1800C33v16Ev
  virtual void  v17(); // _ZN7S1800C33v17Ev
  virtual void  v18(); // _ZN7S1800C33v18Ev
  virtual void  v19(); // _ZN7S1800C33v19Ev
  virtual void  v20(); // _ZN7S1800C33v20Ev
  virtual void  v21(); // _ZN7S1800C33v21Ev
  virtual void  v22(); // _ZN7S1800C33v22Ev
  virtual void  v23(); // _ZN7S1800C33v23Ev
  virtual void  v24(); // _ZN7S1800C33v24Ev
  virtual void  v25(); // _ZN7S1800C33v25Ev
  virtual void  v26(); // _ZN7S1800C33v26Ev
  virtual void  v27(); // _ZN7S1800C33v27Ev
  virtual void  v28(); // _ZN7S1800C33v28Ev
  virtual void  v29(); // _ZN7S1800C33v29Ev
  virtual void  v30(); // _ZN7S1800C33v30Ev
  virtual void  v31(); // _ZN7S1800C33v31Ev
  virtual void  v32(); // _ZN7S1800C33v32Ev
  virtual void  v33(); // _ZN7S1800C33v33Ev
  virtual void  v34(); // _ZN7S1800C33v34Ev
  virtual void  v35(); // _ZN7S1800C33v35Ev
  virtual void  v36(); // _ZN7S1800C33v36Ev
  virtual void  v37(); // _ZN7S1800C33v37Ev
  virtual void  v38(); // _ZN7S1800C33v38Ev
  virtual void  v39(); // _ZN7S1800C33v39Ev
  virtual void  v40(); // _ZN7S1800C33v40Ev
  virtual void  v41(); // _ZN7S1800C33v41Ev
  virtual void  v42(); // _ZN7S1800C33v42Ev
  virtual void  v43(); // _ZN7S1800C33v43Ev
  virtual void  v44(); // _ZN7S1800C33v44Ev
  virtual void  v45(); // _ZN7S1800C33v45Ev
  virtual void  v46(); // _ZN7S1800C33v46Ev
  virtual void  v47(); // _ZN7S1800C33v47Ev
  virtual void  v48(); // _ZN7S1800C33v48Ev
  virtual void  v49(); // _ZN7S1800C33v49Ev
  virtual void  v50(); // _ZN7S1800C33v50Ev
  virtual void  v51(); // _ZN7S1800C33v51Ev
  virtual void  v52(); // _ZN7S1800C33v52Ev
  virtual void  v53(); // _ZN7S1800C33v53Ev
  virtual void  v54(); // _ZN7S1800C33v54Ev
  virtual void  v55(); // _ZN7S1800C33v55Ev
  virtual void  v56(); // _ZN7S1800C33v56Ev
  virtual void  v57(); // _ZN7S1800C33v57Ev
  virtual void  v58(); // _ZN7S1800C33v58Ev
  virtual void  v59(); // _ZN7S1800C33v59Ev
  virtual void  v60(); // _ZN7S1800C33v60Ev
  virtual void  v61(); // _ZN7S1800C33v61Ev
  virtual void  v62(); // _ZN7S1800C33v62Ev
  virtual void  v63(); // _ZN7S1800C33v63Ev
  virtual void  v64(); // _ZN7S1800C33v64Ev
  virtual void  v65(); // _ZN7S1800C33v65Ev
  virtual void  v66(); // _ZN7S1800C33v66Ev
  virtual void  v67(); // _ZN7S1800C33v67Ev
  virtual void  v68(); // _ZN7S1800C33v68Ev
  virtual void  v69(); // _ZN7S1800C33v69Ev
  virtual void  v70(); // _ZN7S1800C33v70Ev
  virtual void  v71(); // _ZN7S1800C33v71Ev
  virtual void  v72(); // _ZN7S1800C33v72Ev
  virtual void  v73(); // _ZN7S1800C33v73Ev
  virtual void  v74(); // _ZN7S1800C33v74Ev
  virtual void  v75(); // _ZN7S1800C33v75Ev
  virtual void  v76(); // _ZN7S1800C33v76Ev
  virtual void  v77(); // _ZN7S1800C33v77Ev
  virtual void  v78(); // _ZN7S1800C33v78Ev
  virtual void  v79(); // _ZN7S1800C33v79Ev
  virtual void  v80(); // _ZN7S1800C33v80Ev
  virtual void  v81(); // _ZN7S1800C33v81Ev
  virtual void  v82(); // _ZN7S1800C33v82Ev
  virtual void  v83(); // _ZN7S1800C33v83Ev
  virtual void  v84(); // _ZN7S1800C33v84Ev
  virtual void  v85(); // _ZN7S1800C33v85Ev
  virtual void  v86(); // _ZN7S1800C33v86Ev
  virtual void  v87(); // _ZN7S1800C33v87Ev
  virtual void  v88(); // _ZN7S1800C33v88Ev
  virtual void  v89(); // _ZN7S1800C33v89Ev
  virtual void  v90(); // _ZN7S1800C33v90Ev
  virtual void  v91(); // _ZN7S1800C33v91Ev
  virtual void  v92(); // _ZN7S1800C33v92Ev
  virtual void  v93(); // _ZN7S1800C33v93Ev
  virtual void  v94(); // _ZN7S1800C33v94Ev
  virtual void  v95(); // _ZN7S1800C33v95Ev
  virtual void  v96(); // _ZN7S1800C33v96Ev
  virtual void  v97(); // _ZN7S1800C33v97Ev
  virtual void  v98(); // _ZN7S1800C33v98Ev
  virtual void  v99(); // _ZN7S1800C33v99Ev
  virtual void  v100(); // _ZN7S1800C34v100Ev
  virtual void  v101(); // _ZN7S1800C34v101Ev
  virtual void  v102(); // _ZN7S1800C34v102Ev
  virtual void  v103(); // _ZN7S1800C34v103Ev
  virtual void  v104(); // _ZN7S1800C34v104Ev
  virtual void  v105(); // _ZN7S1800C34v105Ev
  virtual void  v106(); // _ZN7S1800C34v106Ev
  virtual void  v107(); // _ZN7S1800C34v107Ev
  virtual void  v108(); // _ZN7S1800C34v108Ev
  virtual void  v109(); // _ZN7S1800C34v109Ev
  virtual void  v110(); // _ZN7S1800C34v110Ev
  virtual void  v111(); // _ZN7S1800C34v111Ev
  virtual void  v112(); // _ZN7S1800C34v112Ev
  virtual void  v113(); // _ZN7S1800C34v113Ev
  virtual void  v114(); // _ZN7S1800C34v114Ev
  virtual void  v115(); // _ZN7S1800C34v115Ev
  virtual void  v116(); // _ZN7S1800C34v116Ev
  virtual void  v117(); // _ZN7S1800C34v117Ev
  virtual void  v118(); // _ZN7S1800C34v118Ev
  virtual void  v119(); // _ZN7S1800C34v119Ev
  virtual void  v120(); // _ZN7S1800C34v120Ev
  virtual void  v121(); // _ZN7S1800C34v121Ev
  virtual void  v122(); // _ZN7S1800C34v122Ev
  virtual void  v123(); // _ZN7S1800C34v123Ev
  virtual void  v124(); // _ZN7S1800C34v124Ev
  virtual void  v125(); // _ZN7S1800C34v125Ev
  ~S1800C3(); // tgen
  S1800C3(); // tgen
};
//SIG(-1 S1800C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1800C3 ::v4(){vfunc_called(this, "_ZN7S1800C32v4Ev");}
void  S1800C3 ::v5(){vfunc_called(this, "_ZN7S1800C32v5Ev");}
void  S1800C3 ::v6(){vfunc_called(this, "_ZN7S1800C32v6Ev");}
void  S1800C3 ::v7(){vfunc_called(this, "_ZN7S1800C32v7Ev");}
void  S1800C3 ::v8(){vfunc_called(this, "_ZN7S1800C32v8Ev");}
void  S1800C3 ::v9(){vfunc_called(this, "_ZN7S1800C32v9Ev");}
void  S1800C3 ::v10(){vfunc_called(this, "_ZN7S1800C33v10Ev");}
void  S1800C3 ::v11(){vfunc_called(this, "_ZN7S1800C33v11Ev");}
void  S1800C3 ::v12(){vfunc_called(this, "_ZN7S1800C33v12Ev");}
void  S1800C3 ::v13(){vfunc_called(this, "_ZN7S1800C33v13Ev");}
void  S1800C3 ::v14(){vfunc_called(this, "_ZN7S1800C33v14Ev");}
void  S1800C3 ::v15(){vfunc_called(this, "_ZN7S1800C33v15Ev");}
void  S1800C3 ::v16(){vfunc_called(this, "_ZN7S1800C33v16Ev");}
void  S1800C3 ::v17(){vfunc_called(this, "_ZN7S1800C33v17Ev");}
void  S1800C3 ::v18(){vfunc_called(this, "_ZN7S1800C33v18Ev");}
void  S1800C3 ::v19(){vfunc_called(this, "_ZN7S1800C33v19Ev");}
void  S1800C3 ::v20(){vfunc_called(this, "_ZN7S1800C33v20Ev");}
void  S1800C3 ::v21(){vfunc_called(this, "_ZN7S1800C33v21Ev");}
void  S1800C3 ::v22(){vfunc_called(this, "_ZN7S1800C33v22Ev");}
void  S1800C3 ::v23(){vfunc_called(this, "_ZN7S1800C33v23Ev");}
void  S1800C3 ::v24(){vfunc_called(this, "_ZN7S1800C33v24Ev");}
void  S1800C3 ::v25(){vfunc_called(this, "_ZN7S1800C33v25Ev");}
void  S1800C3 ::v26(){vfunc_called(this, "_ZN7S1800C33v26Ev");}
void  S1800C3 ::v27(){vfunc_called(this, "_ZN7S1800C33v27Ev");}
void  S1800C3 ::v28(){vfunc_called(this, "_ZN7S1800C33v28Ev");}
void  S1800C3 ::v29(){vfunc_called(this, "_ZN7S1800C33v29Ev");}
void  S1800C3 ::v30(){vfunc_called(this, "_ZN7S1800C33v30Ev");}
void  S1800C3 ::v31(){vfunc_called(this, "_ZN7S1800C33v31Ev");}
void  S1800C3 ::v32(){vfunc_called(this, "_ZN7S1800C33v32Ev");}
void  S1800C3 ::v33(){vfunc_called(this, "_ZN7S1800C33v33Ev");}
void  S1800C3 ::v34(){vfunc_called(this, "_ZN7S1800C33v34Ev");}
void  S1800C3 ::v35(){vfunc_called(this, "_ZN7S1800C33v35Ev");}
void  S1800C3 ::v36(){vfunc_called(this, "_ZN7S1800C33v36Ev");}
void  S1800C3 ::v37(){vfunc_called(this, "_ZN7S1800C33v37Ev");}
void  S1800C3 ::v38(){vfunc_called(this, "_ZN7S1800C33v38Ev");}
void  S1800C3 ::v39(){vfunc_called(this, "_ZN7S1800C33v39Ev");}
void  S1800C3 ::v40(){vfunc_called(this, "_ZN7S1800C33v40Ev");}
void  S1800C3 ::v41(){vfunc_called(this, "_ZN7S1800C33v41Ev");}
void  S1800C3 ::v42(){vfunc_called(this, "_ZN7S1800C33v42Ev");}
void  S1800C3 ::v43(){vfunc_called(this, "_ZN7S1800C33v43Ev");}
void  S1800C3 ::v44(){vfunc_called(this, "_ZN7S1800C33v44Ev");}
void  S1800C3 ::v45(){vfunc_called(this, "_ZN7S1800C33v45Ev");}
void  S1800C3 ::v46(){vfunc_called(this, "_ZN7S1800C33v46Ev");}
void  S1800C3 ::v47(){vfunc_called(this, "_ZN7S1800C33v47Ev");}
void  S1800C3 ::v48(){vfunc_called(this, "_ZN7S1800C33v48Ev");}
void  S1800C3 ::v49(){vfunc_called(this, "_ZN7S1800C33v49Ev");}
void  S1800C3 ::v50(){vfunc_called(this, "_ZN7S1800C33v50Ev");}
void  S1800C3 ::v51(){vfunc_called(this, "_ZN7S1800C33v51Ev");}
void  S1800C3 ::v52(){vfunc_called(this, "_ZN7S1800C33v52Ev");}
void  S1800C3 ::v53(){vfunc_called(this, "_ZN7S1800C33v53Ev");}
void  S1800C3 ::v54(){vfunc_called(this, "_ZN7S1800C33v54Ev");}
void  S1800C3 ::v55(){vfunc_called(this, "_ZN7S1800C33v55Ev");}
void  S1800C3 ::v56(){vfunc_called(this, "_ZN7S1800C33v56Ev");}
void  S1800C3 ::v57(){vfunc_called(this, "_ZN7S1800C33v57Ev");}
void  S1800C3 ::v58(){vfunc_called(this, "_ZN7S1800C33v58Ev");}
void  S1800C3 ::v59(){vfunc_called(this, "_ZN7S1800C33v59Ev");}
void  S1800C3 ::v60(){vfunc_called(this, "_ZN7S1800C33v60Ev");}
void  S1800C3 ::v61(){vfunc_called(this, "_ZN7S1800C33v61Ev");}
void  S1800C3 ::v62(){vfunc_called(this, "_ZN7S1800C33v62Ev");}
void  S1800C3 ::v63(){vfunc_called(this, "_ZN7S1800C33v63Ev");}
void  S1800C3 ::v64(){vfunc_called(this, "_ZN7S1800C33v64Ev");}
void  S1800C3 ::v65(){vfunc_called(this, "_ZN7S1800C33v65Ev");}
void  S1800C3 ::v66(){vfunc_called(this, "_ZN7S1800C33v66Ev");}
void  S1800C3 ::v67(){vfunc_called(this, "_ZN7S1800C33v67Ev");}
void  S1800C3 ::v68(){vfunc_called(this, "_ZN7S1800C33v68Ev");}
void  S1800C3 ::v69(){vfunc_called(this, "_ZN7S1800C33v69Ev");}
void  S1800C3 ::v70(){vfunc_called(this, "_ZN7S1800C33v70Ev");}
void  S1800C3 ::v71(){vfunc_called(this, "_ZN7S1800C33v71Ev");}
void  S1800C3 ::v72(){vfunc_called(this, "_ZN7S1800C33v72Ev");}
void  S1800C3 ::v73(){vfunc_called(this, "_ZN7S1800C33v73Ev");}
void  S1800C3 ::v74(){vfunc_called(this, "_ZN7S1800C33v74Ev");}
void  S1800C3 ::v75(){vfunc_called(this, "_ZN7S1800C33v75Ev");}
void  S1800C3 ::v76(){vfunc_called(this, "_ZN7S1800C33v76Ev");}
void  S1800C3 ::v77(){vfunc_called(this, "_ZN7S1800C33v77Ev");}
void  S1800C3 ::v78(){vfunc_called(this, "_ZN7S1800C33v78Ev");}
void  S1800C3 ::v79(){vfunc_called(this, "_ZN7S1800C33v79Ev");}
void  S1800C3 ::v80(){vfunc_called(this, "_ZN7S1800C33v80Ev");}
void  S1800C3 ::v81(){vfunc_called(this, "_ZN7S1800C33v81Ev");}
void  S1800C3 ::v82(){vfunc_called(this, "_ZN7S1800C33v82Ev");}
void  S1800C3 ::v83(){vfunc_called(this, "_ZN7S1800C33v83Ev");}
void  S1800C3 ::v84(){vfunc_called(this, "_ZN7S1800C33v84Ev");}
void  S1800C3 ::v85(){vfunc_called(this, "_ZN7S1800C33v85Ev");}
void  S1800C3 ::v86(){vfunc_called(this, "_ZN7S1800C33v86Ev");}
void  S1800C3 ::v87(){vfunc_called(this, "_ZN7S1800C33v87Ev");}
void  S1800C3 ::v88(){vfunc_called(this, "_ZN7S1800C33v88Ev");}
void  S1800C3 ::v89(){vfunc_called(this, "_ZN7S1800C33v89Ev");}
void  S1800C3 ::v90(){vfunc_called(this, "_ZN7S1800C33v90Ev");}
void  S1800C3 ::v91(){vfunc_called(this, "_ZN7S1800C33v91Ev");}
void  S1800C3 ::v92(){vfunc_called(this, "_ZN7S1800C33v92Ev");}
void  S1800C3 ::v93(){vfunc_called(this, "_ZN7S1800C33v93Ev");}
void  S1800C3 ::v94(){vfunc_called(this, "_ZN7S1800C33v94Ev");}
void  S1800C3 ::v95(){vfunc_called(this, "_ZN7S1800C33v95Ev");}
void  S1800C3 ::v96(){vfunc_called(this, "_ZN7S1800C33v96Ev");}
void  S1800C3 ::v97(){vfunc_called(this, "_ZN7S1800C33v97Ev");}
void  S1800C3 ::v98(){vfunc_called(this, "_ZN7S1800C33v98Ev");}
void  S1800C3 ::v99(){vfunc_called(this, "_ZN7S1800C33v99Ev");}
void  S1800C3 ::v100(){vfunc_called(this, "_ZN7S1800C34v100Ev");}
void  S1800C3 ::v101(){vfunc_called(this, "_ZN7S1800C34v101Ev");}
void  S1800C3 ::v102(){vfunc_called(this, "_ZN7S1800C34v102Ev");}
void  S1800C3 ::v103(){vfunc_called(this, "_ZN7S1800C34v103Ev");}
void  S1800C3 ::v104(){vfunc_called(this, "_ZN7S1800C34v104Ev");}
void  S1800C3 ::v105(){vfunc_called(this, "_ZN7S1800C34v105Ev");}
void  S1800C3 ::v106(){vfunc_called(this, "_ZN7S1800C34v106Ev");}
void  S1800C3 ::v107(){vfunc_called(this, "_ZN7S1800C34v107Ev");}
void  S1800C3 ::v108(){vfunc_called(this, "_ZN7S1800C34v108Ev");}
void  S1800C3 ::v109(){vfunc_called(this, "_ZN7S1800C34v109Ev");}
void  S1800C3 ::v110(){vfunc_called(this, "_ZN7S1800C34v110Ev");}
void  S1800C3 ::v111(){vfunc_called(this, "_ZN7S1800C34v111Ev");}
void  S1800C3 ::v112(){vfunc_called(this, "_ZN7S1800C34v112Ev");}
void  S1800C3 ::v113(){vfunc_called(this, "_ZN7S1800C34v113Ev");}
void  S1800C3 ::v114(){vfunc_called(this, "_ZN7S1800C34v114Ev");}
void  S1800C3 ::v115(){vfunc_called(this, "_ZN7S1800C34v115Ev");}
void  S1800C3 ::v116(){vfunc_called(this, "_ZN7S1800C34v116Ev");}
void  S1800C3 ::v117(){vfunc_called(this, "_ZN7S1800C34v117Ev");}
void  S1800C3 ::v118(){vfunc_called(this, "_ZN7S1800C34v118Ev");}
void  S1800C3 ::v119(){vfunc_called(this, "_ZN7S1800C34v119Ev");}
void  S1800C3 ::v120(){vfunc_called(this, "_ZN7S1800C34v120Ev");}
void  S1800C3 ::v121(){vfunc_called(this, "_ZN7S1800C34v121Ev");}
void  S1800C3 ::v122(){vfunc_called(this, "_ZN7S1800C34v122Ev");}
void  S1800C3 ::v123(){vfunc_called(this, "_ZN7S1800C34v123Ev");}
void  S1800C3 ::v124(){vfunc_called(this, "_ZN7S1800C34v124Ev");}
void  S1800C3 ::v125(){vfunc_called(this, "_ZN7S1800C34v125Ev");}
S1800C3 ::~S1800C3(){ note_dtor("S1800C3", this);} // tgen
S1800C3 ::S1800C3(){ note_ctor("S1800C3", this);} // tgen

static void Test_S1800C3()
{
  extern Class_Descriptor cd_S1800C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1800C3, buf);
    S1800C3 *dp, &lv = *(dp=new (buf) S1800C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1800C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1800C3)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S1800C3");
    test_class_info(&lv, &cd_S1800C3);
    dp->~S1800C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1800C3(Test_S1800C3, "S1800C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1800C3C1Ev();
extern void _ZN7S1800C3D1Ev();
Name_Map name_map_S1800C3[] = {
  NSPAIR(_ZN7S1800C3C1Ev),
  NSPAIR(_ZN7S1800C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S1800C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1800C3[];
extern void _ZN7S1800C3D1Ev();
extern void _ZN7S1800C3D0Ev();
extern void _ZN7S1800C32v4Ev();
extern void _ZN7S1800C32v5Ev();
extern void _ZN7S1800C32v6Ev();
extern void _ZN7S1800C32v7Ev();
extern void _ZN7S1800C32v8Ev();
extern void _ZN7S1800C32v9Ev();
extern void _ZN7S1800C33v10Ev();
extern void _ZN7S1800C33v11Ev();
extern void _ZN7S1800C33v12Ev();
extern void _ZN7S1800C33v13Ev();
extern void _ZN7S1800C33v14Ev();
extern void _ZN7S1800C33v15Ev();
extern void _ZN7S1800C33v16Ev();
extern void _ZN7S1800C33v17Ev();
extern void _ZN7S1800C33v18Ev();
extern void _ZN7S1800C33v19Ev();
extern void _ZN7S1800C33v20Ev();
extern void _ZN7S1800C33v21Ev();
extern void _ZN7S1800C33v22Ev();
extern void _ZN7S1800C33v23Ev();
extern void _ZN7S1800C33v24Ev();
extern void _ZN7S1800C33v25Ev();
extern void _ZN7S1800C33v26Ev();
extern void _ZN7S1800C33v27Ev();
extern void _ZN7S1800C33v28Ev();
extern void _ZN7S1800C33v29Ev();
extern void _ZN7S1800C33v30Ev();
extern void _ZN7S1800C33v31Ev();
extern void _ZN7S1800C33v32Ev();
extern void _ZN7S1800C33v33Ev();
extern void _ZN7S1800C33v34Ev();
extern void _ZN7S1800C33v35Ev();
extern void _ZN7S1800C33v36Ev();
extern void _ZN7S1800C33v37Ev();
extern void _ZN7S1800C33v38Ev();
extern void _ZN7S1800C33v39Ev();
extern void _ZN7S1800C33v40Ev();
extern void _ZN7S1800C33v41Ev();
extern void _ZN7S1800C33v42Ev();
extern void _ZN7S1800C33v43Ev();
extern void _ZN7S1800C33v44Ev();
extern void _ZN7S1800C33v45Ev();
extern void _ZN7S1800C33v46Ev();
extern void _ZN7S1800C33v47Ev();
extern void _ZN7S1800C33v48Ev();
extern void _ZN7S1800C33v49Ev();
extern void _ZN7S1800C33v50Ev();
extern void _ZN7S1800C33v51Ev();
extern void _ZN7S1800C33v52Ev();
extern void _ZN7S1800C33v53Ev();
extern void _ZN7S1800C33v54Ev();
extern void _ZN7S1800C33v55Ev();
extern void _ZN7S1800C33v56Ev();
extern void _ZN7S1800C33v57Ev();
extern void _ZN7S1800C33v58Ev();
extern void _ZN7S1800C33v59Ev();
extern void _ZN7S1800C33v60Ev();
extern void _ZN7S1800C33v61Ev();
extern void _ZN7S1800C33v62Ev();
extern void _ZN7S1800C33v63Ev();
extern void _ZN7S1800C33v64Ev();
extern void _ZN7S1800C33v65Ev();
extern void _ZN7S1800C33v66Ev();
extern void _ZN7S1800C33v67Ev();
extern void _ZN7S1800C33v68Ev();
extern void _ZN7S1800C33v69Ev();
extern void _ZN7S1800C33v70Ev();
extern void _ZN7S1800C33v71Ev();
extern void _ZN7S1800C33v72Ev();
extern void _ZN7S1800C33v73Ev();
extern void _ZN7S1800C33v74Ev();
extern void _ZN7S1800C33v75Ev();
extern void _ZN7S1800C33v76Ev();
extern void _ZN7S1800C33v77Ev();
extern void _ZN7S1800C33v78Ev();
extern void _ZN7S1800C33v79Ev();
extern void _ZN7S1800C33v80Ev();
extern void _ZN7S1800C33v81Ev();
extern void _ZN7S1800C33v82Ev();
extern void _ZN7S1800C33v83Ev();
extern void _ZN7S1800C33v84Ev();
extern void _ZN7S1800C33v85Ev();
extern void _ZN7S1800C33v86Ev();
extern void _ZN7S1800C33v87Ev();
extern void _ZN7S1800C33v88Ev();
extern void _ZN7S1800C33v89Ev();
extern void _ZN7S1800C33v90Ev();
extern void _ZN7S1800C33v91Ev();
extern void _ZN7S1800C33v92Ev();
extern void _ZN7S1800C33v93Ev();
extern void _ZN7S1800C33v94Ev();
extern void _ZN7S1800C33v95Ev();
extern void _ZN7S1800C33v96Ev();
extern void _ZN7S1800C33v97Ev();
extern void _ZN7S1800C33v98Ev();
extern void _ZN7S1800C33v99Ev();
extern void _ZN7S1800C34v100Ev();
extern void _ZN7S1800C34v101Ev();
extern void _ZN7S1800C34v102Ev();
extern void _ZN7S1800C34v103Ev();
extern void _ZN7S1800C34v104Ev();
extern void _ZN7S1800C34v105Ev();
extern void _ZN7S1800C34v106Ev();
extern void _ZN7S1800C34v107Ev();
extern void _ZN7S1800C34v108Ev();
extern void _ZN7S1800C34v109Ev();
extern void _ZN7S1800C34v110Ev();
extern void _ZN7S1800C34v111Ev();
extern void _ZN7S1800C34v112Ev();
extern void _ZN7S1800C34v113Ev();
extern void _ZN7S1800C34v114Ev();
extern void _ZN7S1800C34v115Ev();
extern void _ZN7S1800C34v116Ev();
extern void _ZN7S1800C34v117Ev();
extern void _ZN7S1800C34v118Ev();
extern void _ZN7S1800C34v119Ev();
extern void _ZN7S1800C34v120Ev();
extern void _ZN7S1800C34v121Ev();
extern void _ZN7S1800C34v122Ev();
extern void _ZN7S1800C34v123Ev();
extern void _ZN7S1800C34v124Ev();
extern void _ZN7S1800C34v125Ev();
static  VTBL_ENTRY vtc_S1800C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1800C3[0]),
  (VTBL_ENTRY)&_ZN7S1800C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1800C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v125Ev,
};
extern VTBL_ENTRY _ZTI7S1800C3[];
extern  VTBL_ENTRY _ZTV7S1800C3[];
Class_Descriptor cd_S1800C3 = {  "S1800C3", // class name
  bases_S1800C3, 1,
  &(vtc_S1800C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1800C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1800C3),126, //virtual function table var
  2, // 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  S1800C2  : S1800C3 {
  virtual void  v126(); // _ZN7S1800C24v126Ev
  virtual void  v127(); // _ZN7S1800C24v127Ev
  virtual void  v128(); // _ZN7S1800C24v128Ev
  virtual void  v129(); // _ZN7S1800C24v129Ev
  virtual void  v130(); // _ZN7S1800C24v130Ev
  virtual void  v131(); // _ZN7S1800C24v131Ev
  virtual void  v132(); // _ZN7S1800C24v132Ev
  virtual void  v133(); // _ZN7S1800C24v133Ev
  virtual void  v134(); // _ZN7S1800C24v134Ev
  virtual void  v135(); // _ZN7S1800C24v135Ev
  virtual void  v136(); // _ZN7S1800C24v136Ev
  virtual void  v137(); // _ZN7S1800C24v137Ev
  virtual void  v138(); // _ZN7S1800C24v138Ev
  virtual void  v139(); // _ZN7S1800C24v139Ev
  virtual void  v140(); // _ZN7S1800C24v140Ev
  virtual void  v141(); // _ZN7S1800C24v141Ev
  virtual void  v142(); // _ZN7S1800C24v142Ev
  virtual void  v143(); // _ZN7S1800C24v143Ev
  ~S1800C2(); // tgen
  S1800C2(); // tgen
};
//SIG(-1 S1800C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S1800C2 ::v126(){vfunc_called(this, "_ZN7S1800C24v126Ev");}
void  S1800C2 ::v127(){vfunc_called(this, "_ZN7S1800C24v127Ev");}
void  S1800C2 ::v128(){vfunc_called(this, "_ZN7S1800C24v128Ev");}
void  S1800C2 ::v129(){vfunc_called(this, "_ZN7S1800C24v129Ev");}
void  S1800C2 ::v130(){vfunc_called(this, "_ZN7S1800C24v130Ev");}
void  S1800C2 ::v131(){vfunc_called(this, "_ZN7S1800C24v131Ev");}
void  S1800C2 ::v132(){vfunc_called(this, "_ZN7S1800C24v132Ev");}
void  S1800C2 ::v133(){vfunc_called(this, "_ZN7S1800C24v133Ev");}
void  S1800C2 ::v134(){vfunc_called(this, "_ZN7S1800C24v134Ev");}
void  S1800C2 ::v135(){vfunc_called(this, "_ZN7S1800C24v135Ev");}
void  S1800C2 ::v136(){vfunc_called(this, "_ZN7S1800C24v136Ev");}
void  S1800C2 ::v137(){vfunc_called(this, "_ZN7S1800C24v137Ev");}
void  S1800C2 ::v138(){vfunc_called(this, "_ZN7S1800C24v138Ev");}
void  S1800C2 ::v139(){vfunc_called(this, "_ZN7S1800C24v139Ev");}
void  S1800C2 ::v140(){vfunc_called(this, "_ZN7S1800C24v140Ev");}
void  S1800C2 ::v141(){vfunc_called(this, "_ZN7S1800C24v141Ev");}
void  S1800C2 ::v142(){vfunc_called(this, "_ZN7S1800C24v142Ev");}
void  S1800C2 ::v143(){vfunc_called(this, "_ZN7S1800C24v143Ev");}
S1800C2 ::~S1800C2(){ note_dtor("S1800C2", this);} // tgen
S1800C2 ::S1800C2(){ note_ctor("S1800C2", this);} // tgen

static void Test_S1800C2()
{
  extern Class_Descriptor cd_S1800C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1800C2, buf);
    S1800C2 *dp, &lv = *(dp=new (buf) S1800C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1800C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1800C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S1800C3*), 0, "S1800C2");
    check_base_class_offset(lv, (S1800C3*), 0, "S1800C2");
    test_class_info(&lv, &cd_S1800C2);
    dp->~S1800C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1800C2(Test_S1800C2, "S1800C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1800C2C1Ev();
extern void _ZN7S1800C2D1Ev();
Name_Map name_map_S1800C2[] = {
  NSPAIR(_ZN7S1800C2C1Ev),
  NSPAIR(_ZN7S1800C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1800C3;
extern VTBL_ENTRY _ZTI7S1800C3[];
extern  VTBL_ENTRY _ZTV7S1800C3[];
static Base_Class bases_S1800C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1800C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1800C2[];
extern void _ZN7S1800C2D1Ev();
extern void _ZN7S1800C2D0Ev();
extern void _ZN7S1800C32v4Ev();
extern void _ZN7S1800C32v5Ev();
extern void _ZN7S1800C32v6Ev();
extern void _ZN7S1800C32v7Ev();
extern void _ZN7S1800C32v8Ev();
extern void _ZN7S1800C32v9Ev();
extern void _ZN7S1800C33v10Ev();
extern void _ZN7S1800C33v11Ev();
extern void _ZN7S1800C33v12Ev();
extern void _ZN7S1800C33v13Ev();
extern void _ZN7S1800C33v14Ev();
extern void _ZN7S1800C33v15Ev();
extern void _ZN7S1800C33v16Ev();
extern void _ZN7S1800C33v17Ev();
extern void _ZN7S1800C33v18Ev();
extern void _ZN7S1800C33v19Ev();
extern void _ZN7S1800C33v20Ev();
extern void _ZN7S1800C33v21Ev();
extern void _ZN7S1800C33v22Ev();
extern void _ZN7S1800C33v23Ev();
extern void _ZN7S1800C33v24Ev();
extern void _ZN7S1800C33v25Ev();
extern void _ZN7S1800C33v26Ev();
extern void _ZN7S1800C33v27Ev();
extern void _ZN7S1800C33v28Ev();
extern void _ZN7S1800C33v29Ev();
extern void _ZN7S1800C33v30Ev();
extern void _ZN7S1800C33v31Ev();
extern void _ZN7S1800C33v32Ev();
extern void _ZN7S1800C33v33Ev();
extern void _ZN7S1800C33v34Ev();
extern void _ZN7S1800C33v35Ev();
extern void _ZN7S1800C33v36Ev();
extern void _ZN7S1800C33v37Ev();
extern void _ZN7S1800C33v38Ev();
extern void _ZN7S1800C33v39Ev();
extern void _ZN7S1800C33v40Ev();
extern void _ZN7S1800C33v41Ev();
extern void _ZN7S1800C33v42Ev();
extern void _ZN7S1800C33v43Ev();
extern void _ZN7S1800C33v44Ev();
extern void _ZN7S1800C33v45Ev();
extern void _ZN7S1800C33v46Ev();
extern void _ZN7S1800C33v47Ev();
extern void _ZN7S1800C33v48Ev();
extern void _ZN7S1800C33v49Ev();
extern void _ZN7S1800C33v50Ev();
extern void _ZN7S1800C33v51Ev();
extern void _ZN7S1800C33v52Ev();
extern void _ZN7S1800C33v53Ev();
extern void _ZN7S1800C33v54Ev();
extern void _ZN7S1800C33v55Ev();
extern void _ZN7S1800C33v56Ev();
extern void _ZN7S1800C33v57Ev();
extern void _ZN7S1800C33v58Ev();
extern void _ZN7S1800C33v59Ev();
extern void _ZN7S1800C33v60Ev();
extern void _ZN7S1800C33v61Ev();
extern void _ZN7S1800C33v62Ev();
extern void _ZN7S1800C33v63Ev();
extern void _ZN7S1800C33v64Ev();
extern void _ZN7S1800C33v65Ev();
extern void _ZN7S1800C33v66Ev();
extern void _ZN7S1800C33v67Ev();
extern void _ZN7S1800C33v68Ev();
extern void _ZN7S1800C33v69Ev();
extern void _ZN7S1800C33v70Ev();
extern void _ZN7S1800C33v71Ev();
extern void _ZN7S1800C33v72Ev();
extern void _ZN7S1800C33v73Ev();
extern void _ZN7S1800C33v74Ev();
extern void _ZN7S1800C33v75Ev();
extern void _ZN7S1800C33v76Ev();
extern void _ZN7S1800C33v77Ev();
extern void _ZN7S1800C33v78Ev();
extern void _ZN7S1800C33v79Ev();
extern void _ZN7S1800C33v80Ev();
extern void _ZN7S1800C33v81Ev();
extern void _ZN7S1800C33v82Ev();
extern void _ZN7S1800C33v83Ev();
extern void _ZN7S1800C33v84Ev();
extern void _ZN7S1800C33v85Ev();
extern void _ZN7S1800C33v86Ev();
extern void _ZN7S1800C33v87Ev();
extern void _ZN7S1800C33v88Ev();
extern void _ZN7S1800C33v89Ev();
extern void _ZN7S1800C33v90Ev();
extern void _ZN7S1800C33v91Ev();
extern void _ZN7S1800C33v92Ev();
extern void _ZN7S1800C33v93Ev();
extern void _ZN7S1800C33v94Ev();
extern void _ZN7S1800C33v95Ev();
extern void _ZN7S1800C33v96Ev();
extern void _ZN7S1800C33v97Ev();
extern void _ZN7S1800C33v98Ev();
extern void _ZN7S1800C33v99Ev();
extern void _ZN7S1800C34v100Ev();
extern void _ZN7S1800C34v101Ev();
extern void _ZN7S1800C34v102Ev();
extern void _ZN7S1800C34v103Ev();
extern void _ZN7S1800C34v104Ev();
extern void _ZN7S1800C34v105Ev();
extern void _ZN7S1800C34v106Ev();
extern void _ZN7S1800C34v107Ev();
extern void _ZN7S1800C34v108Ev();
extern void _ZN7S1800C34v109Ev();
extern void _ZN7S1800C34v110Ev();
extern void _ZN7S1800C34v111Ev();
extern void _ZN7S1800C34v112Ev();
extern void _ZN7S1800C34v113Ev();
extern void _ZN7S1800C34v114Ev();
extern void _ZN7S1800C34v115Ev();
extern void _ZN7S1800C34v116Ev();
extern void _ZN7S1800C34v117Ev();
extern void _ZN7S1800C34v118Ev();
extern void _ZN7S1800C34v119Ev();
extern void _ZN7S1800C34v120Ev();
extern void _ZN7S1800C34v121Ev();
extern void _ZN7S1800C34v122Ev();
extern void _ZN7S1800C34v123Ev();
extern void _ZN7S1800C34v124Ev();
extern void _ZN7S1800C34v125Ev();
extern void _ZN7S1800C24v126Ev();
extern void _ZN7S1800C24v127Ev();
extern void _ZN7S1800C24v128Ev();
extern void _ZN7S1800C24v129Ev();
extern void _ZN7S1800C24v130Ev();
extern void _ZN7S1800C24v131Ev();
extern void _ZN7S1800C24v132Ev();
extern void _ZN7S1800C24v133Ev();
extern void _ZN7S1800C24v134Ev();
extern void _ZN7S1800C24v135Ev();
extern void _ZN7S1800C24v136Ev();
extern void _ZN7S1800C24v137Ev();
extern void _ZN7S1800C24v138Ev();
extern void _ZN7S1800C24v139Ev();
extern void _ZN7S1800C24v140Ev();
extern void _ZN7S1800C24v141Ev();
extern void _ZN7S1800C24v142Ev();
extern void _ZN7S1800C24v143Ev();
static  VTBL_ENTRY vtc_S1800C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1800C2[0]),
  (VTBL_ENTRY)&_ZN7S1800C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1800C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v143Ev,
};
extern VTBL_ENTRY _ZTI7S1800C2[];
extern  VTBL_ENTRY _ZTV7S1800C2[];
Class_Descriptor cd_S1800C2 = {  "S1800C2", // class name
  bases_S1800C2, 2,
  &(vtc_S1800C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1800C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1800C2),144, //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  S1800C1  : S1800C2 {
  virtual void  v1(); // _ZN7S1800C12v1Ev
  virtual void  v2(); // _ZN7S1800C12v2Ev
  virtual void  v3(); // _ZN7S1800C12v3Ev
  ~S1800C1(); // tgen
  S1800C1(); // tgen
};
//SIG(1 S1800C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2 v3}


void  S1800C1 ::v1(){vfunc_called(this, "_ZN7S1800C12v1Ev");}
void  S1800C1 ::v2(){vfunc_called(this, "_ZN7S1800C12v2Ev");}
void  S1800C1 ::v3(){vfunc_called(this, "_ZN7S1800C12v3Ev");}
S1800C1 ::~S1800C1(){ note_dtor("S1800C1", this);} // tgen
S1800C1 ::S1800C1(){ note_ctor("S1800C1", this);} // tgen

static void Test_S1800C1()
{
  extern Class_Descriptor cd_S1800C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1800C1, buf);
    S1800C1 *dp, &lv = *(dp=new (buf) S1800C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1800C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1800C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S1800C3*)(S1800C2*), 0, "S1800C1");
    check_base_class_offset(lv, (S1800C3*)(S1800C2*), 0, "S1800C1");
    check_base_class_offset(lv, (S1800C2*), 0, "S1800C1");
    test_class_info(&lv, &cd_S1800C1);
    dp->~S1800C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1800C1(Test_S1800C1, "S1800C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1800C1C1Ev();
extern void _ZN7S1800C1D1Ev();
Name_Map name_map_S1800C1[] = {
  NSPAIR(_ZN7S1800C1C1Ev),
  NSPAIR(_ZN7S1800C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1800C3;
extern VTBL_ENTRY _ZTI7S1800C3[];
extern  VTBL_ENTRY _ZTV7S1800C3[];
extern Class_Descriptor cd_S1800C2;
extern VTBL_ENTRY _ZTI7S1800C2[];
extern  VTBL_ENTRY _ZTV7S1800C2[];
static Base_Class bases_S1800C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1800C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1800C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1800C1[];
extern void _ZN7S1800C1D1Ev();
extern void _ZN7S1800C1D0Ev();
extern void _ZN7S1800C32v4Ev();
extern void _ZN7S1800C32v5Ev();
extern void _ZN7S1800C32v6Ev();
extern void _ZN7S1800C32v7Ev();
extern void _ZN7S1800C32v8Ev();
extern void _ZN7S1800C32v9Ev();
extern void _ZN7S1800C33v10Ev();
extern void _ZN7S1800C33v11Ev();
extern void _ZN7S1800C33v12Ev();
extern void _ZN7S1800C33v13Ev();
extern void _ZN7S1800C33v14Ev();
extern void _ZN7S1800C33v15Ev();
extern void _ZN7S1800C33v16Ev();
extern void _ZN7S1800C33v17Ev();
extern void _ZN7S1800C33v18Ev();
extern void _ZN7S1800C33v19Ev();
extern void _ZN7S1800C33v20Ev();
extern void _ZN7S1800C33v21Ev();
extern void _ZN7S1800C33v22Ev();
extern void _ZN7S1800C33v23Ev();
extern void _ZN7S1800C33v24Ev();
extern void _ZN7S1800C33v25Ev();
extern void _ZN7S1800C33v26Ev();
extern void _ZN7S1800C33v27Ev();
extern void _ZN7S1800C33v28Ev();
extern void _ZN7S1800C33v29Ev();
extern void _ZN7S1800C33v30Ev();
extern void _ZN7S1800C33v31Ev();
extern void _ZN7S1800C33v32Ev();
extern void _ZN7S1800C33v33Ev();
extern void _ZN7S1800C33v34Ev();
extern void _ZN7S1800C33v35Ev();
extern void _ZN7S1800C33v36Ev();
extern void _ZN7S1800C33v37Ev();
extern void _ZN7S1800C33v38Ev();
extern void _ZN7S1800C33v39Ev();
extern void _ZN7S1800C33v40Ev();
extern void _ZN7S1800C33v41Ev();
extern void _ZN7S1800C33v42Ev();
extern void _ZN7S1800C33v43Ev();
extern void _ZN7S1800C33v44Ev();
extern void _ZN7S1800C33v45Ev();
extern void _ZN7S1800C33v46Ev();
extern void _ZN7S1800C33v47Ev();
extern void _ZN7S1800C33v48Ev();
extern void _ZN7S1800C33v49Ev();
extern void _ZN7S1800C33v50Ev();
extern void _ZN7S1800C33v51Ev();
extern void _ZN7S1800C33v52Ev();
extern void _ZN7S1800C33v53Ev();
extern void _ZN7S1800C33v54Ev();
extern void _ZN7S1800C33v55Ev();
extern void _ZN7S1800C33v56Ev();
extern void _ZN7S1800C33v57Ev();
extern void _ZN7S1800C33v58Ev();
extern void _ZN7S1800C33v59Ev();
extern void _ZN7S1800C33v60Ev();
extern void _ZN7S1800C33v61Ev();
extern void _ZN7S1800C33v62Ev();
extern void _ZN7S1800C33v63Ev();
extern void _ZN7S1800C33v64Ev();
extern void _ZN7S1800C33v65Ev();
extern void _ZN7S1800C33v66Ev();
extern void _ZN7S1800C33v67Ev();
extern void _ZN7S1800C33v68Ev();
extern void _ZN7S1800C33v69Ev();
extern void _ZN7S1800C33v70Ev();
extern void _ZN7S1800C33v71Ev();
extern void _ZN7S1800C33v72Ev();
extern void _ZN7S1800C33v73Ev();
extern void _ZN7S1800C33v74Ev();
extern void _ZN7S1800C33v75Ev();
extern void _ZN7S1800C33v76Ev();
extern void _ZN7S1800C33v77Ev();
extern void _ZN7S1800C33v78Ev();
extern void _ZN7S1800C33v79Ev();
extern void _ZN7S1800C33v80Ev();
extern void _ZN7S1800C33v81Ev();
extern void _ZN7S1800C33v82Ev();
extern void _ZN7S1800C33v83Ev();
extern void _ZN7S1800C33v84Ev();
extern void _ZN7S1800C33v85Ev();
extern void _ZN7S1800C33v86Ev();
extern void _ZN7S1800C33v87Ev();
extern void _ZN7S1800C33v88Ev();
extern void _ZN7S1800C33v89Ev();
extern void _ZN7S1800C33v90Ev();
extern void _ZN7S1800C33v91Ev();
extern void _ZN7S1800C33v92Ev();
extern void _ZN7S1800C33v93Ev();
extern void _ZN7S1800C33v94Ev();
extern void _ZN7S1800C33v95Ev();
extern void _ZN7S1800C33v96Ev();
extern void _ZN7S1800C33v97Ev();
extern void _ZN7S1800C33v98Ev();
extern void _ZN7S1800C33v99Ev();
extern void _ZN7S1800C34v100Ev();
extern void _ZN7S1800C34v101Ev();
extern void _ZN7S1800C34v102Ev();
extern void _ZN7S1800C34v103Ev();
extern void _ZN7S1800C34v104Ev();
extern void _ZN7S1800C34v105Ev();
extern void _ZN7S1800C34v106Ev();
extern void _ZN7S1800C34v107Ev();
extern void _ZN7S1800C34v108Ev();
extern void _ZN7S1800C34v109Ev();
extern void _ZN7S1800C34v110Ev();
extern void _ZN7S1800C34v111Ev();
extern void _ZN7S1800C34v112Ev();
extern void _ZN7S1800C34v113Ev();
extern void _ZN7S1800C34v114Ev();
extern void _ZN7S1800C34v115Ev();
extern void _ZN7S1800C34v116Ev();
extern void _ZN7S1800C34v117Ev();
extern void _ZN7S1800C34v118Ev();
extern void _ZN7S1800C34v119Ev();
extern void _ZN7S1800C34v120Ev();
extern void _ZN7S1800C34v121Ev();
extern void _ZN7S1800C34v122Ev();
extern void _ZN7S1800C34v123Ev();
extern void _ZN7S1800C34v124Ev();
extern void _ZN7S1800C34v125Ev();
extern void _ZN7S1800C24v126Ev();
extern void _ZN7S1800C24v127Ev();
extern void _ZN7S1800C24v128Ev();
extern void _ZN7S1800C24v129Ev();
extern void _ZN7S1800C24v130Ev();
extern void _ZN7S1800C24v131Ev();
extern void _ZN7S1800C24v132Ev();
extern void _ZN7S1800C24v133Ev();
extern void _ZN7S1800C24v134Ev();
extern void _ZN7S1800C24v135Ev();
extern void _ZN7S1800C24v136Ev();
extern void _ZN7S1800C24v137Ev();
extern void _ZN7S1800C24v138Ev();
extern void _ZN7S1800C24v139Ev();
extern void _ZN7S1800C24v140Ev();
extern void _ZN7S1800C24v141Ev();
extern void _ZN7S1800C24v142Ev();
extern void _ZN7S1800C24v143Ev();
extern void _ZN7S1800C12v1Ev();
extern void _ZN7S1800C12v2Ev();
extern void _ZN7S1800C12v3Ev();
static  VTBL_ENTRY vtc_S1800C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1800C1[0]),
  (VTBL_ENTRY)&_ZN7S1800C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1800C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1800C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1800C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1800C34v125Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1800C24v143Ev,
  (VTBL_ENTRY)&_ZN7S1800C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1800C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1800C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1800C1[];
extern  VTBL_ENTRY _ZTV7S1800C1[];
Class_Descriptor cd_S1800C1 = {  "S1800C1", // class name
  bases_S1800C1, 3,
  &(vtc_S1800C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1800C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1800C1),147, //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  S1791C3  : S785C5_nt {
  virtual void  v3(); // _ZN7S1791C32v3Ev
  virtual void  v4(); // _ZN7S1791C32v4Ev
  virtual void  v5(); // _ZN7S1791C32v5Ev
  virtual void  v6(); // _ZN7S1791C32v6Ev
  virtual void  v7(); // _ZN7S1791C32v7Ev
  virtual void  v8(); // _ZN7S1791C32v8Ev
  virtual void  v9(); // _ZN7S1791C32v9Ev
  virtual void  v10(); // _ZN7S1791C33v10Ev
  virtual void  v11(); // _ZN7S1791C33v11Ev
  virtual void  v12(); // _ZN7S1791C33v12Ev
  virtual void  v13(); // _ZN7S1791C33v13Ev
  virtual void  v14(); // _ZN7S1791C33v14Ev
  virtual void  v15(); // _ZN7S1791C33v15Ev
  virtual void  v16(); // _ZN7S1791C33v16Ev
  virtual void  v17(); // _ZN7S1791C33v17Ev
  virtual void  v18(); // _ZN7S1791C33v18Ev
  virtual void  v19(); // _ZN7S1791C33v19Ev
  virtual void  v20(); // _ZN7S1791C33v20Ev
  virtual void  v21(); // _ZN7S1791C33v21Ev
  virtual void  v22(); // _ZN7S1791C33v22Ev
  virtual void  v23(); // _ZN7S1791C33v23Ev
  virtual void  v24(); // _ZN7S1791C33v24Ev
  virtual void  v25(); // _ZN7S1791C33v25Ev
  virtual void  v26(); // _ZN7S1791C33v26Ev
  virtual void  v27(); // _ZN7S1791C33v27Ev
  virtual void  v28(); // _ZN7S1791C33v28Ev
  virtual void  v29(); // _ZN7S1791C33v29Ev
  virtual void  v30(); // _ZN7S1791C33v30Ev
  virtual void  v31(); // _ZN7S1791C33v31Ev
  virtual void  v32(); // _ZN7S1791C33v32Ev
  virtual void  v33(); // _ZN7S1791C33v33Ev
  virtual void  v34(); // _ZN7S1791C33v34Ev
  virtual void  v35(); // _ZN7S1791C33v35Ev
  virtual void  v36(); // _ZN7S1791C33v36Ev
  virtual void  v37(); // _ZN7S1791C33v37Ev
  virtual void  v38(); // _ZN7S1791C33v38Ev
  virtual void  v39(); // _ZN7S1791C33v39Ev
  virtual void  v40(); // _ZN7S1791C33v40Ev
  virtual void  v41(); // _ZN7S1791C33v41Ev
  virtual void  v42(); // _ZN7S1791C33v42Ev
  virtual void  v43(); // _ZN7S1791C33v43Ev
  virtual void  v44(); // _ZN7S1791C33v44Ev
  virtual void  v45(); // _ZN7S1791C33v45Ev
  virtual void  v46(); // _ZN7S1791C33v46Ev
  virtual void  v47(); // _ZN7S1791C33v47Ev
  virtual void  v48(); // _ZN7S1791C33v48Ev
  virtual void  v49(); // _ZN7S1791C33v49Ev
  virtual void  v50(); // _ZN7S1791C33v50Ev
  virtual void  v51(); // _ZN7S1791C33v51Ev
  virtual void  v52(); // _ZN7S1791C33v52Ev
  virtual void  v53(); // _ZN7S1791C33v53Ev
  virtual void  v54(); // _ZN7S1791C33v54Ev
  virtual void  v55(); // _ZN7S1791C33v55Ev
  virtual void  v56(); // _ZN7S1791C33v56Ev
  virtual void  v57(); // _ZN7S1791C33v57Ev
  virtual void  v58(); // _ZN7S1791C33v58Ev
  virtual void  v59(); // _ZN7S1791C33v59Ev
  virtual void  v60(); // _ZN7S1791C33v60Ev
  virtual void  v61(); // _ZN7S1791C33v61Ev
  virtual void  v62(); // _ZN7S1791C33v62Ev
  virtual void  v63(); // _ZN7S1791C33v63Ev
  virtual void  v64(); // _ZN7S1791C33v64Ev
  virtual void  v65(); // _ZN7S1791C33v65Ev
  virtual void  v66(); // _ZN7S1791C33v66Ev
  virtual void  v67(); // _ZN7S1791C33v67Ev
  virtual void  v68(); // _ZN7S1791C33v68Ev
  virtual void  v69(); // _ZN7S1791C33v69Ev
  virtual void  v70(); // _ZN7S1791C33v70Ev
  virtual void  v71(); // _ZN7S1791C33v71Ev
  virtual void  v72(); // _ZN7S1791C33v72Ev
  virtual void  v73(); // _ZN7S1791C33v73Ev
  virtual void  v74(); // _ZN7S1791C33v74Ev
  virtual void  v75(); // _ZN7S1791C33v75Ev
  virtual void  v76(); // _ZN7S1791C33v76Ev
  virtual void  v77(); // _ZN7S1791C33v77Ev
  virtual void  v78(); // _ZN7S1791C33v78Ev
  virtual void  v79(); // _ZN7S1791C33v79Ev
  virtual void  v80(); // _ZN7S1791C33v80Ev
  virtual void  v81(); // _ZN7S1791C33v81Ev
  virtual void  v82(); // _ZN7S1791C33v82Ev
  virtual void  v83(); // _ZN7S1791C33v83Ev
  virtual void  v84(); // _ZN7S1791C33v84Ev
  virtual void  v85(); // _ZN7S1791C33v85Ev
  virtual void  v86(); // _ZN7S1791C33v86Ev
  virtual void  v87(); // _ZN7S1791C33v87Ev
  virtual void  v88(); // _ZN7S1791C33v88Ev
  virtual void  v89(); // _ZN7S1791C33v89Ev
  virtual void  v90(); // _ZN7S1791C33v90Ev
  virtual void  v91(); // _ZN7S1791C33v91Ev
  virtual void  v92(); // _ZN7S1791C33v92Ev
  virtual void  v93(); // _ZN7S1791C33v93Ev
  virtual void  v94(); // _ZN7S1791C33v94Ev
  virtual void  v95(); // _ZN7S1791C33v95Ev
  virtual void  v96(); // _ZN7S1791C33v96Ev
  virtual void  v97(); // _ZN7S1791C33v97Ev
  virtual void  v98(); // _ZN7S1791C33v98Ev
  virtual void  v99(); // _ZN7S1791C33v99Ev
  virtual void  v100(); // _ZN7S1791C34v100Ev
  virtual void  v101(); // _ZN7S1791C34v101Ev
  virtual void  v102(); // _ZN7S1791C34v102Ev
  virtual void  v103(); // _ZN7S1791C34v103Ev
  virtual void  v104(); // _ZN7S1791C34v104Ev
  virtual void  v105(); // _ZN7S1791C34v105Ev
  virtual void  v106(); // _ZN7S1791C34v106Ev
  virtual void  v107(); // _ZN7S1791C34v107Ev
  virtual void  v108(); // _ZN7S1791C34v108Ev
  virtual void  v109(); // _ZN7S1791C34v109Ev
  virtual void  v110(); // _ZN7S1791C34v110Ev
  virtual void  v111(); // _ZN7S1791C34v111Ev
  virtual void  v112(); // _ZN7S1791C34v112Ev
  virtual void  v113(); // _ZN7S1791C34v113Ev
  virtual void  v114(); // _ZN7S1791C34v114Ev
  virtual void  v115(); // _ZN7S1791C34v115Ev
  virtual void  v116(); // _ZN7S1791C34v116Ev
  virtual void  v117(); // _ZN7S1791C34v117Ev
  virtual void  v118(); // _ZN7S1791C34v118Ev
  virtual void  v119(); // _ZN7S1791C34v119Ev
  virtual void  v120(); // _ZN7S1791C34v120Ev
  virtual void  v121(); // _ZN7S1791C34v121Ev
  virtual void  v122(); // _ZN7S1791C34v122Ev
  virtual void  v123(); // _ZN7S1791C34v123Ev
  virtual void  v124(); // _ZN7S1791C34v124Ev
  ~S1791C3(); // tgen
  S1791C3(); // tgen
};
//SIG(-1 S1791C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1791C3 ::v3(){vfunc_called(this, "_ZN7S1791C32v3Ev");}
void  S1791C3 ::v4(){vfunc_called(this, "_ZN7S1791C32v4Ev");}
void  S1791C3 ::v5(){vfunc_called(this, "_ZN7S1791C32v5Ev");}
void  S1791C3 ::v6(){vfunc_called(this, "_ZN7S1791C32v6Ev");}
void  S1791C3 ::v7(){vfunc_called(this, "_ZN7S1791C32v7Ev");}
void  S1791C3 ::v8(){vfunc_called(this, "_ZN7S1791C32v8Ev");}
void  S1791C3 ::v9(){vfunc_called(this, "_ZN7S1791C32v9Ev");}
void  S1791C3 ::v10(){vfunc_called(this, "_ZN7S1791C33v10Ev");}
void  S1791C3 ::v11(){vfunc_called(this, "_ZN7S1791C33v11Ev");}
void  S1791C3 ::v12(){vfunc_called(this, "_ZN7S1791C33v12Ev");}
void  S1791C3 ::v13(){vfunc_called(this, "_ZN7S1791C33v13Ev");}
void  S1791C3 ::v14(){vfunc_called(this, "_ZN7S1791C33v14Ev");}
void  S1791C3 ::v15(){vfunc_called(this, "_ZN7S1791C33v15Ev");}
void  S1791C3 ::v16(){vfunc_called(this, "_ZN7S1791C33v16Ev");}
void  S1791C3 ::v17(){vfunc_called(this, "_ZN7S1791C33v17Ev");}
void  S1791C3 ::v18(){vfunc_called(this, "_ZN7S1791C33v18Ev");}
void  S1791C3 ::v19(){vfunc_called(this, "_ZN7S1791C33v19Ev");}
void  S1791C3 ::v20(){vfunc_called(this, "_ZN7S1791C33v20Ev");}
void  S1791C3 ::v21(){vfunc_called(this, "_ZN7S1791C33v21Ev");}
void  S1791C3 ::v22(){vfunc_called(this, "_ZN7S1791C33v22Ev");}
void  S1791C3 ::v23(){vfunc_called(this, "_ZN7S1791C33v23Ev");}
void  S1791C3 ::v24(){vfunc_called(this, "_ZN7S1791C33v24Ev");}
void  S1791C3 ::v25(){vfunc_called(this, "_ZN7S1791C33v25Ev");}
void  S1791C3 ::v26(){vfunc_called(this, "_ZN7S1791C33v26Ev");}
void  S1791C3 ::v27(){vfunc_called(this, "_ZN7S1791C33v27Ev");}
void  S1791C3 ::v28(){vfunc_called(this, "_ZN7S1791C33v28Ev");}
void  S1791C3 ::v29(){vfunc_called(this, "_ZN7S1791C33v29Ev");}
void  S1791C3 ::v30(){vfunc_called(this, "_ZN7S1791C33v30Ev");}
void  S1791C3 ::v31(){vfunc_called(this, "_ZN7S1791C33v31Ev");}
void  S1791C3 ::v32(){vfunc_called(this, "_ZN7S1791C33v32Ev");}
void  S1791C3 ::v33(){vfunc_called(this, "_ZN7S1791C33v33Ev");}
void  S1791C3 ::v34(){vfunc_called(this, "_ZN7S1791C33v34Ev");}
void  S1791C3 ::v35(){vfunc_called(this, "_ZN7S1791C33v35Ev");}
void  S1791C3 ::v36(){vfunc_called(this, "_ZN7S1791C33v36Ev");}
void  S1791C3 ::v37(){vfunc_called(this, "_ZN7S1791C33v37Ev");}
void  S1791C3 ::v38(){vfunc_called(this, "_ZN7S1791C33v38Ev");}
void  S1791C3 ::v39(){vfunc_called(this, "_ZN7S1791C33v39Ev");}
void  S1791C3 ::v40(){vfunc_called(this, "_ZN7S1791C33v40Ev");}
void  S1791C3 ::v41(){vfunc_called(this, "_ZN7S1791C33v41Ev");}
void  S1791C3 ::v42(){vfunc_called(this, "_ZN7S1791C33v42Ev");}
void  S1791C3 ::v43(){vfunc_called(this, "_ZN7S1791C33v43Ev");}
void  S1791C3 ::v44(){vfunc_called(this, "_ZN7S1791C33v44Ev");}
void  S1791C3 ::v45(){vfunc_called(this, "_ZN7S1791C33v45Ev");}
void  S1791C3 ::v46(){vfunc_called(this, "_ZN7S1791C33v46Ev");}
void  S1791C3 ::v47(){vfunc_called(this, "_ZN7S1791C33v47Ev");}
void  S1791C3 ::v48(){vfunc_called(this, "_ZN7S1791C33v48Ev");}
void  S1791C3 ::v49(){vfunc_called(this, "_ZN7S1791C33v49Ev");}
void  S1791C3 ::v50(){vfunc_called(this, "_ZN7S1791C33v50Ev");}
void  S1791C3 ::v51(){vfunc_called(this, "_ZN7S1791C33v51Ev");}
void  S1791C3 ::v52(){vfunc_called(this, "_ZN7S1791C33v52Ev");}
void  S1791C3 ::v53(){vfunc_called(this, "_ZN7S1791C33v53Ev");}
void  S1791C3 ::v54(){vfunc_called(this, "_ZN7S1791C33v54Ev");}
void  S1791C3 ::v55(){vfunc_called(this, "_ZN7S1791C33v55Ev");}
void  S1791C3 ::v56(){vfunc_called(this, "_ZN7S1791C33v56Ev");}
void  S1791C3 ::v57(){vfunc_called(this, "_ZN7S1791C33v57Ev");}
void  S1791C3 ::v58(){vfunc_called(this, "_ZN7S1791C33v58Ev");}
void  S1791C3 ::v59(){vfunc_called(this, "_ZN7S1791C33v59Ev");}
void  S1791C3 ::v60(){vfunc_called(this, "_ZN7S1791C33v60Ev");}
void  S1791C3 ::v61(){vfunc_called(this, "_ZN7S1791C33v61Ev");}
void  S1791C3 ::v62(){vfunc_called(this, "_ZN7S1791C33v62Ev");}
void  S1791C3 ::v63(){vfunc_called(this, "_ZN7S1791C33v63Ev");}
void  S1791C3 ::v64(){vfunc_called(this, "_ZN7S1791C33v64Ev");}
void  S1791C3 ::v65(){vfunc_called(this, "_ZN7S1791C33v65Ev");}
void  S1791C3 ::v66(){vfunc_called(this, "_ZN7S1791C33v66Ev");}
void  S1791C3 ::v67(){vfunc_called(this, "_ZN7S1791C33v67Ev");}
void  S1791C3 ::v68(){vfunc_called(this, "_ZN7S1791C33v68Ev");}
void  S1791C3 ::v69(){vfunc_called(this, "_ZN7S1791C33v69Ev");}
void  S1791C3 ::v70(){vfunc_called(this, "_ZN7S1791C33v70Ev");}
void  S1791C3 ::v71(){vfunc_called(this, "_ZN7S1791C33v71Ev");}
void  S1791C3 ::v72(){vfunc_called(this, "_ZN7S1791C33v72Ev");}
void  S1791C3 ::v73(){vfunc_called(this, "_ZN7S1791C33v73Ev");}
void  S1791C3 ::v74(){vfunc_called(this, "_ZN7S1791C33v74Ev");}
void  S1791C3 ::v75(){vfunc_called(this, "_ZN7S1791C33v75Ev");}
void  S1791C3 ::v76(){vfunc_called(this, "_ZN7S1791C33v76Ev");}
void  S1791C3 ::v77(){vfunc_called(this, "_ZN7S1791C33v77Ev");}
void  S1791C3 ::v78(){vfunc_called(this, "_ZN7S1791C33v78Ev");}
void  S1791C3 ::v79(){vfunc_called(this, "_ZN7S1791C33v79Ev");}
void  S1791C3 ::v80(){vfunc_called(this, "_ZN7S1791C33v80Ev");}
void  S1791C3 ::v81(){vfunc_called(this, "_ZN7S1791C33v81Ev");}
void  S1791C3 ::v82(){vfunc_called(this, "_ZN7S1791C33v82Ev");}
void  S1791C3 ::v83(){vfunc_called(this, "_ZN7S1791C33v83Ev");}
void  S1791C3 ::v84(){vfunc_called(this, "_ZN7S1791C33v84Ev");}
void  S1791C3 ::v85(){vfunc_called(this, "_ZN7S1791C33v85Ev");}
void  S1791C3 ::v86(){vfunc_called(this, "_ZN7S1791C33v86Ev");}
void  S1791C3 ::v87(){vfunc_called(this, "_ZN7S1791C33v87Ev");}
void  S1791C3 ::v88(){vfunc_called(this, "_ZN7S1791C33v88Ev");}
void  S1791C3 ::v89(){vfunc_called(this, "_ZN7S1791C33v89Ev");}
void  S1791C3 ::v90(){vfunc_called(this, "_ZN7S1791C33v90Ev");}
void  S1791C3 ::v91(){vfunc_called(this, "_ZN7S1791C33v91Ev");}
void  S1791C3 ::v92(){vfunc_called(this, "_ZN7S1791C33v92Ev");}
void  S1791C3 ::v93(){vfunc_called(this, "_ZN7S1791C33v93Ev");}
void  S1791C3 ::v94(){vfunc_called(this, "_ZN7S1791C33v94Ev");}
void  S1791C3 ::v95(){vfunc_called(this, "_ZN7S1791C33v95Ev");}
void  S1791C3 ::v96(){vfunc_called(this, "_ZN7S1791C33v96Ev");}
void  S1791C3 ::v97(){vfunc_called(this, "_ZN7S1791C33v97Ev");}
void  S1791C3 ::v98(){vfunc_called(this, "_ZN7S1791C33v98Ev");}
void  S1791C3 ::v99(){vfunc_called(this, "_ZN7S1791C33v99Ev");}
void  S1791C3 ::v100(){vfunc_called(this, "_ZN7S1791C34v100Ev");}
void  S1791C3 ::v101(){vfunc_called(this, "_ZN7S1791C34v101Ev");}
void  S1791C3 ::v102(){vfunc_called(this, "_ZN7S1791C34v102Ev");}
void  S1791C3 ::v103(){vfunc_called(this, "_ZN7S1791C34v103Ev");}
void  S1791C3 ::v104(){vfunc_called(this, "_ZN7S1791C34v104Ev");}
void  S1791C3 ::v105(){vfunc_called(this, "_ZN7S1791C34v105Ev");}
void  S1791C3 ::v106(){vfunc_called(this, "_ZN7S1791C34v106Ev");}
void  S1791C3 ::v107(){vfunc_called(this, "_ZN7S1791C34v107Ev");}
void  S1791C3 ::v108(){vfunc_called(this, "_ZN7S1791C34v108Ev");}
void  S1791C3 ::v109(){vfunc_called(this, "_ZN7S1791C34v109Ev");}
void  S1791C3 ::v110(){vfunc_called(this, "_ZN7S1791C34v110Ev");}
void  S1791C3 ::v111(){vfunc_called(this, "_ZN7S1791C34v111Ev");}
void  S1791C3 ::v112(){vfunc_called(this, "_ZN7S1791C34v112Ev");}
void  S1791C3 ::v113(){vfunc_called(this, "_ZN7S1791C34v113Ev");}
void  S1791C3 ::v114(){vfunc_called(this, "_ZN7S1791C34v114Ev");}
void  S1791C3 ::v115(){vfunc_called(this, "_ZN7S1791C34v115Ev");}
void  S1791C3 ::v116(){vfunc_called(this, "_ZN7S1791C34v116Ev");}
void  S1791C3 ::v117(){vfunc_called(this, "_ZN7S1791C34v117Ev");}
void  S1791C3 ::v118(){vfunc_called(this, "_ZN7S1791C34v118Ev");}
void  S1791C3 ::v119(){vfunc_called(this, "_ZN7S1791C34v119Ev");}
void  S1791C3 ::v120(){vfunc_called(this, "_ZN7S1791C34v120Ev");}
void  S1791C3 ::v121(){vfunc_called(this, "_ZN7S1791C34v121Ev");}
void  S1791C3 ::v122(){vfunc_called(this, "_ZN7S1791C34v122Ev");}
void  S1791C3 ::v123(){vfunc_called(this, "_ZN7S1791C34v123Ev");}
void  S1791C3 ::v124(){vfunc_called(this, "_ZN7S1791C34v124Ev");}
S1791C3 ::~S1791C3(){ note_dtor("S1791C3", this);} // tgen
S1791C3 ::S1791C3(){ note_ctor("S1791C3", this);} // tgen

static void Test_S1791C3()
{
  extern Class_Descriptor cd_S1791C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1791C3, buf);
    S1791C3 *dp, &lv = *(dp=new (buf) S1791C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1791C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1791C3)");
    check_base_class_offset(lv, (S785C5_nt*), 0, "S1791C3");
    test_class_info(&lv, &cd_S1791C3);
    dp->~S1791C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1791C3(Test_S1791C3, "S1791C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1791C3C1Ev();
extern void _ZN7S1791C3D1Ev();
Name_Map name_map_S1791C3[] = {
  NSPAIR(_ZN7S1791C3C1Ev),
  NSPAIR(_ZN7S1791C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
static Base_Class bases_S1791C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1791C3[];
extern void _ZN7S1791C3D1Ev();
extern void _ZN7S1791C3D0Ev();
extern void _ZN7S1791C32v3Ev();
extern void _ZN7S1791C32v4Ev();
extern void _ZN7S1791C32v5Ev();
extern void _ZN7S1791C32v6Ev();
extern void _ZN7S1791C32v7Ev();
extern void _ZN7S1791C32v8Ev();
extern void _ZN7S1791C32v9Ev();
extern void _ZN7S1791C33v10Ev();
extern void _ZN7S1791C33v11Ev();
extern void _ZN7S1791C33v12Ev();
extern void _ZN7S1791C33v13Ev();
extern void _ZN7S1791C33v14Ev();
extern void _ZN7S1791C33v15Ev();
extern void _ZN7S1791C33v16Ev();
extern void _ZN7S1791C33v17Ev();
extern void _ZN7S1791C33v18Ev();
extern void _ZN7S1791C33v19Ev();
extern void _ZN7S1791C33v20Ev();
extern void _ZN7S1791C33v21Ev();
extern void _ZN7S1791C33v22Ev();
extern void _ZN7S1791C33v23Ev();
extern void _ZN7S1791C33v24Ev();
extern void _ZN7S1791C33v25Ev();
extern void _ZN7S1791C33v26Ev();
extern void _ZN7S1791C33v27Ev();
extern void _ZN7S1791C33v28Ev();
extern void _ZN7S1791C33v29Ev();
extern void _ZN7S1791C33v30Ev();
extern void _ZN7S1791C33v31Ev();
extern void _ZN7S1791C33v32Ev();
extern void _ZN7S1791C33v33Ev();
extern void _ZN7S1791C33v34Ev();
extern void _ZN7S1791C33v35Ev();
extern void _ZN7S1791C33v36Ev();
extern void _ZN7S1791C33v37Ev();
extern void _ZN7S1791C33v38Ev();
extern void _ZN7S1791C33v39Ev();
extern void _ZN7S1791C33v40Ev();
extern void _ZN7S1791C33v41Ev();
extern void _ZN7S1791C33v42Ev();
extern void _ZN7S1791C33v43Ev();
extern void _ZN7S1791C33v44Ev();
extern void _ZN7S1791C33v45Ev();
extern void _ZN7S1791C33v46Ev();
extern void _ZN7S1791C33v47Ev();
extern void _ZN7S1791C33v48Ev();
extern void _ZN7S1791C33v49Ev();
extern void _ZN7S1791C33v50Ev();
extern void _ZN7S1791C33v51Ev();
extern void _ZN7S1791C33v52Ev();
extern void _ZN7S1791C33v53Ev();
extern void _ZN7S1791C33v54Ev();
extern void _ZN7S1791C33v55Ev();
extern void _ZN7S1791C33v56Ev();
extern void _ZN7S1791C33v57Ev();
extern void _ZN7S1791C33v58Ev();
extern void _ZN7S1791C33v59Ev();
extern void _ZN7S1791C33v60Ev();
extern void _ZN7S1791C33v61Ev();
extern void _ZN7S1791C33v62Ev();
extern void _ZN7S1791C33v63Ev();
extern void _ZN7S1791C33v64Ev();
extern void _ZN7S1791C33v65Ev();
extern void _ZN7S1791C33v66Ev();
extern void _ZN7S1791C33v67Ev();
extern void _ZN7S1791C33v68Ev();
extern void _ZN7S1791C33v69Ev();
extern void _ZN7S1791C33v70Ev();
extern void _ZN7S1791C33v71Ev();
extern void _ZN7S1791C33v72Ev();
extern void _ZN7S1791C33v73Ev();
extern void _ZN7S1791C33v74Ev();
extern void _ZN7S1791C33v75Ev();
extern void _ZN7S1791C33v76Ev();
extern void _ZN7S1791C33v77Ev();
extern void _ZN7S1791C33v78Ev();
extern void _ZN7S1791C33v79Ev();
extern void _ZN7S1791C33v80Ev();
extern void _ZN7S1791C33v81Ev();
extern void _ZN7S1791C33v82Ev();
extern void _ZN7S1791C33v83Ev();
extern void _ZN7S1791C33v84Ev();
extern void _ZN7S1791C33v85Ev();
extern void _ZN7S1791C33v86Ev();
extern void _ZN7S1791C33v87Ev();
extern void _ZN7S1791C33v88Ev();
extern void _ZN7S1791C33v89Ev();
extern void _ZN7S1791C33v90Ev();
extern void _ZN7S1791C33v91Ev();
extern void _ZN7S1791C33v92Ev();
extern void _ZN7S1791C33v93Ev();
extern void _ZN7S1791C33v94Ev();
extern void _ZN7S1791C33v95Ev();
extern void _ZN7S1791C33v96Ev();
extern void _ZN7S1791C33v97Ev();
extern void _ZN7S1791C33v98Ev();
extern void _ZN7S1791C33v99Ev();
extern void _ZN7S1791C34v100Ev();
extern void _ZN7S1791C34v101Ev();
extern void _ZN7S1791C34v102Ev();
extern void _ZN7S1791C34v103Ev();
extern void _ZN7S1791C34v104Ev();
extern void _ZN7S1791C34v105Ev();
extern void _ZN7S1791C34v106Ev();
extern void _ZN7S1791C34v107Ev();
extern void _ZN7S1791C34v108Ev();
extern void _ZN7S1791C34v109Ev();
extern void _ZN7S1791C34v110Ev();
extern void _ZN7S1791C34v111Ev();
extern void _ZN7S1791C34v112Ev();
extern void _ZN7S1791C34v113Ev();
extern void _ZN7S1791C34v114Ev();
extern void _ZN7S1791C34v115Ev();
extern void _ZN7S1791C34v116Ev();
extern void _ZN7S1791C34v117Ev();
extern void _ZN7S1791C34v118Ev();
extern void _ZN7S1791C34v119Ev();
extern void _ZN7S1791C34v120Ev();
extern void _ZN7S1791C34v121Ev();
extern void _ZN7S1791C34v122Ev();
extern void _ZN7S1791C34v123Ev();
extern void _ZN7S1791C34v124Ev();
static  VTBL_ENTRY vtc_S1791C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1791C3[0]),
  (VTBL_ENTRY)&_ZN7S1791C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1791C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v124Ev,
};
extern VTBL_ENTRY _ZTI7S1791C3[];
extern  VTBL_ENTRY _ZTV7S1791C3[];
Class_Descriptor cd_S1791C3 = {  "S1791C3", // class name
  bases_S1791C3, 1,
  &(vtc_S1791C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1791C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1791C3),126, //virtual function table var
  2, // 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  S1791C2  : S1791C3 {
  virtual void  v125(); // _ZN7S1791C24v125Ev
  virtual void  v126(); // _ZN7S1791C24v126Ev
  virtual void  v127(); // _ZN7S1791C24v127Ev
  virtual void  v128(); // _ZN7S1791C24v128Ev
  virtual void  v129(); // _ZN7S1791C24v129Ev
  virtual void  v130(); // _ZN7S1791C24v130Ev
  virtual void  v131(); // _ZN7S1791C24v131Ev
  virtual void  v132(); // _ZN7S1791C24v132Ev
  virtual void  v133(); // _ZN7S1791C24v133Ev
  virtual void  v134(); // _ZN7S1791C24v134Ev
  virtual void  v135(); // _ZN7S1791C24v135Ev
  virtual void  v136(); // _ZN7S1791C24v136Ev
  virtual void  v137(); // _ZN7S1791C24v137Ev
  virtual void  v138(); // _ZN7S1791C24v138Ev
  virtual void  v139(); // _ZN7S1791C24v139Ev
  virtual void  v140(); // _ZN7S1791C24v140Ev
  virtual void  v141(); // _ZN7S1791C24v141Ev
  virtual void  v142(); // _ZN7S1791C24v142Ev
  ~S1791C2(); // tgen
  S1791C2(); // tgen
};
//SIG(-1 S1791C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S1791C2 ::v125(){vfunc_called(this, "_ZN7S1791C24v125Ev");}
void  S1791C2 ::v126(){vfunc_called(this, "_ZN7S1791C24v126Ev");}
void  S1791C2 ::v127(){vfunc_called(this, "_ZN7S1791C24v127Ev");}
void  S1791C2 ::v128(){vfunc_called(this, "_ZN7S1791C24v128Ev");}
void  S1791C2 ::v129(){vfunc_called(this, "_ZN7S1791C24v129Ev");}
void  S1791C2 ::v130(){vfunc_called(this, "_ZN7S1791C24v130Ev");}
void  S1791C2 ::v131(){vfunc_called(this, "_ZN7S1791C24v131Ev");}
void  S1791C2 ::v132(){vfunc_called(this, "_ZN7S1791C24v132Ev");}
void  S1791C2 ::v133(){vfunc_called(this, "_ZN7S1791C24v133Ev");}
void  S1791C2 ::v134(){vfunc_called(this, "_ZN7S1791C24v134Ev");}
void  S1791C2 ::v135(){vfunc_called(this, "_ZN7S1791C24v135Ev");}
void  S1791C2 ::v136(){vfunc_called(this, "_ZN7S1791C24v136Ev");}
void  S1791C2 ::v137(){vfunc_called(this, "_ZN7S1791C24v137Ev");}
void  S1791C2 ::v138(){vfunc_called(this, "_ZN7S1791C24v138Ev");}
void  S1791C2 ::v139(){vfunc_called(this, "_ZN7S1791C24v139Ev");}
void  S1791C2 ::v140(){vfunc_called(this, "_ZN7S1791C24v140Ev");}
void  S1791C2 ::v141(){vfunc_called(this, "_ZN7S1791C24v141Ev");}
void  S1791C2 ::v142(){vfunc_called(this, "_ZN7S1791C24v142Ev");}
S1791C2 ::~S1791C2(){ note_dtor("S1791C2", this);} // tgen
S1791C2 ::S1791C2(){ note_ctor("S1791C2", this);} // tgen

static void Test_S1791C2()
{
  extern Class_Descriptor cd_S1791C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1791C2, buf);
    S1791C2 *dp, &lv = *(dp=new (buf) S1791C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1791C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1791C2)");
    check_base_class_offset(lv, (S785C5_nt*)(S1791C3*), 0, "S1791C2");
    check_base_class_offset(lv, (S1791C3*), 0, "S1791C2");
    test_class_info(&lv, &cd_S1791C2);
    dp->~S1791C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1791C2(Test_S1791C2, "S1791C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1791C2C1Ev();
extern void _ZN7S1791C2D1Ev();
Name_Map name_map_S1791C2[] = {
  NSPAIR(_ZN7S1791C2C1Ev),
  NSPAIR(_ZN7S1791C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1791C3;
extern VTBL_ENTRY _ZTI7S1791C3[];
extern  VTBL_ENTRY _ZTV7S1791C3[];
static Base_Class bases_S1791C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1791C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1791C2[];
extern void _ZN7S1791C2D1Ev();
extern void _ZN7S1791C2D0Ev();
extern void _ZN7S1791C32v3Ev();
extern void _ZN7S1791C32v4Ev();
extern void _ZN7S1791C32v5Ev();
extern void _ZN7S1791C32v6Ev();
extern void _ZN7S1791C32v7Ev();
extern void _ZN7S1791C32v8Ev();
extern void _ZN7S1791C32v9Ev();
extern void _ZN7S1791C33v10Ev();
extern void _ZN7S1791C33v11Ev();
extern void _ZN7S1791C33v12Ev();
extern void _ZN7S1791C33v13Ev();
extern void _ZN7S1791C33v14Ev();
extern void _ZN7S1791C33v15Ev();
extern void _ZN7S1791C33v16Ev();
extern void _ZN7S1791C33v17Ev();
extern void _ZN7S1791C33v18Ev();
extern void _ZN7S1791C33v19Ev();
extern void _ZN7S1791C33v20Ev();
extern void _ZN7S1791C33v21Ev();
extern void _ZN7S1791C33v22Ev();
extern void _ZN7S1791C33v23Ev();
extern void _ZN7S1791C33v24Ev();
extern void _ZN7S1791C33v25Ev();
extern void _ZN7S1791C33v26Ev();
extern void _ZN7S1791C33v27Ev();
extern void _ZN7S1791C33v28Ev();
extern void _ZN7S1791C33v29Ev();
extern void _ZN7S1791C33v30Ev();
extern void _ZN7S1791C33v31Ev();
extern void _ZN7S1791C33v32Ev();
extern void _ZN7S1791C33v33Ev();
extern void _ZN7S1791C33v34Ev();
extern void _ZN7S1791C33v35Ev();
extern void _ZN7S1791C33v36Ev();
extern void _ZN7S1791C33v37Ev();
extern void _ZN7S1791C33v38Ev();
extern void _ZN7S1791C33v39Ev();
extern void _ZN7S1791C33v40Ev();
extern void _ZN7S1791C33v41Ev();
extern void _ZN7S1791C33v42Ev();
extern void _ZN7S1791C33v43Ev();
extern void _ZN7S1791C33v44Ev();
extern void _ZN7S1791C33v45Ev();
extern void _ZN7S1791C33v46Ev();
extern void _ZN7S1791C33v47Ev();
extern void _ZN7S1791C33v48Ev();
extern void _ZN7S1791C33v49Ev();
extern void _ZN7S1791C33v50Ev();
extern void _ZN7S1791C33v51Ev();
extern void _ZN7S1791C33v52Ev();
extern void _ZN7S1791C33v53Ev();
extern void _ZN7S1791C33v54Ev();
extern void _ZN7S1791C33v55Ev();
extern void _ZN7S1791C33v56Ev();
extern void _ZN7S1791C33v57Ev();
extern void _ZN7S1791C33v58Ev();
extern void _ZN7S1791C33v59Ev();
extern void _ZN7S1791C33v60Ev();
extern void _ZN7S1791C33v61Ev();
extern void _ZN7S1791C33v62Ev();
extern void _ZN7S1791C33v63Ev();
extern void _ZN7S1791C33v64Ev();
extern void _ZN7S1791C33v65Ev();
extern void _ZN7S1791C33v66Ev();
extern void _ZN7S1791C33v67Ev();
extern void _ZN7S1791C33v68Ev();
extern void _ZN7S1791C33v69Ev();
extern void _ZN7S1791C33v70Ev();
extern void _ZN7S1791C33v71Ev();
extern void _ZN7S1791C33v72Ev();
extern void _ZN7S1791C33v73Ev();
extern void _ZN7S1791C33v74Ev();
extern void _ZN7S1791C33v75Ev();
extern void _ZN7S1791C33v76Ev();
extern void _ZN7S1791C33v77Ev();
extern void _ZN7S1791C33v78Ev();
extern void _ZN7S1791C33v79Ev();
extern void _ZN7S1791C33v80Ev();
extern void _ZN7S1791C33v81Ev();
extern void _ZN7S1791C33v82Ev();
extern void _ZN7S1791C33v83Ev();
extern void _ZN7S1791C33v84Ev();
extern void _ZN7S1791C33v85Ev();
extern void _ZN7S1791C33v86Ev();
extern void _ZN7S1791C33v87Ev();
extern void _ZN7S1791C33v88Ev();
extern void _ZN7S1791C33v89Ev();
extern void _ZN7S1791C33v90Ev();
extern void _ZN7S1791C33v91Ev();
extern void _ZN7S1791C33v92Ev();
extern void _ZN7S1791C33v93Ev();
extern void _ZN7S1791C33v94Ev();
extern void _ZN7S1791C33v95Ev();
extern void _ZN7S1791C33v96Ev();
extern void _ZN7S1791C33v97Ev();
extern void _ZN7S1791C33v98Ev();
extern void _ZN7S1791C33v99Ev();
extern void _ZN7S1791C34v100Ev();
extern void _ZN7S1791C34v101Ev();
extern void _ZN7S1791C34v102Ev();
extern void _ZN7S1791C34v103Ev();
extern void _ZN7S1791C34v104Ev();
extern void _ZN7S1791C34v105Ev();
extern void _ZN7S1791C34v106Ev();
extern void _ZN7S1791C34v107Ev();
extern void _ZN7S1791C34v108Ev();
extern void _ZN7S1791C34v109Ev();
extern void _ZN7S1791C34v110Ev();
extern void _ZN7S1791C34v111Ev();
extern void _ZN7S1791C34v112Ev();
extern void _ZN7S1791C34v113Ev();
extern void _ZN7S1791C34v114Ev();
extern void _ZN7S1791C34v115Ev();
extern void _ZN7S1791C34v116Ev();
extern void _ZN7S1791C34v117Ev();
extern void _ZN7S1791C34v118Ev();
extern void _ZN7S1791C34v119Ev();
extern void _ZN7S1791C34v120Ev();
extern void _ZN7S1791C34v121Ev();
extern void _ZN7S1791C34v122Ev();
extern void _ZN7S1791C34v123Ev();
extern void _ZN7S1791C34v124Ev();
extern void _ZN7S1791C24v125Ev();
extern void _ZN7S1791C24v126Ev();
extern void _ZN7S1791C24v127Ev();
extern void _ZN7S1791C24v128Ev();
extern void _ZN7S1791C24v129Ev();
extern void _ZN7S1791C24v130Ev();
extern void _ZN7S1791C24v131Ev();
extern void _ZN7S1791C24v132Ev();
extern void _ZN7S1791C24v133Ev();
extern void _ZN7S1791C24v134Ev();
extern void _ZN7S1791C24v135Ev();
extern void _ZN7S1791C24v136Ev();
extern void _ZN7S1791C24v137Ev();
extern void _ZN7S1791C24v138Ev();
extern void _ZN7S1791C24v139Ev();
extern void _ZN7S1791C24v140Ev();
extern void _ZN7S1791C24v141Ev();
extern void _ZN7S1791C24v142Ev();
static  VTBL_ENTRY vtc_S1791C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1791C2[0]),
  (VTBL_ENTRY)&_ZN7S1791C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1791C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v142Ev,
};
extern VTBL_ENTRY _ZTI7S1791C2[];
extern  VTBL_ENTRY _ZTV7S1791C2[];
Class_Descriptor cd_S1791C2 = {  "S1791C2", // class name
  bases_S1791C2, 2,
  &(vtc_S1791C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1791C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1791C2),144, //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  S1791C1  : S1791C2 {
  virtual void  v1(); // _ZN7S1791C12v1Ev
  virtual void  v2(); // _ZN7S1791C12v2Ev
  ~S1791C1(); // tgen
  S1791C1(); // tgen
};
//SIG(1 S1791C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2}


void  S1791C1 ::v1(){vfunc_called(this, "_ZN7S1791C12v1Ev");}
void  S1791C1 ::v2(){vfunc_called(this, "_ZN7S1791C12v2Ev");}
S1791C1 ::~S1791C1(){ note_dtor("S1791C1", this);} // tgen
S1791C1 ::S1791C1(){ note_ctor("S1791C1", this);} // tgen

static void Test_S1791C1()
{
  extern Class_Descriptor cd_S1791C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1791C1, buf);
    S1791C1 *dp, &lv = *(dp=new (buf) S1791C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1791C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1791C1)");
    check_base_class_offset(lv, (S785C5_nt*)(S1791C3*)(S1791C2*), 0, "S1791C1");
    check_base_class_offset(lv, (S1791C3*)(S1791C2*), 0, "S1791C1");
    check_base_class_offset(lv, (S1791C2*), 0, "S1791C1");
    test_class_info(&lv, &cd_S1791C1);
    dp->~S1791C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1791C1(Test_S1791C1, "S1791C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1791C1C1Ev();
extern void _ZN7S1791C1D1Ev();
Name_Map name_map_S1791C1[] = {
  NSPAIR(_ZN7S1791C1C1Ev),
  NSPAIR(_ZN7S1791C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S785C5_nt;
extern VTBL_ENTRY _ZTI9S785C5_nt[];
extern  VTBL_ENTRY _ZTV9S785C5_nt[];
extern Class_Descriptor cd_S1791C3;
extern VTBL_ENTRY _ZTI7S1791C3[];
extern  VTBL_ENTRY _ZTV7S1791C3[];
extern Class_Descriptor cd_S1791C2;
extern VTBL_ENTRY _ZTI7S1791C2[];
extern  VTBL_ENTRY _ZTV7S1791C2[];
static Base_Class bases_S1791C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S785C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1791C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1791C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1791C1[];
extern void _ZN7S1791C1D1Ev();
extern void _ZN7S1791C1D0Ev();
extern void _ZN7S1791C32v3Ev();
extern void _ZN7S1791C32v4Ev();
extern void _ZN7S1791C32v5Ev();
extern void _ZN7S1791C32v6Ev();
extern void _ZN7S1791C32v7Ev();
extern void _ZN7S1791C32v8Ev();
extern void _ZN7S1791C32v9Ev();
extern void _ZN7S1791C33v10Ev();
extern void _ZN7S1791C33v11Ev();
extern void _ZN7S1791C33v12Ev();
extern void _ZN7S1791C33v13Ev();
extern void _ZN7S1791C33v14Ev();
extern void _ZN7S1791C33v15Ev();
extern void _ZN7S1791C33v16Ev();
extern void _ZN7S1791C33v17Ev();
extern void _ZN7S1791C33v18Ev();
extern void _ZN7S1791C33v19Ev();
extern void _ZN7S1791C33v20Ev();
extern void _ZN7S1791C33v21Ev();
extern void _ZN7S1791C33v22Ev();
extern void _ZN7S1791C33v23Ev();
extern void _ZN7S1791C33v24Ev();
extern void _ZN7S1791C33v25Ev();
extern void _ZN7S1791C33v26Ev();
extern void _ZN7S1791C33v27Ev();
extern void _ZN7S1791C33v28Ev();
extern void _ZN7S1791C33v29Ev();
extern void _ZN7S1791C33v30Ev();
extern void _ZN7S1791C33v31Ev();
extern void _ZN7S1791C33v32Ev();
extern void _ZN7S1791C33v33Ev();
extern void _ZN7S1791C33v34Ev();
extern void _ZN7S1791C33v35Ev();
extern void _ZN7S1791C33v36Ev();
extern void _ZN7S1791C33v37Ev();
extern void _ZN7S1791C33v38Ev();
extern void _ZN7S1791C33v39Ev();
extern void _ZN7S1791C33v40Ev();
extern void _ZN7S1791C33v41Ev();
extern void _ZN7S1791C33v42Ev();
extern void _ZN7S1791C33v43Ev();
extern void _ZN7S1791C33v44Ev();
extern void _ZN7S1791C33v45Ev();
extern void _ZN7S1791C33v46Ev();
extern void _ZN7S1791C33v47Ev();
extern void _ZN7S1791C33v48Ev();
extern void _ZN7S1791C33v49Ev();
extern void _ZN7S1791C33v50Ev();
extern void _ZN7S1791C33v51Ev();
extern void _ZN7S1791C33v52Ev();
extern void _ZN7S1791C33v53Ev();
extern void _ZN7S1791C33v54Ev();
extern void _ZN7S1791C33v55Ev();
extern void _ZN7S1791C33v56Ev();
extern void _ZN7S1791C33v57Ev();
extern void _ZN7S1791C33v58Ev();
extern void _ZN7S1791C33v59Ev();
extern void _ZN7S1791C33v60Ev();
extern void _ZN7S1791C33v61Ev();
extern void _ZN7S1791C33v62Ev();
extern void _ZN7S1791C33v63Ev();
extern void _ZN7S1791C33v64Ev();
extern void _ZN7S1791C33v65Ev();
extern void _ZN7S1791C33v66Ev();
extern void _ZN7S1791C33v67Ev();
extern void _ZN7S1791C33v68Ev();
extern void _ZN7S1791C33v69Ev();
extern void _ZN7S1791C33v70Ev();
extern void _ZN7S1791C33v71Ev();
extern void _ZN7S1791C33v72Ev();
extern void _ZN7S1791C33v73Ev();
extern void _ZN7S1791C33v74Ev();
extern void _ZN7S1791C33v75Ev();
extern void _ZN7S1791C33v76Ev();
extern void _ZN7S1791C33v77Ev();
extern void _ZN7S1791C33v78Ev();
extern void _ZN7S1791C33v79Ev();
extern void _ZN7S1791C33v80Ev();
extern void _ZN7S1791C33v81Ev();
extern void _ZN7S1791C33v82Ev();
extern void _ZN7S1791C33v83Ev();
extern void _ZN7S1791C33v84Ev();
extern void _ZN7S1791C33v85Ev();
extern void _ZN7S1791C33v86Ev();
extern void _ZN7S1791C33v87Ev();
extern void _ZN7S1791C33v88Ev();
extern void _ZN7S1791C33v89Ev();
extern void _ZN7S1791C33v90Ev();
extern void _ZN7S1791C33v91Ev();
extern void _ZN7S1791C33v92Ev();
extern void _ZN7S1791C33v93Ev();
extern void _ZN7S1791C33v94Ev();
extern void _ZN7S1791C33v95Ev();
extern void _ZN7S1791C33v96Ev();
extern void _ZN7S1791C33v97Ev();
extern void _ZN7S1791C33v98Ev();
extern void _ZN7S1791C33v99Ev();
extern void _ZN7S1791C34v100Ev();
extern void _ZN7S1791C34v101Ev();
extern void _ZN7S1791C34v102Ev();
extern void _ZN7S1791C34v103Ev();
extern void _ZN7S1791C34v104Ev();
extern void _ZN7S1791C34v105Ev();
extern void _ZN7S1791C34v106Ev();
extern void _ZN7S1791C34v107Ev();
extern void _ZN7S1791C34v108Ev();
extern void _ZN7S1791C34v109Ev();
extern void _ZN7S1791C34v110Ev();
extern void _ZN7S1791C34v111Ev();
extern void _ZN7S1791C34v112Ev();
extern void _ZN7S1791C34v113Ev();
extern void _ZN7S1791C34v114Ev();
extern void _ZN7S1791C34v115Ev();
extern void _ZN7S1791C34v116Ev();
extern void _ZN7S1791C34v117Ev();
extern void _ZN7S1791C34v118Ev();
extern void _ZN7S1791C34v119Ev();
extern void _ZN7S1791C34v120Ev();
extern void _ZN7S1791C34v121Ev();
extern void _ZN7S1791C34v122Ev();
extern void _ZN7S1791C34v123Ev();
extern void _ZN7S1791C34v124Ev();
extern void _ZN7S1791C24v125Ev();
extern void _ZN7S1791C24v126Ev();
extern void _ZN7S1791C24v127Ev();
extern void _ZN7S1791C24v128Ev();
extern void _ZN7S1791C24v129Ev();
extern void _ZN7S1791C24v130Ev();
extern void _ZN7S1791C24v131Ev();
extern void _ZN7S1791C24v132Ev();
extern void _ZN7S1791C24v133Ev();
extern void _ZN7S1791C24v134Ev();
extern void _ZN7S1791C24v135Ev();
extern void _ZN7S1791C24v136Ev();
extern void _ZN7S1791C24v137Ev();
extern void _ZN7S1791C24v138Ev();
extern void _ZN7S1791C24v139Ev();
extern void _ZN7S1791C24v140Ev();
extern void _ZN7S1791C24v141Ev();
extern void _ZN7S1791C24v142Ev();
extern void _ZN7S1791C12v1Ev();
extern void _ZN7S1791C12v2Ev();
static  VTBL_ENTRY vtc_S1791C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1791C1[0]),
  (VTBL_ENTRY)&_ZN7S1791C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1791C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1791C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1791C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v112Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v113Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v114Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v115Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v116Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v117Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v118Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v119Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v120Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v121Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v122Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v123Ev,
  (VTBL_ENTRY)&_ZN7S1791C34v124Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v125Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v126Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v127Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v128Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v129Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v130Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v131Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v132Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v133Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v134Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v135Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v136Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v137Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v138Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v139Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v140Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v141Ev,
  (VTBL_ENTRY)&_ZN7S1791C24v142Ev,
  (VTBL_ENTRY)&_ZN7S1791C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1791C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1791C1[];
extern  VTBL_ENTRY _ZTV7S1791C1[];
Class_Descriptor cd_S1791C1 = {  "S1791C1", // class name
  bases_S1791C1, 3,
  &(vtc_S1791C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1791C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1791C1),146, //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  S19244C4  {
  short s19244c4f0:6;
  long s19244c4f1;
  short s19244c4f2:4;
  __tsi64 s19244c4f3[13];
  void *s19244c4f4;
  virtual void  v6(); // _ZN8S19244C42v6Ev
  ~S19244C4(); // tgen
  S19244C4(); // tgen
};
//SIG(-1 S19244C4) C1{ v1 Fs:6 Fl Fs:4 FL[13] Fp}


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

static void Test_S19244C4()
{
  extern Class_Descriptor cd_S19244C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,32)];
    init_test(&cd_S19244C4, buf);
    S19244C4 *dp, &lv = *(dp=new (buf) S19244C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,124), "sizeof(S19244C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19244C4)");
    set_bf_and_test(lv, s19244c4f0, ABISELECT(8,4), 0, 6, 1, "S19244C4");
    set_bf_and_test(lv, s19244c4f0, ABISELECT(8,4), 0, 6, hide_sll(1LL<<5), "S19244C4");
    check_field_offset(lv, s19244c4f1, ABISELECT(16,8), "S19244C4.s19244c4f1");
    set_bf_and_test(lv, s19244c4f2, ABISELECT(24,12), 0, 4, 1, "S19244C4");
    set_bf_and_test(lv, s19244c4f2, ABISELECT(24,12), 0, 4, hide_sll(1LL<<3), "S19244C4");
    check_field_offset(lv, s19244c4f3, ABISELECT(32,16), "S19244C4.s19244c4f3");
    check_field_offset(lv, s19244c4f4, ABISELECT(136,120), "S19244C4.s19244c4f4");
    test_class_info(&lv, &cd_S19244C4);
    dp->~S19244C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C4(Test_S19244C4, "S19244C4", ABISELECT(144,124));

#else // __cplusplus

extern void _ZN8S19244C4C1Ev();
extern void _ZN8S19244C4D1Ev();
Name_Map name_map_S19244C4[] = {
  NSPAIR(_ZN8S19244C4C1Ev),
  NSPAIR(_ZN8S19244C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19244C4[];
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY vtc_S19244C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C4[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
Class_Descriptor cd_S19244C4 = {  "S19244C4", // class name
  0,0,//no base classes
  &(vtc_S19244C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,124), // object size
  NSPAIRA(_ZTI8S19244C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19244C4),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  S19244C3  {
  __tsi64 s19244c3f0;
  long double s19244c3f1;
  void *s19244c3f2;
  char s19244c3f3;
  ::S19244C4 s19244c3f4;
  void *s19244c3f5[2];
  __tsi64 s19244c3f6[8];
  short s19244c3f7;
  void *s19244c3f8;
  __tsi64 s19244c3f9:64;
  virtual void  v1(); // _ZN8S19244C32v1Ev
  ~S19244C3(); // tgen
  S19244C3(); // tgen
};
//SIG(-1 S19244C3) C1{ v1 FL FD Fp Fc FC2{ v2 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64}


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

static void Test_S19244C3()
{
  extern Class_Descriptor cd_S19244C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,62)];
    init_test(&cd_S19244C3, buf);
    S19244C3 *dp, &lv = *(dp=new (buf) S19244C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,244), "sizeof(S19244C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C3)");
    check_field_offset(lv, s19244c3f0, ABISELECT(8,4), "S19244C3.s19244c3f0");
    check_field_offset(lv, s19244c3f1, ABISELECT(16,12), "S19244C3.s19244c3f1");
    check_field_offset(lv, s19244c3f2, ABISELECT(32,24), "S19244C3.s19244c3f2");
    check_field_offset(lv, s19244c3f3, ABISELECT(40,28), "S19244C3.s19244c3f3");
    check_field_offset(lv, s19244c3f4, ABISELECT(48,32), "S19244C3.s19244c3f4");
    check_field_offset(lv, s19244c3f5, ABISELECT(192,156), "S19244C3.s19244c3f5");
    check_field_offset(lv, s19244c3f6, ABISELECT(208,164), "S19244C3.s19244c3f6");
    check_field_offset(lv, s19244c3f7, ABISELECT(272,228), "S19244C3.s19244c3f7");
    check_field_offset(lv, s19244c3f8, ABISELECT(280,232), "S19244C3.s19244c3f8");
    set_bf_and_test(lv, s19244c3f9, ABISELECT(288,236), 0, 64, 1, "S19244C3");
    set_bf_and_test(lv, s19244c3f9, ABISELECT(288,236), 0, 64, hide_sll(1LL<<63), "S19244C3");
    test_class_info(&lv, &cd_S19244C3);
    dp->~S19244C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C3(Test_S19244C3, "S19244C3", ABISELECT(304,244));

#else // __cplusplus

extern void _ZN8S19244C3C1Ev();
extern void _ZN8S19244C3D1Ev();
Name_Map name_map_S19244C3[] = {
  NSPAIR(_ZN8S19244C3C1Ev),
  NSPAIR(_ZN8S19244C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19244C3[];
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY vtc_S19244C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C3[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
Class_Descriptor cd_S19244C3 = {  "S19244C3", // class name
  0,0,//no base classes
  &(vtc_S19244C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,244), // object size
  NSPAIRA(_ZTI8S19244C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19244C3),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19244C5  : virtual S19244C4 {
  void *s19244c5f0;
  ::S19244C4 s19244c5f1;
  int s19244c5f2:3;
  ~S19244C5(); // tgen
  S19244C5(); // tgen
};
//SIG(-1 S19244C5) C1{ VBC2{ v1 Fs:6 Fl Fs:4 FL[13] Fp} Fp FC2 Fi:3}


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

static void Test_S19244C5()
{
  extern Class_Descriptor cd_S19244C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,66)];
    init_test(&cd_S19244C5, buf);
    S19244C5 *dp, &lv = *(dp=new (buf) S19244C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,260), "sizeof(S19244C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19244C5)");
    check_base_class_offset(lv, (S19244C4*), ABISELECT(168,136), "S19244C5");
    check_field_offset(lv, s19244c5f0, ABISELECT(8,4), "S19244C5.s19244c5f0");
    check_field_offset(lv, s19244c5f1, ABISELECT(16,8), "S19244C5.s19244c5f1");
    set_bf_and_test(lv, s19244c5f2, ABISELECT(160,132), 0, 3, 1, "S19244C5");
    set_bf_and_test(lv, s19244c5f2, ABISELECT(160,132), 0, 3, hide_sll(1LL<<2), "S19244C5");
    test_class_info(&lv, &cd_S19244C5);
    dp->~S19244C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C5(Test_S19244C5, "S19244C5", ABISELECT(312,260));

#else // __cplusplus

extern void _ZN8S19244C5C1Ev();
extern void _ZN8S19244C5D1Ev();
Name_Map name_map_S19244C5[] = {
  NSPAIR(_ZN8S19244C5C1Ev),
  NSPAIR(_ZN8S19244C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
static Base_Class bases_S19244C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C4,    ABISELECT(168,136), //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 _ZTI8S19244C5[];
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY vtc_S19244C5[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern VTBL_ENTRY _ZTV8S19244C5[];
static  VTT_ENTRY vtt_S19244C5[] = {
  {&(_ZTV8S19244C5[3]),  3,7},
  {&(_ZTV8S19244C5[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S19244C5[];
extern  VTBL_ENTRY _ZTV8S19244C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C5[];
Class_Descriptor cd_S19244C5 = {  "S19244C5", // class name
  bases_S19244C5, 1,
  &(vtc_S19244C5[0]), // expected_vtbl_contents
  &(vtt_S19244C5[0]), // expected_vtt_contents
  ABISELECT(312,260), // object size
  NSPAIRA(_ZTI8S19244C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19244C5),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19244C5),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  S19244C2  : S19244C3 {
  ::S19244C5 s19244c2f0;
  int s19244c2f1;
  void *s19244c2f2;
  int s19244c2f3;
  virtual  ~S19244C2(); // _ZN8S19244C2D1Ev
  virtual void  v2(); // _ZN8S19244C22v2Ev
  S19244C2(); // tgen
};
//SIG(-1 S19244C2) C1{ BC2{ v2 FL FD Fp Fc FC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v1 FC4{ VBC3 Fp FC3 Fi:3} Fi Fp Fi}


 S19244C2 ::~S19244C2(){ note_dtor("S19244C2", this);}
void  S19244C2 ::v2(){vfunc_called(this, "_ZN8S19244C22v2Ev");}
S19244C2 ::S19244C2(){ note_ctor("S19244C2", this);} // tgen

static void Test_S19244C2()
{
  extern Class_Descriptor cd_S19244C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,130)];
    init_test(&cd_S19244C2, buf);
    S19244C2 *dp, &lv = *(dp=new (buf) S19244C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,516), "sizeof(S19244C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C2)");
    check_base_class_offset(lv, (S19244C3*), 0, "S19244C2");
    check_field_offset(lv, s19244c2f0, ABISELECT(296,244), "S19244C2.s19244c2f0");
    check_field_offset(lv, s19244c2f1, ABISELECT(608,504), "S19244C2.s19244c2f1");
    check_field_offset(lv, s19244c2f2, ABISELECT(616,508), "S19244C2.s19244c2f2");
    check_field_offset(lv, s19244c2f3, ABISELECT(624,512), "S19244C2.s19244c2f3");
    test_class_info(&lv, &cd_S19244C2);
    dp->~S19244C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C2(Test_S19244C2, "S19244C2", ABISELECT(640,516));

#else // __cplusplus

extern void _ZN8S19244C2C1Ev();
extern void _ZN8S19244C2D1Ev();
Name_Map name_map_S19244C2[] = {
  NSPAIR(_ZN8S19244C2C1Ev),
  NSPAIR(_ZN8S19244C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
static Base_Class bases_S19244C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19244C2[];
extern void _ZN8S19244C32v1Ev();
extern void _ZN8S19244C2D1Ev();
extern void _ZN8S19244C2D0Ev();
extern void _ZN8S19244C22v2Ev();
static  VTBL_ENTRY vtc_S19244C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C2[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19244C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19244C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19244C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19244C2[];
extern  VTBL_ENTRY _ZTV8S19244C2[];
Class_Descriptor cd_S19244C2 = {  "S19244C2", // class name
  bases_S19244C2, 1,
  &(vtc_S19244C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(640,516), // object size
  NSPAIRA(_ZTI8S19244C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19244C2),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  S19244C7  {
  int s19244c7f0[2];
  __tsi64 s19244c7f1[2];
  ::S19244C4 s19244c7f2[3];
  virtual void  v3(); // _ZN8S19244C72v3Ev
  virtual void  v4(); // _ZN8S19244C72v4Ev
  virtual void  v5(); // _ZN8S19244C72v5Ev
  ~S19244C7(); // tgen
  S19244C7(); // tgen
};
//SIG(-1 S19244C7) C1{ v1 v2 v3 Fi[2] FL[2] FC2{ v4 Fs:6 Fl Fs:4 FL[13] Fp}[3]}


void  S19244C7 ::v3(){vfunc_called(this, "_ZN8S19244C72v3Ev");}
void  S19244C7 ::v4(){vfunc_called(this, "_ZN8S19244C72v4Ev");}
void  S19244C7 ::v5(){vfunc_called(this, "_ZN8S19244C72v5Ev");}
S19244C7 ::~S19244C7(){ note_dtor("S19244C7", this);} // tgen
S19244C7 ::S19244C7(){ note_ctor("S19244C7", this);} // tgen

static void Test_S19244C7()
{
  extern Class_Descriptor cd_S19244C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(59,101)];
    init_test(&cd_S19244C7, buf);
    S19244C7 *dp, &lv = *(dp=new (buf) S19244C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,400), "sizeof(S19244C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19244C7)");
    check_field_offset(lv, s19244c7f0, ABISELECT(8,4), "S19244C7.s19244c7f0");
    check_field_offset(lv, s19244c7f1, ABISELECT(16,12), "S19244C7.s19244c7f1");
    check_field_offset(lv, s19244c7f2, ABISELECT(32,28), "S19244C7.s19244c7f2");
    test_class_info(&lv, &cd_S19244C7);
    dp->~S19244C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C7(Test_S19244C7, "S19244C7", ABISELECT(464,400));

#else // __cplusplus

extern void _ZN8S19244C7C1Ev();
extern void _ZN8S19244C7D1Ev();
Name_Map name_map_S19244C7[] = {
  NSPAIR(_ZN8S19244C7C1Ev),
  NSPAIR(_ZN8S19244C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19244C7[];
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY vtc_S19244C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C7[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
Class_Descriptor cd_S19244C7 = {  "S19244C7", // class name
  0,0,//no base classes
  &(vtc_S19244C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,400), // object size
  NSPAIRA(_ZTI8S19244C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19244C7),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19244C10  : S19244C4 , virtual S19244C7 , virtual S19244C5 , virtual S19244C3 {
  ::S19244C3 s19244c10f0;
  short s19244c10f1;
  int s19244c10f2[2];
  ~S19244C10(); // tgen
  S19244C10(); // tgen
};
//SIG(-1 S19244C10) C1{ BC2{ v1 Fs:6 Fl Fs:4 FL[13] Fp} VBC3{ v2 v3 v4 Fi[2] FL[2] FC2[3]} VBC4{ VBC2 Fp FC2 Fi:3} VBC5{ v5 FL FD Fp Fc FC2 Fp[2] FL[8] Fs Fp FL:64} FC5 Fs Fi[2]}


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

static void Test_S19244C10()
{
  extern Class_Descriptor cd_S19244C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(98,322)];
    init_test(&cd_S19244C10, buf);
    S19244C10 *dp, &lv = *(dp=new (buf) S19244C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1552,1284), "sizeof(S19244C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C10)");
    /*is_ambiguous_... S19244C10::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*), 0, "S19244C10");
    check_base_class_offset(lv, (S19244C7*), ABISELECT(464,380), "S19244C10");
    check_base_class_offset(lv, (S19244C4*)(S19244C5*), ABISELECT(1096,916), "S19244C10");
    check_base_class_offset(lv, (S19244C5*), ABISELECT(928,780), "S19244C10");
    check_base_class_offset(lv, (S19244C3*), ABISELECT(1248,1040), "S19244C10");
    check_field_offset(lv, s19244c10f0, ABISELECT(144,124), "S19244C10.s19244c10f0");
    check_field_offset(lv, s19244c10f1, ABISELECT(448,368), "S19244C10.s19244c10f1");
    check_field_offset(lv, s19244c10f2, ABISELECT(452,372), "S19244C10.s19244c10f2");
    test_class_info(&lv, &cd_S19244C10);
    dp->~S19244C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C10(Test_S19244C10, "S19244C10", ABISELECT(1552,1284));

#else // __cplusplus

extern void _ZN9S19244C10C1Ev();
extern void _ZN9S19244C10D1Ev();
Name_Map name_map_S19244C10[] = {
  NSPAIR(_ZN9S19244C10C1Ev),
  NSPAIR(_ZN9S19244C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C5;
extern VTBL_ENTRY _ZTI8S19244C5[];
extern  VTBL_ENTRY _ZTV8S19244C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C5[];
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
static Base_Class bases_S19244C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19244C7,    ABISELECT(464,380), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C4,    ABISELECT(1096,916), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19244C5,    ABISELECT(928,780), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C3,    ABISELECT(1248,1040), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19244C10[];
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY vtc_S19244C10[] = {
  ABISELECT(1248,1040),
  ABISELECT(1096,916),
  ABISELECT(928,780),
  ABISELECT(464,380),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  0,
  0,
  0,
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  ABISELECT(168,136),
  ABISELECT(-928,-780),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  0,
  ABISELECT(-1096,-916),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  0,
  ABISELECT(-1248,-1040),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern VTBL_ENTRY _ZTV9S19244C10[];
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C10[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__8S19244C5__9S19244C10[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTT_ENTRY vtt_S19244C10[] = {
  {&(_ZTV9S19244C10[6]),  6,26},
  {&(_ZTV9S19244C10[12]),  12,26},
  {&(_ZTV9S19244C10[18]),  18,26},
  {&(_ZTV9S19244C10[21]),  21,26},
  {&(_ZTV9S19244C10[25]),  25,26},
  {&(_tg__ZTV8S19244C5__9S19244C10[3]),  3,3},
  {&(_tg__ZTV8S19244C4__8S19244C5__9S19244C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19244C10[];
extern  VTBL_ENTRY _ZTV9S19244C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C10[];
Class_Descriptor cd_S19244C10 = {  "S19244C10", // class name
  bases_S19244C10, 5,
  &(vtc_S19244C10[0]), // expected_vtbl_contents
  &(vtt_S19244C10[0]), // expected_vtt_contents
  ABISELECT(1552,1284), // object size
  NSPAIRA(_ZTI9S19244C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19244C10),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19244C10),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19244C9  : S19244C3 , S19244C7 , S19244C4 {
  __tsi64 s19244c9f0[2];
  void *s19244c9f1[8];
  ::S19244C10 s19244c9f2;
  void *s19244c9f3;
  int s19244c9f4;
  ::S19244C10 s19244c9f5;
  int s19244c9f6;
  virtual  ~S19244C9(); // _ZN8S19244C9D1Ev
  virtual void  v7(); // _ZN8S19244C92v7Ev
  S19244C9(); // tgen
};
//SIG(-1 S19244C9) C1{ BC2{ v2 FL FD Fp Fc FC3{ v6 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC4{ v3 v4 v5 Fi[2] FL[2] FC3[3]} BC3 vd v1 FL[2] Fp[8] FC5{ BC3 VBC4 VBC6{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC5 Fi}


 S19244C9 ::~S19244C9(){ note_dtor("S19244C9", this);}
void  S19244C9 ::v7(){vfunc_called(this, "_ZN8S19244C92v7Ev");}
S19244C9 ::S19244C9(){ note_ctor("S19244C9", this);} // tgen

static void Test_S19244C9()
{
  extern Class_Descriptor cd_S19244C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(259,850)];
    init_test(&cd_S19244C9, buf);
    S19244C9 *dp, &lv = *(dp=new (buf) S19244C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4128,3396), "sizeof(S19244C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C9)");
    check_base_class_offset(lv, (S19244C3*), 0, "S19244C9");
    check_base_class_offset(lv, (S19244C7*), ABISELECT(296,244), "S19244C9");
    check_base_class_offset(lv, (S19244C4*), ABISELECT(760,644), "S19244C9");
    check_field_offset(lv, s19244c9f0, ABISELECT(904,768), "S19244C9.s19244c9f0");
    check_field_offset(lv, s19244c9f1, ABISELECT(920,784), "S19244C9.s19244c9f1");
    check_field_offset(lv, s19244c9f2, ABISELECT(992,816), "S19244C9.s19244c9f2");
    check_field_offset(lv, s19244c9f3, ABISELECT(2544,2100), "S19244C9.s19244c9f3");
    check_field_offset(lv, s19244c9f4, ABISELECT(2552,2104), "S19244C9.s19244c9f4");
    check_field_offset(lv, s19244c9f5, ABISELECT(2560,2108), "S19244C9.s19244c9f5");
    check_field_offset(lv, s19244c9f6, ABISELECT(4112,3392), "S19244C9.s19244c9f6");
    test_class_info(&lv, &cd_S19244C9);
    dp->~S19244C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C9(Test_S19244C9, "S19244C9", ABISELECT(4128,3396));

#else // __cplusplus

extern void _ZN8S19244C9C1Ev();
extern void _ZN8S19244C9D1Ev();
Name_Map name_map_S19244C9[] = {
  NSPAIR(_ZN8S19244C9C1Ev),
  NSPAIR(_ZN8S19244C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
static Base_Class bases_S19244C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19244C7,    ABISELECT(296,244), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19244C4,    ABISELECT(760,644), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19244C9[];
extern void _ZN8S19244C32v1Ev();
extern void _ZN8S19244C9D1Ev();
extern void _ZN8S19244C9D0Ev();
extern void _ZN8S19244C92v7Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY vtc_S19244C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C9[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19244C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19244C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI8S19244C9[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI8S19244C9[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern VTBL_ENTRY _ZTI8S19244C9[];
extern  VTBL_ENTRY _ZTV8S19244C9[];
Class_Descriptor cd_S19244C9 = {  "S19244C9", // class name
  bases_S19244C9, 3,
  &(vtc_S19244C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4128,3396), // object size
  NSPAIRA(_ZTI8S19244C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19244C9),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19244C11  : virtual S19244C3 , virtual S19244C9 , virtual S19244C4 , virtual S19244C5 {
  __tsi64 s19244c11f0:44;
  void *s19244c11f1;
  int s19244c11f2;
  ::S19244C10 s19244c11f3;
  __tsi64 s19244c11f4[2];
  int s19244c11f5[3];
  ::S19244C9 s19244c11f6;
  char s19244c11f7:7;
  ::S19244C2 s19244c11f8;
  ~S19244C11(); // tgen
  S19244C11(); // tgen
};
//SIG(-1 S19244C11) C1{ VBC2{ v1 FL FD Fp Fc FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} VBC4{ BC2 BC5{ v2 v3 v4 Fi[2] FL[2] FC3[3]} BC3 vd v6 FL[2] Fp[8] FC6{ BC3 VBC5 VBC7{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC6 Fi} VBC3 VBC7 FL:44 Fp Fi FC6 FL[2] Fi[3] FC4 Fc:7 FC8{ BC2 vd v7 FC7 Fi Fp Fi}}


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

static void Test_S19244C11()
{
  extern Class_Descriptor cd_S19244C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(697,2288)];
    init_test(&cd_S19244C11, buf);
    S19244C11 *dp, &lv = *(dp=new (buf) S19244C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11136,9148), "sizeof(S19244C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C11)");
    /*is_ambiguous_... S19244C11::S19244C3 */ AMB_check_base_class_offset(lv, (S19244C3*), ABISELECT(6400,5248), "S19244C11");
    check_base_class_offset(lv, (S19244C3*)(S19244C9*), ABISELECT(6704,5492), "S19244C11");
    check_base_class_offset(lv, (S19244C7*)(S19244C9*), ABISELECT(7000,5736), "S19244C11");
    check_base_class_offset(lv, (S19244C4*)(S19244C9*), ABISELECT(7464,6136), "S19244C11");
    check_base_class_offset(lv, (S19244C9*), ABISELECT(6704,5492), "S19244C11");
    /*is_ambiguous_... S19244C11::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*), ABISELECT(10824,8888), "S19244C11");
    check_base_class_offset(lv, (S19244C4*)(S19244C5*), ABISELECT(10824,8888), "S19244C11");
    check_base_class_offset(lv, (S19244C5*), ABISELECT(10968,9012), "S19244C11");
    set_bf_and_test(lv, s19244c11f0, ABISELECT(8,4), 0, 44, 1, "S19244C11");
    set_bf_and_test(lv, s19244c11f0, ABISELECT(8,4), 0, 44, hide_sll(1LL<<43), "S19244C11");
    check_field_offset(lv, s19244c11f1, ABISELECT(16,12), "S19244C11.s19244c11f1");
    check_field_offset(lv, s19244c11f2, ABISELECT(24,16), "S19244C11.s19244c11f2");
    check_field_offset(lv, s19244c11f3, ABISELECT(32,20), "S19244C11.s19244c11f3");
    check_field_offset(lv, s19244c11f4, ABISELECT(1584,1304), "S19244C11.s19244c11f4");
    check_field_offset(lv, s19244c11f5, ABISELECT(1600,1320), "S19244C11.s19244c11f5");
    check_field_offset(lv, s19244c11f6, ABISELECT(1616,1332), "S19244C11.s19244c11f6");
    set_bf_and_test(lv, s19244c11f7, ABISELECT(5744,4728), 0, 7, 1, "S19244C11");
    set_bf_and_test(lv, s19244c11f7, ABISELECT(5744,4728), 0, 7, hide_sll(1LL<<6), "S19244C11");
    check_field_offset(lv, s19244c11f8, ABISELECT(5760,4732), "S19244C11.s19244c11f8");
    test_class_info(&lv, &cd_S19244C11);
    dp->~S19244C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C11(Test_S19244C11, "S19244C11", ABISELECT(11136,9148));

#else // __cplusplus

extern void _ZN9S19244C11C1Ev();
extern void _ZN9S19244C11D1Ev();
Name_Map name_map_S19244C11[] = {
  NSPAIR(_ZN9S19244C11C1Ev),
  NSPAIR(_ZN9S19244C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C9;
extern VTBL_ENTRY _ZTI8S19244C9[];
extern  VTBL_ENTRY _ZTV8S19244C9[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C5;
extern VTBL_ENTRY _ZTI8S19244C5[];
extern  VTBL_ENTRY _ZTV8S19244C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C5[];
static Base_Class bases_S19244C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C3,    ABISELECT(6400,5248), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C3,    ABISELECT(6704,5492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19244C7,    ABISELECT(7000,5736), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19244C4,    ABISELECT(7464,6136), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19244C9,    ABISELECT(6704,5492), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C4,    ABISELECT(10824,8888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C5,    ABISELECT(10968,9012), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19244C11[];
extern void _ZN9S19244C11D1Ev();
extern void _ZN9S19244C11D0Ev();
extern void _ZN8S19244C32v1Ev();
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev)();
extern void ABISELECT(_ZThn6704_N9S19244C11D1Ev,_ZThn5492_N9S19244C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev)();
extern void ABISELECT(_ZThn6704_N9S19244C11D0Ev,_ZThn5492_N9S19244C11D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY vtc_S19244C11[] = {
  ABISELECT(10968,9012),
  ABISELECT(10824,8888),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN9S19244C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19244C11D0Ev,
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  0,
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  ABISELECT(-144,-124),
  ABISELECT(-10968,-9012),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
};
extern VTBL_ENTRY _ZTV9S19244C11[];
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C11[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__8S19244C5__9S19244C11[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTT_ENTRY vtt_S19244C11[] = {
  {&(_ZTV9S19244C11[6]),  6,40},
  {&(_ZTV9S19244C11[11]),  11,40},
  {&(_ZTV9S19244C11[21]),  21,40},
  {&(_ZTV9S19244C11[27]),  27,40},
  {&(_ZTV9S19244C11[32]),  32,40},
  {&(_ZTV9S19244C11[36]),  36,40},
  {&(_ZTV9S19244C11[40]),  40,40},
  {&(_tg__ZTV8S19244C5__9S19244C11[3]),  3,3},
  {&(_tg__ZTV8S19244C4__8S19244C5__9S19244C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19244C11[];
extern  VTBL_ENTRY _ZTV9S19244C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C11[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19244C11D0Ev,_ZThn5492_N9S19244C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19244C11D1Ev,_ZThn5492_N9S19244C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19244C11 = {  "S19244C11", // class name
  bases_S19244C11, 7,
  &(vtc_S19244C11[0]), // expected_vtbl_contents
  &(vtt_S19244C11[0]), // expected_vtt_contents
  ABISELECT(11136,9148), // object size
  NSPAIRA(_ZTI9S19244C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19244C11),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19244C11),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19244C8  : virtual S19244C9 , virtual S19244C4 , virtual S19244C5 , S19244C10 , S19244C11 {
  ::S19244C9 s19244c8f0;
  __tsi64 s19244c8f1;
  char s19244c8f2:7;
  virtual void  v8(); // _ZN8S19244C82v8Ev
  ~S19244C8(); // tgen
  S19244C8(); // tgen
};
//SIG(-1 S19244C8) C1{ VBC2{ BC3{ v2 FL FD Fp Fc FC4{ v6 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC5{ v3 v4 v5 Fi[2] FL[2] FC4[3]} BC4 vd v7 FL[2] Fp[8] FC6{ BC4 VBC5 VBC7{ VBC4 Fp FC4 Fi:3} VBC3 FC3 Fs Fi[2]} Fp Fi FC6 Fi} VBC4 VBC7 BC6 BC8{ VBC3 VBC2 VBC4 VBC7 FL:44 Fp Fi FC6 FL[2] Fi[3] FC2 Fc:7 FC9{ BC3 vd v8 FC7 Fi Fp Fi}} v1 FC2 FL Fc:7}


void  S19244C8 ::v8(){vfunc_called(this, "_ZN8S19244C82v8Ev");}
S19244C8 ::~S19244C8(){ note_dtor("S19244C8", this);} // tgen
S19244C8 ::S19244C8(){ note_ctor("S19244C8", this);} // tgen

static void Test_S19244C8()
{
  extern Class_Descriptor cd_S19244C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1014,3335)];
    init_test(&cd_S19244C8, buf);
    S19244C8 *dp, &lv = *(dp=new (buf) S19244C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16208,13336), "sizeof(S19244C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C8)");
    check_base_class_offset(lv, (S19244C3*)(S19244C9*), ABISELECT(11008,9036), "S19244C8");
    check_base_class_offset(lv, (S19244C7*)(S19244C9*), ABISELECT(11304,9280), "S19244C8");
    check_base_class_offset(lv, (S19244C4*)(S19244C9*), ABISELECT(11768,9680), "S19244C8");
    check_base_class_offset(lv, (S19244C9*), ABISELECT(11008,9036), "S19244C8");
    check_base_class_offset(lv, (S19244C9*)(S19244C11*), ABISELECT(11008,9036), "S19244C8");
    /*is_ambiguous_... S19244C8::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*), ABISELECT(15128,12432), "S19244C8");
    check_base_class_offset(lv, (S19244C4*)(S19244C5*), ABISELECT(15128,12432), "S19244C8");
    /*is_ambiguous_... S19244C11::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C11*), ABISELECT(15128,12432), "S19244C8");
    check_base_class_offset(lv, (S19244C5*), ABISELECT(15272,12556), "S19244C8");
    check_base_class_offset(lv, (S19244C5*)(S19244C10*), ABISELECT(15272,12556), "S19244C8");
    check_base_class_offset(lv, (S19244C5*)(S19244C11*), ABISELECT(15272,12556), "S19244C8");
    /*is_ambiguous_... S19244C10::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C10*), 0, "S19244C8");
    check_base_class_offset(lv, (S19244C7*)(S19244C10*), ABISELECT(15440,12692), "S19244C8");
    check_base_class_offset(lv, (S19244C3*)(S19244C10*), ABISELECT(15904,13092), "S19244C8");
    /*is_ambiguous_... S19244C11::S19244C3 */ AMB_check_base_class_offset(lv, (S19244C3*)(S19244C11*), ABISELECT(15904,13092), "S19244C8");
    check_base_class_offset(lv, (S19244C10*), 0, "S19244C8");
    check_base_class_offset(lv, (S19244C11*), ABISELECT(464,380), "S19244C8");
    check_field_offset(lv, s19244c8f0, ABISELECT(6864,5628), "S19244C8.s19244c8f0");
    check_field_offset(lv, s19244c8f1, ABISELECT(10992,9024), "S19244C8.s19244c8f1");
    set_bf_and_test(lv, s19244c8f2, ABISELECT(11000,9032), 0, 7, 1, "S19244C8");
    set_bf_and_test(lv, s19244c8f2, ABISELECT(11000,9032), 0, 7, hide_sll(1LL<<6), "S19244C8");
    test_class_info(&lv, &cd_S19244C8);
    dp->~S19244C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C8(Test_S19244C8, "S19244C8", ABISELECT(16208,13336));

#else // __cplusplus

extern void _ZN8S19244C8C1Ev();
extern void _ZN8S19244C8D1Ev();
Name_Map name_map_S19244C8[] = {
  NSPAIR(_ZN8S19244C8C1Ev),
  NSPAIR(_ZN8S19244C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C9;
extern VTBL_ENTRY _ZTI8S19244C9[];
extern  VTBL_ENTRY _ZTV8S19244C9[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C5;
extern VTBL_ENTRY _ZTI8S19244C5[];
extern  VTBL_ENTRY _ZTV8S19244C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C5[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C10;
extern VTBL_ENTRY _ZTI9S19244C10[];
extern  VTBL_ENTRY _ZTV9S19244C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C10[];
extern Class_Descriptor cd_S19244C11;
extern VTBL_ENTRY _ZTI9S19244C11[];
extern  VTBL_ENTRY _ZTV9S19244C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C11[];
static Base_Class bases_S19244C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C3,    ABISELECT(11008,9036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19244C7,    ABISELECT(11304,9280), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19244C4,    ABISELECT(11768,9680), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19244C9,    ABISELECT(11008,9036), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C4,    ABISELECT(15128,12432), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C5,    ABISELECT(15272,12556), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19244C7,    ABISELECT(15440,12692), //bcp->offset
    47, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19244C3,    ABISELECT(15904,13092), //bcp->offset
    55, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19244C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19244C11,    ABISELECT(464,380), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19244C8[];
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C82v8Ev();
extern void _ZN8S19244C8D1Ev();
extern void _ZN8S19244C8D0Ev();
extern void ABISELECT(_ZThn464_N8S19244C8D1Ev,_ZThn380_N8S19244C8D1Ev)();
extern void ABISELECT(_ZThn464_N8S19244C8D0Ev,_ZThn380_N8S19244C8D0Ev)();
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19244C8D1Ev,_ZTv0_n16_N8S19244C8D1Ev)();
extern void ABISELECT(_ZThn11008_N8S19244C8D1Ev,_ZThn9036_N8S19244C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19244C8D0Ev,_ZTv0_n16_N8S19244C8D0Ev)();
extern void ABISELECT(_ZThn11008_N8S19244C8D0Ev,_ZThn9036_N8S19244C8D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY vtc_S19244C8[] = {
  ABISELECT(11008,9036),
  ABISELECT(15904,13092),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19244C82v8Ev,
  (VTBL_ENTRY)&_ZN8S19244C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19244C8D0Ev,
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(15440,12712),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S19244C8D1Ev,_ZThn380_N8S19244C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S19244C8D0Ev,_ZThn380_N8S19244C8D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C8D1Ev,_ZTv0_n16_N8S19244C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C8D0Ev,_ZTv0_n16_N8S19244C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  0,
  ABISELECT(-15904,-13092),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern VTBL_ENTRY _ZTV8S19244C8[];
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19244C10__8S19244C8[] = {
  ABISELECT(15904,13092),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C7__9S19244C10__8S19244C8[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C10__8S19244C8[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__9S19244C10__8S19244C8[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__9S19244C10__8S19244C8[] = {
  0,
  ABISELECT(-15904,-13092),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN9S19244C11D1Ev();
extern void _ZN9S19244C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19244C11__8S19244C8[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(15440,12712),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN9S19244C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19244C11D0Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__9S19244C11__8S19244C8[] = {
  0,
  ABISELECT(-15440,-12712),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev)();
extern void ABISELECT(_ZThn10544_N9S19244C11D1Ev,_ZThn8656_N9S19244C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev)();
extern void ABISELECT(_ZThn10544_N9S19244C11D0Ev,_ZThn8656_N9S19244C11D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C9__9S19244C11__8S19244C8[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C78S19244C9__9S19244C11__8S19244C8[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C48S19244C9__9S19244C11__8S19244C8[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__9S19244C11__8S19244C8[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C11__8S19244C8[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__8S19244C8[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__8S19244C5__8S19244C8[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTT_ENTRY vtt_S19244C8[] = {
  {&(_ZTV8S19244C8[7]),  7,59},
  {&(_tg__ZTV9S19244C10__8S19244C8[6]),  6,7},
  {&(_tg__ZTV8S19244C7__9S19244C10__8S19244C8[5]),  5,8},
  {&(_tg__ZTV8S19244C5__9S19244C10__8S19244C8[3]),  3,3},
  {&(_tg__ZTV8S19244C4__A1__9S19244C10__8S19244C8[3]),  3,4},
  {&(_tg__ZTV8S19244C3__9S19244C10__8S19244C8[3]),  3,4},
  {&(_tg__ZTV9S19244C11__8S19244C8[6]),  6,8},
  {&(_tg__ZTV8S19244C3__9S19244C11__8S19244C8[3]),  3,4},
  {&(_tg__ZTV8S19244C9__9S19244C11__8S19244C8[9]),  9,13},
  {&(_tg__ZTV8S19244C78S19244C9__9S19244C11__8S19244C8[2]),  2,5},
  {&(_tg__ZTV8S19244C48S19244C9__9S19244C11__8S19244C8[2]),  2,3},
  {&(_tg__ZTV8S19244C4__A1__9S19244C11__8S19244C8[3]),  3,4},
  {&(_tg__ZTV8S19244C5__9S19244C11__8S19244C8[3]),  3,3},
  {&(_ZTV8S19244C8[28]),  28,59},
  {&(_ZTV8S19244C8[34]),  34,59},
  {&(_ZTV8S19244C8[39]),  39,59},
  {&(_ZTV8S19244C8[43]),  43,59},
  {&(_ZTV8S19244C8[47]),  47,59},
  {&(_ZTV8S19244C8[52]),  52,59},
  {&(_ZTV8S19244C8[58]),  58,59},
  {&(_ZTV8S19244C8[17]),  17,59},
  {&(_tg__ZTV8S19244C5__8S19244C8[3]),  3,3},
  {&(_tg__ZTV8S19244C4__8S19244C5__8S19244C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19244C8[];
extern  VTBL_ENTRY _ZTV8S19244C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C8[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19244C11D0Ev,_ZThn8656_N9S19244C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19244C11D1Ev,_ZThn8656_N9S19244C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C8D0Ev,_ZTv0_n16_N8S19244C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S19244C8D0Ev,_ZThn9036_N8S19244C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C8D1Ev,_ZTv0_n16_N8S19244C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S19244C8D1Ev,_ZThn9036_N8S19244C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19244C8 = {  "S19244C8", // class name
  bases_S19244C8, 11,
  &(vtc_S19244C8[0]), // expected_vtbl_contents
  &(vtt_S19244C8[0]), // expected_vtt_contents
  ABISELECT(16208,13336), // object size
  NSPAIRA(_ZTI8S19244C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19244C8),59, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19244C8),23, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19244C6  : virtual S19244C3 , S19244C7 , virtual S19244C8 {
  char s19244c6f0:8;
  int s19244c6f1;
  ~S19244C6(); // tgen
  S19244C6(); // tgen
};
//SIG(-1 S19244C6) C1{ VBC2{ v1 FL FD Fp Fc FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC4{ v2 v3 v4 Fi[2] FL[2] FC3[3]} VBC5{ VBC6{ BC2 BC4 BC3 vd v6 FL[2] Fp[8] FC7{ BC3 VBC4 VBC8{ VBC3 Fp FC3 Fi:3} VBC2 FC2 Fs Fi[2]} Fp Fi FC7 Fi} VBC3 VBC8 BC7 BC9{ VBC2 VBC6 VBC3 VBC8 FL:44 Fp Fi FC7 FL[2] Fi[3] FC6 Fc:7 FC10{ BC2 vd v8 FC8 Fi Fp Fi}} v7 FC6 FL Fc:7} Fc:8 Fi}


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

static void Test_S19244C6()
{
  extern Class_Descriptor cd_S19244C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1044,3437)];
    init_test(&cd_S19244C6, buf);
    S19244C6 *dp, &lv = *(dp=new (buf) S19244C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16688,13744), "sizeof(S19244C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C6)");
    /*is_ambiguous_... S19244C6::S19244C3 */ AMB_check_base_class_offset(lv, (S19244C3*), ABISELECT(480,408), "S19244C6");
    check_base_class_offset(lv, (S19244C3*)(S19244C10*)(S19244C8*), ABISELECT(480,408), "S19244C6");
    /*is_ambiguous_... S19244C11::S19244C3 */ AMB_check_base_class_offset(lv, (S19244C3*)(S19244C11*)(S19244C8*), ABISELECT(480,408), "S19244C6");
    /*is_ambiguous_... S19244C6::S19244C7 */ AMB_check_base_class_offset(lv, (S19244C7*), 0, "S19244C6");
    check_base_class_offset(lv, (S19244C3*)(S19244C9*), ABISELECT(11792,9688), "S19244C6");
    check_base_class_offset(lv, (S19244C7*)(S19244C9*), ABISELECT(12088,9932), "S19244C6");
    check_base_class_offset(lv, (S19244C4*)(S19244C9*), ABISELECT(12552,10332), "S19244C6");
    check_base_class_offset(lv, (S19244C9*)(S19244C8*), ABISELECT(11792,9688), "S19244C6");
    check_base_class_offset(lv, (S19244C9*)(S19244C11*)(S19244C8*), ABISELECT(11792,9688), "S19244C6");
    /*is_ambiguous_... S19244C8::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C8*), ABISELECT(15912,13084), "S19244C6");
    check_base_class_offset(lv, (S19244C4*)(S19244C5*), ABISELECT(15912,13084), "S19244C6");
    /*is_ambiguous_... S19244C11::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C11*)(S19244C8*), ABISELECT(15912,13084), "S19244C6");
    check_base_class_offset(lv, (S19244C5*)(S19244C8*), ABISELECT(16056,13208), "S19244C6");
    check_base_class_offset(lv, (S19244C5*)(S19244C10*)(S19244C8*), ABISELECT(16056,13208), "S19244C6");
    check_base_class_offset(lv, (S19244C5*)(S19244C11*)(S19244C8*), ABISELECT(16056,13208), "S19244C6");
    /*is_ambiguous_... S19244C10::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C10*)(S19244C8*), ABISELECT(784,652), "S19244C6");
    check_base_class_offset(lv, (S19244C7*)(S19244C10*)(S19244C8*), ABISELECT(16224,13344), "S19244C6");
    check_base_class_offset(lv, (S19244C10*)(S19244C8*), ABISELECT(784,652), "S19244C6");
    check_base_class_offset(lv, (S19244C11*)(S19244C8*), ABISELECT(1248,1032), "S19244C6");
    check_base_class_offset(lv, (S19244C8*), ABISELECT(784,652), "S19244C6");
    set_bf_and_test(lv, s19244c6f0, ABISELECT(464,400), 0, 8, 1, "S19244C6");
    set_bf_and_test(lv, s19244c6f0, ABISELECT(464,400), 0, 8, hide_sll(1LL<<7), "S19244C6");
    check_field_offset(lv, s19244c6f1, ABISELECT(468,404), "S19244C6.s19244c6f1");
    test_class_info(&lv, &cd_S19244C6);
    dp->~S19244C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C6(Test_S19244C6, "S19244C6", ABISELECT(16688,13744));

#else // __cplusplus

extern void _ZN8S19244C6C1Ev();
extern void _ZN8S19244C6D1Ev();
Name_Map name_map_S19244C6[] = {
  NSPAIR(_ZN8S19244C6C1Ev),
  NSPAIR(_ZN8S19244C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C9;
extern VTBL_ENTRY _ZTI8S19244C9[];
extern  VTBL_ENTRY _ZTV8S19244C9[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C5;
extern VTBL_ENTRY _ZTI8S19244C5[];
extern  VTBL_ENTRY _ZTV8S19244C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C5[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C10;
extern VTBL_ENTRY _ZTI9S19244C10[];
extern  VTBL_ENTRY _ZTV9S19244C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C10[];
extern Class_Descriptor cd_S19244C11;
extern VTBL_ENTRY _ZTI9S19244C11[];
extern  VTBL_ENTRY _ZTV9S19244C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C11[];
extern Class_Descriptor cd_S19244C8;
extern VTBL_ENTRY _ZTI8S19244C8[];
extern  VTBL_ENTRY _ZTV8S19244C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C8[];
static Base_Class bases_S19244C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C3,    ABISELECT(480,408), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19244C3,    ABISELECT(11792,9688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19244C7,    ABISELECT(12088,9932), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19244C4,    ABISELECT(12552,10332), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19244C9,    ABISELECT(11792,9688), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19244C4,    ABISELECT(15912,13084), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19244C5,    ABISELECT(16056,13208), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19244C4,    ABISELECT(784,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19244C7,    ABISELECT(16224,13344), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19244C10,    ABISELECT(784,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19244C11,    ABISELECT(1248,1032), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19244C8,    ABISELECT(784,652), //bcp->offset
    17, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19244C6[];
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C6D1Ev();
extern void _ZN8S19244C6D0Ev();
extern void _ZN8S19244C32v1Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C82v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19244C6D1Ev,_ZTv0_n40_N8S19244C6D1Ev)();
extern void ABISELECT(_ZThn784_N8S19244C6D1Ev,_ZThn652_N8S19244C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19244C6D0Ev,_ZTv0_n40_N8S19244C6D0Ev)();
extern void ABISELECT(_ZThn784_N8S19244C6D0Ev,_ZThn652_N8S19244C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N8S19244C6D1Ev,_ZTvn380_n40_N8S19244C6D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S19244C6D0Ev,_ZTvn380_n40_N8S19244C6D0Ev)();
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19244C6D1Ev,_ZTv0_n16_N8S19244C6D1Ev)();
extern void ABISELECT(_ZThn11792_N8S19244C6D1Ev,_ZThn9688_N8S19244C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19244C6D0Ev,_ZTv0_n16_N8S19244C6D0Ev)();
extern void ABISELECT(_ZThn11792_N8S19244C6D0Ev,_ZThn9688_N8S19244C6D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY vtc_S19244C6[] = {
  ABISELECT(16224,13344),
  ABISELECT(16056,13208),
  ABISELECT(15912,13084),
  ABISELECT(11792,9688),
  ABISELECT(784,652),
  ABISELECT(480,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19244C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19244C6D0Ev,
  0,
  ABISELECT(-480,-408),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  ABISELECT(-784,-652),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  ABISELECT(-784,-652),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19244C82v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19244C6D1Ev,_ZTv0_n40_N8S19244C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19244C6D0Ev,_ZTv0_n40_N8S19244C6D0Ev),
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-1248,-1032),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19244C6D1Ev,_ZTvn380_n40_N8S19244C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19244C6D0Ev,_ZTvn380_n40_N8S19244C6D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11792,-9688),
  0,
  ABISELECT(-11792,-9688),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C6D1Ev,_ZTv0_n16_N8S19244C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C6D0Ev,_ZTv0_n16_N8S19244C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
  ABISELECT(-12088,-9932),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  ABISELECT(-12552,-10332),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  0,
  ABISELECT(-15912,-13084),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  ABISELECT(-144,-124),
  ABISELECT(-16056,-13208),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  0,
  0,
  0,
  ABISELECT(-16224,-13344),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S19244C6[];
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C82v8Ev();
extern void _ZN8S19244C8D1Ev();
extern void _ZN8S19244C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C8__8S19244C6[] = {
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19244C82v8Ev,
  (VTBL_ENTRY)&_ZN8S19244C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19244C8D0Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19244C108S19244C8__8S19244C6[] = {
  ABISELECT(-304,-244),
  ABISELECT(15128,12432),
  ABISELECT(15272,12556),
  ABISELECT(15440,12692),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C7__9S19244C108S19244C8__8S19244C6[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C108S19244C8__8S19244C6[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__9S19244C108S19244C8__8S19244C6[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__9S19244C108S19244C8__8S19244C6[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN9S19244C11D1Ev();
extern void _ZN9S19244C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19244C118S19244C8__8S19244C6[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN9S19244C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19244C11D0Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__9S19244C118S19244C8__8S19244C6[] = {
  0,
  ABISELECT(768,624),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev)();
extern void ABISELECT(_ZThn10544_N9S19244C11D1Ev,_ZThn8656_N9S19244C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev)();
extern void ABISELECT(_ZThn10544_N9S19244C11D0Ev,_ZThn8656_N9S19244C11D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C9__9S19244C118S19244C8__8S19244C6[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C78S19244C9__9S19244C118S19244C8__8S19244C6[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C48S19244C9__9S19244C118S19244C8__8S19244C6[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__9S19244C118S19244C8__8S19244C6[] = {
  0,
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C118S19244C8__8S19244C6[] = {
  ABISELECT(-144,-124),
  ABISELECT(-14808,-12176),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19244C8D1Ev,_ZTv0_n16_N8S19244C8D1Ev)();
extern void ABISELECT(_ZThn11008_N8S19244C8D1Ev,_ZThn9036_N8S19244C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19244C8D0Ev,_ZTv0_n16_N8S19244C8D0Ev)();
extern void ABISELECT(_ZThn11008_N8S19244C8D0Ev,_ZThn9036_N8S19244C8D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C9__8S19244C8__8S19244C6[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C8D1Ev,_ZTv0_n16_N8S19244C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C8D0Ev,_ZTv0_n16_N8S19244C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C78S19244C9__8S19244C8__8S19244C6[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C48S19244C9__8S19244C8__8S19244C6[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__8S19244C8__8S19244C6[] = {
  0,
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__8S19244C8__8S19244C6[] = {
  ABISELECT(-144,-124),
  ABISELECT(-15272,-12556),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C7__A1__8S19244C8__8S19244C6[] = {
  0,
  0,
  0,
  ABISELECT(-15440,-12692),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__A1__8S19244C8__8S19244C6[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void ABISELECT(_ZThn464_N8S19244C8D1Ev,_ZThn380_N8S19244C8D1Ev)();
extern void ABISELECT(_ZThn464_N8S19244C8D0Ev,_ZThn380_N8S19244C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19244C11__8S19244C8__8S19244C6[] = {
  ABISELECT(14808,12176),
  ABISELECT(14664,12052),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S19244C8D1Ev,_ZThn380_N8S19244C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S19244C8D0Ev,_ZThn380_N8S19244C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__8S19244C6[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__8S19244C5__8S19244C6[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTT_ENTRY vtt_S19244C6[] = {
  {&(_ZTV8S19244C6[8]),  8,75},
  {&(_ZTV8S19244C6[16]),  16,75},
  {&(_ZTV8S19244C6[27]),  27,75},
  {&(_ZTV8S19244C6[48]),  48,75},
  {&(_ZTV8S19244C6[54]),  54,75},
  {&(_ZTV8S19244C6[59]),  59,75},
  {&(_ZTV8S19244C6[63]),  63,75},
  {&(_ZTV8S19244C6[67]),  67,75},
  {&(_ZTV8S19244C6[72]),  72,75},
  {&(_ZTV8S19244C6[37]),  37,75},
  {&(_tg__ZTV8S19244C8__8S19244C6[7]),  7,11},
  {&(_tg__ZTV9S19244C108S19244C8__8S19244C6[6]),  6,7},
  {&(_tg__ZTV8S19244C7__9S19244C108S19244C8__8S19244C6[5]),  5,8},
  {&(_tg__ZTV8S19244C5__9S19244C108S19244C8__8S19244C6[3]),  3,3},
  {&(_tg__ZTV8S19244C4__A1__9S19244C108S19244C8__8S19244C6[3]),  3,4},
  {&(_tg__ZTV8S19244C3__9S19244C108S19244C8__8S19244C6[3]),  3,4},
  {&(_tg__ZTV9S19244C118S19244C8__8S19244C6[6]),  6,8},
  {&(_tg__ZTV8S19244C3__9S19244C118S19244C8__8S19244C6[3]),  3,4},
  {&(_tg__ZTV8S19244C9__9S19244C118S19244C8__8S19244C6[9]),  9,13},
  {&(_tg__ZTV8S19244C78S19244C9__9S19244C118S19244C8__8S19244C6[2]),  2,5},
  {&(_tg__ZTV8S19244C48S19244C9__9S19244C118S19244C8__8S19244C6[2]),  2,3},
  {&(_tg__ZTV8S19244C4__A1__9S19244C118S19244C8__8S19244C6[3]),  3,4},
  {&(_tg__ZTV8S19244C5__9S19244C118S19244C8__8S19244C6[3]),  3,3},
  {&(_tg__ZTV8S19244C9__8S19244C8__8S19244C6[9]),  9,13},
  {&(_tg__ZTV8S19244C78S19244C9__8S19244C8__8S19244C6[2]),  2,5},
  {&(_tg__ZTV8S19244C48S19244C9__8S19244C8__8S19244C6[2]),  2,3},
  {&(_tg__ZTV8S19244C4__A1__8S19244C8__8S19244C6[3]),  3,4},
  {&(_tg__ZTV8S19244C5__8S19244C8__8S19244C6[3]),  3,3},
  {&(_tg__ZTV8S19244C7__A1__8S19244C8__8S19244C6[5]),  5,8},
  {&(_tg__ZTV8S19244C3__A1__8S19244C8__8S19244C6[3]),  3,4},
  {&(_tg__ZTV9S19244C11__8S19244C8__8S19244C6[6]),  6,8},
  {&(_tg__ZTV8S19244C5__8S19244C6[3]),  3,3},
  {&(_tg__ZTV8S19244C4__8S19244C5__8S19244C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19244C6[];
extern  VTBL_ENTRY _ZTV8S19244C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C6[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C8D0Ev,_ZTv0_n16_N8S19244C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S19244C8D0Ev,_ZThn9036_N8S19244C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C8D1Ev,_ZTv0_n16_N8S19244C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S19244C8D1Ev,_ZThn9036_N8S19244C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19244C11D0Ev,_ZThn8656_N9S19244C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19244C11D1Ev,_ZThn8656_N9S19244C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C6D0Ev,_ZTv0_n16_N8S19244C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N8S19244C6D0Ev,_ZThn9688_N8S19244C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C6D1Ev,_ZTv0_n16_N8S19244C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11792_N8S19244C6D1Ev,_ZThn9688_N8S19244C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19244C6D0Ev,_ZTv0_n40_N8S19244C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19244C6D0Ev,_ZThn652_N8S19244C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19244C6D1Ev,_ZTv0_n40_N8S19244C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19244C6D1Ev,_ZThn652_N8S19244C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19244C6 = {  "S19244C6", // class name
  bases_S19244C6, 13,
  &(vtc_S19244C6[0]), // expected_vtbl_contents
  &(vtt_S19244C6[0]), // expected_vtt_contents
  ABISELECT(16688,13744), // object size
  NSPAIRA(_ZTI8S19244C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19244C6),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19244C6),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19244C12  : virtual S19244C5 {
  ::S19244C11 s19244c12f0;
  int s19244c12f1:6;
  int s19244c12f2;
  __tsi64 s19244c12f3;
  ~S19244C12(); // tgen
  S19244C12(); // tgen
};
//SIG(-1 S19244C12) C1{ VBC2{ VBC3{ v1 Fs:6 Fl Fs:4 FL[13] Fp} Fp FC3 Fi:3} FC4{ VBC5{ v2 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} VBC6{ BC5 BC7{ v3 v4 v5 Fi[2] FL[2] FC3[3]} BC3 vd v6 FL[2] Fp[8] FC8{ BC3 VBC7 VBC2 VBC5 FC5 Fs Fi[2]} Fp Fi FC8 Fi} VBC3 VBC2 FL:44 Fp Fi FC8 FL[2] Fi[3] FC6 Fc:7 FC9{ BC5 vd v7 FC2 Fi Fp Fi}} Fi:6 Fi FL}


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

static void Test_S19244C12()
{
  extern Class_Descriptor cd_S19244C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(719,2358)];
    init_test(&cd_S19244C12, buf);
    S19244C12 *dp, &lv = *(dp=new (buf) S19244C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11488,9428), "sizeof(S19244C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C12)");
    check_base_class_offset(lv, (S19244C4*)(S19244C5*), ABISELECT(11336,9304), "S19244C12");
    check_base_class_offset(lv, (S19244C5*), ABISELECT(11168,9168), "S19244C12");
    check_field_offset(lv, s19244c12f0, ABISELECT(16,4), "S19244C12.s19244c12f0");
    set_bf_and_test(lv, s19244c12f1, ABISELECT(11152,9152), 0, 6, 1, "S19244C12");
    set_bf_and_test(lv, s19244c12f1, ABISELECT(11152,9152), 0, 6, hide_sll(1LL<<5), "S19244C12");
    check_field_offset(lv, s19244c12f2, ABISELECT(11156,9156), "S19244C12.s19244c12f2");
    check_field_offset(lv, s19244c12f3, ABISELECT(11160,9160), "S19244C12.s19244c12f3");
    test_class_info(&lv, &cd_S19244C12);
    dp->~S19244C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C12(Test_S19244C12, "S19244C12", ABISELECT(11488,9428));

#else // __cplusplus

extern void _ZN9S19244C12C1Ev();
extern void _ZN9S19244C12D1Ev();
Name_Map name_map_S19244C12[] = {
  NSPAIR(_ZN9S19244C12C1Ev),
  NSPAIR(_ZN9S19244C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C5;
extern VTBL_ENTRY _ZTI8S19244C5[];
extern  VTBL_ENTRY _ZTV8S19244C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C5[];
static Base_Class bases_S19244C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C4,    ABISELECT(11336,9304), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19244C5,    ABISELECT(11168,9168), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19244C12[];
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY vtc_S19244C12[] = {
  ABISELECT(11336,9304),
  ABISELECT(11168,9168),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C12[0]),
  ABISELECT(168,136),
  ABISELECT(-11168,-9168),
  (VTBL_ENTRY)&(_ZTI9S19244C12[0]),
  0,
  ABISELECT(-11336,-9304),
  (VTBL_ENTRY)&(_ZTI9S19244C12[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern VTBL_ENTRY _ZTV9S19244C12[];
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C12[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__8S19244C5__9S19244C12[] = {
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTT_ENTRY vtt_S19244C12[] = {
  {&(_ZTV9S19244C12[4]),  4,11},
  {&(_ZTV9S19244C12[7]),  7,11},
  {&(_ZTV9S19244C12[10]),  10,11},
  {&(_tg__ZTV8S19244C5__9S19244C12[3]),  3,3},
  {&(_tg__ZTV8S19244C4__8S19244C5__9S19244C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19244C12[];
extern  VTBL_ENTRY _ZTV9S19244C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C12[];
Class_Descriptor cd_S19244C12 = {  "S19244C12", // class name
  bases_S19244C12, 2,
  &(vtc_S19244C12[0]), // expected_vtbl_contents
  &(vtt_S19244C12[0]), // expected_vtt_contents
  ABISELECT(11488,9428), // object size
  NSPAIRA(_ZTI9S19244C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19244C12),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19244C12),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  S19244C13  : virtual S19244C2 , virtual S19244C4 , virtual S19244C11 {
  int s19244c13f0;
  long double s19244c13f1;
  int s19244c13f2;
  void *s19244c13f3;
  long s19244c13f4;
  ::S19762C23_nt s19244c13f5;
  int s19244c13f6;
  __tsi64 s19244c13f7;
  virtual  ~S19244C13(); // _ZN9S19244C13D2Ev
  S19244C13(); // tgen
};
//SIG(-1 S19244C13) C1{ VBC2{ BC3{ v1 FL FD Fp Fc FC4{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v2 FC5{ VBC4 Fp FC4 Fi:3} Fi Fp Fi} VBC4 VBC6{ VBC3 VBC7{ BC3 BC8{ v4 v5 v6 Fi[2] FL[2] FC4[3]} BC4 vd v7 FL[2] Fp[8] FC9{ BC4 VBC8 VBC5 VBC3 FC3 Fs Fi[2]} Fp Fi FC9 Fi} VBC4 VBC5 FL:44 Fp Fi FC9 FL[2] Fi[3] FC7 Fc:7 FC2} vd Fi FD Fi Fp Fl FU10{ m Fi:8 Fi Fp FL Fp Fp Fi} Fi FL}


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

static void Test_S19244C13()
{
  extern Class_Descriptor cd_S19244C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(742,2430)];
    init_test(&cd_S19244C13, buf);
    S19244C13 *dp, &lv = *(dp=new (buf) S19244C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11856,9716), "sizeof(S19244C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C13)");
    check_base_class_offset(lv, (S19244C3*)(S19244C2*), ABISELECT(80,52), "S19244C13");
    check_base_class_offset(lv, (S19244C2*), ABISELECT(80,52), "S19244C13");
    /*is_ambiguous_... S19244C13::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*), ABISELECT(712,568), "S19244C13");
    /*is_ambiguous_... S19244C11::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C11*), ABISELECT(712,568), "S19244C13");
    check_base_class_offset(lv, (S19244C4*)(S19244C5*), ABISELECT(712,568), "S19244C13");
    /*is_ambiguous_... S19244C11::S19244C3 */ AMB_check_base_class_offset(lv, (S19244C3*)(S19244C11*), ABISELECT(7264,5940), "S19244C13");
    check_base_class_offset(lv, (S19244C3*)(S19244C9*), ABISELECT(7568,6184), "S19244C13");
    check_base_class_offset(lv, (S19244C7*)(S19244C9*), ABISELECT(7864,6428), "S19244C13");
    check_base_class_offset(lv, (S19244C4*)(S19244C9*), ABISELECT(8328,6828), "S19244C13");
    check_base_class_offset(lv, (S19244C9*)(S19244C11*), ABISELECT(7568,6184), "S19244C13");
    check_base_class_offset(lv, (S19244C5*)(S19244C11*), ABISELECT(11688,9580), "S19244C13");
    check_base_class_offset(lv, (S19244C11*), ABISELECT(864,692), "S19244C13");
    check_field_offset(lv, s19244c13f0, ABISELECT(8,4), "S19244C13.s19244c13f0");
    check_field_offset(lv, s19244c13f1, ABISELECT(16,8), "S19244C13.s19244c13f1");
    check_field_offset(lv, s19244c13f2, ABISELECT(32,20), "S19244C13.s19244c13f2");
    check_field_offset(lv, s19244c13f3, ABISELECT(40,24), "S19244C13.s19244c13f3");
    check_field_offset(lv, s19244c13f4, ABISELECT(48,28), "S19244C13.s19244c13f4");
    check_field_offset(lv, s19244c13f5, ABISELECT(56,32), "S19244C13.s19244c13f5");
    check_field_offset(lv, s19244c13f6, ABISELECT(64,40), "S19244C13.s19244c13f6");
    check_field_offset(lv, s19244c13f7, ABISELECT(72,44), "S19244C13.s19244c13f7");
    test_class_info(&lv, &cd_S19244C13);
    dp->~S19244C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C13(Test_S19244C13, "S19244C13", ABISELECT(11856,9716));

#else // __cplusplus

extern void _ZN9S19244C13C1Ev();
extern void _ZN9S19244C13D2Ev();
Name_Map name_map_S19244C13[] = {
  NSPAIR(_ZN9S19244C13C1Ev),
  NSPAIR(_ZN9S19244C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C2;
extern VTBL_ENTRY _ZTI8S19244C2[];
extern  VTBL_ENTRY _ZTV8S19244C2[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C9;
extern VTBL_ENTRY _ZTI8S19244C9[];
extern  VTBL_ENTRY _ZTV8S19244C9[];
extern Class_Descriptor cd_S19244C5;
extern VTBL_ENTRY _ZTI8S19244C5[];
extern  VTBL_ENTRY _ZTV8S19244C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C5[];
extern Class_Descriptor cd_S19244C11;
extern VTBL_ENTRY _ZTI9S19244C11[];
extern  VTBL_ENTRY _ZTV9S19244C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C11[];
static Base_Class bases_S19244C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C3,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19244C2,    ABISELECT(80,52), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C4,    ABISELECT(712,568), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C3,    ABISELECT(7264,5940), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19244C3,    ABISELECT(7568,6184), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19244C7,    ABISELECT(7864,6428), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19244C4,    ABISELECT(8328,6828), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19244C9,    ABISELECT(7568,6184), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19244C5,    ABISELECT(11688,9580), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19244C11,    ABISELECT(864,692), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19244C13[];
extern void _ZN9S19244C13D1Ev();
extern void _ZN9S19244C13D0Ev();
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S19244C13D1Ev,_ZThn52_N9S19244C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S19244C13D0Ev,_ZThn52_N9S19244C13D0Ev)() __attribute__((weak));
extern void _ZN8S19244C22v2Ev();
extern void _ZN8S19244C42v6Ev();
extern void ABISELECT(_ZTv0_n56_N9S19244C13D1Ev,_ZTv0_n28_N9S19244C13D1Ev)();
extern void ABISELECT(_ZThn864_N9S19244C13D1Ev,_ZThn692_N9S19244C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19244C13D0Ev,_ZTv0_n28_N9S19244C13D0Ev)();
extern void ABISELECT(_ZThn864_N9S19244C13D0Ev,_ZThn692_N9S19244C13D0Ev)() __attribute__((weak));
extern void _ZN8S19244C32v1Ev();
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev)();
extern void ABISELECT(_ZThn7568_N9S19244C13D1Ev,_ZThn6184_N9S19244C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev)();
extern void ABISELECT(_ZThn7568_N9S19244C13D0Ev,_ZThn6184_N9S19244C13D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY vtc_S19244C13[] = {
  ABISELECT(11688,9580),
  ABISELECT(7568,6184),
  ABISELECT(7264,5940),
  ABISELECT(864,692),
  ABISELECT(712,568),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN9S19244C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19244C13D0Ev,
  0,
  ABISELECT(-80,-52),
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C22v2Ev,
  0,
  ABISELECT(-712,-568),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  ABISELECT(-864,-692),
  ABISELECT(10824,8888),
  ABISELECT(-152,-124),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  ABISELECT(-864,-692),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19244C13D1Ev,_ZTv0_n28_N9S19244C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19244C13D0Ev,_ZTv0_n28_N9S19244C13D0Ev),
  0,
  ABISELECT(-7264,-5940),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-7568,-6184),
  0,
  ABISELECT(-7568,-6184),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
  ABISELECT(-7864,-6428),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  ABISELECT(-8328,-6828),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  ABISELECT(-10976,-9012),
  ABISELECT(-11688,-9580),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
};
extern VTBL_ENTRY _ZTV9S19244C13[];
extern void _ZN9S19244C11D1Ev();
extern void _ZN9S19244C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19244C11__9S19244C13[] = {
  ABISELECT(10824,8888),
  ABISELECT(-152,-124),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN9S19244C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19244C11D0Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__9S19244C11__9S19244C13[] = {
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev)();
extern void ABISELECT(_ZThn6704_N9S19244C11D1Ev,_ZThn5492_N9S19244C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev)();
extern void ABISELECT(_ZThn6704_N9S19244C11D0Ev,_ZThn5492_N9S19244C11D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C9__9S19244C11__9S19244C13[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C78S19244C9__9S19244C11__9S19244C13[] = {
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C48S19244C9__9S19244C11__9S19244C13[] = {
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__9S19244C11__9S19244C13[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C11__9S19244C13[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C13[] = {
  ABISELECT(-10976,-9012),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__8S19244C5__9S19244C13[] = {
  0,
  ABISELECT(10976,9012),
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTT_ENTRY vtt_S19244C13[] = {
  {&(_ZTV9S19244C13[8]),  8,60},
  {&(_ZTV9S19244C13[15]),  15,60},
  {&(_ZTV9S19244C13[22]),  22,60},
  {&(_ZTV9S19244C13[30]),  30,60},
  {&(_ZTV9S19244C13[35]),  35,60},
  {&(_ZTV9S19244C13[45]),  45,60},
  {&(_ZTV9S19244C13[51]),  51,60},
  {&(_ZTV9S19244C13[56]),  56,60},
  {&(_ZTV9S19244C13[60]),  60,60},
  {&(_tg__ZTV9S19244C11__9S19244C13[6]),  6,8},
  {&(_tg__ZTV8S19244C3__9S19244C11__9S19244C13[3]),  3,4},
  {&(_tg__ZTV8S19244C9__9S19244C11__9S19244C13[9]),  9,13},
  {&(_tg__ZTV8S19244C78S19244C9__9S19244C11__9S19244C13[2]),  2,5},
  {&(_tg__ZTV8S19244C48S19244C9__9S19244C11__9S19244C13[2]),  2,3},
  {&(_tg__ZTV8S19244C4__A1__9S19244C11__9S19244C13[3]),  3,4},
  {&(_tg__ZTV8S19244C5__9S19244C11__9S19244C13[3]),  3,3},
  {&(_tg__ZTV8S19244C5__9S19244C13[3]),  3,3},
  {&(_tg__ZTV8S19244C4__8S19244C5__9S19244C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19244C13[];
extern  VTBL_ENTRY _ZTV9S19244C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C13[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19244C11D0Ev,_ZThn5492_N9S19244C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N9S19244C11D1Ev,_ZThn5492_N9S19244C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19244C13D0Ev,_ZTv0_n28_N9S19244C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N9S19244C13D0Ev,_ZThn692_N9S19244C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19244C13D1Ev,_ZTv0_n28_N9S19244C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N9S19244C13D1Ev,_ZThn692_N9S19244C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7568_N9S19244C13D0Ev,_ZThn6184_N9S19244C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19244C13D0Ev,_ZThn52_N9S19244C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7568_N9S19244C13D1Ev,_ZThn6184_N9S19244C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19244C13D1Ev,_ZThn52_N9S19244C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19244C13 = {  "S19244C13", // class name
  bases_S19244C13, 10,
  &(vtc_S19244C13[0]), // expected_vtbl_contents
  &(vtt_S19244C13[0]), // expected_vtt_contents
  ABISELECT(11856,9716), // object size
  NSPAIRA(_ZTI9S19244C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19244C13),60, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19244C13),18, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19244C1  : virtual S19244C2 , virtual S19244C4 , virtual S19244C6 , S19244C12 , S19244C13 {
  int s19244c1f0;
  int s19244c1f1;
  int s19244c1f2;
  int s19244c1f3;
  virtual  ~S19244C1(); // _ZN8S19244C1D2Ev
  S19244C1(); // tgen
};
//SIG(1 S19244C1) C1{ VBC2{ BC3{ v1 FL FD Fp Fc FC4{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v2 FC5{ VBC4 Fp FC4 Fi:3} Fi Fp Fi} VBC4 VBC6{ VBC3 BC7{ v4 v5 v6 Fi[2] FL[2] FC4[3]} VBC8{ VBC9{ BC3 BC7 BC4 vd v7 FL[2] Fp[8] FC10{ BC4 VBC7 VBC5 VBC3 FC3 Fs Fi[2]} Fp Fi FC10 Fi} VBC4 VBC5 BC10 BC11{ VBC3 VBC9 VBC4 VBC5 FL:44 Fp Fi FC10 FL[2] Fi[3] FC9 Fc:7 FC2} v8 FC9 FL Fc:7} Fc:8 Fi} BC12{ VBC5 FC11 Fi:6 Fi FL} BC13{ VBC2 VBC4 VBC11 vd Fi FD Fi Fp Fl FU14{ m Fi:8 Fi Fp FL Fp Fp Fi} Fi FL} vd Fi Fi Fi Fi}


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

static void Test_S19244C1()
{
  extern Class_Descriptor cd_S19244C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2187,7187)];
    init_test(&cd_S19244C1, buf);
    S19244C1 *dp, &lv = *(dp=new (buf) S19244C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(34976,28744), "sizeof(S19244C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19244C1)");
    check_base_class_offset(lv, (S19244C3*)(S19244C2*), ABISELECT(11264,9236), "S19244C1");
    check_base_class_offset(lv, (S19244C2*), ABISELECT(11264,9236), "S19244C1");
    check_base_class_offset(lv, (S19244C2*)(S19244C13*), ABISELECT(11264,9236), "S19244C1");
    /*is_ambiguous_... S19244C1::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*), ABISELECT(11896,9752), "S19244C1");
    /*is_ambiguous_... S19244C8::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C8*), ABISELECT(11896,9752), "S19244C1");
    check_base_class_offset(lv, (S19244C4*)(S19244C5*), ABISELECT(11896,9752), "S19244C1");
    /*is_ambiguous_... S19244C11::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C11*)(S19244C8*), ABISELECT(11896,9752), "S19244C1");
    /*is_ambiguous_... S19244C13::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C13*), ABISELECT(11896,9752), "S19244C1");
    /*is_ambiguous_... S19244C1::S19244C11 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C11*), ABISELECT(11896,9752), "S19244C1");
    /*is_ambiguous_... S19244C6::S19244C3 */ AMB_check_base_class_offset(lv, (S19244C3*)(S19244C6*), ABISELECT(12512,10284), "S19244C1");
    check_base_class_offset(lv, (S19244C3*)(S19244C10*)(S19244C8*), ABISELECT(12512,10284), "S19244C1");
    /*is_ambiguous_... S19244C11::S19244C3 */ AMB_check_base_class_offset(lv, (S19244C3*)(S19244C11*)(S19244C8*), ABISELECT(12512,10284), "S19244C1");
    /*is_ambiguous_... S19244C1::S19244C11 */ AMB_check_base_class_offset(lv, (S19244C3*)(S19244C11*), ABISELECT(12512,10284), "S19244C1");
    /*is_ambiguous_... S19244C6::S19244C7 */ AMB_check_base_class_offset(lv, (S19244C7*)(S19244C6*), ABISELECT(12040,9876), "S19244C1");
    check_base_class_offset(lv, (S19244C3*)(S19244C9*), ABISELECT(23824,19564), "S19244C1");
    check_base_class_offset(lv, (S19244C7*)(S19244C9*), ABISELECT(24120,19808), "S19244C1");
    check_base_class_offset(lv, (S19244C4*)(S19244C9*), ABISELECT(24584,20208), "S19244C1");
    check_base_class_offset(lv, (S19244C9*)(S19244C8*), ABISELECT(23824,19564), "S19244C1");
    check_base_class_offset(lv, (S19244C9*)(S19244C11*)(S19244C8*), ABISELECT(23824,19564), "S19244C1");
    /*is_ambiguous_... S19244C1::S19244C11 */ AMB_check_base_class_offset(lv, (S19244C9*)(S19244C11*), ABISELECT(23824,19564), "S19244C1");
    check_base_class_offset(lv, (S19244C5*)(S19244C8*), ABISELECT(27944,22960), "S19244C1");
    check_base_class_offset(lv, (S19244C5*)(S19244C10*)(S19244C8*), ABISELECT(27944,22960), "S19244C1");
    check_base_class_offset(lv, (S19244C5*)(S19244C11*)(S19244C8*), ABISELECT(27944,22960), "S19244C1");
    check_base_class_offset(lv, (S19244C5*)(S19244C12*), ABISELECT(27944,22960), "S19244C1");
    /*is_ambiguous_... S19244C1::S19244C11 */ AMB_check_base_class_offset(lv, (S19244C5*)(S19244C11*), ABISELECT(27944,22960), "S19244C1");
    /*is_ambiguous_... S19244C10::S19244C4 */ AMB_check_base_class_offset(lv, (S19244C4*)(S19244C10*)(S19244C8*), ABISELECT(12816,10528), "S19244C1");
    check_base_class_offset(lv, (S19244C7*)(S19244C10*)(S19244C8*), ABISELECT(28112,23096), "S19244C1");
    check_base_class_offset(lv, (S19244C10*)(S19244C8*), ABISELECT(12816,10528), "S19244C1");
    check_base_class_offset(lv, (S19244C11*)(S19244C8*), ABISELECT(13280,10908), "S19244C1");
    check_base_class_offset(lv, (S19244C8*)(S19244C6*), ABISELECT(12816,10528), "S19244C1");
    check_base_class_offset(lv, (S19244C6*), ABISELECT(12040,9876), "S19244C1");
    check_base_class_offset(lv, (S19244C12*), 0, "S19244C1");
    check_base_class_offset(lv, (S19244C11*)(S19244C13*), ABISELECT(28576,23496), "S19244C1");
    check_base_class_offset(lv, (S19244C13*), ABISELECT(11168,9168), "S19244C1");
    check_field_offset(lv, s19244c1f0, ABISELECT(11248,9220), "S19244C1.s19244c1f0");
    check_field_offset(lv, s19244c1f1, ABISELECT(11252,9224), "S19244C1.s19244c1f1");
    check_field_offset(lv, s19244c1f2, ABISELECT(11256,9228), "S19244C1.s19244c1f2");
    check_field_offset(lv, s19244c1f3, ABISELECT(11260,9232), "S19244C1.s19244c1f3");
    test_class_info(&lv, &cd_S19244C1);
    dp->~S19244C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19244C1(Test_S19244C1, "S19244C1", ABISELECT(34976,28744));

#else // __cplusplus

extern void _ZN8S19244C1C1Ev();
extern void _ZN8S19244C1D2Ev();
Name_Map name_map_S19244C1[] = {
  NSPAIR(_ZN8S19244C1C1Ev),
  NSPAIR(_ZN8S19244C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C2;
extern VTBL_ENTRY _ZTI8S19244C2[];
extern  VTBL_ENTRY _ZTV8S19244C2[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C3;
extern VTBL_ENTRY _ZTI8S19244C3[];
extern  VTBL_ENTRY _ZTV8S19244C3[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C9;
extern VTBL_ENTRY _ZTI8S19244C9[];
extern  VTBL_ENTRY _ZTV8S19244C9[];
extern Class_Descriptor cd_S19244C5;
extern VTBL_ENTRY _ZTI8S19244C5[];
extern  VTBL_ENTRY _ZTV8S19244C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C5[];
extern Class_Descriptor cd_S19244C4;
extern VTBL_ENTRY _ZTI8S19244C4[];
extern  VTBL_ENTRY _ZTV8S19244C4[];
extern Class_Descriptor cd_S19244C7;
extern VTBL_ENTRY _ZTI8S19244C7[];
extern  VTBL_ENTRY _ZTV8S19244C7[];
extern Class_Descriptor cd_S19244C10;
extern VTBL_ENTRY _ZTI9S19244C10[];
extern  VTBL_ENTRY _ZTV9S19244C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C10[];
extern Class_Descriptor cd_S19244C11;
extern VTBL_ENTRY _ZTI9S19244C11[];
extern  VTBL_ENTRY _ZTV9S19244C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C11[];
extern Class_Descriptor cd_S19244C8;
extern VTBL_ENTRY _ZTI8S19244C8[];
extern  VTBL_ENTRY _ZTV8S19244C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C8[];
extern Class_Descriptor cd_S19244C6;
extern VTBL_ENTRY _ZTI8S19244C6[];
extern  VTBL_ENTRY _ZTV8S19244C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C6[];
extern Class_Descriptor cd_S19244C12;
extern VTBL_ENTRY _ZTI9S19244C12[];
extern  VTBL_ENTRY _ZTV9S19244C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C12[];
extern Class_Descriptor cd_S19244C11;
extern VTBL_ENTRY _ZTI9S19244C11[];
extern  VTBL_ENTRY _ZTV9S19244C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C11[];
extern Class_Descriptor cd_S19244C13;
extern VTBL_ENTRY _ZTI9S19244C13[];
extern  VTBL_ENTRY _ZTV9S19244C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19244C13[];
static Base_Class bases_S19244C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19244C3,    ABISELECT(11264,9236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19244C2,    ABISELECT(11264,9236), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C4,    ABISELECT(11896,9752), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C3,    ABISELECT(12512,10284), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19244C7,    ABISELECT(12040,9876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19244C3,    ABISELECT(23824,19564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19244C7,    ABISELECT(24120,19808), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19244C4,    ABISELECT(24584,20208), //bcp->offset
    97, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19244C9,    ABISELECT(23824,19564), //bcp->offset
    79, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19244C5,    ABISELECT(27944,22960), //bcp->offset
    100, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19244C4,    ABISELECT(12816,10528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19244C7,    ABISELECT(28112,23096), //bcp->offset
    103, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19244C10,    ABISELECT(12816,10528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19244C11,    ABISELECT(13280,10908), //bcp->offset
    71, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19244C8,    ABISELECT(12816,10528), //bcp->offset
    57, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19244C6,    ABISELECT(12040,9876), //bcp->offset
    36, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19244C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19244C11,    ABISELECT(28576,23496), //bcp->offset
    111, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19244C13,    ABISELECT(11168,9168), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19244C1[];
extern void _ZN8S19244C1D1Ev();
extern void _ZN8S19244C1D0Ev();
extern void ABISELECT(_ZThn11168_N8S19244C1D1Ev,_ZThn9168_N8S19244C1D1Ev)();
extern void ABISELECT(_ZThn11168_N8S19244C1D0Ev,_ZThn9168_N8S19244C1D0Ev)();
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19244C1D1Ev,_ZTv0_n16_N8S19244C1D1Ev)();
extern void ABISELECT(_ZThn11264_N8S19244C1D1Ev,_ZThn9236_N8S19244C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19244C1D0Ev,_ZTv0_n16_N8S19244C1D0Ev)();
extern void ABISELECT(_ZThn11264_N8S19244C1D0Ev,_ZThn9236_N8S19244C1D0Ev)() __attribute__((weak));
extern void _ZN8S19244C22v2Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void ABISELECT(_ZTv0_n96_N8S19244C1D1Ev,_ZTv0_n48_N8S19244C1D1Ev)();
extern void ABISELECT(_ZThn12040_N8S19244C1D1Ev,_ZThn9876_N8S19244C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19244C1D0Ev,_ZTv0_n48_N8S19244C1D0Ev)();
extern void ABISELECT(_ZThn12040_N8S19244C1D0Ev,_ZThn9876_N8S19244C1D0Ev)() __attribute__((weak));
extern void _ZN8S19244C32v1Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C82v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19244C1D1Ev,_ZTv0_n40_N8S19244C1D1Ev)();
extern void ABISELECT(_ZThn12816_N8S19244C1D1Ev,_ZThn10528_N8S19244C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19244C1D0Ev,_ZTv0_n40_N8S19244C1D0Ev)();
extern void ABISELECT(_ZThn12816_N8S19244C1D0Ev,_ZThn10528_N8S19244C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn464_n80_N8S19244C1D1Ev,_ZTvn380_n40_N8S19244C1D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S19244C1D0Ev,_ZTvn380_n40_N8S19244C1D0Ev)();
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19244C1D1Ev,_ZTv0_n16_N8S19244C1D1Ev)();
extern void ABISELECT(_ZThn23824_N8S19244C1D1Ev,_ZThn19564_N8S19244C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19244C1D0Ev,_ZTv0_n16_N8S19244C1D0Ev)();
extern void ABISELECT(_ZThn23824_N8S19244C1D0Ev,_ZThn19564_N8S19244C1D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void ABISELECT(_ZTv0_n56_N8S19244C1D1Ev,_ZTv0_n28_N8S19244C1D1Ev)();
extern void ABISELECT(_ZThn28576_N8S19244C1D1Ev,_ZThn23496_N8S19244C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19244C1D0Ev,_ZTv0_n28_N8S19244C1D0Ev)();
extern void ABISELECT(_ZThn28576_N8S19244C1D0Ev,_ZThn23496_N8S19244C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19244C1[] = {
  ABISELECT(28576,23496),
  ABISELECT(28112,23096),
  ABISELECT(23824,19564),
  ABISELECT(12816,10528),
  ABISELECT(12512,10284),
  ABISELECT(12040,9876),
  ABISELECT(11264,9236),
  ABISELECT(11896,9752),
  ABISELECT(27944,22960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19244C1D0Ev,
  ABISELECT(16776,13792),
  ABISELECT(12656,10396),
  ABISELECT(1344,1116),
  ABISELECT(17408,14328),
  ABISELECT(728,584),
  ABISELECT(96,68),
  ABISELECT(-11168,-9168),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn11168_N8S19244C1D1Ev,_ZThn9168_N8S19244C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn11168_N8S19244C1D0Ev,_ZThn9168_N8S19244C1D0Ev),
  0,
  ABISELECT(-11264,-9236),
  0,
  ABISELECT(-11264,-9236),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C1D1Ev,_ZTv0_n16_N8S19244C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C1D0Ev,_ZTv0_n16_N8S19244C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C22v2Ev,
  0,
  ABISELECT(-11896,-9752),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  ABISELECT(-12040,-9876),
  0,
  0,
  0,
  ABISELECT(16072,13220),
  ABISELECT(15904,13084),
  ABISELECT(-144,-124),
  ABISELECT(11784,9688),
  ABISELECT(776,652),
  ABISELECT(472,408),
  ABISELECT(-12040,-9876),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19244C1D1Ev,_ZTv0_n48_N8S19244C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19244C1D0Ev,_ZTv0_n48_N8S19244C1D0Ev),
  0,
  ABISELECT(-12512,-10284),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  ABISELECT(-12816,-10528),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(-920,-776),
  ABISELECT(15128,12432),
  ABISELECT(15296,12568),
  ABISELECT(-12816,-10528),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19244C82v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19244C1D1Ev,_ZTv0_n40_N8S19244C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19244C1D0Ev,_ZTv0_n40_N8S19244C1D0Ev),
  ABISELECT(14664,12052),
  ABISELECT(-1384,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-13280,-10908),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19244C1D1Ev,_ZTvn380_n40_N8S19244C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19244C1D0Ev,_ZTvn380_n40_N8S19244C1D0Ev),
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-23824,-19564),
  0,
  ABISELECT(-23824,-19564),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C1D1Ev,_ZTv0_n16_N8S19244C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C1D0Ev,_ZTv0_n16_N8S19244C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
  ABISELECT(-24120,-19808),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  ABISELECT(-24584,-20208),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  ABISELECT(-16048,-13208),
  ABISELECT(-27944,-22960),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  0,
  0,
  0,
  ABISELECT(-28112,-23096),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  ABISELECT(-28576,-23496),
  ABISELECT(-632,-536),
  ABISELECT(-16680,-13744),
  ABISELECT(-4752,-3932),
  ABISELECT(-16064,-13212),
  ABISELECT(-28576,-23496),
  (VTBL_ENTRY)&(_ZTI8S19244C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19244C1D1Ev,_ZTv0_n28_N8S19244C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19244C1D0Ev,_ZTv0_n28_N8S19244C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19244C1[];
static  VTBL_ENTRY _tg__ZTV9S19244C12__8S19244C1[] = {
  ABISELECT(11896,9752),
  ABISELECT(27944,22960),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C12__8S19244C1[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-27944,-22960),
  (VTBL_ENTRY)&(_ZTI9S19244C12[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__9S19244C12__8S19244C1[] = {
  0,
  ABISELECT(-11896,-9752),
  (VTBL_ENTRY)&(_ZTI9S19244C12[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN9S19244C13D1Ev();
extern void _ZN9S19244C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19244C13__8S19244C1[] = {
  ABISELECT(16776,13792),
  ABISELECT(12656,10396),
  ABISELECT(1344,1116),
  ABISELECT(17408,14328),
  ABISELECT(728,584),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN9S19244C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19244C13D0Ev,
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev)();
extern void ABISELECT(_ZThn96_N9S19244C13D1Ev,_ZThn68_N9S19244C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev)();
extern void ABISELECT(_ZThn96_N9S19244C13D0Ev,_ZThn68_N9S19244C13D0Ev)() __attribute__((weak));
extern void _ZN8S19244C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C2__9S19244C13__8S19244C1[] = {
  0,
  ABISELECT(-96,-68),
  0,
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C22v2Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__9S19244C13__8S19244C1[] = {
  0,
  ABISELECT(-728,-584),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19244C13D1Ev,_ZTv0_n28_N9S19244C13D1Ev)();
extern void ABISELECT(_ZThn17408_N9S19244C13D1Ev,_ZThn14328_N9S19244C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19244C13D0Ev,_ZTv0_n28_N9S19244C13D0Ev)();
extern void ABISELECT(_ZThn17408_N9S19244C13D0Ev,_ZThn14328_N9S19244C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19244C11__9S19244C13__8S19244C1[] = {
  ABISELECT(-17408,-14328),
  ABISELECT(-632,-536),
  ABISELECT(-16680,-13744),
  ABISELECT(-4752,-3932),
  ABISELECT(-16064,-13212),
  ABISELECT(-17408,-14328),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19244C13D1Ev,_ZTv0_n28_N9S19244C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19244C13D0Ev,_ZTv0_n28_N9S19244C13D0Ev),
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__A1__9S19244C13__8S19244C1[] = {
  0,
  ABISELECT(-1344,-1116),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev)();
extern void ABISELECT(_ZThn12656_N9S19244C13D1Ev,_ZThn10396_N9S19244C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev)();
extern void ABISELECT(_ZThn12656_N9S19244C13D0Ev,_ZThn10396_N9S19244C13D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C9__9S19244C13__8S19244C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-12656,-10396),
  0,
  ABISELECT(-12656,-10396),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C78S19244C9__9S19244C13__8S19244C1[] = {
  ABISELECT(-12952,-10640),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C48S19244C9__A1__9S19244C13__8S19244C1[] = {
  ABISELECT(-13416,-11040),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C13__8S19244C1[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-16776,-13792),
  (VTBL_ENTRY)&(_ZTI9S19244C13[0]),
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
extern void _ZN8S19244C6D1Ev();
extern void _ZN8S19244C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C6__8S19244C1[] = {
  ABISELECT(16072,13220),
  ABISELECT(15904,13084),
  ABISELECT(-144,-124),
  ABISELECT(11784,9688),
  ABISELECT(776,652),
  ABISELECT(472,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19244C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19244C6D0Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__8S19244C6__8S19244C1[] = {
  0,
  ABISELECT(-472,-408),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C82v8Ev();
extern void ABISELECT(_ZTv0_n80_N8S19244C6D1Ev,_ZTv0_n40_N8S19244C6D1Ev)();
extern void ABISELECT(_ZThn776_N8S19244C6D1Ev,_ZThn652_N8S19244C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19244C6D0Ev,_ZTv0_n40_N8S19244C6D0Ev)();
extern void ABISELECT(_ZThn776_N8S19244C6D0Ev,_ZThn652_N8S19244C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19244C8__8S19244C6__8S19244C1[] = {
  ABISELECT(-776,-652),
  0,
  0,
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(-920,-776),
  ABISELECT(15128,12432),
  ABISELECT(15296,12568),
  ABISELECT(-776,-652),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19244C82v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19244C6D1Ev,_ZTv0_n40_N8S19244C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19244C6D0Ev,_ZTv0_n40_N8S19244C6D0Ev),
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19244C6D1Ev,_ZTv0_n16_N8S19244C6D1Ev)();
extern void ABISELECT(_ZThn11784_N8S19244C6D1Ev,_ZThn9688_N8S19244C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19244C6D0Ev,_ZTv0_n16_N8S19244C6D0Ev)();
extern void ABISELECT(_ZThn11784_N8S19244C6D0Ev,_ZThn9688_N8S19244C6D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C9__8S19244C6__8S19244C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11784,-9688),
  0,
  ABISELECT(-11784,-9688),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C6D1Ev,_ZTv0_n16_N8S19244C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C6D0Ev,_ZTv0_n16_N8S19244C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C78S19244C9__A1__8S19244C6__8S19244C1[] = {
  ABISELECT(-12080,-9932),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C48S19244C9__8S19244C6__8S19244C1[] = {
  ABISELECT(-12544,-10332),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__8S19244C6__8S19244C1[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__8S19244C6__8S19244C1[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-15904,-13084),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C7__A2__8S19244C6__8S19244C1[] = {
  0,
  0,
  0,
  ABISELECT(-16072,-13220),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void ABISELECT(_ZTvn464_n80_N8S19244C6D1Ev,_ZTvn380_n40_N8S19244C6D1Ev)();
extern void ABISELECT(_ZTvn464_n80_N8S19244C6D0Ev,_ZTvn380_n40_N8S19244C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19244C118S19244C8__8S19244C6__8S19244C1[] = {
  ABISELECT(14664,12052),
  ABISELECT(-1384,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-1240,-1032),
  (VTBL_ENTRY)&(_ZTI8S19244C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19244C6D1Ev,_ZTvn380_n40_N8S19244C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn464_n80_N8S19244C6D0Ev,_ZTvn380_n40_N8S19244C6D0Ev),
};
extern void _ZN8S19244C42v6Ev();
extern void _ZN8S19244C82v8Ev();
extern void _ZN8S19244C8D1Ev();
extern void _ZN8S19244C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C8__8S19244C1[] = {
  ABISELECT(11008,9036),
  ABISELECT(-304,-244),
  ABISELECT(-920,-776),
  ABISELECT(15128,12432),
  ABISELECT(15296,12568),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19244C82v8Ev,
  (VTBL_ENTRY)&_ZN8S19244C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19244C8D0Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19244C108S19244C8__8S19244C1[] = {
  ABISELECT(-304,-244),
  ABISELECT(-920,-776),
  ABISELECT(15128,12432),
  ABISELECT(15296,12568),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C7__9S19244C108S19244C8__8S19244C1[] = {
  0,
  0,
  0,
  ABISELECT(-15296,-12568),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C108S19244C8__8S19244C1[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__9S19244C108S19244C8__8S19244C1[] = {
  0,
  ABISELECT(920,776),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__9S19244C108S19244C8__8S19244C1[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI9S19244C10[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN9S19244C11D1Ev();
extern void _ZN9S19244C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19244C118S19244C8__8S19244C1[] = {
  ABISELECT(14664,12052),
  ABISELECT(-1384,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN9S19244C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19244C11D0Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__9S19244C118S19244C8__8S19244C1[] = {
  0,
  ABISELECT(768,624),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev)();
extern void ABISELECT(_ZThn10544_N9S19244C11D1Ev,_ZThn8656_N9S19244C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev)();
extern void ABISELECT(_ZThn10544_N9S19244C11D0Ev,_ZThn8656_N9S19244C11D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C9__9S19244C118S19244C8__8S19244C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-10544,-8656),
  0,
  ABISELECT(-10544,-8656),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C78S19244C9__9S19244C118S19244C8__8S19244C1[] = {
  ABISELECT(-10840,-8900),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C48S19244C9__9S19244C118S19244C8__8S19244C1[] = {
  ABISELECT(-11304,-9300),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__9S19244C118S19244C8__8S19244C1[] = {
  0,
  ABISELECT(1384,1156),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C118S19244C8__8S19244C1[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-14664,-12052),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19244C8D1Ev,_ZTv0_n16_N8S19244C8D1Ev)();
extern void ABISELECT(_ZThn11008_N8S19244C8D1Ev,_ZThn9036_N8S19244C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19244C8D0Ev,_ZTv0_n16_N8S19244C8D0Ev)();
extern void ABISELECT(_ZThn11008_N8S19244C8D0Ev,_ZThn9036_N8S19244C8D0Ev)() __attribute__((weak));
extern void _ZN8S19244C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C9__8S19244C8__8S19244C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-11008,-9036),
  0,
  ABISELECT(-11008,-9036),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C8D1Ev,_ZTv0_n16_N8S19244C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19244C8D0Ev,_ZTv0_n16_N8S19244C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C78S19244C9__8S19244C8__8S19244C1[] = {
  ABISELECT(-11304,-9280),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C48S19244C9__8S19244C8__8S19244C1[] = {
  ABISELECT(-11768,-9680),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__8S19244C8__8S19244C1[] = {
  0,
  ABISELECT(920,776),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__8S19244C8__8S19244C1[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(-15128,-12432),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C7__A1__8S19244C8__8S19244C1[] = {
  0,
  0,
  0,
  ABISELECT(-15296,-12568),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__A1__8S19244C8__8S19244C1[] = {
  0,
  ABISELECT(304,244),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void ABISELECT(_ZThn464_N8S19244C8D1Ev,_ZThn380_N8S19244C8D1Ev)();
extern void ABISELECT(_ZThn464_N8S19244C8D0Ev,_ZThn380_N8S19244C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19244C11__8S19244C8__8S19244C1[] = {
  ABISELECT(14664,12052),
  ABISELECT(-1384,-1156),
  ABISELECT(10544,8656),
  ABISELECT(-768,-624),
  ABISELECT(-464,-380),
  (VTBL_ENTRY)&(_ZTI8S19244C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S19244C8D1Ev,_ZThn380_N8S19244C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn464_N8S19244C8D0Ev,_ZThn380_N8S19244C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__8S19244C1[] = {
  ABISELECT(-16048,-13208),
  0,
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__8S19244C5__8S19244C1[] = {
  0,
  ABISELECT(16048,13208),
  (VTBL_ENTRY)&(_ZTI8S19244C5[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN9S19244C11D1Ev();
extern void _ZN9S19244C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19244C11__A1__8S19244C1[] = {
  ABISELECT(-632,-536),
  ABISELECT(-16680,-13744),
  ABISELECT(-4752,-3932),
  ABISELECT(-16064,-13212),
  0,
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN9S19244C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19244C11D0Ev,
};
extern void _ZN8S19244C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C3__9S19244C11__A1__8S19244C1[] = {
  0,
  ABISELECT(16064,13212),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
};
extern void _ZN8S19244C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev)();
extern void _ZN8S19244C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C9__9S19244C11__A1__8S19244C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(4752,3932),
  0,
  ABISELECT(4752,3932),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19244C92v7Ev,
};
extern void _ZN8S19244C72v3Ev();
extern void _ZN8S19244C72v4Ev();
extern void _ZN8S19244C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C78S19244C9__9S19244C11__A1__8S19244C1[] = {
  ABISELECT(4456,3688),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v4Ev,
  (VTBL_ENTRY)&_ZN8S19244C72v5Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C48S19244C9__9S19244C11__A1__8S19244C1[] = {
  ABISELECT(3992,3288),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
extern void _ZN8S19244C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19244C4__A1__9S19244C11__A1__8S19244C1[] = {
  0,
  ABISELECT(16680,13744),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
  (VTBL_ENTRY)&_ZN8S19244C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19244C5__9S19244C11__A1__8S19244C1[] = {
  ABISELECT(-16048,-13208),
  ABISELECT(632,536),
  (VTBL_ENTRY)&(_ZTI9S19244C11[0]),
};
static  VTT_ENTRY vtt_S19244C1[] = {
  {&(_ZTV8S19244C1[11]),  11,120},
  {&(_tg__ZTV9S19244C12__8S19244C1[4]),  4,4},
  {&(_tg__ZTV8S19244C5__9S19244C12__8S19244C1[3]),  3,3},
  {&(_tg__ZTV8S19244C4__9S19244C12__8S19244C1[3]),  3,4},
  {&(_tg__ZTV9S19244C13__8S19244C1[8]),  8,10},
  {&(_tg__ZTV8S19244C2__9S19244C13__8S19244C1[5]),  5,9},
  {&(_tg__ZTV8S19244C4__9S19244C13__8S19244C1[3]),  3,4},
  {&(_tg__ZTV9S19244C11__9S19244C13__8S19244C1[7]),  7,9},
  {&(_tg__ZTV8S19244C3__A1__9S19244C13__8S19244C1[3]),  3,4},
  {&(_tg__ZTV8S19244C9__9S19244C13__8S19244C1[9]),  9,13},
  {&(_tg__ZTV8S19244C78S19244C9__9S19244C13__8S19244C1[2]),  2,5},
  {&(_tg__ZTV8S19244C48S19244C9__A1__9S19244C13__8S19244C1[2]),  2,3},
  {&(_tg__ZTV8S19244C5__9S19244C13__8S19244C1[3]),  3,3},
  {&(_ZTV8S19244C1[28]),  28,120},
  {&(_ZTV8S19244C1[35]),  35,120},
  {&(_ZTV8S19244C1[48]),  48,120},
  {&(_ZTV8S19244C1[56]),  56,120},
  {&(_ZTV8S19244C1[67]),  67,120},
  {&(_ZTV8S19244C1[88]),  88,120},
  {&(_ZTV8S19244C1[94]),  94,120},
  {&(_ZTV8S19244C1[99]),  99,120},
  {&(_ZTV8S19244C1[103]),  103,120},
  {&(_ZTV8S19244C1[108]),  108,120},
  {&(_ZTV8S19244C1[77]),  77,120},
  {&(_ZTV8S19244C1[21]),  21,120},
  {&(_ZTV8S19244C1[118]),  118,120},
  {&(_tg__ZTV8S19244C6__8S19244C1[8]),  8,13},
  {&(_tg__ZTV8S19244C3__8S19244C6__8S19244C1[3]),  3,4},
  {&(_tg__ZTV8S19244C8__8S19244C6__8S19244C1[10]),  10,14},
  {&(_tg__ZTV8S19244C9__8S19244C6__8S19244C1[9]),  9,13},
  {&(_tg__ZTV8S19244C78S19244C9__A1__8S19244C6__8S19244C1[2]),  2,5},
  {&(_tg__ZTV8S19244C48S19244C9__8S19244C6__8S19244C1[2]),  2,3},
  {&(_tg__ZTV8S19244C4__A1__8S19244C6__8S19244C1[3]),  3,4},
  {&(_tg__ZTV8S19244C5__8S19244C6__8S19244C1[3]),  3,3},
  {&(_tg__ZTV8S19244C7__A2__8S19244C6__8S19244C1[5]),  5,8},
  {&(_tg__ZTV9S19244C118S19244C8__8S19244C6__8S19244C1[6]),  6,8},
  {&(_tg__ZTV8S19244C8__8S19244C1[7]),  7,11},
  {&(_tg__ZTV9S19244C108S19244C8__8S19244C1[6]),  6,7},
  {&(_tg__ZTV8S19244C7__9S19244C108S19244C8__8S19244C1[5]),  5,8},
  {&(_tg__ZTV8S19244C5__9S19244C108S19244C8__8S19244C1[3]),  3,3},
  {&(_tg__ZTV8S19244C4__A1__9S19244C108S19244C8__8S19244C1[3]),  3,4},
  {&(_tg__ZTV8S19244C3__9S19244C108S19244C8__8S19244C1[3]),  3,4},
  {&(_tg__ZTV9S19244C118S19244C8__8S19244C1[6]),  6,8},
  {&(_tg__ZTV8S19244C3__9S19244C118S19244C8__8S19244C1[3]),  3,4},
  {&(_tg__ZTV8S19244C9__9S19244C118S19244C8__8S19244C1[9]),  9,13},
  {&(_tg__ZTV8S19244C78S19244C9__9S19244C118S19244C8__8S19244C1[2]),  2,5},
  {&(_tg__ZTV8S19244C48S19244C9__9S19244C118S19244C8__8S19244C1[2]),  2,3},
  {&(_tg__ZTV8S19244C4__A1__9S19244C118S19244C8__8S19244C1[3]),  3,4},
  {&(_tg__ZTV8S19244C5__9S19244C118S19244C8__8S19244C1[3]),  3,3},
  {&(_tg__ZTV8S19244C9__8S19244C8__8S19244C1[9]),  9,13},
  {&(_tg__ZTV8S19244C78S19244C9__8S19244C8__8S19244C1[2]),  2,5},
  {&(_tg__ZTV8S19244C48S19244C9__8S19244C8__8S19244C1[2]),  2,3},
  {&(_tg__ZTV8S19244C4__A1__8S19244C8__8S19244C1[3]),  3,4},
  {&(_tg__ZTV8S19244C5__8S19244C8__8S19244C1[3]),  3,3},
  {&(_tg__ZTV8S19244C7__A1__8S19244C8__8S19244C1[5]),  5,8},
  {&(_tg__ZTV8S19244C3__A1__8S19244C8__8S19244C1[3]),  3,4},
  {&(_tg__ZTV9S19244C11__8S19244C8__8S19244C1[6]),  6,8},
  {&(_tg__ZTV8S19244C5__8S19244C1[3]),  3,3},
  {&(_tg__ZTV8S19244C4__8S19244C5__8S19244C1[3]),  3,4},
  {&(_tg__ZTV9S19244C11__A1__8S19244C1[6]),  6,8},
  {&(_tg__ZTV8S19244C3__9S19244C11__A1__8S19244C1[3]),  3,4},
  {&(_tg__ZTV8S19244C9__9S19244C11__A1__8S19244C1[9]),  9,13},
  {&(_tg__ZTV8S19244C78S19244C9__9S19244C11__A1__8S19244C1[2]),  2,5},
  {&(_tg__ZTV8S19244C48S19244C9__9S19244C11__A1__8S19244C1[2]),  2,3},
  {&(_tg__ZTV8S19244C4__A1__9S19244C11__A1__8S19244C1[3]),  3,4},
  {&(_tg__ZTV8S19244C5__9S19244C11__A1__8S19244C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19244C1[];
extern  VTBL_ENTRY _ZTV8S19244C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19244C1[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C8D0Ev,_ZTv0_n16_N8S19244C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S19244C8D0Ev,_ZThn9036_N8S19244C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C8D1Ev,_ZTv0_n16_N8S19244C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11008_N8S19244C8D1Ev,_ZThn9036_N8S19244C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D0Ev,_ZTv0_n16_N9S19244C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19244C11D0Ev,_ZThn8656_N9S19244C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C11D1Ev,_ZTv0_n16_N9S19244C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10544_N9S19244C11D1Ev,_ZThn8656_N9S19244C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C6D0Ev,_ZTv0_n16_N8S19244C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11784_N8S19244C6D0Ev,_ZThn9688_N8S19244C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C6D1Ev,_ZTv0_n16_N8S19244C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11784_N8S19244C6D1Ev,_ZThn9688_N8S19244C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19244C6D0Ev,_ZTv0_n40_N8S19244C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn776_N8S19244C6D0Ev,_ZThn652_N8S19244C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19244C6D1Ev,_ZTv0_n40_N8S19244C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn776_N8S19244C6D1Ev,_ZThn652_N8S19244C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19244C13D0Ev,_ZTv0_n28_N9S19244C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17408_N9S19244C13D0Ev,_ZThn14328_N9S19244C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19244C13D1Ev,_ZTv0_n28_N9S19244C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17408_N9S19244C13D1Ev,_ZThn14328_N9S19244C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C13D0Ev,_ZTv0_n16_N9S19244C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N9S19244C13D0Ev,_ZThn10396_N9S19244C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19244C13D0Ev,_ZThn68_N9S19244C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19244C13D1Ev,_ZTv0_n16_N9S19244C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N9S19244C13D1Ev,_ZThn10396_N9S19244C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19244C13D1Ev,_ZThn68_N9S19244C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19244C1D0Ev,_ZTv0_n28_N8S19244C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn28576_N8S19244C1D0Ev,_ZThn23496_N8S19244C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19244C1D1Ev,_ZTv0_n28_N8S19244C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn28576_N8S19244C1D1Ev,_ZThn23496_N8S19244C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19244C1D0Ev,_ZTv0_n40_N8S19244C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12816_N8S19244C1D0Ev,_ZThn10528_N8S19244C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19244C1D1Ev,_ZTv0_n40_N8S19244C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12816_N8S19244C1D1Ev,_ZThn10528_N8S19244C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19244C1D0Ev,_ZTv0_n48_N8S19244C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12040_N8S19244C1D0Ev,_ZThn9876_N8S19244C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19244C1D1Ev,_ZTv0_n48_N8S19244C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12040_N8S19244C1D1Ev,_ZThn9876_N8S19244C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C1D0Ev,_ZTv0_n16_N8S19244C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23824_N8S19244C1D0Ev,_ZThn19564_N8S19244C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11264_N8S19244C1D0Ev,_ZThn9236_N8S19244C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19244C1D1Ev,_ZTv0_n16_N8S19244C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23824_N8S19244C1D1Ev,_ZThn19564_N8S19244C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11264_N8S19244C1D1Ev,_ZThn9236_N8S19244C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19244C1 = {  "S19244C1", // class name
  bases_S19244C1, 19,
  &(vtc_S19244C1[0]), // expected_vtbl_contents
  &(vtt_S19244C1[0]), // expected_vtt_contents
  ABISELECT(34976,28744), // object size
  NSPAIRA(_ZTI8S19244C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19244C1),120, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19244C1),66, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7571C3  {
  short s7571c3f0:6;
  long s7571c3f1;
  short s7571c3f2:4;
  __tsi64 s7571c3f3[13];
  void *s7571c3f4;
  virtual void  v3(); // _ZN7S7571C32v3Ev
  ~S7571C3(); // tgen
  S7571C3(); // tgen
};
//SIG(-1 S7571C3) C1{ v1 Fs:6 Fl Fs:4 FL[13] Fp}


void  S7571C3 ::v3(){vfunc_called(this, "_ZN7S7571C32v3Ev");}
S7571C3 ::~S7571C3(){ note_dtor("S7571C3", this);} // tgen
S7571C3 ::S7571C3(){ note_ctor("S7571C3", this);} // tgen

static void Test_S7571C3()
{
  extern Class_Descriptor cd_S7571C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,32)];
    init_test(&cd_S7571C3, buf);
    S7571C3 *dp, &lv = *(dp=new (buf) S7571C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,124), "sizeof(S7571C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7571C3)");
    set_bf_and_test(lv, s7571c3f0, ABISELECT(8,4), 0, 6, 1, "S7571C3");
    set_bf_and_test(lv, s7571c3f0, ABISELECT(8,4), 0, 6, hide_sll(1LL<<5), "S7571C3");
    check_field_offset(lv, s7571c3f1, ABISELECT(16,8), "S7571C3.s7571c3f1");
    set_bf_and_test(lv, s7571c3f2, ABISELECT(24,12), 0, 4, 1, "S7571C3");
    set_bf_and_test(lv, s7571c3f2, ABISELECT(24,12), 0, 4, hide_sll(1LL<<3), "S7571C3");
    check_field_offset(lv, s7571c3f3, ABISELECT(32,16), "S7571C3.s7571c3f3");
    check_field_offset(lv, s7571c3f4, ABISELECT(136,120), "S7571C3.s7571c3f4");
    test_class_info(&lv, &cd_S7571C3);
    dp->~S7571C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7571C3(Test_S7571C3, "S7571C3", ABISELECT(144,124));

#else // __cplusplus

extern void _ZN7S7571C3C1Ev();
extern void _ZN7S7571C3D1Ev();
Name_Map name_map_S7571C3[] = {
  NSPAIR(_ZN7S7571C3C1Ev),
  NSPAIR(_ZN7S7571C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7571C3[];
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY vtc_S7571C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C3[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S7571C3[];
extern  VTBL_ENTRY _ZTV7S7571C3[];
Class_Descriptor cd_S7571C3 = {  "S7571C3", // class name
  0,0,//no base classes
  &(vtc_S7571C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,124), // object size
  NSPAIRA(_ZTI7S7571C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7571C3),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  S7571C2  : virtual S7571C3 {
  void *s7571c2f0;
  ::S7571C3 s7571c2f1;
  int s7571c2f2:3;
  ~S7571C2(); // tgen
  S7571C2(); // tgen
};
//SIG(-1 S7571C2) C1{ VBC2{ v1 Fs:6 Fl Fs:4 FL[13] Fp} Fp FC2 Fi:3}


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

static void Test_S7571C2()
{
  extern Class_Descriptor cd_S7571C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,66)];
    init_test(&cd_S7571C2, buf);
    S7571C2 *dp, &lv = *(dp=new (buf) S7571C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,260), "sizeof(S7571C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7571C2)");
    check_base_class_offset(lv, (S7571C3*), ABISELECT(168,136), "S7571C2");
    check_field_offset(lv, s7571c2f0, ABISELECT(8,4), "S7571C2.s7571c2f0");
    check_field_offset(lv, s7571c2f1, ABISELECT(16,8), "S7571C2.s7571c2f1");
    set_bf_and_test(lv, s7571c2f2, ABISELECT(160,132), 0, 3, 1, "S7571C2");
    set_bf_and_test(lv, s7571c2f2, ABISELECT(160,132), 0, 3, hide_sll(1LL<<2), "S7571C2");
    test_class_info(&lv, &cd_S7571C2);
    dp->~S7571C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7571C2(Test_S7571C2, "S7571C2", ABISELECT(312,260));

#else // __cplusplus

extern void _ZN7S7571C2C1Ev();
extern void _ZN7S7571C2D1Ev();
Name_Map name_map_S7571C2[] = {
  NSPAIR(_ZN7S7571C2C1Ev),
  NSPAIR(_ZN7S7571C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7571C3;
extern VTBL_ENTRY _ZTI7S7571C3[];
extern  VTBL_ENTRY _ZTV7S7571C3[];
static Base_Class bases_S7571C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7571C3,    ABISELECT(168,136), //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 _ZTI7S7571C2[];
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY vtc_S7571C2[] = {
  ABISELECT(168,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
  0,
  ABISELECT(-168,-136),
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
extern VTBL_ENTRY _ZTV7S7571C2[];
static  VTT_ENTRY vtt_S7571C2[] = {
  {&(_ZTV7S7571C2[3]),  3,7},
  {&(_ZTV7S7571C2[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7571C2[];
extern  VTBL_ENTRY _ZTV7S7571C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C2[];
Class_Descriptor cd_S7571C2 = {  "S7571C2", // class name
  bases_S7571C2, 1,
  &(vtc_S7571C2[0]), // expected_vtbl_contents
  &(vtt_S7571C2[0]), // expected_vtt_contents
  ABISELECT(312,260), // object size
  NSPAIRA(_ZTI7S7571C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7571C2),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7571C2),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  S7571C6  {
  __tsi64 s7571c6f0;
  long double s7571c6f1;
  void *s7571c6f2;
  char s7571c6f3;
  ::S7571C3 s7571c6f4;
  void *s7571c6f5[2];
  __tsi64 s7571c6f6[8];
  short s7571c6f7;
  void *s7571c6f8;
  __tsi64 s7571c6f9:64;
  virtual void  v4(); // _ZN7S7571C62v4Ev
  ~S7571C6(); // tgen
  S7571C6(); // tgen
};
//SIG(-1 S7571C6) C1{ v1 FL FD Fp Fc FC2{ v2 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64}


void  S7571C6 ::v4(){vfunc_called(this, "_ZN7S7571C62v4Ev");}
S7571C6 ::~S7571C6(){ note_dtor("S7571C6", this);} // tgen
S7571C6 ::S7571C6(){ note_ctor("S7571C6", this);} // tgen

static void Test_S7571C6()
{
  extern Class_Descriptor cd_S7571C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,62)];
    init_test(&cd_S7571C6, buf);
    S7571C6 *dp, &lv = *(dp=new (buf) S7571C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,244), "sizeof(S7571C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7571C6)");
    check_field_offset(lv, s7571c6f0, ABISELECT(8,4), "S7571C6.s7571c6f0");
    check_field_offset(lv, s7571c6f1, ABISELECT(16,12), "S7571C6.s7571c6f1");
    check_field_offset(lv, s7571c6f2, ABISELECT(32,24), "S7571C6.s7571c6f2");
    check_field_offset(lv, s7571c6f3, ABISELECT(40,28), "S7571C6.s7571c6f3");
    check_field_offset(lv, s7571c6f4, ABISELECT(48,32), "S7571C6.s7571c6f4");
    check_field_offset(lv, s7571c6f5, ABISELECT(192,156), "S7571C6.s7571c6f5");
    check_field_offset(lv, s7571c6f6, ABISELECT(208,164), "S7571C6.s7571c6f6");
    check_field_offset(lv, s7571c6f7, ABISELECT(272,228), "S7571C6.s7571c6f7");
    check_field_offset(lv, s7571c6f8, ABISELECT(280,232), "S7571C6.s7571c6f8");
    set_bf_and_test(lv, s7571c6f9, ABISELECT(288,236), 0, 64, 1, "S7571C6");
    set_bf_and_test(lv, s7571c6f9, ABISELECT(288,236), 0, 64, hide_sll(1LL<<63), "S7571C6");
    test_class_info(&lv, &cd_S7571C6);
    dp->~S7571C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7571C6(Test_S7571C6, "S7571C6", ABISELECT(304,244));

#else // __cplusplus

extern void _ZN7S7571C6C1Ev();
extern void _ZN7S7571C6D1Ev();
Name_Map name_map_S7571C6[] = {
  NSPAIR(_ZN7S7571C6C1Ev),
  NSPAIR(_ZN7S7571C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7571C6[];
extern void _ZN7S7571C62v4Ev();
static  VTBL_ENTRY vtc_S7571C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C6[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
};
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
Class_Descriptor cd_S7571C6 = {  "S7571C6", // class name
  0,0,//no base classes
  &(vtc_S7571C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,244), // object size
  NSPAIRA(_ZTI7S7571C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7571C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7571C5  : S7571C6 {
  ::S7571C2 s7571c5f0;
  int s7571c5f1;
  void *s7571c5f2;
  int s7571c5f3;
  virtual  ~S7571C5(); // _ZN7S7571C5D1Ev
  virtual void  v5(); // _ZN7S7571C52v5Ev
  S7571C5(); // tgen
};
//SIG(-1 S7571C5) C1{ BC2{ v2 FL FD Fp Fc FC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v1 FC4{ VBC3 Fp FC3 Fi:3} Fi Fp Fi}


 S7571C5 ::~S7571C5(){ note_dtor("S7571C5", this);}
void  S7571C5 ::v5(){vfunc_called(this, "_ZN7S7571C52v5Ev");}
S7571C5 ::S7571C5(){ note_ctor("S7571C5", this);} // tgen

static void Test_S7571C5()
{
  extern Class_Descriptor cd_S7571C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,130)];
    init_test(&cd_S7571C5, buf);
    S7571C5 *dp, &lv = *(dp=new (buf) S7571C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,516), "sizeof(S7571C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7571C5)");
    check_base_class_offset(lv, (S7571C6*), 0, "S7571C5");
    check_field_offset(lv, s7571c5f0, ABISELECT(296,244), "S7571C5.s7571c5f0");
    check_field_offset(lv, s7571c5f1, ABISELECT(608,504), "S7571C5.s7571c5f1");
    check_field_offset(lv, s7571c5f2, ABISELECT(616,508), "S7571C5.s7571c5f2");
    check_field_offset(lv, s7571c5f3, ABISELECT(624,512), "S7571C5.s7571c5f3");
    test_class_info(&lv, &cd_S7571C5);
    dp->~S7571C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7571C5(Test_S7571C5, "S7571C5", ABISELECT(640,516));

#else // __cplusplus

extern void _ZN7S7571C5C1Ev();
extern void _ZN7S7571C5D1Ev();
Name_Map name_map_S7571C5[] = {
  NSPAIR(_ZN7S7571C5C1Ev),
  NSPAIR(_ZN7S7571C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
static Base_Class bases_S7571C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7571C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7571C5[];
extern void _ZN7S7571C62v4Ev();
extern void _ZN7S7571C5D1Ev();
extern void _ZN7S7571C5D0Ev();
extern void _ZN7S7571C52v5Ev();
static  VTBL_ENTRY vtc_S7571C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C5[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7571C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7571C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7571C52v5Ev,
};
extern VTBL_ENTRY _ZTI7S7571C5[];
extern  VTBL_ENTRY _ZTV7S7571C5[];
Class_Descriptor cd_S7571C5 = {  "S7571C5", // class name
  bases_S7571C5, 1,
  &(vtc_S7571C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(640,516), // object size
  NSPAIRA(_ZTI7S7571C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7571C5),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  S7571C9  {
  int s7571c9f0[2];
  __tsi64 s7571c9f1[2];
  ::S7571C3 s7571c9f2[3];
  virtual void  v6(); // _ZN7S7571C92v6Ev
  virtual void  v7(); // _ZN7S7571C92v7Ev
  virtual void  v8(); // _ZN7S7571C92v8Ev
  ~S7571C9(); // tgen
  S7571C9(); // tgen
};
//SIG(-1 S7571C9) C1{ v1 v2 v3 Fi[2] FL[2] FC2{ v4 Fs:6 Fl Fs:4 FL[13] Fp}[3]}


void  S7571C9 ::v6(){vfunc_called(this, "_ZN7S7571C92v6Ev");}
void  S7571C9 ::v7(){vfunc_called(this, "_ZN7S7571C92v7Ev");}
void  S7571C9 ::v8(){vfunc_called(this, "_ZN7S7571C92v8Ev");}
S7571C9 ::~S7571C9(){ note_dtor("S7571C9", this);} // tgen
S7571C9 ::S7571C9(){ note_ctor("S7571C9", this);} // tgen

static void Test_S7571C9()
{
  extern Class_Descriptor cd_S7571C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(59,101)];
    init_test(&cd_S7571C9, buf);
    S7571C9 *dp, &lv = *(dp=new (buf) S7571C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,400), "sizeof(S7571C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7571C9)");
    check_field_offset(lv, s7571c9f0, ABISELECT(8,4), "S7571C9.s7571c9f0");
    check_field_offset(lv, s7571c9f1, ABISELECT(16,12), "S7571C9.s7571c9f1");
    check_field_offset(lv, s7571c9f2, ABISELECT(32,28), "S7571C9.s7571c9f2");
    test_class_info(&lv, &cd_S7571C9);
    dp->~S7571C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7571C9(Test_S7571C9, "S7571C9", ABISELECT(464,400));

#else // __cplusplus

extern void _ZN7S7571C9C1Ev();
extern void _ZN7S7571C9D1Ev();
Name_Map name_map_S7571C9[] = {
  NSPAIR(_ZN7S7571C9C1Ev),
  NSPAIR(_ZN7S7571C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7571C9[];
extern void _ZN7S7571C92v6Ev();
extern void _ZN7S7571C92v7Ev();
extern void _ZN7S7571C92v8Ev();
static  VTBL_ENTRY vtc_S7571C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C9[0]),
  (VTBL_ENTRY)&_ZN7S7571C92v6Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v7Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v8Ev,
};
extern VTBL_ENTRY _ZTI7S7571C9[];
extern  VTBL_ENTRY _ZTV7S7571C9[];
Class_Descriptor cd_S7571C9 = {  "S7571C9", // class name
  0,0,//no base classes
  &(vtc_S7571C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,400), // object size
  NSPAIRA(_ZTI7S7571C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7571C9),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7571C8  : S7571C6 , S7571C9 , S7571C3 {
  __tsi64 s7571c8f0[2];
  void *s7571c8f1[8];
  ::S19762C7 s7571c8f2;
  void *s7571c8f3;
  int s7571c8f4;
  ::S19762C7 s7571c8f5;
  int s7571c8f6;
  virtual  ~S7571C8(); // _ZN7S7571C8D1Ev
  virtual void  v9(); // _ZN7S7571C82v9Ev
  S7571C8(); // tgen
};
//SIG(-1 S7571C8) C1{ BC2{ v2 FL FD Fp Fc FC3{ v6 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} BC4{ v3 v4 v5 Fi[2] FL[2] FC3[3]} BC3 vd v1 FL[2] Fp[8] FC5{ BC6{ v7 Fs:6 Fl Fs:4 FL[13] Fp} VBC7{ v8 v9 v10 Fi[2] FL[2] FC6[3]} VBC8{ VBC6 Fp FC6 Fi:3} VBC9{ v11 FL FD Fp Fc FC6 Fp[2] FL[8] Fs Fp FL:64} FC9 Fs Fi[2]} Fp Fi FC5 Fi}


 S7571C8 ::~S7571C8(){ note_dtor("S7571C8", this);}
void  S7571C8 ::v9(){vfunc_called(this, "_ZN7S7571C82v9Ev");}
S7571C8 ::S7571C8(){ note_ctor("S7571C8", this);} // tgen

static void Test_S7571C8()
{
  extern Class_Descriptor cd_S7571C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(259,850)];
    init_test(&cd_S7571C8, buf);
    S7571C8 *dp, &lv = *(dp=new (buf) S7571C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4128,3396), "sizeof(S7571C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7571C8)");
    check_base_class_offset(lv, (S7571C6*), 0, "S7571C8");
    check_base_class_offset(lv, (S7571C9*), ABISELECT(296,244), "S7571C8");
    check_base_class_offset(lv, (S7571C3*), ABISELECT(760,644), "S7571C8");
    check_field_offset(lv, s7571c8f0, ABISELECT(904,768), "S7571C8.s7571c8f0");
    check_field_offset(lv, s7571c8f1, ABISELECT(920,784), "S7571C8.s7571c8f1");
    check_field_offset(lv, s7571c8f2, ABISELECT(992,816), "S7571C8.s7571c8f2");
    check_field_offset(lv, s7571c8f3, ABISELECT(2544,2100), "S7571C8.s7571c8f3");
    check_field_offset(lv, s7571c8f4, ABISELECT(2552,2104), "S7571C8.s7571c8f4");
    check_field_offset(lv, s7571c8f5, ABISELECT(2560,2108), "S7571C8.s7571c8f5");
    check_field_offset(lv, s7571c8f6, ABISELECT(4112,3392), "S7571C8.s7571c8f6");
    test_class_info(&lv, &cd_S7571C8);
    dp->~S7571C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7571C8(Test_S7571C8, "S7571C8", ABISELECT(4128,3396));

#else // __cplusplus

extern void _ZN7S7571C8C1Ev();
extern void _ZN7S7571C8D1Ev();
Name_Map name_map_S7571C8[] = {
  NSPAIR(_ZN7S7571C8C1Ev),
  NSPAIR(_ZN7S7571C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
extern Class_Descriptor cd_S7571C9;
extern VTBL_ENTRY _ZTI7S7571C9[];
extern  VTBL_ENTRY _ZTV7S7571C9[];
extern Class_Descriptor cd_S7571C3;
extern VTBL_ENTRY _ZTI7S7571C3[];
extern  VTBL_ENTRY _ZTV7S7571C3[];
static Base_Class bases_S7571C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7571C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7571C9,    ABISELECT(296,244), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7571C3,    ABISELECT(760,644), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7571C8[];
extern void _ZN7S7571C62v4Ev();
extern void _ZN7S7571C8D1Ev();
extern void _ZN7S7571C8D0Ev();
extern void _ZN7S7571C82v9Ev();
extern void _ZN7S7571C92v6Ev();
extern void _ZN7S7571C92v7Ev();
extern void _ZN7S7571C92v8Ev();
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY vtc_S7571C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C8[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7571C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7571C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7571C82v9Ev,
  ABISELECT(-296,-244),
  (VTBL_ENTRY)&(_ZTI7S7571C8[0]),
  (VTBL_ENTRY)&_ZN7S7571C92v6Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v7Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v8Ev,
  ABISELECT(-760,-644),
  (VTBL_ENTRY)&(_ZTI7S7571C8[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S7571C8[];
extern  VTBL_ENTRY _ZTV7S7571C8[];
Class_Descriptor cd_S7571C8 = {  "S7571C8", // class name
  bases_S7571C8, 3,
  &(vtc_S7571C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4128,3396), // object size
  NSPAIRA(_ZTI7S7571C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7571C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7571C7  : virtual S7571C6 , virtual S7571C8 , virtual S7571C3 , virtual S7571C2 {
  __tsi64 s7571c7f0:44;
  void *s7571c7f1;
  int s7571c7f2;
  ::S19762C7 s7571c7f3;
  __tsi64 s7571c7f4[2];
  int s7571c7f5[3];
  ::S7571C8 s7571c7f6;
  char s7571c7f7:7;
  ::S7571C5 s7571c7f8;
  ~S7571C7(); // tgen
  S7571C7(); // tgen
};
//SIG(-1 S7571C7) C1{ VBC2{ v1 FL FD Fp Fc FC3{ v5 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} VBC4{ BC2 BC5{ v2 v3 v4 Fi[2] FL[2] FC3[3]} BC3 vd v6 FL[2] Fp[8] FC6{ BC7{ v7 Fs:6 Fl Fs:4 FL[13] Fp} VBC8{ v8 v9 v10 Fi[2] FL[2] FC7[3]} VBC9{ VBC7 Fp FC7 Fi:3} VBC10{ v11 FL FD Fp Fc FC7 Fp[2] FL[8] Fs Fp FL:64} FC10 Fs Fi[2]} Fp Fi FC6 Fi} VBC3 VBC11{ VBC3 Fp FC3 Fi:3} FL:44 Fp Fi FC6 FL[2] Fi[3] FC4 Fc:7 FC12{ BC2 vd v12 FC11 Fi Fp Fi}}


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

static void Test_S7571C7()
{
  extern Class_Descriptor cd_S7571C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(697,2288)];
    init_test(&cd_S7571C7, buf);
    S7571C7 *dp, &lv = *(dp=new (buf) S7571C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11136,9148), "sizeof(S7571C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7571C7)");
    /*is_ambiguous_... S7571C7::S7571C6 */ AMB_check_base_class_offset(lv, (S7571C6*), ABISELECT(6400,5248), "S7571C7");
    check_base_class_offset(lv, (S7571C6*)(S7571C8*), ABISELECT(6704,5492), "S7571C7");
    check_base_class_offset(lv, (S7571C9*)(S7571C8*), ABISELECT(7000,5736), "S7571C7");
    check_base_class_offset(lv, (S7571C3*)(S7571C8*), ABISELECT(7464,6136), "S7571C7");
    check_base_class_offset(lv, (S7571C8*), ABISELECT(6704,5492), "S7571C7");
    /*is_ambiguous_... S7571C7::S7571C3 */ AMB_check_base_class_offset(lv, (S7571C3*), ABISELECT(10824,8888), "S7571C7");
    check_base_class_offset(lv, (S7571C3*)(S7571C2*), ABISELECT(10824,8888), "S7571C7");
    check_base_class_offset(lv, (S7571C2*), ABISELECT(10968,9012), "S7571C7");
    set_bf_and_test(lv, s7571c7f0, ABISELECT(8,4), 0, 44, 1, "S7571C7");
    set_bf_and_test(lv, s7571c7f0, ABISELECT(8,4), 0, 44, hide_sll(1LL<<43), "S7571C7");
    check_field_offset(lv, s7571c7f1, ABISELECT(16,12), "S7571C7.s7571c7f1");
    check_field_offset(lv, s7571c7f2, ABISELECT(24,16), "S7571C7.s7571c7f2");
    check_field_offset(lv, s7571c7f3, ABISELECT(32,20), "S7571C7.s7571c7f3");
    check_field_offset(lv, s7571c7f4, ABISELECT(1584,1304), "S7571C7.s7571c7f4");
    check_field_offset(lv, s7571c7f5, ABISELECT(1600,1320), "S7571C7.s7571c7f5");
    check_field_offset(lv, s7571c7f6, ABISELECT(1616,1332), "S7571C7.s7571c7f6");
    set_bf_and_test(lv, s7571c7f7, ABISELECT(5744,4728), 0, 7, 1, "S7571C7");
    set_bf_and_test(lv, s7571c7f7, ABISELECT(5744,4728), 0, 7, hide_sll(1LL<<6), "S7571C7");
    check_field_offset(lv, s7571c7f8, ABISELECT(5760,4732), "S7571C7.s7571c7f8");
    test_class_info(&lv, &cd_S7571C7);
    dp->~S7571C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7571C7(Test_S7571C7, "S7571C7", ABISELECT(11136,9148));

#else // __cplusplus

extern void _ZN7S7571C7C1Ev();
extern void _ZN7S7571C7D1Ev();
Name_Map name_map_S7571C7[] = {
  NSPAIR(_ZN7S7571C7C1Ev),
  NSPAIR(_ZN7S7571C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
extern Class_Descriptor cd_S7571C9;
extern VTBL_ENTRY _ZTI7S7571C9[];
extern  VTBL_ENTRY _ZTV7S7571C9[];
extern Class_Descriptor cd_S7571C3;
extern VTBL_ENTRY _ZTI7S7571C3[];
extern  VTBL_ENTRY _ZTV7S7571C3[];
extern Class_Descriptor cd_S7571C8;
extern VTBL_ENTRY _ZTI7S7571C8[];
extern  VTBL_ENTRY _ZTV7S7571C8[];
extern Class_Descriptor cd_S7571C3;
extern VTBL_ENTRY _ZTI7S7571C3[];
extern  VTBL_ENTRY _ZTV7S7571C3[];
extern Class_Descriptor cd_S7571C2;
extern VTBL_ENTRY _ZTI7S7571C2[];
extern  VTBL_ENTRY _ZTV7S7571C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C2[];
static Base_Class bases_S7571C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7571C6,    ABISELECT(6400,5248), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7571C6,    ABISELECT(6704,5492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7571C9,    ABISELECT(7000,5736), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7571C3,    ABISELECT(7464,6136), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7571C8,    ABISELECT(6704,5492), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7571C3,    ABISELECT(10824,8888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7571C2,    ABISELECT(10968,9012), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7571C7[];
extern void _ZN7S7571C7D1Ev();
extern void _ZN7S7571C7D0Ev();
extern void _ZN7S7571C62v4Ev();
extern void _ZN7S7571C62v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7571C7D1Ev,_ZTv0_n16_N7S7571C7D1Ev)();
extern void ABISELECT(_ZThn6704_N7S7571C7D1Ev,_ZThn5492_N7S7571C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7571C7D0Ev,_ZTv0_n16_N7S7571C7D0Ev)();
extern void ABISELECT(_ZThn6704_N7S7571C7D0Ev,_ZThn5492_N7S7571C7D0Ev)() __attribute__((weak));
extern void _ZN7S7571C82v9Ev();
extern void _ZN7S7571C92v6Ev();
extern void _ZN7S7571C92v7Ev();
extern void _ZN7S7571C92v8Ev();
extern void _ZN7S7571C32v3Ev();
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY vtc_S7571C7[] = {
  ABISELECT(10968,9012),
  ABISELECT(10824,8888),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7571C7D0Ev,
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C7D1Ev,_ZTv0_n16_N7S7571C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C7D0Ev,_ZTv0_n16_N7S7571C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7571C82v9Ev,
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C92v6Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v7Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v8Ev,
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
  0,
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
  ABISELECT(-144,-124),
  ABISELECT(-10968,-9012),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
};
extern VTBL_ENTRY _ZTV7S7571C7[];
static  VTBL_ENTRY _tg__ZTV7S7571C2__7S7571C7[] = {
  ABISELECT(-144,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C3__7S7571C2__7S7571C7[] = {
  0,
  ABISELECT(144,124),
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
static  VTT_ENTRY vtt_S7571C7[] = {
  {&(_ZTV7S7571C7[6]),  6,40},
  {&(_ZTV7S7571C7[11]),  11,40},
  {&(_ZTV7S7571C7[21]),  21,40},
  {&(_ZTV7S7571C7[27]),  27,40},
  {&(_ZTV7S7571C7[32]),  32,40},
  {&(_ZTV7S7571C7[36]),  36,40},
  {&(_ZTV7S7571C7[40]),  40,40},
  {&(_tg__ZTV7S7571C2__7S7571C7[3]),  3,3},
  {&(_tg__ZTV7S7571C3__7S7571C2__7S7571C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7571C7[];
extern  VTBL_ENTRY _ZTV7S7571C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C7[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C7D0Ev,_ZTv0_n16_N7S7571C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N7S7571C7D0Ev,_ZThn5492_N7S7571C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C7D1Ev,_ZTv0_n16_N7S7571C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N7S7571C7D1Ev,_ZThn5492_N7S7571C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7571C7 = {  "S7571C7", // class name
  bases_S7571C7, 7,
  &(vtc_S7571C7[0]), // expected_vtbl_contents
  &(vtt_S7571C7[0]), // expected_vtt_contents
  ABISELECT(11136,9148), // object size
  NSPAIRA(_ZTI7S7571C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7571C7),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7571C7),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7571C4  : virtual S7571C5 , virtual S7571C3 , virtual S7571C7 {
  int s7571c4f0;
  long double s7571c4f1;
  int s7571c4f2;
  void *s7571c4f3;
  long s7571c4f4;
  ::S19762C23_nt s7571c4f5;
  int s7571c4f6;
  __tsi64 s7571c4f7;
  virtual  ~S7571C4(); // _ZN7S7571C4D2Ev
  S7571C4(); // tgen
};
//SIG(-1 S7571C4) C1{ VBC2{ BC3{ v1 FL FD Fp Fc FC4{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp[2] FL[8] Fs Fp FL:64} vd v2 FC5{ VBC4 Fp FC4 Fi:3} Fi Fp Fi} VBC4 VBC6{ VBC3 VBC7{ BC3 BC8{ v4 v5 v6 Fi[2] FL[2] FC4[3]} BC4 vd v7 FL[2] Fp[8] FC9{ BC10{ v8 Fs:6 Fl Fs:4 FL[13] Fp} VBC11{ v9 v10 v11 Fi[2] FL[2] FC10[3]} VBC12{ VBC10 Fp FC10 Fi:3} VBC13{ v12 FL FD Fp Fc FC10 Fp[2] FL[8] Fs Fp FL:64} FC13 Fs Fi[2]} Fp Fi FC9 Fi} VBC4 VBC5 FL:44 Fp Fi FC9 FL[2] Fi[3] FC7 Fc:7 FC2} vd Fi FD Fi Fp Fl FU14{ m Fi:8 Fi Fp FL Fp Fp Fi} Fi FL}


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

static void Test_S7571C4()
{
  extern Class_Descriptor cd_S7571C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(742,2430)];
    init_test(&cd_S7571C4, buf);
    S7571C4 *dp, &lv = *(dp=new (buf) S7571C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11856,9716), "sizeof(S7571C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7571C4)");
    check_base_class_offset(lv, (S7571C6*)(S7571C5*), ABISELECT(80,52), "S7571C4");
    check_base_class_offset(lv, (S7571C5*), ABISELECT(80,52), "S7571C4");
    /*is_ambiguous_... S7571C4::S7571C3 */ AMB_check_base_class_offset(lv, (S7571C3*), ABISELECT(712,568), "S7571C4");
    /*is_ambiguous_... S7571C7::S7571C3 */ AMB_check_base_class_offset(lv, (S7571C3*)(S7571C7*), ABISELECT(712,568), "S7571C4");
    check_base_class_offset(lv, (S7571C3*)(S7571C2*), ABISELECT(712,568), "S7571C4");
    /*is_ambiguous_... S7571C7::S7571C6 */ AMB_check_base_class_offset(lv, (S7571C6*)(S7571C7*), ABISELECT(7264,5940), "S7571C4");
    check_base_class_offset(lv, (S7571C6*)(S7571C8*), ABISELECT(7568,6184), "S7571C4");
    check_base_class_offset(lv, (S7571C9*)(S7571C8*), ABISELECT(7864,6428), "S7571C4");
    check_base_class_offset(lv, (S7571C3*)(S7571C8*), ABISELECT(8328,6828), "S7571C4");
    check_base_class_offset(lv, (S7571C8*)(S7571C7*), ABISELECT(7568,6184), "S7571C4");
    check_base_class_offset(lv, (S7571C2*)(S7571C7*), ABISELECT(11688,9580), "S7571C4");
    check_base_class_offset(lv, (S7571C7*), ABISELECT(864,692), "S7571C4");
    check_field_offset(lv, s7571c4f0, ABISELECT(8,4), "S7571C4.s7571c4f0");
    check_field_offset(lv, s7571c4f1, ABISELECT(16,8), "S7571C4.s7571c4f1");
    check_field_offset(lv, s7571c4f2, ABISELECT(32,20), "S7571C4.s7571c4f2");
    check_field_offset(lv, s7571c4f3, ABISELECT(40,24), "S7571C4.s7571c4f3");
    check_field_offset(lv, s7571c4f4, ABISELECT(48,28), "S7571C4.s7571c4f4");
    check_field_offset(lv, s7571c4f5, ABISELECT(56,32), "S7571C4.s7571c4f5");
    check_field_offset(lv, s7571c4f6, ABISELECT(64,40), "S7571C4.s7571c4f6");
    check_field_offset(lv, s7571c4f7, ABISELECT(72,44), "S7571C4.s7571c4f7");
    test_class_info(&lv, &cd_S7571C4);
    dp->~S7571C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7571C4(Test_S7571C4, "S7571C4", ABISELECT(11856,9716));

#else // __cplusplus

extern void _ZN7S7571C4C1Ev();
extern void _ZN7S7571C4D2Ev();
Name_Map name_map_S7571C4[] = {
  NSPAIR(_ZN7S7571C4C1Ev),
  NSPAIR(_ZN7S7571C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
extern Class_Descriptor cd_S7571C5;
extern VTBL_ENTRY _ZTI7S7571C5[];
extern  VTBL_ENTRY _ZTV7S7571C5[];
extern Class_Descriptor cd_S7571C3;
extern VTBL_ENTRY _ZTI7S7571C3[];
extern  VTBL_ENTRY _ZTV7S7571C3[];
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
extern Class_Descriptor cd_S7571C9;
extern VTBL_ENTRY _ZTI7S7571C9[];
extern  VTBL_ENTRY _ZTV7S7571C9[];
extern Class_Descriptor cd_S7571C3;
extern VTBL_ENTRY _ZTI7S7571C3[];
extern  VTBL_ENTRY _ZTV7S7571C3[];
extern Class_Descriptor cd_S7571C8;
extern VTBL_ENTRY _ZTI7S7571C8[];
extern  VTBL_ENTRY _ZTV7S7571C8[];
extern Class_Descriptor cd_S7571C2;
extern VTBL_ENTRY _ZTI7S7571C2[];
extern  VTBL_ENTRY _ZTV7S7571C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C2[];
extern Class_Descriptor cd_S7571C7;
extern VTBL_ENTRY _ZTI7S7571C7[];
extern  VTBL_ENTRY _ZTV7S7571C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C7[];
static Base_Class bases_S7571C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7571C6,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7571C5,    ABISELECT(80,52), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7571C3,    ABISELECT(712,568), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7571C6,    ABISELECT(7264,5940), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7571C6,    ABISELECT(7568,6184), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S7571C9,    ABISELECT(7864,6428), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7571C3,    ABISELECT(8328,6828), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7571C8,    ABISELECT(7568,6184), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7571C2,    ABISELECT(11688,9580), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7571C7,    ABISELECT(864,692), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7571C4[];
extern void _ZN7S7571C4D1Ev();
extern void _ZN7S7571C4D0Ev();
extern void _ZN7S7571C62v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev)();
extern void ABISELECT(_ZThn80_N7S7571C4D1Ev,_ZThn52_N7S7571C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev)();
extern void ABISELECT(_ZThn80_N7S7571C4D0Ev,_ZThn52_N7S7571C4D0Ev)() __attribute__((weak));
extern void _ZN7S7571C52v5Ev();
extern void _ZN7S7571C32v3Ev();
extern void ABISELECT(_ZTv0_n56_N7S7571C4D1Ev,_ZTv0_n28_N7S7571C4D1Ev)();
extern void ABISELECT(_ZThn864_N7S7571C4D1Ev,_ZThn692_N7S7571C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7571C4D0Ev,_ZTv0_n28_N7S7571C4D0Ev)();
extern void ABISELECT(_ZThn864_N7S7571C4D0Ev,_ZThn692_N7S7571C4D0Ev)() __attribute__((weak));
extern void _ZN7S7571C62v4Ev();
extern void _ZN7S7571C62v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev)();
extern void ABISELECT(_ZThn7568_N7S7571C4D1Ev,_ZThn6184_N7S7571C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev)();
extern void ABISELECT(_ZThn7568_N7S7571C4D0Ev,_ZThn6184_N7S7571C4D0Ev)() __attribute__((weak));
extern void _ZN7S7571C82v9Ev();
extern void _ZN7S7571C92v6Ev();
extern void _ZN7S7571C92v7Ev();
extern void _ZN7S7571C92v8Ev();
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY vtc_S7571C4[] = {
  ABISELECT(11688,9580),
  ABISELECT(7568,6184),
  ABISELECT(7264,5940),
  ABISELECT(864,692),
  ABISELECT(712,568),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7571C4D0Ev,
  0,
  ABISELECT(-80,-52),
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7571C52v5Ev,
  0,
  ABISELECT(-712,-568),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
  ABISELECT(-864,-692),
  ABISELECT(10824,8888),
  ABISELECT(-152,-124),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  ABISELECT(-864,-692),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7571C4D1Ev,_ZTv0_n28_N7S7571C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7571C4D0Ev,_ZTv0_n28_N7S7571C4D0Ev),
  0,
  ABISELECT(-7264,-5940),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-7568,-6184),
  0,
  ABISELECT(-7568,-6184),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7571C82v9Ev,
  ABISELECT(-7864,-6428),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C92v6Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v7Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v8Ev,
  ABISELECT(-8328,-6828),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
  ABISELECT(-10976,-9012),
  ABISELECT(-11688,-9580),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
};
extern VTBL_ENTRY _ZTV7S7571C4[];
extern void _ZN7S7571C7D1Ev();
extern void _ZN7S7571C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C7__7S7571C4[] = {
  ABISELECT(10824,8888),
  ABISELECT(-152,-124),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7571C7D0Ev,
};
extern void _ZN7S7571C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C6__7S7571C7__7S7571C4[] = {
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
};
extern void _ZN7S7571C62v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7571C7D1Ev,_ZTv0_n16_N7S7571C7D1Ev)();
extern void ABISELECT(_ZThn6704_N7S7571C7D1Ev,_ZThn5492_N7S7571C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7571C7D0Ev,_ZTv0_n16_N7S7571C7D0Ev)();
extern void ABISELECT(_ZThn6704_N7S7571C7D0Ev,_ZThn5492_N7S7571C7D0Ev)() __attribute__((weak));
extern void _ZN7S7571C82v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C8__7S7571C7__7S7571C4[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C7D1Ev,_ZTv0_n16_N7S7571C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C7D0Ev,_ZTv0_n16_N7S7571C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7571C82v9Ev,
};
extern void _ZN7S7571C92v6Ev();
extern void _ZN7S7571C92v7Ev();
extern void _ZN7S7571C92v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C97S7571C8__7S7571C7__7S7571C4[] = {
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C92v6Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v7Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v8Ev,
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C37S7571C8__7S7571C7__7S7571C4[] = {
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C3__A1__7S7571C7__7S7571C4[] = {
  0,
  ABISELECT(152,124),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7571C2__7S7571C7__7S7571C4[] = {
  ABISELECT(-10976,-9012),
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7571C2__7S7571C4[] = {
  ABISELECT(-10976,-9012),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C3__7S7571C2__7S7571C4[] = {
  0,
  ABISELECT(10976,9012),
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
static  VTT_ENTRY vtt_S7571C4[] = {
  {&(_ZTV7S7571C4[8]),  8,60},
  {&(_ZTV7S7571C4[15]),  15,60},
  {&(_ZTV7S7571C4[22]),  22,60},
  {&(_ZTV7S7571C4[30]),  30,60},
  {&(_ZTV7S7571C4[35]),  35,60},
  {&(_ZTV7S7571C4[45]),  45,60},
  {&(_ZTV7S7571C4[51]),  51,60},
  {&(_ZTV7S7571C4[56]),  56,60},
  {&(_ZTV7S7571C4[60]),  60,60},
  {&(_tg__ZTV7S7571C7__7S7571C4[6]),  6,8},
  {&(_tg__ZTV7S7571C6__7S7571C7__7S7571C4[3]),  3,4},
  {&(_tg__ZTV7S7571C8__7S7571C7__7S7571C4[9]),  9,13},
  {&(_tg__ZTV7S7571C97S7571C8__7S7571C7__7S7571C4[2]),  2,5},
  {&(_tg__ZTV7S7571C37S7571C8__7S7571C7__7S7571C4[2]),  2,3},
  {&(_tg__ZTV7S7571C3__A1__7S7571C7__7S7571C4[3]),  3,4},
  {&(_tg__ZTV7S7571C2__7S7571C7__7S7571C4[3]),  3,3},
  {&(_tg__ZTV7S7571C2__7S7571C4[3]),  3,3},
  {&(_tg__ZTV7S7571C3__7S7571C2__7S7571C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7571C4[];
extern  VTBL_ENTRY _ZTV7S7571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C4[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C7D0Ev,_ZTv0_n16_N7S7571C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N7S7571C7D0Ev,_ZThn5492_N7S7571C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C7D1Ev,_ZTv0_n16_N7S7571C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N7S7571C7D1Ev,_ZThn5492_N7S7571C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7571C4D0Ev,_ZTv0_n28_N7S7571C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7571C4D0Ev,_ZThn692_N7S7571C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7571C4D1Ev,_ZTv0_n28_N7S7571C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N7S7571C4D1Ev,_ZThn692_N7S7571C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7568_N7S7571C4D0Ev,_ZThn6184_N7S7571C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7571C4D0Ev,_ZThn52_N7S7571C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7568_N7S7571C4D1Ev,_ZThn6184_N7S7571C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7571C4D1Ev,_ZThn52_N7S7571C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7571C4 = {  "S7571C4", // class name
  bases_S7571C4, 10,
  &(vtc_S7571C4[0]), // expected_vtbl_contents
  &(vtt_S7571C4[0]), // expected_vtt_contents
  ABISELECT(11856,9716), // object size
  NSPAIRA(_ZTI7S7571C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7571C4),60, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7571C4),18, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7571C1  : S7571C2 , S7571C4 {
  int s7571c1f0[7];
  __tsi64 s7571c1f1;
  int s7571c1f2[9];
  int s7571c1f3;
  int s7571c1f4;
  __tsi64 s7571c1f5;
  int s7571c1f6;
  __tsi64 s7571c1f7[7];
  virtual void  v1(); // _ZN7S7571C12v1Ev
  virtual void  v2(); // _ZN7S7571C12v2Ev
  ~S7571C1(); // tgen
  S7571C1(); // tgen
};
//SIG(1 S7571C1) C1{ BC2{ VBC3{ v3 Fs:6 Fl Fs:4 FL[13] Fp} Fp FC3 Fi:3} BC4{ VBC5{ BC6{ v4 FL FD Fp Fc FC3 Fp[2] FL[8] Fs Fp FL:64} vd v5 FC2 Fi Fp Fi} VBC3 VBC7{ VBC6 VBC8{ BC6 BC9{ v6 v7 v8 Fi[2] FL[2] FC3[3]} BC3 vd v9 FL[2] Fp[8] FC10{ BC11{ v10 Fs:6 Fl Fs:4 FL[13] Fp} VBC12{ v11 v12 v13 Fi[2] FL[2] FC11[3]} VBC13{ VBC11 Fp FC11 Fi:3} VBC14{ v14 FL FD Fp Fc FC11 Fp[2] FL[8] Fs Fp FL:64} FC14 Fs Fi[2]} Fp Fi FC10 Fi} VBC3 VBC2 FL:44 Fp Fi FC10 FL[2] Fi[3] FC8 Fc:7 FC5} vd Fi FD Fi Fp Fl FU15{ m Fi:8 Fi Fp FL Fp Fp Fi} Fi FL} v1 v2 Fi[7] FL Fi[9] Fi Fi FL Fi FL[7]}


void  S7571C1 ::v1(){vfunc_called(this, "_ZN7S7571C12v1Ev");}
void  S7571C1 ::v2(){vfunc_called(this, "_ZN7S7571C12v2Ev");}
S7571C1 ::~S7571C1(){ note_dtor("S7571C1", this);} // tgen
S7571C1 ::S7571C1(){ note_ctor("S7571C1", this);} // tgen

static void Test_S7571C1()
{
  extern Class_Descriptor cd_S7571C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(763,2501)];
    init_test(&cd_S7571C1, buf);
    S7571C1 *dp, &lv = *(dp=new (buf) S7571C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12192,10000), "sizeof(S7571C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7571C1)");
    /*is_ambiguous_... S7571C1::S7571C2 */ AMB_check_base_class_offset(lv, (S7571C3*)(S7571C2*), ABISELECT(416,336), "S7571C1");
    /*is_ambiguous_... S7571C4::S7571C3 */ AMB_check_base_class_offset(lv, (S7571C3*)(S7571C4*), ABISELECT(416,336), "S7571C1");
    /*is_ambiguous_... S7571C7::S7571C3 */ AMB_check_base_class_offset(lv, (S7571C3*)(S7571C7*), ABISELECT(416,336), "S7571C1");
    /*is_ambiguous_... S7571C1::S7571C2 */ AMB_check_base_class_offset(lv, (S7571C3*)(S7571C2*), ABISELECT(416,336), "S7571C1");
    /*is_ambiguous_... S7571C1::S7571C2 */ AMB_check_base_class_offset(lv, (S7571C2*), 0, "S7571C1");
    check_base_class_offset(lv, (S7571C6*)(S7571C5*), ABISELECT(560,460), "S7571C1");
    check_base_class_offset(lv, (S7571C5*)(S7571C4*), ABISELECT(560,460), "S7571C1");
    /*is_ambiguous_... S7571C7::S7571C6 */ AMB_check_base_class_offset(lv, (S7571C6*)(S7571C7*), ABISELECT(7600,6224), "S7571C1");
    check_base_class_offset(lv, (S7571C6*)(S7571C8*), ABISELECT(7904,6468), "S7571C1");
    check_base_class_offset(lv, (S7571C9*)(S7571C8*), ABISELECT(8200,6712), "S7571C1");
    check_base_class_offset(lv, (S7571C3*)(S7571C8*), ABISELECT(8664,7112), "S7571C1");
    check_base_class_offset(lv, (S7571C8*)(S7571C7*), ABISELECT(7904,6468), "S7571C1");
    check_base_class_offset(lv, (S7571C2*)(S7571C7*), ABISELECT(12024,9864), "S7571C1");
    check_base_class_offset(lv, (S7571C7*)(S7571C4*), ABISELECT(1200,976), "S7571C1");
    check_base_class_offset(lv, (S7571C4*), ABISELECT(176,136), "S7571C1");
    check_field_offset(lv, s7571c1f0, ABISELECT(256,188), "S7571C1.s7571c1f0");
    check_field_offset(lv, s7571c1f1, ABISELECT(288,216), "S7571C1.s7571c1f1");
    check_field_offset(lv, s7571c1f2, ABISELECT(296,224), "S7571C1.s7571c1f2");
    check_field_offset(lv, s7571c1f3, ABISELECT(332,260), "S7571C1.s7571c1f3");
    check_field_offset(lv, s7571c1f4, ABISELECT(336,264), "S7571C1.s7571c1f4");
    check_field_offset(lv, s7571c1f5, ABISELECT(344,268), "S7571C1.s7571c1f5");
    check_field_offset(lv, s7571c1f6, ABISELECT(352,276), "S7571C1.s7571c1f6");
    check_field_offset(lv, s7571c1f7, ABISELECT(360,280), "S7571C1.s7571c1f7");
    test_class_info(&lv, &cd_S7571C1);
    dp->~S7571C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7571C1(Test_S7571C1, "S7571C1", ABISELECT(12192,10000));

#else // __cplusplus

extern void _ZN7S7571C1C1Ev();
extern void _ZN7S7571C1D1Ev();
Name_Map name_map_S7571C1[] = {
  NSPAIR(_ZN7S7571C1C1Ev),
  NSPAIR(_ZN7S7571C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7571C3;
extern VTBL_ENTRY _ZTI7S7571C3[];
extern  VTBL_ENTRY _ZTV7S7571C3[];
extern Class_Descriptor cd_S7571C2;
extern VTBL_ENTRY _ZTI7S7571C2[];
extern  VTBL_ENTRY _ZTV7S7571C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C2[];
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
extern Class_Descriptor cd_S7571C5;
extern VTBL_ENTRY _ZTI7S7571C5[];
extern  VTBL_ENTRY _ZTV7S7571C5[];
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
extern Class_Descriptor cd_S7571C6;
extern VTBL_ENTRY _ZTI7S7571C6[];
extern  VTBL_ENTRY _ZTV7S7571C6[];
extern Class_Descriptor cd_S7571C9;
extern VTBL_ENTRY _ZTI7S7571C9[];
extern  VTBL_ENTRY _ZTV7S7571C9[];
extern Class_Descriptor cd_S7571C3;
extern VTBL_ENTRY _ZTI7S7571C3[];
extern  VTBL_ENTRY _ZTV7S7571C3[];
extern Class_Descriptor cd_S7571C8;
extern VTBL_ENTRY _ZTI7S7571C8[];
extern  VTBL_ENTRY _ZTV7S7571C8[];
extern Class_Descriptor cd_S7571C2;
extern VTBL_ENTRY _ZTI7S7571C2[];
extern  VTBL_ENTRY _ZTV7S7571C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C2[];
extern Class_Descriptor cd_S7571C7;
extern VTBL_ENTRY _ZTI7S7571C7[];
extern  VTBL_ENTRY _ZTV7S7571C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C7[];
extern Class_Descriptor cd_S7571C4;
extern VTBL_ENTRY _ZTI7S7571C4[];
extern  VTBL_ENTRY _ZTV7S7571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C4[];
static Base_Class bases_S7571C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7571C3,    ABISELECT(416,336), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7571C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7571C6,    ABISELECT(560,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7571C5,    ABISELECT(560,460), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7571C6,    ABISELECT(7600,6224), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7571C6,    ABISELECT(7904,6468), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7571C9,    ABISELECT(8200,6712), //bcp->offset
    61, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7571C3,    ABISELECT(8664,7112), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7571C8,    ABISELECT(7904,6468), //bcp->offset
    48, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7571C2,    ABISELECT(12024,9864), //bcp->offset
    69, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7571C7,    ABISELECT(1200,976), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7571C4,    ABISELECT(176,136), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7571C1[];
extern void _ZN7S7571C12v1Ev();
extern void _ZN7S7571C12v2Ev();
extern void _ZN7S7571C1D1Ev();
extern void _ZN7S7571C1D0Ev();
extern void ABISELECT(_ZThn176_N7S7571C1D1Ev,_ZThn136_N7S7571C1D1Ev)();
extern void ABISELECT(_ZThn176_N7S7571C1D0Ev,_ZThn136_N7S7571C1D0Ev)();
extern void _ZN7S7571C32v3Ev();
extern void _ZN7S7571C62v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7571C1D1Ev,_ZTv0_n16_N7S7571C1D1Ev)();
extern void ABISELECT(_ZThn560_N7S7571C1D1Ev,_ZThn460_N7S7571C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7571C1D0Ev,_ZTv0_n16_N7S7571C1D0Ev)();
extern void ABISELECT(_ZThn560_N7S7571C1D0Ev,_ZThn460_N7S7571C1D0Ev)() __attribute__((weak));
extern void _ZN7S7571C52v5Ev();
extern void ABISELECT(_ZTv0_n56_N7S7571C1D1Ev,_ZTv0_n28_N7S7571C1D1Ev)();
extern void ABISELECT(_ZThn1200_N7S7571C1D1Ev,_ZThn976_N7S7571C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7571C1D0Ev,_ZTv0_n28_N7S7571C1D0Ev)();
extern void ABISELECT(_ZThn1200_N7S7571C1D0Ev,_ZThn976_N7S7571C1D0Ev)() __attribute__((weak));
extern void _ZN7S7571C62v4Ev();
extern void _ZN7S7571C62v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7571C1D1Ev,_ZTv0_n16_N7S7571C1D1Ev)();
extern void ABISELECT(_ZThn7904_N7S7571C1D1Ev,_ZThn6468_N7S7571C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7571C1D0Ev,_ZTv0_n16_N7S7571C1D0Ev)();
extern void ABISELECT(_ZThn7904_N7S7571C1D0Ev,_ZThn6468_N7S7571C1D0Ev)() __attribute__((weak));
extern void _ZN7S7571C82v9Ev();
extern void _ZN7S7571C92v6Ev();
extern void _ZN7S7571C92v7Ev();
extern void _ZN7S7571C92v8Ev();
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY vtc_S7571C1[] = {
  ABISELECT(12024,9864),
  ABISELECT(7904,6468),
  ABISELECT(7600,6224),
  ABISELECT(1200,976),
  ABISELECT(560,460),
  ABISELECT(416,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
  (VTBL_ENTRY)&_ZN7S7571C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7571C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7571C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7571C1D0Ev,
  ABISELECT(11848,9728),
  ABISELECT(7728,6332),
  ABISELECT(7424,6088),
  ABISELECT(1024,840),
  ABISELECT(240,200),
  ABISELECT(384,324),
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S7571C1D1Ev,_ZThn136_N7S7571C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S7571C1D0Ev,_ZThn136_N7S7571C1D0Ev),
  0,
  ABISELECT(-416,-336),
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
  0,
  ABISELECT(-560,-460),
  0,
  ABISELECT(-560,-460),
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C1D1Ev,_ZTv0_n16_N7S7571C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C1D0Ev,_ZTv0_n16_N7S7571C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7571C52v5Ev,
  ABISELECT(-1200,-976),
  ABISELECT(10824,8888),
  ABISELECT(-784,-640),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  ABISELECT(-1200,-976),
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7571C1D1Ev,_ZTv0_n28_N7S7571C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7571C1D0Ev,_ZTv0_n28_N7S7571C1D0Ev),
  0,
  ABISELECT(-7600,-6224),
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-7904,-6468),
  0,
  ABISELECT(-7904,-6468),
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C1D1Ev,_ZTv0_n16_N7S7571C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C1D0Ev,_ZTv0_n16_N7S7571C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7571C82v9Ev,
  ABISELECT(-8200,-6712),
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
  (VTBL_ENTRY)&_ZN7S7571C92v6Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v7Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v8Ev,
  ABISELECT(-8664,-7112),
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
  ABISELECT(-11608,-9528),
  ABISELECT(-12024,-9864),
  (VTBL_ENTRY)&(_ZTI7S7571C1[0]),
};
extern VTBL_ENTRY _ZTV7S7571C1[];
static  VTBL_ENTRY _tg__ZTV7S7571C2__A__7S7571C1[] = {
  ABISELECT(416,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C3__7S7571C2__A__7S7571C1[] = {
  0,
  ABISELECT(-416,-336),
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
extern void _ZN7S7571C4D1Ev();
extern void _ZN7S7571C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C4__7S7571C1[] = {
  ABISELECT(11848,9728),
  ABISELECT(7728,6332),
  ABISELECT(7424,6088),
  ABISELECT(1024,840),
  ABISELECT(240,200),
  ABISELECT(384,324),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7571C4D0Ev,
};
extern void _ZN7S7571C62v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev)();
extern void ABISELECT(_ZThn384_N7S7571C4D1Ev,_ZThn324_N7S7571C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev)();
extern void ABISELECT(_ZThn384_N7S7571C4D0Ev,_ZThn324_N7S7571C4D0Ev)() __attribute__((weak));
extern void _ZN7S7571C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C5__7S7571C4__7S7571C1[] = {
  0,
  ABISELECT(-384,-324),
  0,
  ABISELECT(-384,-324),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7571C52v5Ev,
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C3__7S7571C4__7S7571C1[] = {
  0,
  ABISELECT(-240,-200),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7571C4D1Ev,_ZTv0_n28_N7S7571C4D1Ev)();
extern void ABISELECT(_ZThn1024_N7S7571C4D1Ev,_ZThn840_N7S7571C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7571C4D0Ev,_ZTv0_n28_N7S7571C4D0Ev)();
extern void ABISELECT(_ZThn1024_N7S7571C4D0Ev,_ZThn840_N7S7571C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7571C7__7S7571C4__7S7571C1[] = {
  ABISELECT(-1024,-840),
  ABISELECT(10824,8888),
  ABISELECT(-784,-640),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  ABISELECT(-1024,-840),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7571C4D1Ev,_ZTv0_n28_N7S7571C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7571C4D0Ev,_ZTv0_n28_N7S7571C4D0Ev),
};
extern void _ZN7S7571C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C6__A1__7S7571C4__7S7571C1[] = {
  0,
  ABISELECT(-7424,-6088),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
};
extern void _ZN7S7571C62v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev)();
extern void ABISELECT(_ZThn7728_N7S7571C4D1Ev,_ZThn6332_N7S7571C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev)();
extern void ABISELECT(_ZThn7728_N7S7571C4D0Ev,_ZThn6332_N7S7571C4D0Ev)() __attribute__((weak));
extern void _ZN7S7571C82v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C8__7S7571C4__7S7571C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-7728,-6332),
  0,
  ABISELECT(-7728,-6332),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7571C82v9Ev,
};
extern void _ZN7S7571C92v6Ev();
extern void _ZN7S7571C92v7Ev();
extern void _ZN7S7571C92v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C97S7571C8__7S7571C4__7S7571C1[] = {
  ABISELECT(-8024,-6576),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C92v6Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v7Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v8Ev,
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C37S7571C8__A1__7S7571C4__7S7571C1[] = {
  ABISELECT(-8488,-6976),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7571C2__7S7571C4__7S7571C1[] = {
  ABISELECT(-11608,-9528),
  ABISELECT(-11848,-9728),
  (VTBL_ENTRY)&(_ZTI7S7571C4[0]),
};
extern void _ZN7S7571C7D1Ev();
extern void _ZN7S7571C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C7__7S7571C1[] = {
  ABISELECT(10824,8888),
  ABISELECT(-784,-640),
  ABISELECT(6704,5492),
  ABISELECT(6400,5248),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7571C7D0Ev,
};
extern void _ZN7S7571C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C6__7S7571C7__7S7571C1[] = {
  0,
  ABISELECT(-6400,-5248),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
};
extern void _ZN7S7571C62v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7571C7D1Ev,_ZTv0_n16_N7S7571C7D1Ev)();
extern void ABISELECT(_ZThn6704_N7S7571C7D1Ev,_ZThn5492_N7S7571C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7571C7D0Ev,_ZTv0_n16_N7S7571C7D0Ev)();
extern void ABISELECT(_ZThn6704_N7S7571C7D0Ev,_ZThn5492_N7S7571C7D0Ev)() __attribute__((weak));
extern void _ZN7S7571C82v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C8__7S7571C7__7S7571C1[] = {
  ABISELECT(760,644),
  ABISELECT(296,244),
  ABISELECT(296,244),
  ABISELECT(296,244),
  0,
  ABISELECT(-6704,-5492),
  0,
  ABISELECT(-6704,-5492),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C62v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C7D1Ev,_ZTv0_n16_N7S7571C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7571C7D0Ev,_ZTv0_n16_N7S7571C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7571C82v9Ev,
};
extern void _ZN7S7571C92v6Ev();
extern void _ZN7S7571C92v7Ev();
extern void _ZN7S7571C92v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C97S7571C8__7S7571C7__7S7571C1[] = {
  ABISELECT(-7000,-5736),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C92v6Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v7Ev,
  (VTBL_ENTRY)&_ZN7S7571C92v8Ev,
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C37S7571C8__7S7571C7__7S7571C1[] = {
  ABISELECT(-7464,-6136),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C3__A1__7S7571C7__7S7571C1[] = {
  0,
  ABISELECT(784,640),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7571C2__7S7571C7__7S7571C1[] = {
  ABISELECT(-11608,-9528),
  ABISELECT(-10824,-8888),
  (VTBL_ENTRY)&(_ZTI7S7571C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7571C2__A1__7S7571C1[] = {
  ABISELECT(-11608,-9528),
  0,
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
};
extern void _ZN7S7571C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7571C3__7S7571C2__A1__7S7571C1[] = {
  0,
  ABISELECT(11608,9528),
  (VTBL_ENTRY)&(_ZTI7S7571C2[0]),
  (VTBL_ENTRY)&_ZN7S7571C32v3Ev,
};
static  VTT_ENTRY vtt_S7571C1[] = {
  {&(_ZTV7S7571C1[8]),  8,72},
  {&(_tg__ZTV7S7571C2__A__7S7571C1[3]),  3,3},
  {&(_tg__ZTV7S7571C3__7S7571C2__A__7S7571C1[3]),  3,4},
  {&(_tg__ZTV7S7571C4__7S7571C1[8]),  8,10},
  {&(_tg__ZTV7S7571C5__7S7571C4__7S7571C1[5]),  5,9},
  {&(_tg__ZTV7S7571C3__7S7571C4__7S7571C1[3]),  3,4},
  {&(_tg__ZTV7S7571C7__7S7571C4__7S7571C1[7]),  7,9},
  {&(_tg__ZTV7S7571C6__A1__7S7571C4__7S7571C1[3]),  3,4},
  {&(_tg__ZTV7S7571C8__7S7571C4__7S7571C1[9]),  9,13},
  {&(_tg__ZTV7S7571C97S7571C8__7S7571C4__7S7571C1[2]),  2,5},
  {&(_tg__ZTV7S7571C37S7571C8__A1__7S7571C4__7S7571C1[2]),  2,3},
  {&(_tg__ZTV7S7571C2__7S7571C4__7S7571C1[3]),  3,3},
  {&(_ZTV7S7571C1[25]),  25,72},
  {&(_ZTV7S7571C1[20]),  20,72},
  {&(_ZTV7S7571C1[31]),  31,72},
  {&(_ZTV7S7571C1[42]),  42,72},
  {&(_ZTV7S7571C1[47]),  47,72},
  {&(_ZTV7S7571C1[57]),  57,72},
  {&(_ZTV7S7571C1[63]),  63,72},
  {&(_ZTV7S7571C1[68]),  68,72},
  {&(_ZTV7S7571C1[72]),  72,72},
  {&(_tg__ZTV7S7571C7__7S7571C1[6]),  6,8},
  {&(_tg__ZTV7S7571C6__7S7571C7__7S7571C1[3]),  3,4},
  {&(_tg__ZTV7S7571C8__7S7571C7__7S7571C1[9]),  9,13},
  {&(_tg__ZTV7S7571C97S7571C8__7S7571C7__7S7571C1[2]),  2,5},
  {&(_tg__ZTV7S7571C37S7571C8__7S7571C7__7S7571C1[2]),  2,3},
  {&(_tg__ZTV7S7571C3__A1__7S7571C7__7S7571C1[3]),  3,4},
  {&(_tg__ZTV7S7571C2__7S7571C7__7S7571C1[3]),  3,3},
  {&(_tg__ZTV7S7571C2__A1__7S7571C1[3]),  3,3},
  {&(_tg__ZTV7S7571C3__7S7571C2__A1__7S7571C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7571C1[];
extern  VTBL_ENTRY _ZTV7S7571C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7571C1[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C7D0Ev,_ZTv0_n16_N7S7571C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N7S7571C7D0Ev,_ZThn5492_N7S7571C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C7D1Ev,_ZTv0_n16_N7S7571C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6704_N7S7571C7D1Ev,_ZThn5492_N7S7571C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7571C4D0Ev,_ZTv0_n28_N7S7571C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7571C4D0Ev,_ZThn840_N7S7571C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7571C4D1Ev,_ZTv0_n28_N7S7571C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1024_N7S7571C4D1Ev,_ZThn840_N7S7571C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C4D0Ev,_ZTv0_n16_N7S7571C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7728_N7S7571C4D0Ev,_ZThn6332_N7S7571C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S7571C4D0Ev,_ZThn324_N7S7571C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C4D1Ev,_ZTv0_n16_N7S7571C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7728_N7S7571C4D1Ev,_ZThn6332_N7S7571C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S7571C4D1Ev,_ZThn324_N7S7571C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7571C1D0Ev,_ZTv0_n28_N7S7571C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S7571C1D0Ev,_ZThn976_N7S7571C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7571C1D1Ev,_ZTv0_n28_N7S7571C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S7571C1D1Ev,_ZThn976_N7S7571C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C1D0Ev,_ZTv0_n16_N7S7571C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N7S7571C1D0Ev,_ZThn6468_N7S7571C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S7571C1D0Ev,_ZThn460_N7S7571C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7571C1D1Ev,_ZTv0_n16_N7S7571C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N7S7571C1D1Ev,_ZThn6468_N7S7571C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S7571C1D1Ev,_ZThn460_N7S7571C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7571C1 = {  "S7571C1", // class name
  bases_S7571C1, 12,
  &(vtc_S7571C1[0]), // expected_vtbl_contents
  &(vtt_S7571C1[0]), // expected_vtt_contents
  ABISELECT(12192,10000), // object size
  NSPAIRA(_ZTI7S7571C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7571C1),72, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7571C1),30, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19017C5  : S2014C28 {
  ::S2014C28 s19017c5f0;
  virtual  ~S19017C5(); // _ZN8S19017C5D1Ev
  S19017C5(); // tgen
};
//SIG(-1 S19017C5) C1{ BC2{ m} vd FC2}


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

static void Test_S19017C5()
{
  extern Class_Descriptor cd_S19017C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19017C5, buf);
    S19017C5 *dp, &lv = *(dp=new (buf) S19017C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19017C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C5)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19017C5");
    check_field_offset(lv, s19017c5f0, ABISELECT(8,4), "S19017C5.s19017c5f0");
    test_class_info(&lv, &cd_S19017C5);
    dp->~S19017C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C5(Test_S19017C5, "S19017C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19017C5C1Ev();
extern void _ZN8S19017C5D1Ev();
Name_Map name_map_S19017C5[] = {
  NSPAIR(_ZN8S19017C5C1Ev),
  NSPAIR(_ZN8S19017C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
static Base_Class bases_S19017C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19017C5[];
extern void _ZN8S19017C5D1Ev();
extern void _ZN8S19017C5D0Ev();
static  VTBL_ENTRY vtc_S19017C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C5[0]),
  (VTBL_ENTRY)&_ZN8S19017C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
Class_Descriptor cd_S19017C5 = {  "S19017C5", // class name
  bases_S19017C5, 1,
  &(vtc_S19017C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19017C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19017C5),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  S19017C3  : S2014C38 , S19017C5 , S2014C28 , S3222C8_nt {
  short s19017c3f0:16;
  __tsi64 s19017c3f1;
  ~S19017C3(); // tgen
  S19017C3(); // tgen
};
//SIG(-1 S19017C3) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 FL}


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

static void Test_S19017C3()
{
  extern Class_Descriptor cd_S19017C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19017C3, buf);
    S19017C3 *dp, &lv = *(dp=new (buf) S19017C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19017C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C3)");
    check_base_class_offset(lv, (S2014C38*), 0, "S19017C3");
    check_base_class_offset(lv, (S2014C28*)(S19017C5*), 0, "S19017C3");
    check_base_class_offset(lv, (S19017C5*), 0, "S19017C3");
    /*is_ambiguous_... S19017C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), ABISELECT(9,5), "S19017C3");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S19017C3");
    set_bf_and_test(lv, s19017c3f0, ABISELECT(16,12), 0, 16, 1, "S19017C3");
    set_bf_and_test(lv, s19017c3f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S19017C3");
    check_field_offset(lv, s19017c3f1, ABISELECT(24,16), "S19017C3.s19017c3f1");
    test_class_info(&lv, &cd_S19017C3);
    dp->~S19017C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C3(Test_S19017C3, "S19017C3", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S19017C3C1Ev();
extern void _ZN8S19017C3D1Ev();
Name_Map name_map_S19017C3[] = {
  NSPAIR(_ZN8S19017C3C1Ev),
  NSPAIR(_ZN8S19017C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19017C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19017C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19017C3[];
extern void _ZN8S19017C3D1Ev();
extern void _ZN8S19017C3D0Ev();
static  VTBL_ENTRY vtc_S19017C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C3[0]),
  (VTBL_ENTRY)&_ZN8S19017C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S19017C3[];
extern  VTBL_ENTRY _ZTV8S19017C3[];
Class_Descriptor cd_S19017C3 = {  "S19017C3", // class name
  bases_S19017C3, 5,
  &(vtc_S19017C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S19017C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19017C3),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  S19017C2  : S19017C3 , S19017C5 {
  int s19017c2f0;
  ~S19017C2(); // tgen
  S19017C2(); // tgen
};
//SIG(-1 S19017C2) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 FL} BC4 Fi}


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

static void Test_S19017C2()
{
  extern Class_Descriptor cd_S19017C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S19017C2, buf);
    S19017C2 *dp, &lv = *(dp=new (buf) S19017C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S19017C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C2)");
    check_base_class_offset(lv, (S2014C38*)(S19017C3*), 0, "S19017C2");
    check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C3*), 0, "S19017C2");
    check_base_class_offset(lv, (S19017C5*)(S19017C3*), 0, "S19017C2");
    /*is_ambiguous_... S19017C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C3*), ABISELECT(9,5), "S19017C2");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C3*), ABISELECT(12,8), "S19017C2");
    check_base_class_offset(lv, (S19017C3*), 0, "S19017C2");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(32,24), "S19017C2");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*), ABISELECT(32,24), "S19017C2");
    check_field_offset(lv, s19017c2f0, ABISELECT(44,32), "S19017C2.s19017c2f0");
    test_class_info(&lv, &cd_S19017C2);
    dp->~S19017C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C2(Test_S19017C2, "S19017C2", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN8S19017C2C1Ev();
extern void _ZN8S19017C2D1Ev();
Name_Map name_map_S19017C2[] = {
  NSPAIR(_ZN8S19017C2C1Ev),
  NSPAIR(_ZN8S19017C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C3;
extern VTBL_ENTRY _ZTI8S19017C3[];
extern  VTBL_ENTRY _ZTV8S19017C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
static Base_Class bases_S19017C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19017C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S19017C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(32,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19017C2[];
extern void _ZN8S19017C2D1Ev();
extern void _ZN8S19017C2D0Ev();
extern void ABISELECT(_ZThn32_N8S19017C2D1Ev,_ZThn24_N8S19017C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19017C2D0Ev,_ZThn24_N8S19017C2D0Ev)();
static  VTBL_ENTRY vtc_S19017C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C2[0]),
  (VTBL_ENTRY)&_ZN8S19017C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C2D0Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19017C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19017C2D1Ev,_ZThn24_N8S19017C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19017C2D0Ev,_ZThn24_N8S19017C2D0Ev),
};
extern VTBL_ENTRY _ZTI8S19017C2[];
extern  VTBL_ENTRY _ZTV8S19017C2[];
Class_Descriptor cd_S19017C2 = {  "S19017C2", // class name
  bases_S19017C2, 8,
  &(vtc_S19017C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI8S19017C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19017C2),8, //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  S19017C9  : virtual S2014C38 , virtual S19017C5 , virtual S3222C8_nt {
  void *s19017c9f0;
  ::S19762C18_nt s19017c9f1;
  virtual  ~S19017C9(); // _ZN8S19017C9D2Ev
  S19017C9(); // tgen
};
//SIG(-1 S19017C9) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S19017C9()
{
  extern Class_Descriptor cd_S19017C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19017C9, buf);
    S19017C9 *dp, &lv = *(dp=new (buf) S19017C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19017C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C9)");
    check_base_class_offset(lv, (S2014C38*), 0, "S19017C9");
    check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(24,12), "S19017C9");
    check_base_class_offset(lv, (S19017C5*), ABISELECT(24,12), "S19017C9");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S19017C9");
    check_field_offset(lv, s19017c9f0, ABISELECT(8,4), "S19017C9.s19017c9f0");
    check_field_offset(lv, s19017c9f1, ABISELECT(16,8), "S19017C9.s19017c9f1");
    test_class_info(&lv, &cd_S19017C9);
    dp->~S19017C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C9(Test_S19017C9, "S19017C9", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19017C9C1Ev();
extern void _ZN8S19017C9D2Ev();
Name_Map name_map_S19017C9[] = {
  NSPAIR(_ZN8S19017C9C1Ev),
  NSPAIR(_ZN8S19017C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19017C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19017C9[];
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19017C9D1Ev,_ZThn12_N8S19017C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19017C9D0Ev,_ZThn12_N8S19017C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19017C9[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19017C9[];
static  VTT_ENTRY vtt_S19017C9[] = {
  {&(_ZTV8S19017C9[5]),  5,12},
  {&(_ZTV8S19017C9[10]),  10,12},
};
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19017C9D0Ev,_ZThn12_N8S19017C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19017C9D1Ev,_ZThn12_N8S19017C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C9 = {  "S19017C9", // class name
  bases_S19017C9, 4,
  &(vtc_S19017C9[0]), // expected_vtbl_contents
  &(vtt_S19017C9[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19017C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19017C9),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19017C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19017C13  : virtual S19017C5 {
  __tsi64 s19017c13f0;
  ~S19017C13(); // tgen
  S19017C13(); // tgen
};
//SIG(-1 S19017C13) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S19017C13()
{
  extern Class_Descriptor cd_S19017C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19017C13, buf);
    S19017C13 *dp, &lv = *(dp=new (buf) S19017C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19017C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C13)");
    check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(16,12), "S19017C13");
    check_base_class_offset(lv, (S19017C5*), ABISELECT(16,12), "S19017C13");
    check_field_offset(lv, s19017c13f0, ABISELECT(8,4), "S19017C13.s19017c13f0");
    test_class_info(&lv, &cd_S19017C13);
    dp->~S19017C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C13(Test_S19017C13, "S19017C13", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19017C13C1Ev();
extern void _ZN9S19017C13D1Ev();
Name_Map name_map_S19017C13[] = {
  NSPAIR(_ZN9S19017C13C1Ev),
  NSPAIR(_ZN9S19017C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
static Base_Class bases_S19017C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19017C13[];
extern void _ZN9S19017C13D1Ev();
extern void _ZN9S19017C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19017C13D1Ev,_ZThn12_N9S19017C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19017C13D0Ev,_ZThn12_N9S19017C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19017C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&_ZN9S19017C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C13D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19017C13[];
static  VTT_ENTRY vtt_S19017C13[] = {
  {&(_ZTV9S19017C13[3]),  3,10},
  {&(_ZTV9S19017C13[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19017C13[];
extern  VTBL_ENTRY _ZTV9S19017C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C13[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19017C13D0Ev,_ZThn12_N9S19017C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19017C13D1Ev,_ZThn12_N9S19017C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C13 = {  "S19017C13", // class name
  bases_S19017C13, 2,
  &(vtc_S19017C13[0]), // expected_vtbl_contents
  &(vtt_S19017C13[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19017C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19017C13),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19017C13),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19017C12  : S19017C13 , virtual S2014C38 , virtual S3222C8_nt , virtual S19017C9 , virtual S19017C2 {
  long s19017c12f0;
  ::S19017C13 s19017c12f1;
  virtual  ~S19017C12(); // _ZN9S19017C12D2Ev
  S19017C12(); // tgen
};
//SIG(-1 S19017C12) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 FL} BC3 Fi} vd Fl FC2}


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

static void Test_S19017C12()
{
  extern Class_Descriptor cd_S19017C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S19017C12, buf);
    S19017C12 *dp, &lv = *(dp=new (buf) S19017C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S19017C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C12)");
    /*is_ambiguous_... S19017C12::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(56,36), "S19017C12");
    check_base_class_offset(lv, (S19017C5*)(S19017C13*), ABISELECT(56,36), "S19017C12");
    check_base_class_offset(lv, (S19017C5*)(S19017C9*), ABISELECT(56,36), "S19017C12");
    check_base_class_offset(lv, (S19017C13*), 0, "S19017C12");
    /*is_ambiguous_... S19017C12::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), 0, "S19017C12");
    check_base_class_offset(lv, (S2014C38*)(S19017C9*), 0, "S19017C12");
    /*is_ambiguous_... S19017C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S19017C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*), ABISELECT(68,44), "S19017C12");
    check_base_class_offset(lv, (S19017C9*), ABISELECT(72,48), "S19017C12");
    check_base_class_offset(lv, (S2014C38*)(S19017C3*)(S19017C2*), ABISELECT(96,60), "S19017C12");
    check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C3*)(S19017C2*), ABISELECT(96,60), "S19017C12");
    check_base_class_offset(lv, (S19017C5*)(S19017C3*)(S19017C2*), ABISELECT(96,60), "S19017C12");
    /*is_ambiguous_... S19017C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C3*)(S19017C2*), ABISELECT(105,65), "S19017C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C3*)(S19017C2*), ABISELECT(108,68), "S19017C12");
    check_base_class_offset(lv, (S19017C3*)(S19017C2*), ABISELECT(96,60), "S19017C12");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C2*), ABISELECT(128,84), "S19017C12");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C2*), ABISELECT(128,84), "S19017C12");
    check_base_class_offset(lv, (S19017C2*), ABISELECT(96,60), "S19017C12");
    check_field_offset(lv, s19017c12f0, ABISELECT(16,12), "S19017C12.s19017c12f0");
    check_field_offset(lv, s19017c12f1, ABISELECT(24,16), "S19017C12.s19017c12f1");
    test_class_info(&lv, &cd_S19017C12);
    dp->~S19017C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C12(Test_S19017C12, "S19017C12", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN9S19017C12C1Ev();
extern void _ZN9S19017C12D2Ev();
Name_Map name_map_S19017C12[] = {
  NSPAIR(_ZN9S19017C12C1Ev),
  NSPAIR(_ZN9S19017C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C13;
extern VTBL_ENTRY _ZTI9S19017C13[];
extern  VTBL_ENTRY _ZTV9S19017C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C3;
extern VTBL_ENTRY _ZTI8S19017C3[];
extern  VTBL_ENTRY _ZTV8S19017C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C2;
extern VTBL_ENTRY _ZTI8S19017C2[];
extern  VTBL_ENTRY _ZTV8S19017C2[];
static Base_Class bases_S19017C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19017C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19017C9,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19017C3,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(128,84), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19017C2,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19017C12[];
extern void _ZN9S19017C12D1Ev();
extern void _ZN9S19017C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19017C12D1Ev,_ZThn36_N9S19017C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19017C12D0Ev,_ZThn36_N9S19017C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S19017C12D1Ev,_ZThn48_N9S19017C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S19017C12D0Ev,_ZThn48_N9S19017C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZThn96_N9S19017C12D1Ev,_ZThn60_N9S19017C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev)();
extern void ABISELECT(_ZThn96_N9S19017C12D0Ev,_ZThn60_N9S19017C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S19017C12D1Ev,_ZTvn24_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19017C12D0Ev,_ZTvn24_n12_N9S19017C12D0Ev)();
static  VTBL_ENTRY vtc_S19017C12[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&_ZN9S19017C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C12D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C12D1Ev,_ZTvn24_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C12D0Ev,_ZTvn24_n12_N9S19017C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19017C12[];
extern void _ZN9S19017C13D1Ev();
extern void _ZN9S19017C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C13__9S19017C12[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&_ZN9S19017C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S19017C13D1Ev,_ZThn36_N9S19017C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S19017C13D0Ev,_ZThn36_N9S19017C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C13__9S19017C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev),
};
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C12[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C9__9S19017C12[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
static  VTT_ENTRY vtt_S19017C12[] = {
  {&(_ZTV9S19017C12[7]),  7,31},
  {&(_tg__ZTV9S19017C13__9S19017C12[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C13__9S19017C12[3]),  3,5},
  {&(_ZTV9S19017C12[12]),  12,31},
  {&(_ZTV9S19017C12[20]),  20,31},
  {&(_ZTV9S19017C12[25]),  25,31},
  {&(_ZTV9S19017C12[29]),  29,31},
  {&(_tg__ZTV8S19017C9__9S19017C12[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C9__9S19017C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19017C12[];
extern  VTBL_ENTRY _ZTV9S19017C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C12[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C13D0Ev,_ZThn36_N9S19017C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C13D1Ev,_ZThn36_N9S19017C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19017C12D0Ev,_ZThn48_N9S19017C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19017C12D1Ev,_ZThn48_N9S19017C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19017C12D0Ev,_ZThn60_N9S19017C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C12D0Ev,_ZThn36_N9S19017C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19017C12D1Ev,_ZThn60_N9S19017C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C12D1Ev,_ZThn36_N9S19017C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C12 = {  "S19017C12", // class name
  bases_S19017C12, 15,
  &(vtc_S19017C12[0]), // expected_vtbl_contents
  &(vtt_S19017C12[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI9S19017C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19017C12),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19017C12),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19017C15  : S2014C28 , S19017C5 , virtual S2014C38 , virtual S19017C9 {
  virtual  ~S19017C15(); // _ZN9S19017C15D2Ev
  S19017C15(); // tgen
};
//SIG(-1 S19017C15) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S19017C15()
{
  extern Class_Descriptor cd_S19017C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S19017C15, buf);
    S19017C15 *dp, &lv = *(dp=new (buf) S19017C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S19017C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C15)");
    /*is_ambiguous_... S19017C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), ABISELECT(9,5), "S19017C15");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*), 0, "S19017C15");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*), 0, "S19017C15");
    check_base_class_offset(lv, (S2014C38*), 0, "S19017C15");
    check_base_class_offset(lv, (S2014C38*)(S19017C9*), 0, "S19017C15");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(40,20), "S19017C15");
    check_base_class_offset(lv, (S19017C5*)(S19017C9*), ABISELECT(40,20), "S19017C15");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*), ABISELECT(52,28), "S19017C15");
    check_base_class_offset(lv, (S19017C9*), ABISELECT(16,8), "S19017C15");
    test_class_info(&lv, &cd_S19017C15);
    dp->~S19017C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C15(Test_S19017C15, "S19017C15", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN9S19017C15C1Ev();
extern void _ZN9S19017C15D2Ev();
Name_Map name_map_S19017C15[] = {
  NSPAIR(_ZN9S19017C15C1Ev),
  NSPAIR(_ZN9S19017C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
static Base_Class bases_S19017C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19017C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19017C9,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19017C15[];
extern void _ZN9S19017C15D1Ev();
extern void _ZN9S19017C15D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S19017C15D1Ev,_ZThn8_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S19017C15D0Ev,_ZThn8_N9S19017C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19017C15D1Ev,_ZThn20_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19017C15D0Ev,_ZThn20_N9S19017C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19017C15[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&_ZN9S19017C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C15D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19017C15[];
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C15[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19017C9D1Ev,_ZThn12_N8S19017C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19017C9D0Ev,_ZThn12_N8S19017C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C9__9S19017C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
static  VTT_ENTRY vtt_S19017C15[] = {
  {&(_ZTV9S19017C15[6]),  6,21},
  {&(_ZTV9S19017C15[14]),  14,21},
  {&(_ZTV9S19017C15[19]),  19,21},
  {&(_tg__ZTV8S19017C9__9S19017C15[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C9__9S19017C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19017C15[];
extern  VTBL_ENTRY _ZTV9S19017C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C15[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19017C9D0Ev,_ZThn12_N8S19017C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19017C9D1Ev,_ZThn12_N8S19017C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19017C15D0Ev,_ZThn20_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19017C15D1Ev,_ZThn20_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19017C15D0Ev,_ZThn8_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19017C15D1Ev,_ZThn8_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C15 = {  "S19017C15", // class name
  bases_S19017C15, 8,
  &(vtc_S19017C15[0]), // expected_vtbl_contents
  &(vtt_S19017C15[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI9S19017C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19017C15),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19017C15),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19017C14  : virtual S19017C9 , S19017C15 , virtual S2014C28 {
  ::S3222C8_nt s19017c14f0[6];
  virtual  ~S19017C14(); // _ZN9S19017C14D2Ev
  S19017C14(); // tgen
};
//SIG(-1 S19017C14) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S19017C14()
{
  extern Class_Descriptor cd_S19017C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S19017C14, buf);
    S19017C14 *dp, &lv = *(dp=new (buf) S19017C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S19017C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C14)");
    check_base_class_offset(lv, (S2014C38*)(S19017C9*), 0, "S19017C14");
    check_base_class_offset(lv, (S2014C38*)(S19017C15*), 0, "S19017C14");
    /*is_ambiguous_... S19017C14::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(64,44), "S19017C14");
    check_base_class_offset(lv, (S19017C5*)(S19017C9*), ABISELECT(64,44), "S19017C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*), ABISELECT(76,52), "S19017C14");
    check_base_class_offset(lv, (S19017C9*), ABISELECT(40,32), "S19017C14");
    check_base_class_offset(lv, (S19017C9*)(S19017C15*), ABISELECT(40,32), "S19017C14");
    /*is_ambiguous_... S19017C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C15*), ABISELECT(9,5), "S19017C14");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C15*), 0, "S19017C14");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C15*), 0, "S19017C14");
    check_base_class_offset(lv, (S19017C15*), 0, "S19017C14");
    /*is_ambiguous_... S19017C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), ABISELECT(80,56), "S19017C14");
    check_field_offset(lv, s19017c14f0, ABISELECT(12,8), "S19017C14.s19017c14f0");
    test_class_info(&lv, &cd_S19017C14);
    dp->~S19017C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C14(Test_S19017C14, "S19017C14", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN9S19017C14C1Ev();
extern void _ZN9S19017C14D2Ev();
Name_Map name_map_S19017C14[] = {
  NSPAIR(_ZN9S19017C14C1Ev),
  NSPAIR(_ZN9S19017C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C15;
extern VTBL_ENTRY _ZTI9S19017C15[];
extern  VTBL_ENTRY _ZTV9S19017C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
static Base_Class bases_S19017C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19017C9,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19017C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19017C15,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19017C14[];
extern void _ZN9S19017C14D1Ev();
extern void _ZN9S19017C14D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev)();
extern void ABISELECT(_ZThn40_N9S19017C14D1Ev,_ZThn32_N9S19017C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev)();
extern void ABISELECT(_ZThn40_N9S19017C14D0Ev,_ZThn32_N9S19017C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev)();
extern void ABISELECT(_ZThn64_N9S19017C14D1Ev,_ZThn44_N9S19017C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev)();
extern void ABISELECT(_ZThn64_N9S19017C14D0Ev,_ZThn44_N9S19017C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19017C14[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&_ZN9S19017C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C14D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19017C14[];
extern void _ZN9S19017C15D1Ev();
extern void _ZN9S19017C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C15__9S19017C14[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&_ZN9S19017C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19017C15D1Ev,_ZThn32_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19017C15D0Ev,_ZThn32_N9S19017C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C15__9S19017C14[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S19017C15D1Ev,_ZThn44_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S19017C15D0Ev,_ZThn44_N9S19017C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__A1__9S19017C15__9S19017C14[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev),
};
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C14[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19017C9D1Ev,_ZThn12_N8S19017C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19017C9D0Ev,_ZThn12_N8S19017C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C9__9S19017C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
static  VTT_ENTRY vtt_S19017C14[] = {
  {&(_ZTV9S19017C14[7]),  7,22},
  {&(_tg__ZTV9S19017C15__9S19017C14[6]),  6,8},
  {&(_tg__ZTV8S19017C9__9S19017C15__9S19017C14[6]),  6,8},
  {&(_tg__ZTV8S19017C5__A1__9S19017C15__9S19017C14[3]),  3,5},
  {&(_ZTV9S19017C14[15]),  15,22},
  {&(_ZTV9S19017C14[20]),  20,22},
  {&(_tg__ZTV8S19017C9__9S19017C14[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C9__9S19017C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19017C14[];
extern  VTBL_ENTRY _ZTV9S19017C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C14[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19017C9D0Ev,_ZThn12_N8S19017C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19017C9D1Ev,_ZThn12_N8S19017C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19017C15D0Ev,_ZThn44_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19017C15D1Ev,_ZThn44_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19017C15D0Ev,_ZThn32_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19017C15D1Ev,_ZThn32_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19017C14D0Ev,_ZThn44_N9S19017C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19017C14D1Ev,_ZThn44_N9S19017C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19017C14D0Ev,_ZThn32_N9S19017C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19017C14D1Ev,_ZThn32_N9S19017C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C14 = {  "S19017C14", // class name
  bases_S19017C14, 10,
  &(vtc_S19017C14[0]), // expected_vtbl_contents
  &(vtt_S19017C14[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI9S19017C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19017C14),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19017C14),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19017C16  : virtual S19017C13 , virtual S3222C8_nt {
  unsigned char s19017c16f0:1;
  ~S19017C16(); // tgen
  S19017C16(); // tgen
};
//SIG(-1 S19017C16) C1{ VBC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m Fi} Fc:1}


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

static void Test_S19017C16()
{
  extern Class_Descriptor cd_S19017C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S19017C16, buf);
    S19017C16 *dp, &lv = *(dp=new (buf) S19017C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S19017C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C16)");
    check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(32,20), "S19017C16");
    check_base_class_offset(lv, (S19017C5*)(S19017C13*), ABISELECT(32,20), "S19017C16");
    check_base_class_offset(lv, (S19017C13*), ABISELECT(16,8), "S19017C16");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(44,28), "S19017C16");
    set_bf_and_test(lv, s19017c16f0, ABISELECT(8,4), 0, 1, 1, "S19017C16");
    test_class_info(&lv, &cd_S19017C16);
    dp->~S19017C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C16(Test_S19017C16, "S19017C16", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN9S19017C16C1Ev();
extern void _ZN9S19017C16D1Ev();
Name_Map name_map_S19017C16[] = {
  NSPAIR(_ZN9S19017C16C1Ev),
  NSPAIR(_ZN9S19017C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C13;
extern VTBL_ENTRY _ZTI9S19017C13[];
extern  VTBL_ENTRY _ZTV9S19017C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C13[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19017C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19017C13,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(44,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19017C16[];
extern void _ZN9S19017C16D1Ev();
extern void _ZN9S19017C16D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19017C16D1Ev,_ZThn8_N9S19017C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19017C16D0Ev,_ZThn8_N9S19017C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev)();
extern void ABISELECT(_ZThn32_N9S19017C16D1Ev,_ZThn20_N9S19017C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev)();
extern void ABISELECT(_ZThn32_N9S19017C16D0Ev,_ZThn20_N9S19017C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19017C16[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&_ZN9S19017C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C16D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19017C16[];
extern void _ZN9S19017C13D1Ev();
extern void _ZN9S19017C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C13__9S19017C16[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&_ZN9S19017C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19017C13D1Ev,_ZThn12_N9S19017C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19017C13D0Ev,_ZThn12_N9S19017C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C13__9S19017C16[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev),
};
static  VTT_ENTRY vtt_S19017C16[] = {
  {&(_ZTV9S19017C16[5]),  5,18},
  {&(_ZTV9S19017C16[11]),  11,18},
  {&(_ZTV9S19017C16[16]),  16,18},
  {&(_tg__ZTV9S19017C13__9S19017C16[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C13__9S19017C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19017C16[];
extern  VTBL_ENTRY _ZTV9S19017C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C16[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19017C13D0Ev,_ZThn12_N9S19017C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19017C13D1Ev,_ZThn12_N9S19017C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19017C16D0Ev,_ZThn20_N9S19017C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19017C16D1Ev,_ZThn20_N9S19017C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19017C16D0Ev,_ZThn8_N9S19017C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19017C16D1Ev,_ZThn8_N9S19017C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C16 = {  "S19017C16", // class name
  bases_S19017C16, 4,
  &(vtc_S19017C16[0]), // expected_vtbl_contents
  &(vtt_S19017C16[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI9S19017C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19017C16),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19017C16),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19017C11  : virtual S19017C12 , S19017C14 , S19017C16 , S19017C9 {
  ~S19017C11(); // tgen
  S19017C11(); // tgen
};
//SIG(-1 S19017C11) C1{ VBC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 FL} BC4 Fi} vd Fl FC3} BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} BC14{ VBC3 VBC7 Fc:1} BC8}


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

static void Test_S19017C11()
{
  extern Class_Descriptor cd_S19017C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S19017C11, buf);
    S19017C11 *dp, &lv = *(dp=new (buf) S19017C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S19017C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C11)");
    /*is_ambiguous_... S19017C11::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(136,88), "S19017C11");
    check_base_class_offset(lv, (S19017C5*)(S19017C13*)(S19017C12*), ABISELECT(136,88), "S19017C11");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C9*), ABISELECT(136,88), "S19017C11");
    /*is_ambiguous_... S19017C11::S19017C13 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C13*), ABISELECT(136,88), "S19017C11");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C9*), ABISELECT(136,88), "S19017C11");
    check_base_class_offset(lv, (S19017C13*)(S19017C12*), ABISELECT(80,52), "S19017C11");
    /*is_ambiguous_... S19017C12::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C12*), 0, "S19017C11");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C9*), 0, "S19017C11");
    check_base_class_offset(lv, (S2014C38*)(S19017C15*)(S19017C14*), 0, "S19017C11");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C9*), 0, "S19017C11");
    /*is_ambiguous_... S19017C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C12*), ABISELECT(148,96), "S19017C11");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*), ABISELECT(148,96), "S19017C11");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C16*), ABISELECT(148,96), "S19017C11");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*), ABISELECT(148,96), "S19017C11");
    check_base_class_offset(lv, (S19017C9*)(S19017C12*), ABISELECT(152,100), "S19017C11");
    check_base_class_offset(lv, (S19017C9*)(S19017C14*), ABISELECT(152,100), "S19017C11");
    check_base_class_offset(lv, (S19017C9*)(S19017C15*)(S19017C14*), ABISELECT(152,100), "S19017C11");
    check_base_class_offset(lv, (S2014C38*)(S19017C3*)(S19017C2*), ABISELECT(176,112), "S19017C11");
    check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C3*)(S19017C2*), ABISELECT(176,112), "S19017C11");
    check_base_class_offset(lv, (S19017C5*)(S19017C3*)(S19017C2*), ABISELECT(176,112), "S19017C11");
    /*is_ambiguous_... S19017C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C3*)(S19017C2*), ABISELECT(185,117), "S19017C11");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C3*)(S19017C2*), ABISELECT(188,120), "S19017C11");
    check_base_class_offset(lv, (S19017C3*)(S19017C2*), ABISELECT(176,112), "S19017C11");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C2*), ABISELECT(208,136), "S19017C11");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C2*), ABISELECT(208,136), "S19017C11");
    check_base_class_offset(lv, (S19017C2*)(S19017C12*), ABISELECT(176,112), "S19017C11");
    check_base_class_offset(lv, (S19017C12*), ABISELECT(80,52), "S19017C11");
    /*is_ambiguous_... S19017C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C15*)(S19017C14*), ABISELECT(9,5), "S19017C11");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C15*)(S19017C14*), 0, "S19017C11");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C15*)(S19017C14*), 0, "S19017C11");
    check_base_class_offset(lv, (S19017C15*)(S19017C14*), 0, "S19017C11");
    /*is_ambiguous_... S19017C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C14*), ABISELECT(224,148), "S19017C11");
    check_base_class_offset(lv, (S19017C14*), 0, "S19017C11");
    check_base_class_offset(lv, (S19017C13*)(S19017C16*), ABISELECT(224,148), "S19017C11");
    check_base_class_offset(lv, (S19017C16*), ABISELECT(40,32), "S19017C11");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C9*), ABISELECT(56,40), "S19017C11");
    test_class_info(&lv, &cd_S19017C11);
    dp->~S19017C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C11(Test_S19017C11, "S19017C11", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN9S19017C11C1Ev();
extern void _ZN9S19017C11D1Ev();
Name_Map name_map_S19017C11[] = {
  NSPAIR(_ZN9S19017C11C1Ev),
  NSPAIR(_ZN9S19017C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C13;
extern VTBL_ENTRY _ZTI9S19017C13[];
extern  VTBL_ENTRY _ZTV9S19017C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C3;
extern VTBL_ENTRY _ZTI8S19017C3[];
extern  VTBL_ENTRY _ZTV8S19017C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C2;
extern VTBL_ENTRY _ZTI8S19017C2[];
extern  VTBL_ENTRY _ZTV8S19017C2[];
extern Class_Descriptor cd_S19017C12;
extern VTBL_ENTRY _ZTI9S19017C12[];
extern  VTBL_ENTRY _ZTV9S19017C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C15;
extern VTBL_ENTRY _ZTI9S19017C15[];
extern  VTBL_ENTRY _ZTV9S19017C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C14;
extern VTBL_ENTRY _ZTI9S19017C14[];
extern  VTBL_ENTRY _ZTV9S19017C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C14[];
extern Class_Descriptor cd_S19017C13;
extern VTBL_ENTRY _ZTI9S19017C13[];
extern  VTBL_ENTRY _ZTV9S19017C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C13[];
extern Class_Descriptor cd_S19017C16;
extern VTBL_ENTRY _ZTI9S19017C16[];
extern  VTBL_ENTRY _ZTV9S19017C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C16[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
static Base_Class bases_S19017C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(136,88), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19017C13,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(148,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19017C9,    ABISELECT(152,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(185,117), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(188,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
    11, //immediately_derived
  0, 0},
  {&cd_S19017C3,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(208,136), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19017C2,    ABISELECT(176,112), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19017C12,    ABISELECT(80,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19017C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19017C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(224,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19017C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19017C13,    ABISELECT(224,148), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19017C16,    ABISELECT(40,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19017C9,    ABISELECT(56,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19017C11[];
extern void _ZN9S19017C11D1Ev();
extern void _ZN9S19017C11D0Ev();
extern void ABISELECT(_ZThn40_N9S19017C11D1Ev,_ZThn32_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S19017C11D0Ev,_ZThn32_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn56_N9S19017C11D1Ev,_ZThn40_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S19017C11D0Ev,_ZThn40_N9S19017C11D0Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19017C11D1Ev,_ZTv0_n32_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn80_N9S19017C11D1Ev,_ZThn52_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19017C11D0Ev,_ZTv0_n32_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn80_N9S19017C11D0Ev,_ZThn52_N9S19017C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn136_N9S19017C11D1Ev,_ZThn88_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn136_N9S19017C11D0Ev,_ZThn88_N9S19017C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C11D1Ev,_ZTv0_n24_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn152_N9S19017C11D1Ev,_ZThn100_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C11D0Ev,_ZTv0_n24_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn152_N9S19017C11D0Ev,_ZThn100_N9S19017C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn176_N9S19017C11D1Ev,_ZThn112_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn176_N9S19017C11D0Ev,_ZThn112_N9S19017C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S19017C11D1Ev,_ZTvn24_n12_N9S19017C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19017C11D0Ev,_ZTvn24_n12_N9S19017C11D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19017C11D1Ev,_ZTv0_n16_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn224_N9S19017C11D1Ev,_ZThn148_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19017C11D0Ev,_ZTv0_n16_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn224_N9S19017C11D0Ev,_ZThn148_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19017C11[] = {
  ABISELECT(224,148),
  ABISELECT(176,112),
  ABISELECT(80,52),
  ABISELECT(224,148),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&_ZN9S19017C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C11D0Ev,
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,116),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19017C11D1Ev,_ZThn32_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19017C11D0Ev,_ZThn32_N9S19017C11D0Ev),
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19017C11D1Ev,_ZThn40_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19017C11D0Ev,_ZThn40_N9S19017C11D0Ev),
  ABISELECT(-80,-52),
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19017C11D1Ev,_ZTv0_n32_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19017C11D0Ev,_ZTv0_n32_N9S19017C11D0Ev),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev),
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C11D1Ev,_ZTv0_n24_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C11D0Ev,_ZTv0_n24_N9S19017C11D0Ev),
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C11D1Ev,_ZTvn24_n12_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C11D0Ev,_ZTvn24_n12_N9S19017C11D0Ev),
  ABISELECT(-224,-148),
  ABISELECT(-88,-60),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C11D1Ev,_ZTv0_n16_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C11D0Ev,_ZTv0_n16_N9S19017C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19017C11[];
extern void _ZN9S19017C14D1Ev();
extern void _ZN9S19017C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C14__9S19017C11[] = {
  ABISELECT(224,148),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&_ZN9S19017C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C14D0Ev,
};
extern void _ZN9S19017C15D1Ev();
extern void _ZN9S19017C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C159S19017C14__9S19017C11[] = {
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&_ZN9S19017C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn152_N9S19017C15D1Ev,_ZThn100_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn152_N9S19017C15D0Ev,_ZThn100_N9S19017C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C159S19017C14__9S19017C11[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn136_N9S19017C15D1Ev,_ZThn88_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn136_N9S19017C15D0Ev,_ZThn88_N9S19017C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__A1__9S19017C159S19017C14__9S19017C11[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev)();
extern void ABISELECT(_ZThn152_N9S19017C14D1Ev,_ZThn100_N9S19017C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev)();
extern void ABISELECT(_ZThn152_N9S19017C14D0Ev,_ZThn100_N9S19017C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C14__9S19017C11[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev)();
extern void ABISELECT(_ZThn136_N9S19017C14D1Ev,_ZThn88_N9S19017C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev)();
extern void ABISELECT(_ZThn136_N9S19017C14D0Ev,_ZThn88_N9S19017C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C14__9S19017C11[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev),
};
extern void _ZN9S19017C16D1Ev();
extern void _ZN9S19017C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C16__9S19017C11[] = {
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&_ZN9S19017C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev)();
extern void ABISELECT(_ZThn184_N9S19017C16D1Ev,_ZThn116_N9S19017C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev)();
extern void ABISELECT(_ZThn184_N9S19017C16D0Ev,_ZThn116_N9S19017C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C13__9S19017C16__9S19017C11[] = {
  ABISELECT(-184,-116),
  ABISELECT(-88,-60),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19017C16D1Ev,_ZThn56_N9S19017C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19017C16D0Ev,_ZThn56_N9S19017C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C16__9S19017C11[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev),
};
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C9__A__9S19017C11[] = {
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZThn80_N8S19017C9D1Ev,_ZThn48_N8S19017C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
extern void ABISELECT(_ZThn80_N8S19017C9D0Ev,_ZThn48_N8S19017C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C9__A__9S19017C11[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern void _ZN9S19017C12D1Ev();
extern void _ZN9S19017C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C12__9S19017C11[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&_ZN9S19017C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C12D0Ev,
};
extern void _ZN9S19017C13D1Ev();
extern void _ZN9S19017C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C139S19017C12__9S19017C11[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&_ZN9S19017C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S19017C13D1Ev,_ZThn36_N9S19017C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S19017C13D0Ev,_ZThn36_N9S19017C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C139S19017C12__9S19017C11[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19017C12D1Ev,_ZThn36_N9S19017C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19017C12D0Ev,_ZThn36_N9S19017C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C12__9S19017C11[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S19017C12D1Ev,_ZThn48_N9S19017C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S19017C12D0Ev,_ZThn48_N9S19017C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C12__9S19017C11[] = {
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZThn96_N9S19017C12D1Ev,_ZThn60_N9S19017C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev)();
extern void ABISELECT(_ZThn96_N9S19017C12D0Ev,_ZThn60_N9S19017C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C2__9S19017C12__9S19017C11[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19017C12D1Ev,_ZTvn24_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19017C12D0Ev,_ZTvn24_n12_N9S19017C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C58S19017C2__A2__9S19017C12__9S19017C11[] = {
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C12D1Ev,_ZTvn24_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C12D0Ev,_ZTvn24_n12_N9S19017C12D0Ev),
};
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C11[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C9__9S19017C11[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern void _ZN9S19017C13D1Ev();
extern void _ZN9S19017C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C13__A1__9S19017C11[] = {
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&_ZN9S19017C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C13__A1__9S19017C11[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev),
};
static  VTT_ENTRY vtt_S19017C11[] = {
  {&(_ZTV9S19017C11[10]),  10,64},
  {&(_tg__ZTV9S19017C14__9S19017C11[7]),  7,9},
  {&(_tg__ZTV9S19017C159S19017C14__9S19017C11[6]),  6,8},
  {&(_tg__ZTV8S19017C9__9S19017C159S19017C14__9S19017C11[6]),  6,8},
  {&(_tg__ZTV8S19017C5__A1__9S19017C159S19017C14__9S19017C11[3]),  3,5},
  {&(_tg__ZTV8S19017C9__9S19017C14__9S19017C11[6]),  6,8},
  {&(_tg__ZTV8S19017C5__9S19017C14__9S19017C11[3]),  3,5},
  {&(_tg__ZTV9S19017C16__9S19017C11[5]),  5,7},
  {&(_tg__ZTV9S19017C13__9S19017C16__9S19017C11[4]),  4,6},
  {&(_tg__ZTV8S19017C5__9S19017C16__9S19017C11[3]),  3,5},
  {&(_tg__ZTV8S19017C9__A__9S19017C11[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C9__A__9S19017C11[3]),  3,5},
  {&(_ZTV9S19017C11[34]),  34,64},
  {&(_ZTV9S19017C11[39]),  39,64},
  {&(_ZTV9S19017C11[47]),  47,64},
  {&(_ZTV9S19017C11[52]),  52,64},
  {&(_ZTV9S19017C11[56]),  56,64},
  {&(_ZTV9S19017C11[17]),  17,64},
  {&(_ZTV9S19017C11[62]),  62,64},
  {&(_ZTV9S19017C11[24]),  24,64},
  {&(_tg__ZTV9S19017C12__9S19017C11[7]),  7,9},
  {&(_tg__ZTV9S19017C139S19017C12__9S19017C11[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C139S19017C12__9S19017C11[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C12__9S19017C11[3]),  3,5},
  {&(_tg__ZTV8S19017C9__9S19017C12__9S19017C11[6]),  6,8},
  {&(_tg__ZTV8S19017C2__9S19017C12__9S19017C11[3]),  3,5},
  {&(_tg__ZTV8S19017C58S19017C2__A2__9S19017C12__9S19017C11[2]),  2,4},
  {&(_tg__ZTV8S19017C9__9S19017C11[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C9__9S19017C11[3]),  3,5},
  {&(_tg__ZTV9S19017C13__A1__9S19017C11[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C13__A1__9S19017C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19017C11[];
extern  VTBL_ENTRY _ZTV9S19017C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C11[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19017C12D0Ev,_ZThn48_N9S19017C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19017C12D1Ev,_ZThn48_N9S19017C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19017C12D0Ev,_ZThn60_N9S19017C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C12D0Ev,_ZThn36_N9S19017C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19017C12D1Ev,_ZThn60_N9S19017C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C12D1Ev,_ZThn36_N9S19017C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C13D0Ev,_ZThn36_N9S19017C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C13D1Ev,_ZThn36_N9S19017C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19017C9D0Ev,_ZThn48_N8S19017C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19017C9D1Ev,_ZThn48_N8S19017C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19017C16D0Ev,_ZThn56_N9S19017C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19017C16D1Ev,_ZThn56_N9S19017C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19017C16D0Ev,_ZThn116_N9S19017C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19017C16D1Ev,_ZThn116_N9S19017C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19017C14D0Ev,_ZThn88_N9S19017C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19017C14D1Ev,_ZThn88_N9S19017C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19017C14D0Ev,_ZThn100_N9S19017C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19017C14D1Ev,_ZThn100_N9S19017C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19017C15D0Ev,_ZThn88_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19017C15D1Ev,_ZThn88_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19017C15D0Ev,_ZThn100_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19017C15D1Ev,_ZThn100_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C11D0Ev,_ZTv0_n16_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19017C11D0Ev,_ZThn148_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C11D1Ev,_ZTv0_n16_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19017C11D1Ev,_ZThn148_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C11D0Ev,_ZTv0_n24_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19017C11D0Ev,_ZThn100_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C11D1Ev,_ZTv0_n24_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19017C11D1Ev,_ZThn100_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19017C11D0Ev,_ZThn112_N9S19017C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19017C11D0Ev,_ZThn88_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19017C11D1Ev,_ZThn112_N9S19017C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19017C11D1Ev,_ZThn88_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19017C11D0Ev,_ZTv0_n32_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19017C11D0Ev,_ZThn52_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19017C11D1Ev,_ZTv0_n32_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19017C11D1Ev,_ZThn52_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C11 = {  "S19017C11", // class name
  bases_S19017C11, 25,
  &(vtc_S19017C11[0]), // expected_vtbl_contents
  &(vtt_S19017C11[0]), // expected_vtt_contents
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI9S19017C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19017C11),64, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19017C11),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19017C8  : S19017C9 , S19017C11 {
  __tsi64 s19017c8f0;
  ~S19017C8(); // tgen
  S19017C8(); // tgen
};
//SIG(-1 S19017C8) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ VBC9{ BC10{ VBC4 FL} VBC3 VBC6 VBC2 VBC11{ BC12{ BC3 BC4 BC5 BC6 Fs:16 FL} BC4 Fi} vd Fl FC10} BC13{ VBC2 BC14{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]} BC15{ VBC10 VBC6 Fc:1} BC2} FL}


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

static void Test_S19017C8()
{
  extern Class_Descriptor cd_S19017C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,46)];
    init_test(&cd_S19017C8, buf);
    S19017C8 *dp, &lv = *(dp=new (buf) S19017C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,180), "sizeof(S19017C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C8)");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C9*), 0, "S19017C8");
    /*is_ambiguous_... S19017C12::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C12*), 0, "S19017C8");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C9*), 0, "S19017C8");
    check_base_class_offset(lv, (S2014C38*)(S19017C15*)(S19017C14*)(S19017C11*), 0, "S19017C8");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C9*)(S19017C11*), 0, "S19017C8");
    /*is_ambiguous_... S19017C8::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(112,72), "S19017C8");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C9*), ABISELECT(112,72), "S19017C8");
    check_base_class_offset(lv, (S19017C5*)(S19017C13*)(S19017C12*), ABISELECT(112,72), "S19017C8");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C9*), ABISELECT(112,72), "S19017C8");
    /*is_ambiguous_... S19017C8::S19017C13 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C13*), ABISELECT(112,72), "S19017C8");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C9*)(S19017C11*), ABISELECT(112,72), "S19017C8");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*), ABISELECT(124,80), "S19017C8");
    /*is_ambiguous_... S19017C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C12*), ABISELECT(124,80), "S19017C8");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*), ABISELECT(124,80), "S19017C8");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C16*)(S19017C11*), ABISELECT(124,80), "S19017C8");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*)(S19017C11*), ABISELECT(124,80), "S19017C8");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C9*), 0, "S19017C8");
    check_base_class_offset(lv, (S19017C13*)(S19017C12*), ABISELECT(128,84), "S19017C8");
    check_base_class_offset(lv, (S19017C9*)(S19017C12*), ABISELECT(184,120), "S19017C8");
    check_base_class_offset(lv, (S19017C9*)(S19017C14*)(S19017C11*), ABISELECT(184,120), "S19017C8");
    check_base_class_offset(lv, (S19017C9*)(S19017C15*)(S19017C14*)(S19017C11*), ABISELECT(184,120), "S19017C8");
    check_base_class_offset(lv, (S2014C38*)(S19017C3*)(S19017C2*), ABISELECT(208,132), "S19017C8");
    check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C3*)(S19017C2*), ABISELECT(208,132), "S19017C8");
    check_base_class_offset(lv, (S19017C5*)(S19017C3*)(S19017C2*), ABISELECT(208,132), "S19017C8");
    /*is_ambiguous_... S19017C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C3*)(S19017C2*), ABISELECT(217,137), "S19017C8");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C3*)(S19017C2*), ABISELECT(220,140), "S19017C8");
    check_base_class_offset(lv, (S19017C3*)(S19017C2*), ABISELECT(208,132), "S19017C8");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C2*), ABISELECT(240,156), "S19017C8");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C2*), ABISELECT(240,156), "S19017C8");
    check_base_class_offset(lv, (S19017C2*)(S19017C12*), ABISELECT(208,132), "S19017C8");
    check_base_class_offset(lv, (S19017C12*)(S19017C11*), ABISELECT(128,84), "S19017C8");
    /*is_ambiguous_... S19017C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C15*)(S19017C14*)(S19017C11*), ABISELECT(33,17), "S19017C8");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C15*)(S19017C14*)(S19017C11*), ABISELECT(24,12), "S19017C8");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C15*)(S19017C14*)(S19017C11*), ABISELECT(24,12), "S19017C8");
    check_base_class_offset(lv, (S19017C15*)(S19017C14*)(S19017C11*), ABISELECT(24,12), "S19017C8");
    /*is_ambiguous_... S19017C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C14*)(S19017C11*), 0, "S19017C8");
    check_base_class_offset(lv, (S19017C14*)(S19017C11*), ABISELECT(24,12), "S19017C8");
    check_base_class_offset(lv, (S19017C13*)(S19017C16*)(S19017C11*), ABISELECT(256,168), "S19017C8");
    check_base_class_offset(lv, (S19017C16*)(S19017C11*), ABISELECT(64,44), "S19017C8");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C9*)(S19017C11*), ABISELECT(80,52), "S19017C8");
    check_base_class_offset(lv, (S19017C11*), ABISELECT(24,12), "S19017C8");
    check_field_offset(lv, s19017c8f0, ABISELECT(104,64), "S19017C8.s19017c8f0");
    test_class_info(&lv, &cd_S19017C8);
    dp->~S19017C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C8(Test_S19017C8, "S19017C8", ABISELECT(272,180));

#else // __cplusplus

extern void _ZN8S19017C8C1Ev();
extern void _ZN8S19017C8D1Ev();
Name_Map name_map_S19017C8[] = {
  NSPAIR(_ZN8S19017C8C1Ev),
  NSPAIR(_ZN8S19017C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S19017C13;
extern VTBL_ENTRY _ZTI9S19017C13[];
extern  VTBL_ENTRY _ZTV9S19017C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C13[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C3;
extern VTBL_ENTRY _ZTI8S19017C3[];
extern  VTBL_ENTRY _ZTV8S19017C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C2;
extern VTBL_ENTRY _ZTI8S19017C2[];
extern  VTBL_ENTRY _ZTV8S19017C2[];
extern Class_Descriptor cd_S19017C12;
extern VTBL_ENTRY _ZTI9S19017C12[];
extern  VTBL_ENTRY _ZTV9S19017C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C15;
extern VTBL_ENTRY _ZTI9S19017C15[];
extern  VTBL_ENTRY _ZTV9S19017C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C14;
extern VTBL_ENTRY _ZTI9S19017C14[];
extern  VTBL_ENTRY _ZTV9S19017C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C14[];
extern Class_Descriptor cd_S19017C13;
extern VTBL_ENTRY _ZTI9S19017C13[];
extern  VTBL_ENTRY _ZTV9S19017C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C13[];
extern Class_Descriptor cd_S19017C16;
extern VTBL_ENTRY _ZTI9S19017C16[];
extern  VTBL_ENTRY _ZTV9S19017C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C16[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S19017C11;
extern VTBL_ENTRY _ZTI9S19017C11[];
extern  VTBL_ENTRY _ZTV9S19017C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C11[];
static Base_Class bases_S19017C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(112,72), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19017C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19017C13,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19017C9,    ABISELECT(184,120), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2014C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S2014C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S19017C5,    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
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(217,137), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(220,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19017C3,    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
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(240,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(240,156), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19017C2,    ABISELECT(208,132), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19017C12,    ABISELECT(128,84), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(33,17), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19017C15,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19017C14,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19017C13,    ABISELECT(256,168), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19017C16,    ABISELECT(64,44), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19017C9,    ABISELECT(80,52), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19017C11,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19017C8[];
extern void _ZN8S19017C8D1Ev();
extern void _ZN8S19017C8D0Ev();
extern void ABISELECT(_ZThn24_N8S19017C8D1Ev,_ZThn12_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19017C8D0Ev,_ZThn12_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19017C8D1Ev,_ZThn44_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19017C8D0Ev,_ZThn44_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn80_N8S19017C8D1Ev,_ZThn52_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn80_N8S19017C8D0Ev,_ZThn52_N8S19017C8D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S19017C8D1Ev,_ZThn72_N8S19017C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S19017C8D0Ev,_ZThn72_N8S19017C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19017C8D1Ev,_ZTv0_n32_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S19017C8D1Ev,_ZThn84_N8S19017C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19017C8D0Ev,_ZTv0_n32_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S19017C8D0Ev,_ZThn84_N8S19017C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19017C8D1Ev,_ZTv0_n24_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn184_N8S19017C8D1Ev,_ZThn120_N8S19017C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19017C8D0Ev,_ZTv0_n24_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn184_N8S19017C8D0Ev,_ZThn120_N8S19017C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn208_N8S19017C8D1Ev,_ZThn132_N8S19017C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn208_N8S19017C8D0Ev,_ZThn132_N8S19017C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19017C8D1Ev,_ZTvn24_n12_N8S19017C8D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19017C8D0Ev,_ZTvn24_n12_N8S19017C8D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19017C8D1Ev,_ZTv0_n16_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19017C8D1Ev,_ZThn168_N8S19017C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19017C8D0Ev,_ZTv0_n16_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19017C8D0Ev,_ZThn168_N8S19017C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19017C8[] = {
  ABISELECT(256,168),
  0,
  ABISELECT(208,132),
  ABISELECT(184,120),
  ABISELECT(128,84),
  ABISELECT(124,80),
  ABISELECT(112,72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&_ZN8S19017C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C8D0Ev,
  ABISELECT(232,156),
  ABISELECT(184,120),
  ABISELECT(104,72),
  ABISELECT(-24,-12),
  ABISELECT(100,68),
  ABISELECT(88,60),
  ABISELECT(160,108),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19017C8D1Ev,_ZThn12_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19017C8D0Ev,_ZThn12_N8S19017C8D0Ev),
  ABISELECT(60,36),
  ABISELECT(48,28),
  ABISELECT(192,124),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19017C8D1Ev,_ZThn44_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19017C8D0Ev,_ZThn44_N8S19017C8D0Ev),
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19017C8D1Ev,_ZThn52_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19017C8D0Ev,_ZThn52_N8S19017C8D0Ev),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev),
  ABISELECT(-128,-84),
  ABISELECT(80,48),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-128,-84),
  ABISELECT(-16,-12),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19017C8D1Ev,_ZTv0_n32_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19017C8D0Ev,_ZTv0_n32_N8S19017C8D0Ev),
  ABISELECT(-184,-120),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-120),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19017C8D1Ev,_ZTv0_n24_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19017C8D0Ev,_ZTv0_n24_N8S19017C8D0Ev),
  ABISELECT(-208,-132),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev),
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19017C8D1Ev,_ZTvn24_n12_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19017C8D0Ev,_ZTvn24_n12_N8S19017C8D0Ev),
  ABISELECT(-256,-168),
  ABISELECT(-144,-96),
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19017C8D1Ev,_ZTv0_n16_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19017C8D0Ev,_ZTv0_n16_N8S19017C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19017C8[];
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C9__A__8S19017C8[] = {
  ABISELECT(124,80),
  ABISELECT(112,72),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S19017C9D1Ev,_ZThn72_N8S19017C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S19017C9D0Ev,_ZThn72_N8S19017C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C9__A__8S19017C8[] = {
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern void _ZN9S19017C11D1Ev();
extern void _ZN9S19017C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C11__8S19017C8[] = {
  ABISELECT(232,156),
  ABISELECT(184,120),
  ABISELECT(104,72),
  ABISELECT(-24,-12),
  ABISELECT(100,68),
  ABISELECT(88,60),
  ABISELECT(160,108),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&_ZN9S19017C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C11D0Ev,
};
extern void _ZN9S19017C14D1Ev();
extern void _ZN9S19017C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C149S19017C11__8S19017C8[] = {
  ABISELECT(-24,-12),
  ABISELECT(100,68),
  ABISELECT(88,60),
  ABISELECT(160,108),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&_ZN9S19017C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C14D0Ev,
};
extern void _ZN9S19017C15D1Ev();
extern void _ZN9S19017C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C159S19017C149S19017C11__8S19017C8[] = {
  ABISELECT(100,68),
  ABISELECT(88,60),
  ABISELECT(160,108),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&_ZN9S19017C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn160_N9S19017C15D1Ev,_ZThn108_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn160_N9S19017C15D0Ev,_ZThn108_N9S19017C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C159S19017C149S19017C11__8S19017C8[] = {
  ABISELECT(-160,-108),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-120),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn88_N9S19017C15D1Ev,_ZThn60_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn88_N9S19017C15D0Ev,_ZThn60_N9S19017C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__A1__9S19017C159S19017C149S19017C11__8S19017C8[] = {
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev)();
extern void ABISELECT(_ZThn160_N9S19017C14D1Ev,_ZThn108_N9S19017C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev)();
extern void ABISELECT(_ZThn160_N9S19017C14D0Ev,_ZThn108_N9S19017C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C149S19017C11__8S19017C8[] = {
  ABISELECT(-160,-108),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-120),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev)();
extern void ABISELECT(_ZThn88_N9S19017C14D1Ev,_ZThn60_N9S19017C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev)();
extern void ABISELECT(_ZThn88_N9S19017C14D0Ev,_ZThn60_N9S19017C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C149S19017C11__8S19017C8[] = {
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev),
};
extern void _ZN9S19017C16D1Ev();
extern void _ZN9S19017C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C169S19017C11__8S19017C8[] = {
  ABISELECT(60,36),
  ABISELECT(48,28),
  ABISELECT(192,124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&_ZN9S19017C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S19017C16D1Ev,_ZThn124_N9S19017C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S19017C16D0Ev,_ZThn124_N9S19017C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C13__9S19017C169S19017C11__8S19017C8[] = {
  ABISELECT(-192,-124),
  ABISELECT(-144,-96),
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev)();
extern void ABISELECT(_ZThn48_N9S19017C16D1Ev,_ZThn28_N9S19017C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev)();
extern void ABISELECT(_ZThn48_N9S19017C16D0Ev,_ZThn28_N9S19017C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C169S19017C11__8S19017C8[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev),
};
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C99S19017C11__A2__8S19017C8[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19017C9D1Ev,_ZThn20_N8S19017C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19017C9D0Ev,_ZThn20_N8S19017C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C99S19017C11__A2__8S19017C8[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19017C11D1Ev,_ZTv0_n32_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S19017C11D1Ev,_ZThn72_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19017C11D0Ev,_ZTv0_n32_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn104_N9S19017C11D0Ev,_ZThn72_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C12__9S19017C11__8S19017C8[] = {
  ABISELECT(-104,-72),
  ABISELECT(80,48),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-128,-84),
  ABISELECT(-16,-12),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19017C11D1Ev,_ZTv0_n32_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19017C11D0Ev,_ZTv0_n32_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn88_N9S19017C11D1Ev,_ZThn60_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn88_N9S19017C11D0Ev,_ZThn60_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C11__8S19017C8[] = {
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19017C11D1Ev,_ZTv0_n24_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S19017C11D1Ev,_ZThn108_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C11D0Ev,_ZTv0_n24_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S19017C11D0Ev,_ZThn108_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C11__8S19017C8[] = {
  ABISELECT(-160,-108),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-120),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C11D1Ev,_ZTv0_n24_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C11D0Ev,_ZTv0_n24_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn184_N9S19017C11D1Ev,_ZThn120_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn184_N9S19017C11D0Ev,_ZThn120_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C2__9S19017C11__8S19017C8[] = {
  ABISELECT(-184,-120),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19017C11D1Ev,_ZTvn24_n12_N9S19017C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19017C11D0Ev,_ZTvn24_n12_N9S19017C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C58S19017C2__A2__9S19017C11__8S19017C8[] = {
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C11D1Ev,_ZTvn24_n12_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C11D0Ev,_ZTvn24_n12_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZThn40_N9S19017C11D1Ev,_ZThn32_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S19017C11D0Ev,_ZThn32_N9S19017C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19017C16__9S19017C11__8S19017C8[] = {
  ABISELECT(60,36),
  ABISELECT(48,28),
  ABISELECT(192,124),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19017C11D1Ev,_ZThn32_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19017C11D0Ev,_ZThn32_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19017C11D1Ev,_ZTv0_n16_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn232_N9S19017C11D1Ev,_ZThn156_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19017C11D0Ev,_ZTv0_n16_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn232_N9S19017C11D0Ev,_ZThn156_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C13__A1__9S19017C11__8S19017C8[] = {
  ABISELECT(-232,-156),
  ABISELECT(-144,-96),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C11D1Ev,_ZTv0_n16_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C11D0Ev,_ZTv0_n16_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZThn56_N9S19017C11D1Ev,_ZThn40_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S19017C11D0Ev,_ZThn40_N9S19017C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C9__A__9S19017C11__8S19017C8[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(-80,-52),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19017C11D1Ev,_ZThn40_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19017C11D0Ev,_ZThn40_N9S19017C11D0Ev),
};
extern void _ZN9S19017C12D1Ev();
extern void _ZN9S19017C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C12__8S19017C8[] = {
  ABISELECT(80,48),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-128,-84),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&_ZN9S19017C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C12D0Ev,
};
extern void _ZN9S19017C13D1Ev();
extern void _ZN9S19017C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C139S19017C12__8S19017C8[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&_ZN9S19017C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C139S19017C12__8S19017C8[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C12__8S19017C8[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19017C12D1Ev,_ZThn36_N9S19017C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19017C12D0Ev,_ZThn36_N9S19017C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C12__8S19017C8[] = {
  ABISELECT(-56,-36),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-120),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZThn80_N9S19017C12D1Ev,_ZThn48_N9S19017C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev)();
extern void ABISELECT(_ZThn80_N9S19017C12D0Ev,_ZThn48_N9S19017C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C2__9S19017C12__8S19017C8[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19017C12D1Ev,_ZTvn24_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19017C12D0Ev,_ZTvn24_n12_N9S19017C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C58S19017C2__A2__9S19017C12__8S19017C8[] = {
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C12D1Ev,_ZTvn24_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C12D0Ev,_ZTvn24_n12_N9S19017C12D0Ev),
};
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C9__A1__8S19017C8[] = {
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C9__A1__8S19017C8[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern void _ZN9S19017C13D1Ev();
extern void _ZN9S19017C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C13__A1__8S19017C8[] = {
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&_ZN9S19017C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C13__A1__8S19017C8[] = {
  ABISELECT(144,96),
  ABISELECT(144,96),
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev),
};
static  VTT_ENTRY vtt_S19017C8[] = {
  {&(_ZTV8S19017C8[10]),  10,76},
  {&(_tg__ZTV8S19017C9__A__8S19017C8[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C9__A__8S19017C8[3]),  3,5},
  {&(_tg__ZTV9S19017C11__8S19017C8[10]),  10,12},
  {&(_tg__ZTV9S19017C149S19017C11__8S19017C8[7]),  7,9},
  {&(_tg__ZTV9S19017C159S19017C149S19017C11__8S19017C8[6]),  6,8},
  {&(_tg__ZTV8S19017C9__9S19017C159S19017C149S19017C11__8S19017C8[6]),  6,8},
  {&(_tg__ZTV8S19017C5__A1__9S19017C159S19017C149S19017C11__8S19017C8[3]),  3,5},
  {&(_tg__ZTV8S19017C9__9S19017C149S19017C11__8S19017C8[6]),  6,8},
  {&(_tg__ZTV8S19017C5__9S19017C149S19017C11__8S19017C8[3]),  3,5},
  {&(_tg__ZTV9S19017C169S19017C11__8S19017C8[5]),  5,7},
  {&(_tg__ZTV9S19017C13__9S19017C169S19017C11__8S19017C8[4]),  4,6},
  {&(_tg__ZTV8S19017C5__9S19017C169S19017C11__8S19017C8[3]),  3,5},
  {&(_tg__ZTV8S19017C99S19017C11__A2__8S19017C8[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C99S19017C11__A2__8S19017C8[3]),  3,5},
  {&(_tg__ZTV9S19017C12__9S19017C11__8S19017C8[8]),  8,10},
  {&(_tg__ZTV8S19017C5__9S19017C11__8S19017C8[3]),  3,5},
  {&(_tg__ZTV8S19017C9__9S19017C11__8S19017C8[6]),  6,8},
  {&(_tg__ZTV8S19017C2__9S19017C11__8S19017C8[3]),  3,5},
  {&(_tg__ZTV8S19017C58S19017C2__A2__9S19017C11__8S19017C8[2]),  2,4},
  {&(_tg__ZTV9S19017C16__9S19017C11__8S19017C8[5]),  5,7},
  {&(_tg__ZTV9S19017C13__A1__9S19017C11__8S19017C8[4]),  4,6},
  {&(_tg__ZTV8S19017C9__A__9S19017C11__8S19017C8[5]),  5,7},
  {&(_ZTV8S19017C8[41]),  41,76},
  {&(_ZTV8S19017C8[22]),  22,76},
  {&(_ZTV8S19017C8[51]),  51,76},
  {&(_ZTV8S19017C8[59]),  59,76},
  {&(_ZTV8S19017C8[64]),  64,76},
  {&(_ZTV8S19017C8[68]),  68,76},
  {&(_ZTV8S19017C8[29]),  29,76},
  {&(_ZTV8S19017C8[74]),  74,76},
  {&(_ZTV8S19017C8[36]),  36,76},
  {&(_tg__ZTV9S19017C12__8S19017C8[7]),  7,9},
  {&(_tg__ZTV9S19017C139S19017C12__8S19017C8[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C139S19017C12__8S19017C8[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C12__8S19017C8[3]),  3,5},
  {&(_tg__ZTV8S19017C9__9S19017C12__8S19017C8[6]),  6,8},
  {&(_tg__ZTV8S19017C2__9S19017C12__8S19017C8[3]),  3,5},
  {&(_tg__ZTV8S19017C58S19017C2__A2__9S19017C12__8S19017C8[2]),  2,4},
  {&(_tg__ZTV8S19017C9__A1__8S19017C8[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C9__A1__8S19017C8[3]),  3,5},
  {&(_tg__ZTV9S19017C13__A1__8S19017C8[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C13__A1__8S19017C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19017C8[];
extern  VTBL_ENTRY _ZTV8S19017C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C8[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19017C12D0Ev,_ZThn48_N9S19017C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19017C12D1Ev,_ZThn48_N9S19017C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C12D0Ev,_ZThn36_N9S19017C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C12D1Ev,_ZThn36_N9S19017C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C11D0Ev,_ZTv0_n16_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19017C11D0Ev,_ZThn156_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C11D1Ev,_ZTv0_n16_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19017C11D1Ev,_ZThn156_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C11D0Ev,_ZTv0_n24_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C11D0Ev,_ZThn108_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C11D1Ev,_ZTv0_n24_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C11D1Ev,_ZThn108_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19017C11D0Ev,_ZThn120_N9S19017C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C11D0Ev,_ZThn60_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19017C11D1Ev,_ZThn120_N9S19017C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C11D1Ev,_ZThn60_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19017C11D0Ev,_ZTv0_n32_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19017C11D0Ev,_ZThn72_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19017C11D1Ev,_ZTv0_n32_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19017C11D1Ev,_ZThn72_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19017C16D0Ev,_ZThn28_N9S19017C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19017C16D1Ev,_ZThn28_N9S19017C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19017C16D0Ev,_ZThn124_N9S19017C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19017C16D1Ev,_ZThn124_N9S19017C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C14D0Ev,_ZThn60_N9S19017C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C14D1Ev,_ZThn60_N9S19017C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C14D0Ev,_ZThn108_N9S19017C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C14D1Ev,_ZThn108_N9S19017C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C15D0Ev,_ZThn60_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C15D1Ev,_ZThn60_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C15D0Ev,_ZThn108_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C15D1Ev,_ZThn108_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19017C9D0Ev,_ZThn20_N8S19017C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19017C9D0Ev,_ZThn72_N8S19017C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19017C9D1Ev,_ZThn20_N8S19017C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19017C9D1Ev,_ZThn72_N8S19017C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19017C8D0Ev,_ZTv0_n16_N8S19017C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19017C8D0Ev,_ZThn168_N8S19017C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19017C8D1Ev,_ZTv0_n16_N8S19017C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19017C8D1Ev,_ZThn168_N8S19017C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19017C8D0Ev,_ZTv0_n24_N8S19017C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19017C8D0Ev,_ZThn120_N8S19017C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19017C8D1Ev,_ZTv0_n24_N8S19017C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19017C8D1Ev,_ZThn120_N8S19017C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19017C8D0Ev,_ZTv0_n32_N8S19017C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19017C8D0Ev,_ZThn84_N8S19017C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19017C8D1Ev,_ZTv0_n32_N8S19017C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19017C8D1Ev,_ZThn84_N8S19017C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19017C8D0Ev,_ZThn132_N8S19017C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19017C8D0Ev,_ZThn72_N8S19017C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19017C8D1Ev,_ZThn132_N8S19017C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19017C8D1Ev,_ZThn72_N8S19017C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C8 = {  "S19017C8", // class name
  bases_S19017C8, 27,
  &(vtc_S19017C8[0]), // expected_vtbl_contents
  &(vtt_S19017C8[0]), // expected_vtt_contents
  ABISELECT(272,180), // object size
  NSPAIRA(_ZTI8S19017C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19017C8),76, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19017C8),43, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S19017C20_nt  {
  void  mf19017c20(); // _ZN12S19017C20_nt10mf19017c20Ev
};
//SIG(1 S19017C20_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19017C17  : virtual S2014C24 , virtual S19017C9 , S2014C21 , virtual S19017C15 , S3222C8_nt {
  ::S19017C20_nt s19017c17f0[6];
  short s19017c17f1;
  virtual  ~S19017C17(); // _ZN9S19017C17D2Ev
  S19017C17(); // tgen
};
//SIG(-1 S19017C17) C1{ VBC2{ m} VBC3{ VBC4{ m} VBC5{ BC6{ m} vd FC6} VBC7{ m Fi} vd Fp FC8{}} BC9{ m} VBC10{ BC6 BC5 VBC4 VBC3 vd} BC7 vd FU11{ m}[6] Fs}


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

static void Test_S19017C17()
{
  extern Class_Descriptor cd_S19017C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S19017C17, buf);
    S19017C17 *dp, &lv = *(dp=new (buf) S19017C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S19017C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C17)");
    check_base_class_offset(lv, (S2014C24*), 0, "S19017C17");
    check_base_class_offset(lv, (S2014C38*)(S19017C9*), 0, "S19017C17");
    check_base_class_offset(lv, (S2014C38*)(S19017C15*), 0, "S19017C17");
    /*is_ambiguous_... S19017C17::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(48,28), "S19017C17");
    check_base_class_offset(lv, (S19017C5*)(S19017C9*), ABISELECT(48,28), "S19017C17");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*), ABISELECT(60,36), "S19017C17");
    check_base_class_offset(lv, (S19017C9*), ABISELECT(24,16), "S19017C17");
    check_base_class_offset(lv, (S19017C9*)(S19017C15*), ABISELECT(24,16), "S19017C17");
    check_base_class_offset(lv, (S2014C21*), 0, "S19017C17");
    /*is_ambiguous_... S19017C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C15*), ABISELECT(73,45), "S19017C17");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C15*), ABISELECT(64,40), "S19017C17");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C15*), ABISELECT(64,40), "S19017C17");
    check_base_class_offset(lv, (S19017C15*), ABISELECT(64,40), "S19017C17");
    /*is_ambiguous_... S19017C17::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(8,4), "S19017C17");
    check_field_offset(lv, s19017c17f0, ABISELECT(12,8), "S19017C17.s19017c17f0");
    check_field_offset(lv, s19017c17f1, ABISELECT(18,14), "S19017C17.s19017c17f1");
    test_class_info(&lv, &cd_S19017C17);
    dp->~S19017C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C17(Test_S19017C17, "S19017C17", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN9S19017C17C1Ev();
extern void _ZN9S19017C17D2Ev();
Name_Map name_map_S19017C17[] = {
  NSPAIR(_ZN9S19017C17C1Ev),
  NSPAIR(_ZN9S19017C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S2014C21;
extern VTBL_ENTRY _ZTI8S2014C21[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C15;
extern VTBL_ENTRY _ZTI9S19017C15[];
extern  VTBL_ENTRY _ZTV9S19017C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C15[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19017C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(48,28), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19017C9,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(73,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19017C15,    ABISELECT(64,40), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_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 _ZTI9S19017C17[];
extern void _ZN9S19017C17D1Ev();
extern void _ZN9S19017C17D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19017C17D1Ev,_ZTv0_n24_N9S19017C17D1Ev)();
extern void ABISELECT(_ZThn24_N9S19017C17D1Ev,_ZThn16_N9S19017C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C17D0Ev,_ZTv0_n24_N9S19017C17D0Ev)();
extern void ABISELECT(_ZThn24_N9S19017C17D0Ev,_ZThn16_N9S19017C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C17D1Ev,_ZTv0_n12_N9S19017C17D1Ev)();
extern void ABISELECT(_ZThn48_N9S19017C17D1Ev,_ZThn28_N9S19017C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C17D0Ev,_ZTv0_n12_N9S19017C17D0Ev)();
extern void ABISELECT(_ZThn48_N9S19017C17D0Ev,_ZThn28_N9S19017C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19017C17D1Ev,_ZTv0_n28_N9S19017C17D1Ev)();
extern void ABISELECT(_ZThn64_N9S19017C17D1Ev,_ZThn40_N9S19017C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19017C17D0Ev,_ZTv0_n28_N9S19017C17D0Ev)();
extern void ABISELECT(_ZThn64_N9S19017C17D0Ev,_ZThn40_N9S19017C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19017C17[] = {
  ABISELECT(64,40),
  ABISELECT(60,36),
  ABISELECT(48,28),
  0,
  ABISELECT(24,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C17[0]),
  (VTBL_ENTRY)&_ZN9S19017C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C17D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19017C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C17D1Ev,_ZTv0_n24_N9S19017C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C17D0Ev,_ZTv0_n24_N9S19017C17D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19017C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C17D1Ev,_ZTv0_n12_N9S19017C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C17D0Ev,_ZTv0_n12_N9S19017C17D0Ev),
  ABISELECT(-64,-40),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI9S19017C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19017C17D1Ev,_ZTv0_n28_N9S19017C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19017C17D0Ev,_ZTv0_n28_N9S19017C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19017C17[];
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C17[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19017C9D1Ev,_ZThn12_N8S19017C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19017C9D0Ev,_ZThn12_N8S19017C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C9__9S19017C17[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern void _ZN9S19017C15D1Ev();
extern void _ZN9S19017C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C15__9S19017C17[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&_ZN9S19017C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C15__9S19017C17[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__A1__9S19017C15__9S19017C17[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev),
};
static  VTT_ENTRY vtt_S19017C17[] = {
  {&(_ZTV9S19017C17[8]),  8,32},
  {&(_ZTV9S19017C17[16]),  16,32},
  {&(_ZTV9S19017C17[21]),  21,32},
  {&(_ZTV9S19017C17[30]),  30,32},
  {&(_tg__ZTV8S19017C9__9S19017C17[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C9__9S19017C17[3]),  3,5},
  {&(_tg__ZTV9S19017C15__9S19017C17[6]),  6,8},
  {&(_tg__ZTV8S19017C9__9S19017C15__9S19017C17[6]),  6,8},
  {&(_tg__ZTV8S19017C5__A1__9S19017C15__9S19017C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19017C17[];
extern  VTBL_ENTRY _ZTV9S19017C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C17[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19017C9D0Ev,_ZThn12_N8S19017C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19017C9D1Ev,_ZThn12_N8S19017C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19017C17D0Ev,_ZTv0_n28_N9S19017C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19017C17D0Ev,_ZThn40_N9S19017C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19017C17D1Ev,_ZTv0_n28_N9S19017C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19017C17D1Ev,_ZThn40_N9S19017C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C17D0Ev,_ZTv0_n12_N9S19017C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19017C17D0Ev,_ZThn28_N9S19017C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C17D1Ev,_ZTv0_n12_N9S19017C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19017C17D1Ev,_ZThn28_N9S19017C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C17D0Ev,_ZTv0_n24_N9S19017C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19017C17D0Ev,_ZThn16_N9S19017C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C17D1Ev,_ZTv0_n24_N9S19017C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19017C17D1Ev,_ZThn16_N9S19017C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C17 = {  "S19017C17", // class name
  bases_S19017C17, 12,
  &(vtc_S19017C17[0]), // expected_vtbl_contents
  &(vtt_S19017C17[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI9S19017C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19017C17),32, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19017C17),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19017C1  : virtual S19017C2 , virtual S19017C8 , virtual S19017C17 {
  virtual  ~S19017C1(); // _ZN8S19017C1D2Ev
  virtual void  v1(); // _ZN8S19017C12v1Ev
  S19017C1(); // tgen
};
//SIG(1 S19017C1) C1{ VBC2{ BC3{ BC4{ m} BC5{ BC6{ m} vd FC6} BC6 BC7{ m Fi} Fs:16 FL} BC5 Fi} VBC8{ BC9{ VBC4 VBC5 VBC7 vd Fp FC10{}} BC11{ VBC12{ BC13{ VBC5 FL} VBC4 VBC7 VBC9 VBC2 vd Fl FC13} BC14{ VBC9 BC15{ BC6 BC5 VBC4 VBC9 vd} VBC6 vd FC7[6]} BC16{ VBC13 VBC7 Fc:1} BC9} FL} VBC17{ VBC18{ m} VBC9 BC19{ m} VBC15 BC7 vd FU20{ m}[6] Fs} vd v1}


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

static void Test_S19017C1()
{
  extern Class_Descriptor cd_S19017C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,53)];
    init_test(&cd_S19017C1, buf);
    S19017C1 *dp, &lv = *(dp=new (buf) S19017C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,208), "sizeof(S19017C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19017C1)");
    check_base_class_offset(lv, (S2014C38*)(S19017C3*)(S19017C2*), ABISELECT(8,4), "S19017C1");
    check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C3*)(S19017C2*), ABISELECT(8,4), "S19017C1");
    check_base_class_offset(lv, (S19017C5*)(S19017C3*)(S19017C2*), ABISELECT(8,4), "S19017C1");
    /*is_ambiguous_... S19017C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C3*)(S19017C2*), ABISELECT(17,9), "S19017C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C3*)(S19017C2*), ABISELECT(20,12), "S19017C1");
    check_base_class_offset(lv, (S19017C3*)(S19017C2*), ABISELECT(8,4), "S19017C1");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C2*), ABISELECT(40,28), "S19017C1");
    /*is_ambiguous_... S19017C2::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C2*), ABISELECT(40,28), "S19017C1");
    check_base_class_offset(lv, (S19017C2*), ABISELECT(8,4), "S19017C1");
    check_base_class_offset(lv, (S19017C2*)(S19017C12*), ABISELECT(8,4), "S19017C1");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C9*)(S19017C8*), 0, "S19017C1");
    /*is_ambiguous_... S19017C12::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C12*), 0, "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C9*), 0, "S19017C1");
    check_base_class_offset(lv, (S2014C38*)(S19017C15*)(S19017C14*)(S19017C11*)(S19017C8*), 0, "S19017C1");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C9*)(S19017C11*)(S19017C8*), 0, "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C15 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19017C15*), 0, "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*), ABISELECT(168,112), "S19017C1");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C9*)(S19017C8*), ABISELECT(168,112), "S19017C1");
    check_base_class_offset(lv, (S19017C5*)(S19017C13*)(S19017C12*), ABISELECT(168,112), "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C9*), ABISELECT(168,112), "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C13 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C13*), ABISELECT(168,112), "S19017C1");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C9*)(S19017C11*)(S19017C8*), ABISELECT(168,112), "S19017C1");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*)(S19017C8*), ABISELECT(180,120), "S19017C1");
    /*is_ambiguous_... S19017C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C12*), ABISELECT(180,120), "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*), ABISELECT(180,120), "S19017C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19017C16*)(S19017C11*)(S19017C8*), ABISELECT(180,120), "S19017C1");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C9*)(S19017C11*)(S19017C8*), ABISELECT(180,120), "S19017C1");
    /*is_ambiguous_... S19017C8::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C9*)(S19017C8*), ABISELECT(56,40), "S19017C1");
    check_base_class_offset(lv, (S19017C13*)(S19017C12*), ABISELECT(184,124), "S19017C1");
    check_base_class_offset(lv, (S19017C9*)(S19017C12*), ABISELECT(240,160), "S19017C1");
    check_base_class_offset(lv, (S19017C9*)(S19017C14*)(S19017C11*)(S19017C8*), ABISELECT(240,160), "S19017C1");
    check_base_class_offset(lv, (S19017C9*)(S19017C15*)(S19017C14*)(S19017C11*)(S19017C8*), ABISELECT(240,160), "S19017C1");
    check_base_class_offset(lv, (S19017C9*)(S19017C17*), ABISELECT(240,160), "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C15 */ AMB_check_base_class_offset(lv, (S19017C9*)(S19017C15*), ABISELECT(240,160), "S19017C1");
    check_base_class_offset(lv, (S19017C12*)(S19017C11*)(S19017C8*), ABISELECT(184,124), "S19017C1");
    /*is_ambiguous_... S19017C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C15*)(S19017C14*)(S19017C11*)(S19017C8*), ABISELECT(89,57), "S19017C1");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C15*)(S19017C14*)(S19017C11*)(S19017C8*), ABISELECT(80,52), "S19017C1");
    /*is_ambiguous_... S19017C15::S19017C5 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C15*)(S19017C14*)(S19017C11*)(S19017C8*), ABISELECT(80,52), "S19017C1");
    check_base_class_offset(lv, (S19017C15*)(S19017C14*)(S19017C11*)(S19017C8*), ABISELECT(80,52), "S19017C1");
    /*is_ambiguous_... S19017C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C14*)(S19017C11*)(S19017C8*), 0, "S19017C1");
    check_base_class_offset(lv, (S19017C14*)(S19017C11*)(S19017C8*), ABISELECT(80,52), "S19017C1");
    check_base_class_offset(lv, (S19017C13*)(S19017C16*)(S19017C11*)(S19017C8*), ABISELECT(264,172), "S19017C1");
    check_base_class_offset(lv, (S19017C16*)(S19017C11*)(S19017C8*), ABISELECT(120,84), "S19017C1");
    /*is_ambiguous_... S19017C11::S19017C9 */ AMB_check_base_class_offset(lv, (S19017C9*)(S19017C11*)(S19017C8*), ABISELECT(136,92), "S19017C1");
    check_base_class_offset(lv, (S19017C11*)(S19017C8*), ABISELECT(80,52), "S19017C1");
    check_base_class_offset(lv, (S19017C8*), ABISELECT(56,40), "S19017C1");
    check_base_class_offset(lv, (S2014C24*)(S19017C17*), 0, "S19017C1");
    check_base_class_offset(lv, (S2014C21*)(S19017C17*), ABISELECT(280,184), "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C15 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C15*), ABISELECT(313,205), "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C15 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19017C5*)(S19017C15*), ABISELECT(304,200), "S19017C1");
    /*is_ambiguous_... S19017C1::S19017C15 */ AMB_check_base_class_offset(lv, (S19017C5*)(S19017C15*), ABISELECT(304,200), "S19017C1");
    check_base_class_offset(lv, (S19017C15*)(S19017C17*), ABISELECT(304,200), "S19017C1");
    /*is_ambiguous_... S19017C17::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19017C17*), ABISELECT(288,188), "S19017C1");
    check_base_class_offset(lv, (S19017C17*), ABISELECT(280,184), "S19017C1");
    test_class_info(&lv, &cd_S19017C1);
    dp->~S19017C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19017C1(Test_S19017C1, "S19017C1", ABISELECT(320,208));

#else // __cplusplus

extern void _ZN8S19017C1C1Ev();
extern void _ZN8S19017C1D2Ev();
Name_Map name_map_S19017C1[] = {
  NSPAIR(_ZN8S19017C1C1Ev),
  NSPAIR(_ZN8S19017C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C3;
extern VTBL_ENTRY _ZTI8S19017C3[];
extern  VTBL_ENTRY _ZTV8S19017C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C2;
extern VTBL_ENTRY _ZTI8S19017C2[];
extern  VTBL_ENTRY _ZTV8S19017C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S19017C13;
extern VTBL_ENTRY _ZTI9S19017C13[];
extern  VTBL_ENTRY _ZTV9S19017C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C13[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S19017C12;
extern VTBL_ENTRY _ZTI9S19017C12[];
extern  VTBL_ENTRY _ZTV9S19017C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C15;
extern VTBL_ENTRY _ZTI9S19017C15[];
extern  VTBL_ENTRY _ZTV9S19017C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C14;
extern VTBL_ENTRY _ZTI9S19017C14[];
extern  VTBL_ENTRY _ZTV9S19017C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C14[];
extern Class_Descriptor cd_S19017C13;
extern VTBL_ENTRY _ZTI9S19017C13[];
extern  VTBL_ENTRY _ZTV9S19017C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C13[];
extern Class_Descriptor cd_S19017C16;
extern VTBL_ENTRY _ZTI9S19017C16[];
extern  VTBL_ENTRY _ZTV9S19017C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C16[];
extern Class_Descriptor cd_S19017C9;
extern VTBL_ENTRY _ZTI8S19017C9[];
extern  VTBL_ENTRY _ZTV8S19017C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C9[];
extern Class_Descriptor cd_S19017C11;
extern VTBL_ENTRY _ZTI9S19017C11[];
extern  VTBL_ENTRY _ZTV9S19017C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C11[];
extern Class_Descriptor cd_S19017C8;
extern VTBL_ENTRY _ZTI8S19017C8[];
extern  VTBL_ENTRY _ZTV8S19017C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C8[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C21;
extern VTBL_ENTRY _ZTI8S2014C21[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19017C5;
extern VTBL_ENTRY _ZTI8S19017C5[];
extern  VTBL_ENTRY _ZTV8S19017C5[];
extern Class_Descriptor cd_S19017C15;
extern VTBL_ENTRY _ZTI9S19017C15[];
extern  VTBL_ENTRY _ZTV9S19017C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C15[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19017C17;
extern VTBL_ENTRY _ZTI9S19017C17[];
extern  VTBL_ENTRY _ZTV9S19017C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19017C17[];
static Base_Class bases_S19017C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2014C28,    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_S19017C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(20,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19017C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(40,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
    7, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(40,28), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19017C2,    ABISELECT(8,4), //bcp->offset
    17, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(168,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
    11, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(168,112), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(180,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19017C9,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19017C13,    ABISELECT(184,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19017C9,    ABISELECT(240,160), //bcp->offset
    80, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19017C12,    ABISELECT(184,124), //bcp->offset
    70, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(89,57), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19017C15,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19017C14,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19017C13,    ABISELECT(264,172), //bcp->offset
    88, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19017C16,    ABISELECT(120,84), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19017C9,    ABISELECT(136,92), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19017C11,    ABISELECT(80,52), //bcp->offset
    39, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19017C8,    ABISELECT(56,40), //bcp->offset
    26, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S2014C21,    ABISELECT(280,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(313,205), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19017C5,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19017C15,    ABISELECT(304,200), //bcp->offset
    105, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(288,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19017C17,    ABISELECT(280,184), //bcp->offset
    94, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19017C1[];
extern void _ZN8S19017C1D1Ev();
extern void _ZN8S19017C1D0Ev();
extern void _ZN8S19017C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19017C1D1Ev,_ZTv0_n12_N8S19017C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19017C1D1Ev,_ZThn4_N8S19017C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C1D0Ev,_ZTv0_n12_N8S19017C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19017C1D0Ev,_ZThn4_N8S19017C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19017C1D1Ev,_ZTvn24_n12_N8S19017C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19017C1D0Ev,_ZTvn24_n12_N8S19017C1D0Ev)();
extern void ABISELECT(_ZTv0_n88_N8S19017C1D1Ev,_ZTv0_n44_N8S19017C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19017C1D1Ev,_ZThn40_N8S19017C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19017C1D0Ev,_ZTv0_n44_N8S19017C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19017C1D0Ev,_ZThn40_N8S19017C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn24_n88_N8S19017C1D1Ev,_ZTvn12_n44_N8S19017C1D1Ev)();
extern void ABISELECT(_ZTvn24_n88_N8S19017C1D0Ev,_ZTvn12_n44_N8S19017C1D0Ev)();
extern void ABISELECT(_ZTvn64_n88_N8S19017C1D1Ev,_ZTvn44_n44_N8S19017C1D1Ev)();
extern void ABISELECT(_ZTvn64_n88_N8S19017C1D0Ev,_ZTvn44_n44_N8S19017C1D0Ev)();
extern void ABISELECT(_ZTvn80_n88_N8S19017C1D1Ev,_ZTvn52_n44_N8S19017C1D1Ev)();
extern void ABISELECT(_ZTvn80_n88_N8S19017C1D0Ev,_ZTvn52_n44_N8S19017C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19017C1D1Ev,_ZTv0_n12_N8S19017C1D1Ev)();
extern void ABISELECT(_ZThn168_N8S19017C1D1Ev,_ZThn112_N8S19017C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C1D0Ev,_ZTv0_n12_N8S19017C1D0Ev)();
extern void ABISELECT(_ZThn168_N8S19017C1D0Ev,_ZThn112_N8S19017C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19017C1D1Ev,_ZTv0_n32_N8S19017C1D1Ev)();
extern void ABISELECT(_ZThn184_N8S19017C1D1Ev,_ZThn124_N8S19017C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19017C1D0Ev,_ZTv0_n32_N8S19017C1D0Ev)();
extern void ABISELECT(_ZThn184_N8S19017C1D0Ev,_ZThn124_N8S19017C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19017C1D1Ev,_ZTv0_n24_N8S19017C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S19017C1D1Ev,_ZThn160_N8S19017C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19017C1D0Ev,_ZTv0_n24_N8S19017C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S19017C1D0Ev,_ZThn160_N8S19017C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19017C1D1Ev,_ZTv0_n16_N8S19017C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19017C1D1Ev,_ZThn172_N8S19017C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19017C1D0Ev,_ZTv0_n16_N8S19017C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19017C1D0Ev,_ZThn172_N8S19017C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19017C1D1Ev,_ZTv0_n36_N8S19017C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19017C1D1Ev,_ZThn184_N8S19017C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19017C1D0Ev,_ZTv0_n36_N8S19017C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19017C1D0Ev,_ZThn184_N8S19017C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19017C1D1Ev,_ZTv0_n28_N8S19017C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S19017C1D1Ev,_ZThn200_N8S19017C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19017C1D0Ev,_ZTv0_n28_N8S19017C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S19017C1D0Ev,_ZThn200_N8S19017C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19017C1[] = {
  ABISELECT(304,200),
  0,
  ABISELECT(280,184),
  ABISELECT(264,172),
  0,
  ABISELECT(240,160),
  ABISELECT(184,124),
  ABISELECT(180,120),
  ABISELECT(168,112),
  0,
  ABISELECT(56,40),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&_ZN8S19017C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19017C12v1Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C1D1Ev,_ZTv0_n12_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C1D0Ev,_ZTv0_n12_N8S19017C1D0Ev),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19017C1D1Ev,_ZTvn24_n12_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19017C1D0Ev,_ZTvn24_n12_N8S19017C1D0Ev),
  ABISELECT(-56,-40),
  ABISELECT(208,132),
  ABISELECT(-56,-40),
  ABISELECT(-48,-36),
  ABISELECT(184,120),
  ABISELECT(128,84),
  ABISELECT(124,80),
  ABISELECT(112,72),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19017C1D1Ev,_ZTv0_n44_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19017C1D0Ev,_ZTv0_n44_N8S19017C1D0Ev),
  ABISELECT(184,120),
  ABISELECT(-72,-48),
  ABISELECT(104,72),
  ABISELECT(-80,-52),
  ABISELECT(100,68),
  ABISELECT(88,60),
  ABISELECT(160,108),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n88_N8S19017C1D1Ev,_ZTvn12_n44_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n88_N8S19017C1D0Ev,_ZTvn12_n44_N8S19017C1D0Ev),
  ABISELECT(60,36),
  ABISELECT(48,28),
  ABISELECT(144,88),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19017C1D1Ev,_ZTvn44_n44_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19017C1D0Ev,_ZTvn44_n44_N8S19017C1D0Ev),
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n88_N8S19017C1D1Ev,_ZTvn52_n44_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n88_N8S19017C1D0Ev,_ZTvn52_n44_N8S19017C1D0Ev),
  ABISELECT(-168,-112),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C1D1Ev,_ZTv0_n12_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C1D0Ev,_ZTv0_n12_N8S19017C1D0Ev),
  ABISELECT(-184,-124),
  ABISELECT(-176,-120),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-184,-124),
  ABISELECT(-16,-12),
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19017C1D1Ev,_ZTv0_n32_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19017C1D0Ev,_ZTv0_n32_N8S19017C1D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19017C1D1Ev,_ZTv0_n24_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19017C1D0Ev,_ZTv0_n24_N8S19017C1D0Ev),
  ABISELECT(-264,-172),
  ABISELECT(-96,-60),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19017C1D1Ev,_ZTv0_n16_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19017C1D0Ev,_ZTv0_n16_N8S19017C1D0Ev),
  ABISELECT(-280,-184),
  ABISELECT(24,16),
  ABISELECT(-100,-64),
  ABISELECT(-112,-72),
  ABISELECT(-280,-184),
  ABISELECT(-40,-24),
  ABISELECT(-280,-184),
  ABISELECT(-280,-184),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19017C1D1Ev,_ZTv0_n36_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19017C1D0Ev,_ZTv0_n36_N8S19017C1D0Ev),
  ABISELECT(-304,-200),
  ABISELECT(-124,-80),
  ABISELECT(-136,-88),
  ABISELECT(-64,-40),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI8S19017C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19017C1D1Ev,_ZTv0_n28_N8S19017C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19017C1D0Ev,_ZTv0_n28_N8S19017C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19017C1[];
extern void _ZN8S19017C8D1Ev();
extern void _ZN8S19017C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C8__8S19017C1[] = {
  ABISELECT(208,132),
  ABISELECT(-56,-40),
  ABISELECT(-48,-36),
  ABISELECT(184,120),
  ABISELECT(128,84),
  ABISELECT(124,80),
  ABISELECT(112,72),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&_ZN8S19017C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C8D0Ev,
};
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C98S19017C8__8S19017C1[] = {
  ABISELECT(124,80),
  ABISELECT(112,72),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S19017C9D1Ev,_ZThn72_N8S19017C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S19017C9D0Ev,_ZThn72_N8S19017C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C98S19017C8__8S19017C1[] = {
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern void _ZN9S19017C11D1Ev();
extern void _ZN9S19017C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(184,120),
  ABISELECT(-72,-48),
  ABISELECT(104,72),
  ABISELECT(-80,-52),
  ABISELECT(100,68),
  ABISELECT(88,60),
  ABISELECT(160,108),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&_ZN9S19017C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C11D0Ev,
};
extern void _ZN9S19017C14D1Ev();
extern void _ZN9S19017C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C149S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(100,68),
  ABISELECT(88,60),
  ABISELECT(160,108),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&_ZN9S19017C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C14D0Ev,
};
extern void _ZN9S19017C15D1Ev();
extern void _ZN9S19017C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C159S19017C149S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(100,68),
  ABISELECT(88,60),
  ABISELECT(160,108),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&_ZN9S19017C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn160_N9S19017C15D1Ev,_ZThn108_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn160_N9S19017C15D0Ev,_ZThn108_N9S19017C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C159S19017C149S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-160,-108),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-160),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev)();
extern void ABISELECT(_ZThn88_N9S19017C15D1Ev,_ZThn60_N9S19017C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev)();
extern void ABISELECT(_ZThn88_N9S19017C15D0Ev,_ZThn60_N9S19017C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__A1__9S19017C159S19017C149S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev)();
extern void ABISELECT(_ZThn160_N9S19017C14D1Ev,_ZThn108_N9S19017C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev)();
extern void ABISELECT(_ZThn160_N9S19017C14D0Ev,_ZThn108_N9S19017C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C149S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-160,-108),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-160),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev)();
extern void ABISELECT(_ZThn88_N9S19017C14D1Ev,_ZThn60_N9S19017C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev)();
extern void ABISELECT(_ZThn88_N9S19017C14D0Ev,_ZThn60_N9S19017C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C149S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI9S19017C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev),
};
extern void _ZN9S19017C16D1Ev();
extern void _ZN9S19017C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C169S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(60,36),
  ABISELECT(48,28),
  ABISELECT(144,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&_ZN9S19017C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev)();
extern void ABISELECT(_ZThn144_N9S19017C16D1Ev,_ZThn88_N9S19017C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev)();
extern void ABISELECT(_ZThn144_N9S19017C16D0Ev,_ZThn88_N9S19017C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C13__9S19017C169S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-144,-88),
  ABISELECT(-96,-60),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev)();
extern void ABISELECT(_ZThn48_N9S19017C16D1Ev,_ZThn28_N9S19017C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev)();
extern void ABISELECT(_ZThn48_N9S19017C16D0Ev,_ZThn28_N9S19017C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C169S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19017C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev),
};
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C99S19017C118S19017C8__A2__8S19017C1[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19017C9D1Ev,_ZThn20_N8S19017C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19017C9D0Ev,_ZThn20_N8S19017C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C99S19017C118S19017C8__A2__8S19017C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19017C11D1Ev,_ZTv0_n32_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S19017C11D1Ev,_ZThn72_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19017C11D0Ev,_ZTv0_n32_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn104_N9S19017C11D0Ev,_ZThn72_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C12__9S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-176,-120),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-184,-124),
  ABISELECT(-16,-12),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19017C11D1Ev,_ZTv0_n32_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19017C11D0Ev,_ZTv0_n32_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn88_N9S19017C11D1Ev,_ZThn60_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn88_N9S19017C11D0Ev,_ZThn60_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19017C11D1Ev,_ZTv0_n24_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S19017C11D1Ev,_ZThn108_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C11D0Ev,_ZTv0_n24_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S19017C11D0Ev,_ZThn108_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-160,-108),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-160),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C11D1Ev,_ZTv0_n24_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C11D0Ev,_ZTv0_n24_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C2__9S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19017C11D1Ev,_ZTvn24_n12_N9S19017C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19017C11D0Ev,_ZTvn24_n12_N9S19017C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C58S19017C2__A2__9S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C11D1Ev,_ZTvn24_n12_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C11D0Ev,_ZTvn24_n12_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZThn40_N9S19017C11D1Ev,_ZThn32_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S19017C11D0Ev,_ZThn32_N9S19017C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19017C16__9S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(60,36),
  ABISELECT(48,28),
  ABISELECT(144,88),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19017C11D1Ev,_ZThn32_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19017C11D0Ev,_ZThn32_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19017C11D1Ev,_ZTv0_n16_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn184_N9S19017C11D1Ev,_ZThn120_N9S19017C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19017C11D0Ev,_ZTv0_n16_N9S19017C11D0Ev)();
extern void ABISELECT(_ZThn184_N9S19017C11D0Ev,_ZThn120_N9S19017C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C13__A1__9S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(-184,-120),
  ABISELECT(-96,-60),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C11D1Ev,_ZTv0_n16_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19017C11D0Ev,_ZTv0_n16_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZThn56_N9S19017C11D1Ev,_ZThn40_N9S19017C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S19017C11D0Ev,_ZThn40_N9S19017C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C9__A__9S19017C118S19017C8__8S19017C1[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(-136,-92),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19017C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19017C11D1Ev,_ZThn40_N9S19017C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19017C11D0Ev,_ZThn40_N9S19017C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S19017C8D1Ev,_ZThn72_N8S19017C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S19017C8D0Ev,_ZThn72_N8S19017C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C8__8S19017C1[] = {
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19017C8D1Ev,_ZThn12_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19017C8D0Ev,_ZThn12_N8S19017C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19017C11__8S19017C8__8S19017C1[] = {
  ABISELECT(184,120),
  ABISELECT(-72,-48),
  ABISELECT(104,72),
  ABISELECT(-80,-52),
  ABISELECT(100,68),
  ABISELECT(88,60),
  ABISELECT(160,108),
  ABISELECT(-80,-52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19017C8D1Ev,_ZThn12_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19017C8D0Ev,_ZThn12_N8S19017C8D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19017C8D1Ev,_ZTv0_n32_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S19017C8D1Ev,_ZThn84_N8S19017C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19017C8D0Ev,_ZTv0_n32_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S19017C8D0Ev,_ZThn84_N8S19017C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C12__8S19017C8__8S19017C1[] = {
  ABISELECT(-128,-84),
  ABISELECT(-176,-120),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-184,-124),
  ABISELECT(-16,-12),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19017C8D1Ev,_ZTv0_n32_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19017C8D0Ev,_ZTv0_n32_N8S19017C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19017C8D1Ev,_ZTv0_n24_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn184_N8S19017C8D1Ev,_ZThn120_N8S19017C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19017C8D0Ev,_ZTv0_n24_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn184_N8S19017C8D0Ev,_ZThn120_N8S19017C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__A1__8S19017C8__8S19017C1[] = {
  ABISELECT(-184,-120),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-160),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19017C8D1Ev,_ZTv0_n24_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19017C8D0Ev,_ZTv0_n24_N8S19017C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C2__8S19017C8__8S19017C1[] = {
  ABISELECT(48,36),
  ABISELECT(48,36),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S19017C8D1Ev,_ZTvn24_n12_N8S19017C8D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19017C8D0Ev,_ZTvn24_n12_N8S19017C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C58S19017C2__A2__8S19017C8__8S19017C1[] = {
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19017C8D1Ev,_ZTvn24_n12_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19017C8D0Ev,_ZTvn24_n12_N8S19017C8D0Ev),
};
extern void ABISELECT(_ZThn64_N8S19017C8D1Ev,_ZThn44_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19017C8D0Ev,_ZThn44_N8S19017C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19017C169S19017C11__8S19017C8__8S19017C1[] = {
  ABISELECT(60,36),
  ABISELECT(48,28),
  ABISELECT(144,88),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19017C8D1Ev,_ZThn44_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19017C8D0Ev,_ZThn44_N8S19017C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19017C8D1Ev,_ZTv0_n16_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn208_N8S19017C8D1Ev,_ZThn132_N8S19017C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19017C8D0Ev,_ZTv0_n16_N8S19017C8D0Ev)();
extern void ABISELECT(_ZThn208_N8S19017C8D0Ev,_ZThn132_N8S19017C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C13__A1__8S19017C8__8S19017C1[] = {
  ABISELECT(-208,-132),
  ABISELECT(-96,-60),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19017C8D1Ev,_ZTv0_n16_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19017C8D0Ev,_ZTv0_n16_N8S19017C8D0Ev),
};
extern void ABISELECT(_ZThn80_N8S19017C8D1Ev,_ZThn52_N8S19017C8D1Ev)();
extern void ABISELECT(_ZThn80_N8S19017C8D0Ev,_ZThn52_N8S19017C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C99S19017C11__A2__8S19017C8__8S19017C1[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(-136,-92),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19017C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19017C8D1Ev,_ZThn52_N8S19017C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19017C8D0Ev,_ZThn52_N8S19017C8D0Ev),
};
extern void _ZN9S19017C12D1Ev();
extern void _ZN9S19017C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C12__8S19017C1[] = {
  ABISELECT(-176,-120),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-184,-124),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&_ZN9S19017C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C12D0Ev,
};
extern void _ZN9S19017C13D1Ev();
extern void _ZN9S19017C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C139S19017C12__8S19017C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&_ZN9S19017C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C139S19017C12__8S19017C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C12__8S19017C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19017C12D1Ev,_ZThn36_N9S19017C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19017C12D0Ev,_ZThn36_N9S19017C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C12__8S19017C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-160),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C2__9S19017C12__8S19017C1[] = {
  ABISELECT(176,120),
  ABISELECT(176,120),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D1Ev,_ZTv0_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C12D0Ev,_ZTv0_n12_N9S19017C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19017C12D1Ev,_ZTvn24_n12_N9S19017C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19017C12D0Ev,_ZTvn24_n12_N9S19017C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C58S19017C2__A2__9S19017C12__8S19017C1[] = {
  ABISELECT(144,96),
  (VTBL_ENTRY)&(_ZTI9S19017C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C12D1Ev,_ZTvn24_n12_N9S19017C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19017C12D0Ev,_ZTvn24_n12_N9S19017C12D0Ev),
};
extern void _ZN8S19017C9D1Ev();
extern void _ZN8S19017C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19017C9__A1__8S19017C1[] = {
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&_ZN8S19017C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19017C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__8S19017C9__A1__8S19017C1[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19017C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev),
};
extern void _ZN9S19017C13D1Ev();
extern void _ZN9S19017C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C13__A1__8S19017C1[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&_ZN9S19017C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C13__A1__8S19017C1[] = {
  ABISELECT(96,60),
  ABISELECT(96,60),
  (VTBL_ENTRY)&(_ZTI9S19017C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D1Ev,_ZTv0_n12_N9S19017C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C13D0Ev,_ZTv0_n12_N9S19017C13D0Ev),
};
extern void _ZN9S19017C17D1Ev();
extern void _ZN9S19017C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C17__8S19017C1[] = {
  ABISELECT(24,16),
  ABISELECT(-100,-64),
  ABISELECT(-112,-72),
  ABISELECT(-280,-184),
  ABISELECT(-40,-24),
  ABISELECT(-280,-184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C17[0]),
  (VTBL_ENTRY)&_ZN9S19017C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C17D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19017C17D1Ev,_ZTv0_n24_N9S19017C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19017C17D0Ev,_ZTv0_n24_N9S19017C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C17__8S19017C1[] = {
  ABISELECT(40,24),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-160),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S19017C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C17D1Ev,_ZTv0_n24_N9S19017C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C17D0Ev,_ZTv0_n24_N9S19017C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C17D1Ev,_ZTv0_n12_N9S19017C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C17D0Ev,_ZTv0_n12_N9S19017C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__9S19017C17__8S19017C1[] = {
  ABISELECT(112,72),
  ABISELECT(112,72),
  (VTBL_ENTRY)&(_ZTI9S19017C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C17D1Ev,_ZTv0_n12_N9S19017C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C17D0Ev,_ZTv0_n12_N9S19017C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S19017C17D1Ev,_ZTv0_n28_N9S19017C17D1Ev)();
extern void ABISELECT(_ZThn24_N9S19017C17D1Ev,_ZThn16_N9S19017C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19017C17D0Ev,_ZTv0_n28_N9S19017C17D0Ev)();
extern void ABISELECT(_ZThn24_N9S19017C17D0Ev,_ZThn16_N9S19017C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19017C15__9S19017C17__8S19017C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-124,-80),
  ABISELECT(-136,-88),
  ABISELECT(-64,-40),
  ABISELECT(-304,-200),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19017C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19017C17D1Ev,_ZTv0_n28_N9S19017C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19017C17D0Ev,_ZTv0_n28_N9S19017C17D0Ev),
};
extern void _ZN9S19017C15D1Ev();
extern void _ZN9S19017C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19017C15__A1__8S19017C1[] = {
  ABISELECT(-124,-80),
  ABISELECT(-136,-88),
  ABISELECT(-64,-40),
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&_ZN9S19017C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19017C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C9__9S19017C15__A1__8S19017C1[] = {
  ABISELECT(64,40),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-160),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19017C5__A1__9S19017C15__A1__8S19017C1[] = {
  ABISELECT(136,88),
  ABISELECT(136,88),
  (VTBL_ENTRY)&(_ZTI9S19017C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev),
};
static  VTT_ENTRY vtt_S19017C1[] = {
  {&(_ZTV8S19017C1[14]),  14,114},
  {&(_ZTV8S19017C1[20]),  20,114},
  {&(_ZTV8S19017C1[24]),  24,114},
  {&(_ZTV8S19017C1[37]),  37,114},
  {&(_ZTV8S19017C1[68]),  68,114},
  {&(_ZTV8S19017C1[49]),  49,114},
  {&(_ZTV8S19017C1[78]),  78,114},
  {&(_ZTV8S19017C1[86]),  86,114},
  {&(_ZTV8S19017C1[56]),  56,114},
  {&(_ZTV8S19017C1[92]),  92,114},
  {&(_ZTV8S19017C1[63]),  63,114},
  {&(_ZTV8S19017C1[103]),  103,114},
  {&(_ZTV8S19017C1[112]),  112,114},
  {&(_tg__ZTV8S19017C8__8S19017C1[10]),  10,12},
  {&(_tg__ZTV8S19017C98S19017C8__8S19017C1[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C98S19017C8__8S19017C1[3]),  3,5},
  {&(_tg__ZTV9S19017C118S19017C8__8S19017C1[10]),  10,12},
  {&(_tg__ZTV9S19017C149S19017C118S19017C8__8S19017C1[7]),  7,9},
  {&(_tg__ZTV9S19017C159S19017C149S19017C118S19017C8__8S19017C1[6]),  6,8},
  {&(_tg__ZTV8S19017C9__9S19017C159S19017C149S19017C118S19017C8__8S19017C1[6]),  6,8},
  {&(_tg__ZTV8S19017C5__A1__9S19017C159S19017C149S19017C118S19017C8__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C9__9S19017C149S19017C118S19017C8__8S19017C1[6]),  6,8},
  {&(_tg__ZTV8S19017C5__9S19017C149S19017C118S19017C8__8S19017C1[3]),  3,5},
  {&(_tg__ZTV9S19017C169S19017C118S19017C8__8S19017C1[5]),  5,7},
  {&(_tg__ZTV9S19017C13__9S19017C169S19017C118S19017C8__8S19017C1[4]),  4,6},
  {&(_tg__ZTV8S19017C5__9S19017C169S19017C118S19017C8__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C99S19017C118S19017C8__A2__8S19017C1[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C99S19017C118S19017C8__A2__8S19017C1[3]),  3,5},
  {&(_tg__ZTV9S19017C12__9S19017C118S19017C8__8S19017C1[8]),  8,10},
  {&(_tg__ZTV8S19017C5__9S19017C118S19017C8__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C9__9S19017C118S19017C8__8S19017C1[6]),  6,8},
  {&(_tg__ZTV8S19017C2__9S19017C118S19017C8__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C58S19017C2__A2__9S19017C118S19017C8__8S19017C1[2]),  2,4},
  {&(_tg__ZTV9S19017C16__9S19017C118S19017C8__8S19017C1[5]),  5,7},
  {&(_tg__ZTV9S19017C13__A1__9S19017C118S19017C8__8S19017C1[4]),  4,6},
  {&(_tg__ZTV8S19017C9__A__9S19017C118S19017C8__8S19017C1[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C8__8S19017C1[3]),  3,5},
  {&(_tg__ZTV9S19017C11__8S19017C8__8S19017C1[10]),  10,12},
  {&(_tg__ZTV9S19017C12__8S19017C8__8S19017C1[8]),  8,10},
  {&(_tg__ZTV8S19017C9__A1__8S19017C8__8S19017C1[6]),  6,8},
  {&(_tg__ZTV8S19017C2__8S19017C8__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C58S19017C2__A2__8S19017C8__8S19017C1[2]),  2,4},
  {&(_tg__ZTV9S19017C169S19017C11__8S19017C8__8S19017C1[5]),  5,7},
  {&(_tg__ZTV9S19017C13__A1__8S19017C8__8S19017C1[4]),  4,6},
  {&(_tg__ZTV8S19017C99S19017C11__A2__8S19017C8__8S19017C1[5]),  5,7},
  {&(_tg__ZTV9S19017C12__8S19017C1[7]),  7,9},
  {&(_tg__ZTV9S19017C139S19017C12__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C139S19017C12__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C12__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C9__9S19017C12__8S19017C1[6]),  6,8},
  {&(_tg__ZTV8S19017C2__9S19017C12__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C58S19017C2__A2__9S19017C12__8S19017C1[2]),  2,4},
  {&(_tg__ZTV8S19017C9__A1__8S19017C1[5]),  5,7},
  {&(_tg__ZTV8S19017C5__8S19017C9__A1__8S19017C1[3]),  3,5},
  {&(_tg__ZTV9S19017C13__A1__8S19017C1[3]),  3,5},
  {&(_tg__ZTV8S19017C5__9S19017C13__A1__8S19017C1[3]),  3,5},
  {&(_tg__ZTV9S19017C17__8S19017C1[8]),  8,10},
  {&(_tg__ZTV8S19017C9__9S19017C17__8S19017C1[6]),  6,8},
  {&(_tg__ZTV8S19017C5__9S19017C17__8S19017C1[3]),  3,5},
  {&(_tg__ZTV9S19017C15__9S19017C17__8S19017C1[7]),  7,9},
  {&(_tg__ZTV9S19017C15__A1__8S19017C1[6]),  6,8},
  {&(_tg__ZTV8S19017C9__9S19017C15__A1__8S19017C1[6]),  6,8},
  {&(_tg__ZTV8S19017C5__A1__9S19017C15__A1__8S19017C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19017C1[];
extern  VTBL_ENTRY _ZTV8S19017C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19017C1[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19017C17D0Ev,_ZTv0_n28_N9S19017C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19017C17D0Ev,_ZThn16_N9S19017C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19017C17D1Ev,_ZTv0_n28_N9S19017C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19017C17D1Ev,_ZThn16_N9S19017C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C12D0Ev,_ZTv0_n24_N9S19017C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C12D0Ev,_ZThn36_N9S19017C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C12D1Ev,_ZTv0_n24_N9S19017C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19017C12D1Ev,_ZThn36_N9S19017C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19017C8D0Ev,_ZTv0_n16_N8S19017C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19017C8D0Ev,_ZThn132_N8S19017C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19017C8D1Ev,_ZTv0_n16_N8S19017C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19017C8D1Ev,_ZThn132_N8S19017C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19017C8D0Ev,_ZTv0_n24_N8S19017C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19017C8D0Ev,_ZThn120_N8S19017C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19017C8D1Ev,_ZTv0_n24_N8S19017C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19017C8D1Ev,_ZThn120_N8S19017C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19017C8D0Ev,_ZTv0_n32_N8S19017C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19017C8D0Ev,_ZThn84_N8S19017C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19017C8D1Ev,_ZTv0_n32_N8S19017C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19017C8D1Ev,_ZThn84_N8S19017C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C8D0Ev,_ZTv0_n12_N8S19017C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19017C8D0Ev,_ZThn72_N8S19017C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C8D1Ev,_ZTv0_n12_N8S19017C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19017C8D1Ev,_ZThn72_N8S19017C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C11D0Ev,_ZTv0_n16_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19017C11D0Ev,_ZThn120_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C11D1Ev,_ZTv0_n16_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19017C11D1Ev,_ZThn120_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C11D0Ev,_ZTv0_n24_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C11D0Ev,_ZThn108_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C11D1Ev,_ZTv0_n24_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C11D1Ev,_ZThn108_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C11D0Ev,_ZTv0_n12_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C11D0Ev,_ZThn60_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C11D1Ev,_ZTv0_n12_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C11D1Ev,_ZThn60_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19017C11D0Ev,_ZTv0_n32_N9S19017C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19017C11D0Ev,_ZThn72_N9S19017C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19017C11D1Ev,_ZTv0_n32_N9S19017C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19017C11D1Ev,_ZThn72_N9S19017C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C16D0Ev,_ZTv0_n12_N9S19017C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19017C16D0Ev,_ZThn28_N9S19017C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C16D1Ev,_ZTv0_n12_N9S19017C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19017C16D1Ev,_ZThn28_N9S19017C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C16D0Ev,_ZTv0_n16_N9S19017C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19017C16D0Ev,_ZThn88_N9S19017C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19017C16D1Ev,_ZTv0_n16_N9S19017C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19017C16D1Ev,_ZThn88_N9S19017C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C14D0Ev,_ZTv0_n12_N9S19017C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C14D0Ev,_ZThn60_N9S19017C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C14D1Ev,_ZTv0_n12_N9S19017C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C14D1Ev,_ZThn60_N9S19017C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C14D0Ev,_ZTv0_n24_N9S19017C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C14D0Ev,_ZThn108_N9S19017C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C14D1Ev,_ZTv0_n24_N9S19017C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C14D1Ev,_ZThn108_N9S19017C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D0Ev,_ZTv0_n12_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C15D0Ev,_ZThn60_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19017C15D1Ev,_ZTv0_n12_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19017C15D1Ev,_ZThn60_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D0Ev,_ZTv0_n24_N9S19017C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C15D0Ev,_ZThn108_N9S19017C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19017C15D1Ev,_ZTv0_n24_N9S19017C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19017C15D1Ev,_ZThn108_N9S19017C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D0Ev,_ZTv0_n12_N8S19017C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19017C9D0Ev,_ZThn20_N8S19017C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19017C9D0Ev,_ZThn72_N8S19017C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C9D1Ev,_ZTv0_n12_N8S19017C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19017C9D1Ev,_ZThn20_N8S19017C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19017C9D1Ev,_ZThn72_N8S19017C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19017C1D0Ev,_ZTv0_n28_N8S19017C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19017C1D0Ev,_ZThn200_N8S19017C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19017C1D1Ev,_ZTv0_n28_N8S19017C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19017C1D1Ev,_ZThn200_N8S19017C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19017C1D0Ev,_ZTv0_n36_N8S19017C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19017C1D0Ev,_ZThn184_N8S19017C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19017C1D1Ev,_ZTv0_n36_N8S19017C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19017C1D1Ev,_ZThn184_N8S19017C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19017C1D0Ev,_ZTv0_n16_N8S19017C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19017C1D0Ev,_ZThn172_N8S19017C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19017C1D1Ev,_ZTv0_n16_N8S19017C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19017C1D1Ev,_ZThn172_N8S19017C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19017C1D0Ev,_ZTv0_n24_N8S19017C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19017C1D0Ev,_ZThn160_N8S19017C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19017C1D1Ev,_ZTv0_n24_N8S19017C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19017C1D1Ev,_ZThn160_N8S19017C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19017C1D0Ev,_ZTv0_n32_N8S19017C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19017C1D0Ev,_ZThn124_N8S19017C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19017C1D1Ev,_ZTv0_n32_N8S19017C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19017C1D1Ev,_ZThn124_N8S19017C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19017C1D0Ev,_ZTv0_n44_N8S19017C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19017C1D0Ev,_ZThn40_N8S19017C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19017C1D1Ev,_ZTv0_n44_N8S19017C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19017C1D1Ev,_ZThn40_N8S19017C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C1D0Ev,_ZTv0_n12_N8S19017C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19017C1D0Ev,_ZThn112_N8S19017C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19017C1D0Ev,_ZThn4_N8S19017C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19017C1D1Ev,_ZTv0_n12_N8S19017C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19017C1D1Ev,_ZThn112_N8S19017C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19017C1D1Ev,_ZThn4_N8S19017C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19017C1 = {  "S19017C1", // class name
  bases_S19017C1, 36,
  &(vtc_S19017C1[0]), // expected_vtbl_contents
  &(vtt_S19017C1[0]), // expected_vtt_contents
  ABISELECT(320,208), // object size
  NSPAIRA(_ZTI8S19017C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19017C1),114, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19017C1),63, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C5  : S2014C28 {
  ::S2014C28 s19016c5f0;
  virtual  ~S19016C5(); // _ZN8S19016C5D1Ev
  S19016C5(); // tgen
};
//SIG(-1 S19016C5) C1{ BC2{ m} vd FC2}


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

static void Test_S19016C5()
{
  extern Class_Descriptor cd_S19016C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19016C5, buf);
    S19016C5 *dp, &lv = *(dp=new (buf) S19016C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19016C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C5)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19016C5");
    check_field_offset(lv, s19016c5f0, ABISELECT(8,4), "S19016C5.s19016c5f0");
    test_class_info(&lv, &cd_S19016C5);
    dp->~S19016C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C5(Test_S19016C5, "S19016C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19016C5C1Ev();
extern void _ZN8S19016C5D1Ev();
Name_Map name_map_S19016C5[] = {
  NSPAIR(_ZN8S19016C5C1Ev),
  NSPAIR(_ZN8S19016C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
static Base_Class bases_S19016C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19016C5[];
extern void _ZN8S19016C5D1Ev();
extern void _ZN8S19016C5D0Ev();
static  VTBL_ENTRY vtc_S19016C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C5[0]),
  (VTBL_ENTRY)&_ZN8S19016C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
Class_Descriptor cd_S19016C5 = {  "S19016C5", // class name
  bases_S19016C5, 1,
  &(vtc_S19016C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19016C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19016C5),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  S19016C3  : S2014C38 , S19016C5 , S2014C28 , S3222C8_nt {
  short s19016c3f0:16;
  long s19016c3f1;
  ~S19016C3(); // tgen
  S19016C3(); // tgen
};
//SIG(-1 S19016C3) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 Fl}


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

static void Test_S19016C3()
{
  extern Class_Descriptor cd_S19016C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19016C3, buf);
    S19016C3 *dp, &lv = *(dp=new (buf) S19016C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19016C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C3)");
    check_base_class_offset(lv, (S2014C38*), 0, "S19016C3");
    check_base_class_offset(lv, (S2014C28*)(S19016C5*), 0, "S19016C3");
    check_base_class_offset(lv, (S19016C5*), 0, "S19016C3");
    /*is_ambiguous_... S19016C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), ABISELECT(9,5), "S19016C3");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S19016C3");
    set_bf_and_test(lv, s19016c3f0, ABISELECT(16,12), 0, 16, 1, "S19016C3");
    set_bf_and_test(lv, s19016c3f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S19016C3");
    check_field_offset(lv, s19016c3f1, ABISELECT(24,16), "S19016C3.s19016c3f1");
    test_class_info(&lv, &cd_S19016C3);
    dp->~S19016C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C3(Test_S19016C3, "S19016C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19016C3C1Ev();
extern void _ZN8S19016C3D1Ev();
Name_Map name_map_S19016C3[] = {
  NSPAIR(_ZN8S19016C3C1Ev),
  NSPAIR(_ZN8S19016C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19016C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19016C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19016C3[];
extern void _ZN8S19016C3D1Ev();
extern void _ZN8S19016C3D0Ev();
static  VTBL_ENTRY vtc_S19016C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C3[0]),
  (VTBL_ENTRY)&_ZN8S19016C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S19016C3[];
extern  VTBL_ENTRY _ZTV8S19016C3[];
Class_Descriptor cd_S19016C3 = {  "S19016C3", // class name
  bases_S19016C3, 5,
  &(vtc_S19016C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19016C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19016C3),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  S19016C2  : S19016C3 , S19016C5 {
  int s19016c2f0;
  ~S19016C2(); // tgen
  S19016C2(); // tgen
};
//SIG(-1 S19016C2) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 Fl} BC4 Fi}


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

static void Test_S19016C2()
{
  extern Class_Descriptor cd_S19016C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S19016C2, buf);
    S19016C2 *dp, &lv = *(dp=new (buf) S19016C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S19016C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C2)");
    check_base_class_offset(lv, (S2014C38*)(S19016C3*), 0, "S19016C2");
    check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C3*), 0, "S19016C2");
    check_base_class_offset(lv, (S19016C5*)(S19016C3*), 0, "S19016C2");
    /*is_ambiguous_... S19016C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C3*), ABISELECT(9,5), "S19016C2");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C3*), ABISELECT(12,8), "S19016C2");
    check_base_class_offset(lv, (S19016C3*), 0, "S19016C2");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(32,20), "S19016C2");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*), ABISELECT(32,20), "S19016C2");
    check_field_offset(lv, s19016c2f0, ABISELECT(44,28), "S19016C2.s19016c2f0");
    test_class_info(&lv, &cd_S19016C2);
    dp->~S19016C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C2(Test_S19016C2, "S19016C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S19016C2C1Ev();
extern void _ZN8S19016C2D1Ev();
Name_Map name_map_S19016C2[] = {
  NSPAIR(_ZN8S19016C2C1Ev),
  NSPAIR(_ZN8S19016C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C3;
extern VTBL_ENTRY _ZTI8S19016C3[];
extern  VTBL_ENTRY _ZTV8S19016C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
static Base_Class bases_S19016C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19016C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S19016C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(32,20), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19016C2[];
extern void _ZN8S19016C2D1Ev();
extern void _ZN8S19016C2D0Ev();
extern void ABISELECT(_ZThn32_N8S19016C2D1Ev,_ZThn20_N8S19016C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19016C2D0Ev,_ZThn20_N8S19016C2D0Ev)();
static  VTBL_ENTRY vtc_S19016C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C2[0]),
  (VTBL_ENTRY)&_ZN8S19016C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C2D0Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19016C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19016C2D1Ev,_ZThn20_N8S19016C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19016C2D0Ev,_ZThn20_N8S19016C2D0Ev),
};
extern VTBL_ENTRY _ZTI8S19016C2[];
extern  VTBL_ENTRY _ZTV8S19016C2[];
Class_Descriptor cd_S19016C2 = {  "S19016C2", // class name
  bases_S19016C2, 8,
  &(vtc_S19016C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S19016C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19016C2),8, //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  S19016C9  : virtual S2014C38 , virtual S19016C5 , virtual S3222C8_nt {
  void *s19016c9f0;
  ::S19762C18_nt s19016c9f1;
  virtual  ~S19016C9(); // _ZN8S19016C9D2Ev
  S19016C9(); // tgen
};
//SIG(-1 S19016C9) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S19016C9()
{
  extern Class_Descriptor cd_S19016C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19016C9, buf);
    S19016C9 *dp, &lv = *(dp=new (buf) S19016C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19016C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C9)");
    check_base_class_offset(lv, (S2014C38*), 0, "S19016C9");
    check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(24,12), "S19016C9");
    check_base_class_offset(lv, (S19016C5*), ABISELECT(24,12), "S19016C9");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S19016C9");
    check_field_offset(lv, s19016c9f0, ABISELECT(8,4), "S19016C9.s19016c9f0");
    check_field_offset(lv, s19016c9f1, ABISELECT(16,8), "S19016C9.s19016c9f1");
    test_class_info(&lv, &cd_S19016C9);
    dp->~S19016C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C9(Test_S19016C9, "S19016C9", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19016C9C1Ev();
extern void _ZN8S19016C9D2Ev();
Name_Map name_map_S19016C9[] = {
  NSPAIR(_ZN8S19016C9C1Ev),
  NSPAIR(_ZN8S19016C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19016C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19016C9[];
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19016C9D1Ev,_ZThn12_N8S19016C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19016C9D0Ev,_ZThn12_N8S19016C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19016C9[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19016C9[];
static  VTT_ENTRY vtt_S19016C9[] = {
  {&(_ZTV8S19016C9[5]),  5,12},
  {&(_ZTV8S19016C9[10]),  10,12},
};
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19016C9D0Ev,_ZThn12_N8S19016C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19016C9D1Ev,_ZThn12_N8S19016C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C9 = {  "S19016C9", // class name
  bases_S19016C9, 4,
  &(vtc_S19016C9[0]), // expected_vtbl_contents
  &(vtt_S19016C9[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19016C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19016C9),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19016C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C13  : virtual S19016C5 {
  __tsi64 s19016c13f0;
  ~S19016C13(); // tgen
  S19016C13(); // tgen
};
//SIG(-1 S19016C13) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S19016C13()
{
  extern Class_Descriptor cd_S19016C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19016C13, buf);
    S19016C13 *dp, &lv = *(dp=new (buf) S19016C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19016C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C13)");
    check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(16,12), "S19016C13");
    check_base_class_offset(lv, (S19016C5*), ABISELECT(16,12), "S19016C13");
    check_field_offset(lv, s19016c13f0, ABISELECT(8,4), "S19016C13.s19016c13f0");
    test_class_info(&lv, &cd_S19016C13);
    dp->~S19016C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C13(Test_S19016C13, "S19016C13", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19016C13C1Ev();
extern void _ZN9S19016C13D1Ev();
Name_Map name_map_S19016C13[] = {
  NSPAIR(_ZN9S19016C13C1Ev),
  NSPAIR(_ZN9S19016C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
static Base_Class bases_S19016C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19016C13[];
extern void _ZN9S19016C13D1Ev();
extern void _ZN9S19016C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19016C13D1Ev,_ZThn12_N9S19016C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19016C13D0Ev,_ZThn12_N9S19016C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19016C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&_ZN9S19016C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C13D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19016C13[];
static  VTT_ENTRY vtt_S19016C13[] = {
  {&(_ZTV9S19016C13[3]),  3,10},
  {&(_ZTV9S19016C13[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19016C13[];
extern  VTBL_ENTRY _ZTV9S19016C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C13[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19016C13D0Ev,_ZThn12_N9S19016C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19016C13D1Ev,_ZThn12_N9S19016C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C13 = {  "S19016C13", // class name
  bases_S19016C13, 2,
  &(vtc_S19016C13[0]), // expected_vtbl_contents
  &(vtt_S19016C13[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19016C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19016C13),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19016C13),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C12  : S19016C13 , virtual S2014C38 , virtual S3222C8_nt , virtual S19016C9 , virtual S19016C2 {
  long s19016c12f0;
  ::S19016C13 s19016c12f1;
  virtual  ~S19016C12(); // _ZN9S19016C12D2Ev
  S19016C12(); // tgen
};
//SIG(-1 S19016C12) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 Fl} BC3 Fi} vd Fl FC2}


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

static void Test_S19016C12()
{
  extern Class_Descriptor cd_S19016C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S19016C12, buf);
    S19016C12 *dp, &lv = *(dp=new (buf) S19016C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S19016C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C12)");
    /*is_ambiguous_... S19016C12::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(56,36), "S19016C12");
    check_base_class_offset(lv, (S19016C5*)(S19016C13*), ABISELECT(56,36), "S19016C12");
    check_base_class_offset(lv, (S19016C5*)(S19016C9*), ABISELECT(56,36), "S19016C12");
    check_base_class_offset(lv, (S19016C13*), 0, "S19016C12");
    /*is_ambiguous_... S19016C12::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), 0, "S19016C12");
    check_base_class_offset(lv, (S2014C38*)(S19016C9*), 0, "S19016C12");
    /*is_ambiguous_... S19016C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S19016C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*), ABISELECT(68,44), "S19016C12");
    check_base_class_offset(lv, (S19016C9*), ABISELECT(72,48), "S19016C12");
    check_base_class_offset(lv, (S2014C38*)(S19016C3*)(S19016C2*), ABISELECT(96,60), "S19016C12");
    check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C3*)(S19016C2*), ABISELECT(96,60), "S19016C12");
    check_base_class_offset(lv, (S19016C5*)(S19016C3*)(S19016C2*), ABISELECT(96,60), "S19016C12");
    /*is_ambiguous_... S19016C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C3*)(S19016C2*), ABISELECT(105,65), "S19016C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C3*)(S19016C2*), ABISELECT(108,68), "S19016C12");
    check_base_class_offset(lv, (S19016C3*)(S19016C2*), ABISELECT(96,60), "S19016C12");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C2*), ABISELECT(128,80), "S19016C12");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C2*), ABISELECT(128,80), "S19016C12");
    check_base_class_offset(lv, (S19016C2*), ABISELECT(96,60), "S19016C12");
    check_field_offset(lv, s19016c12f0, ABISELECT(16,12), "S19016C12.s19016c12f0");
    check_field_offset(lv, s19016c12f1, ABISELECT(24,16), "S19016C12.s19016c12f1");
    test_class_info(&lv, &cd_S19016C12);
    dp->~S19016C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C12(Test_S19016C12, "S19016C12", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN9S19016C12C1Ev();
extern void _ZN9S19016C12D2Ev();
Name_Map name_map_S19016C12[] = {
  NSPAIR(_ZN9S19016C12C1Ev),
  NSPAIR(_ZN9S19016C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C13;
extern VTBL_ENTRY _ZTI9S19016C13[];
extern  VTBL_ENTRY _ZTV9S19016C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C3;
extern VTBL_ENTRY _ZTI8S19016C3[];
extern  VTBL_ENTRY _ZTV8S19016C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C2;
extern VTBL_ENTRY _ZTI8S19016C2[];
extern  VTBL_ENTRY _ZTV8S19016C2[];
static Base_Class bases_S19016C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19016C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19016C9,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19016C3,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(128,80), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19016C2,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19016C12[];
extern void _ZN9S19016C12D1Ev();
extern void _ZN9S19016C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19016C12D1Ev,_ZThn36_N9S19016C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19016C12D0Ev,_ZThn36_N9S19016C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S19016C12D1Ev,_ZThn48_N9S19016C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S19016C12D0Ev,_ZThn48_N9S19016C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZThn96_N9S19016C12D1Ev,_ZThn60_N9S19016C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev)();
extern void ABISELECT(_ZThn96_N9S19016C12D0Ev,_ZThn60_N9S19016C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S19016C12D1Ev,_ZTvn20_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19016C12D0Ev,_ZTvn20_n12_N9S19016C12D0Ev)();
static  VTBL_ENTRY vtc_S19016C12[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&_ZN9S19016C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C12D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C12D1Ev,_ZTvn20_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C12D0Ev,_ZTvn20_n12_N9S19016C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19016C12[];
extern void _ZN9S19016C13D1Ev();
extern void _ZN9S19016C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C13__9S19016C12[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&_ZN9S19016C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S19016C13D1Ev,_ZThn36_N9S19016C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S19016C13D0Ev,_ZThn36_N9S19016C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C13__9S19016C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev),
};
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C12[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C9__9S19016C12[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
static  VTT_ENTRY vtt_S19016C12[] = {
  {&(_ZTV9S19016C12[7]),  7,31},
  {&(_tg__ZTV9S19016C13__9S19016C12[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C13__9S19016C12[3]),  3,5},
  {&(_ZTV9S19016C12[12]),  12,31},
  {&(_ZTV9S19016C12[20]),  20,31},
  {&(_ZTV9S19016C12[25]),  25,31},
  {&(_ZTV9S19016C12[29]),  29,31},
  {&(_tg__ZTV8S19016C9__9S19016C12[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C9__9S19016C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19016C12[];
extern  VTBL_ENTRY _ZTV9S19016C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C12[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C13D0Ev,_ZThn36_N9S19016C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C13D1Ev,_ZThn36_N9S19016C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19016C12D0Ev,_ZThn48_N9S19016C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19016C12D1Ev,_ZThn48_N9S19016C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19016C12D0Ev,_ZThn60_N9S19016C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C12D0Ev,_ZThn36_N9S19016C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19016C12D1Ev,_ZThn60_N9S19016C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C12D1Ev,_ZThn36_N9S19016C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C12 = {  "S19016C12", // class name
  bases_S19016C12, 15,
  &(vtc_S19016C12[0]), // expected_vtbl_contents
  &(vtt_S19016C12[0]), // expected_vtt_contents
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI9S19016C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19016C12),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19016C12),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C15  : S2014C28 , S19016C5 , virtual S2014C38 , virtual S19016C9 {
  virtual  ~S19016C15(); // _ZN9S19016C15D2Ev
  S19016C15(); // tgen
};
//SIG(-1 S19016C15) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S19016C15()
{
  extern Class_Descriptor cd_S19016C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S19016C15, buf);
    S19016C15 *dp, &lv = *(dp=new (buf) S19016C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S19016C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C15)");
    /*is_ambiguous_... S19016C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), ABISELECT(9,5), "S19016C15");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*), 0, "S19016C15");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*), 0, "S19016C15");
    check_base_class_offset(lv, (S2014C38*), 0, "S19016C15");
    check_base_class_offset(lv, (S2014C38*)(S19016C9*), 0, "S19016C15");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(40,20), "S19016C15");
    check_base_class_offset(lv, (S19016C5*)(S19016C9*), ABISELECT(40,20), "S19016C15");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*), ABISELECT(52,28), "S19016C15");
    check_base_class_offset(lv, (S19016C9*), ABISELECT(16,8), "S19016C15");
    test_class_info(&lv, &cd_S19016C15);
    dp->~S19016C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C15(Test_S19016C15, "S19016C15", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN9S19016C15C1Ev();
extern void _ZN9S19016C15D2Ev();
Name_Map name_map_S19016C15[] = {
  NSPAIR(_ZN9S19016C15C1Ev),
  NSPAIR(_ZN9S19016C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
static Base_Class bases_S19016C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19016C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19016C9,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19016C15[];
extern void _ZN9S19016C15D1Ev();
extern void _ZN9S19016C15D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S19016C15D1Ev,_ZThn8_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S19016C15D0Ev,_ZThn8_N9S19016C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19016C15D1Ev,_ZThn20_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19016C15D0Ev,_ZThn20_N9S19016C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19016C15[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&_ZN9S19016C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C15D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19016C15[];
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C15[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19016C9D1Ev,_ZThn12_N8S19016C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19016C9D0Ev,_ZThn12_N8S19016C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C9__9S19016C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
static  VTT_ENTRY vtt_S19016C15[] = {
  {&(_ZTV9S19016C15[6]),  6,21},
  {&(_ZTV9S19016C15[14]),  14,21},
  {&(_ZTV9S19016C15[19]),  19,21},
  {&(_tg__ZTV8S19016C9__9S19016C15[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C9__9S19016C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19016C15[];
extern  VTBL_ENTRY _ZTV9S19016C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C15[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19016C9D0Ev,_ZThn12_N8S19016C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19016C9D1Ev,_ZThn12_N8S19016C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19016C15D0Ev,_ZThn20_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19016C15D1Ev,_ZThn20_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19016C15D0Ev,_ZThn8_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19016C15D1Ev,_ZThn8_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C15 = {  "S19016C15", // class name
  bases_S19016C15, 8,
  &(vtc_S19016C15[0]), // expected_vtbl_contents
  &(vtt_S19016C15[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI9S19016C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19016C15),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19016C15),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C14  : virtual S19016C9 , S19016C15 , virtual S2014C28 {
  ::S3222C8_nt s19016c14f0[6];
  virtual  ~S19016C14(); // _ZN9S19016C14D2Ev
  S19016C14(); // tgen
};
//SIG(-1 S19016C14) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S19016C14()
{
  extern Class_Descriptor cd_S19016C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S19016C14, buf);
    S19016C14 *dp, &lv = *(dp=new (buf) S19016C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S19016C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C14)");
    check_base_class_offset(lv, (S2014C38*)(S19016C9*), 0, "S19016C14");
    check_base_class_offset(lv, (S2014C38*)(S19016C15*), 0, "S19016C14");
    /*is_ambiguous_... S19016C14::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(64,44), "S19016C14");
    check_base_class_offset(lv, (S19016C5*)(S19016C9*), ABISELECT(64,44), "S19016C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*), ABISELECT(76,52), "S19016C14");
    check_base_class_offset(lv, (S19016C9*), ABISELECT(40,32), "S19016C14");
    check_base_class_offset(lv, (S19016C9*)(S19016C15*), ABISELECT(40,32), "S19016C14");
    /*is_ambiguous_... S19016C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C15*), ABISELECT(9,5), "S19016C14");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C15*), 0, "S19016C14");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C15*), 0, "S19016C14");
    check_base_class_offset(lv, (S19016C15*), 0, "S19016C14");
    /*is_ambiguous_... S19016C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), ABISELECT(80,56), "S19016C14");
    check_field_offset(lv, s19016c14f0, ABISELECT(12,8), "S19016C14.s19016c14f0");
    test_class_info(&lv, &cd_S19016C14);
    dp->~S19016C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C14(Test_S19016C14, "S19016C14", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN9S19016C14C1Ev();
extern void _ZN9S19016C14D2Ev();
Name_Map name_map_S19016C14[] = {
  NSPAIR(_ZN9S19016C14C1Ev),
  NSPAIR(_ZN9S19016C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C15;
extern VTBL_ENTRY _ZTI9S19016C15[];
extern  VTBL_ENTRY _ZTV9S19016C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
static Base_Class bases_S19016C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19016C9,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19016C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19016C15,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19016C14[];
extern void _ZN9S19016C14D1Ev();
extern void _ZN9S19016C14D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev)();
extern void ABISELECT(_ZThn40_N9S19016C14D1Ev,_ZThn32_N9S19016C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev)();
extern void ABISELECT(_ZThn40_N9S19016C14D0Ev,_ZThn32_N9S19016C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev)();
extern void ABISELECT(_ZThn64_N9S19016C14D1Ev,_ZThn44_N9S19016C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev)();
extern void ABISELECT(_ZThn64_N9S19016C14D0Ev,_ZThn44_N9S19016C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19016C14[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&_ZN9S19016C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C14D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19016C14[];
extern void _ZN9S19016C15D1Ev();
extern void _ZN9S19016C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C15__9S19016C14[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&_ZN9S19016C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19016C15D1Ev,_ZThn32_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19016C15D0Ev,_ZThn32_N9S19016C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C15__9S19016C14[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S19016C15D1Ev,_ZThn44_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S19016C15D0Ev,_ZThn44_N9S19016C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__A1__9S19016C15__9S19016C14[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev),
};
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C14[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19016C9D1Ev,_ZThn12_N8S19016C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19016C9D0Ev,_ZThn12_N8S19016C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C9__9S19016C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
static  VTT_ENTRY vtt_S19016C14[] = {
  {&(_ZTV9S19016C14[7]),  7,22},
  {&(_tg__ZTV9S19016C15__9S19016C14[6]),  6,8},
  {&(_tg__ZTV8S19016C9__9S19016C15__9S19016C14[6]),  6,8},
  {&(_tg__ZTV8S19016C5__A1__9S19016C15__9S19016C14[3]),  3,5},
  {&(_ZTV9S19016C14[15]),  15,22},
  {&(_ZTV9S19016C14[20]),  20,22},
  {&(_tg__ZTV8S19016C9__9S19016C14[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C9__9S19016C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19016C14[];
extern  VTBL_ENTRY _ZTV9S19016C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C14[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19016C9D0Ev,_ZThn12_N8S19016C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19016C9D1Ev,_ZThn12_N8S19016C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19016C15D0Ev,_ZThn44_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19016C15D1Ev,_ZThn44_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19016C15D0Ev,_ZThn32_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19016C15D1Ev,_ZThn32_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19016C14D0Ev,_ZThn44_N9S19016C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19016C14D1Ev,_ZThn44_N9S19016C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19016C14D0Ev,_ZThn32_N9S19016C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19016C14D1Ev,_ZThn32_N9S19016C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C14 = {  "S19016C14", // class name
  bases_S19016C14, 10,
  &(vtc_S19016C14[0]), // expected_vtbl_contents
  &(vtt_S19016C14[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI9S19016C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19016C14),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19016C14),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C16  : virtual S19016C13 , virtual S3222C8_nt {
  unsigned char s19016c16f0:1;
  ~S19016C16(); // tgen
  S19016C16(); // tgen
};
//SIG(-1 S19016C16) C1{ VBC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m Fi} Fc:1}


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

static void Test_S19016C16()
{
  extern Class_Descriptor cd_S19016C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S19016C16, buf);
    S19016C16 *dp, &lv = *(dp=new (buf) S19016C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S19016C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C16)");
    check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(32,20), "S19016C16");
    check_base_class_offset(lv, (S19016C5*)(S19016C13*), ABISELECT(32,20), "S19016C16");
    check_base_class_offset(lv, (S19016C13*), ABISELECT(16,8), "S19016C16");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(44,28), "S19016C16");
    set_bf_and_test(lv, s19016c16f0, ABISELECT(8,4), 0, 1, 1, "S19016C16");
    test_class_info(&lv, &cd_S19016C16);
    dp->~S19016C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C16(Test_S19016C16, "S19016C16", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN9S19016C16C1Ev();
extern void _ZN9S19016C16D1Ev();
Name_Map name_map_S19016C16[] = {
  NSPAIR(_ZN9S19016C16C1Ev),
  NSPAIR(_ZN9S19016C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C13;
extern VTBL_ENTRY _ZTI9S19016C13[];
extern  VTBL_ENTRY _ZTV9S19016C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C13[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19016C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19016C13,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(44,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19016C16[];
extern void _ZN9S19016C16D1Ev();
extern void _ZN9S19016C16D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19016C16D1Ev,_ZThn8_N9S19016C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19016C16D0Ev,_ZThn8_N9S19016C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev)();
extern void ABISELECT(_ZThn32_N9S19016C16D1Ev,_ZThn20_N9S19016C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev)();
extern void ABISELECT(_ZThn32_N9S19016C16D0Ev,_ZThn20_N9S19016C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19016C16[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&_ZN9S19016C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C16D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19016C16[];
extern void _ZN9S19016C13D1Ev();
extern void _ZN9S19016C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C13__9S19016C16[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&_ZN9S19016C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19016C13D1Ev,_ZThn12_N9S19016C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19016C13D0Ev,_ZThn12_N9S19016C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C13__9S19016C16[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev),
};
static  VTT_ENTRY vtt_S19016C16[] = {
  {&(_ZTV9S19016C16[5]),  5,18},
  {&(_ZTV9S19016C16[11]),  11,18},
  {&(_ZTV9S19016C16[16]),  16,18},
  {&(_tg__ZTV9S19016C13__9S19016C16[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C13__9S19016C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19016C16[];
extern  VTBL_ENTRY _ZTV9S19016C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C16[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19016C13D0Ev,_ZThn12_N9S19016C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19016C13D1Ev,_ZThn12_N9S19016C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19016C16D0Ev,_ZThn20_N9S19016C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19016C16D1Ev,_ZThn20_N9S19016C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19016C16D0Ev,_ZThn8_N9S19016C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19016C16D1Ev,_ZThn8_N9S19016C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C16 = {  "S19016C16", // class name
  bases_S19016C16, 4,
  &(vtc_S19016C16[0]), // expected_vtbl_contents
  &(vtt_S19016C16[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI9S19016C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19016C16),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19016C16),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C11  : virtual S19016C12 , S19016C14 , S19016C16 , S19016C9 {
  ~S19016C11(); // tgen
  S19016C11(); // tgen
};
//SIG(-1 S19016C11) C1{ VBC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 Fl} BC4 Fi} vd Fl FC3} BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} BC14{ VBC3 VBC7 Fc:1} BC8}


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

static void Test_S19016C11()
{
  extern Class_Descriptor cd_S19016C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,40)];
    init_test(&cd_S19016C11, buf);
    S19016C11 *dp, &lv = *(dp=new (buf) S19016C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,156), "sizeof(S19016C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C11)");
    /*is_ambiguous_... S19016C11::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(136,88), "S19016C11");
    check_base_class_offset(lv, (S19016C5*)(S19016C13*)(S19016C12*), ABISELECT(136,88), "S19016C11");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C9*), ABISELECT(136,88), "S19016C11");
    /*is_ambiguous_... S19016C11::S19016C13 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C13*), ABISELECT(136,88), "S19016C11");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C9*), ABISELECT(136,88), "S19016C11");
    check_base_class_offset(lv, (S19016C13*)(S19016C12*), ABISELECT(80,52), "S19016C11");
    /*is_ambiguous_... S19016C12::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C12*), 0, "S19016C11");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C9*), 0, "S19016C11");
    check_base_class_offset(lv, (S2014C38*)(S19016C15*)(S19016C14*), 0, "S19016C11");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C9*), 0, "S19016C11");
    /*is_ambiguous_... S19016C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C12*), ABISELECT(148,96), "S19016C11");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*), ABISELECT(148,96), "S19016C11");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C16*), ABISELECT(148,96), "S19016C11");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*), ABISELECT(148,96), "S19016C11");
    check_base_class_offset(lv, (S19016C9*)(S19016C12*), ABISELECT(152,100), "S19016C11");
    check_base_class_offset(lv, (S19016C9*)(S19016C14*), ABISELECT(152,100), "S19016C11");
    check_base_class_offset(lv, (S19016C9*)(S19016C15*)(S19016C14*), ABISELECT(152,100), "S19016C11");
    check_base_class_offset(lv, (S2014C38*)(S19016C3*)(S19016C2*), ABISELECT(176,112), "S19016C11");
    check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C3*)(S19016C2*), ABISELECT(176,112), "S19016C11");
    check_base_class_offset(lv, (S19016C5*)(S19016C3*)(S19016C2*), ABISELECT(176,112), "S19016C11");
    /*is_ambiguous_... S19016C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C3*)(S19016C2*), ABISELECT(185,117), "S19016C11");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C3*)(S19016C2*), ABISELECT(188,120), "S19016C11");
    check_base_class_offset(lv, (S19016C3*)(S19016C2*), ABISELECT(176,112), "S19016C11");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C2*), ABISELECT(208,132), "S19016C11");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C2*), ABISELECT(208,132), "S19016C11");
    check_base_class_offset(lv, (S19016C2*)(S19016C12*), ABISELECT(176,112), "S19016C11");
    check_base_class_offset(lv, (S19016C12*), ABISELECT(80,52), "S19016C11");
    /*is_ambiguous_... S19016C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C15*)(S19016C14*), ABISELECT(9,5), "S19016C11");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C15*)(S19016C14*), 0, "S19016C11");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C15*)(S19016C14*), 0, "S19016C11");
    check_base_class_offset(lv, (S19016C15*)(S19016C14*), 0, "S19016C11");
    /*is_ambiguous_... S19016C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C14*), ABISELECT(224,144), "S19016C11");
    check_base_class_offset(lv, (S19016C14*), 0, "S19016C11");
    check_base_class_offset(lv, (S19016C13*)(S19016C16*), ABISELECT(224,144), "S19016C11");
    check_base_class_offset(lv, (S19016C16*), ABISELECT(40,32), "S19016C11");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C9*), ABISELECT(56,40), "S19016C11");
    test_class_info(&lv, &cd_S19016C11);
    dp->~S19016C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C11(Test_S19016C11, "S19016C11", ABISELECT(240,156));

#else // __cplusplus

extern void _ZN9S19016C11C1Ev();
extern void _ZN9S19016C11D1Ev();
Name_Map name_map_S19016C11[] = {
  NSPAIR(_ZN9S19016C11C1Ev),
  NSPAIR(_ZN9S19016C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C13;
extern VTBL_ENTRY _ZTI9S19016C13[];
extern  VTBL_ENTRY _ZTV9S19016C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C3;
extern VTBL_ENTRY _ZTI8S19016C3[];
extern  VTBL_ENTRY _ZTV8S19016C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C2;
extern VTBL_ENTRY _ZTI8S19016C2[];
extern  VTBL_ENTRY _ZTV8S19016C2[];
extern Class_Descriptor cd_S19016C12;
extern VTBL_ENTRY _ZTI9S19016C12[];
extern  VTBL_ENTRY _ZTV9S19016C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C15;
extern VTBL_ENTRY _ZTI9S19016C15[];
extern  VTBL_ENTRY _ZTV9S19016C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C14;
extern VTBL_ENTRY _ZTI9S19016C14[];
extern  VTBL_ENTRY _ZTV9S19016C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C14[];
extern Class_Descriptor cd_S19016C13;
extern VTBL_ENTRY _ZTI9S19016C13[];
extern  VTBL_ENTRY _ZTV9S19016C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C13[];
extern Class_Descriptor cd_S19016C16;
extern VTBL_ENTRY _ZTI9S19016C16[];
extern  VTBL_ENTRY _ZTV9S19016C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C16[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
static Base_Class bases_S19016C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(136,88), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19016C13,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(148,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19016C9,    ABISELECT(152,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(185,117), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(188,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
    11, //immediately_derived
  0, 0},
  {&cd_S19016C3,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C28,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(208,132), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19016C2,    ABISELECT(176,112), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19016C12,    ABISELECT(80,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19016C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19016C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19016C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19016C13,    ABISELECT(224,144), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19016C16,    ABISELECT(40,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19016C9,    ABISELECT(56,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19016C11[];
extern void _ZN9S19016C11D1Ev();
extern void _ZN9S19016C11D0Ev();
extern void ABISELECT(_ZThn40_N9S19016C11D1Ev,_ZThn32_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S19016C11D0Ev,_ZThn32_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn56_N9S19016C11D1Ev,_ZThn40_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S19016C11D0Ev,_ZThn40_N9S19016C11D0Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19016C11D1Ev,_ZTv0_n32_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn80_N9S19016C11D1Ev,_ZThn52_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19016C11D0Ev,_ZTv0_n32_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn80_N9S19016C11D0Ev,_ZThn52_N9S19016C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn136_N9S19016C11D1Ev,_ZThn88_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn136_N9S19016C11D0Ev,_ZThn88_N9S19016C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C11D1Ev,_ZTv0_n24_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn152_N9S19016C11D1Ev,_ZThn100_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C11D0Ev,_ZTv0_n24_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn152_N9S19016C11D0Ev,_ZThn100_N9S19016C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn176_N9S19016C11D1Ev,_ZThn112_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn176_N9S19016C11D0Ev,_ZThn112_N9S19016C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S19016C11D1Ev,_ZTvn20_n12_N9S19016C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19016C11D0Ev,_ZTvn20_n12_N9S19016C11D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19016C11D1Ev,_ZTv0_n16_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn224_N9S19016C11D1Ev,_ZThn144_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19016C11D0Ev,_ZTv0_n16_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn224_N9S19016C11D0Ev,_ZThn144_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19016C11[] = {
  ABISELECT(224,144),
  ABISELECT(176,112),
  ABISELECT(80,52),
  ABISELECT(224,144),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&_ZN9S19016C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C11D0Ev,
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,112),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19016C11D1Ev,_ZThn32_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19016C11D0Ev,_ZThn32_N9S19016C11D0Ev),
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19016C11D1Ev,_ZThn40_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19016C11D0Ev,_ZThn40_N9S19016C11D0Ev),
  ABISELECT(-80,-52),
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19016C11D1Ev,_ZTv0_n32_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19016C11D0Ev,_ZTv0_n32_N9S19016C11D0Ev),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev),
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C11D1Ev,_ZTv0_n24_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C11D0Ev,_ZTv0_n24_N9S19016C11D0Ev),
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C11D1Ev,_ZTvn20_n12_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C11D0Ev,_ZTvn20_n12_N9S19016C11D0Ev),
  ABISELECT(-224,-144),
  ABISELECT(-88,-56),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C11D1Ev,_ZTv0_n16_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C11D0Ev,_ZTv0_n16_N9S19016C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19016C11[];
extern void _ZN9S19016C14D1Ev();
extern void _ZN9S19016C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C14__9S19016C11[] = {
  ABISELECT(224,144),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&_ZN9S19016C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C14D0Ev,
};
extern void _ZN9S19016C15D1Ev();
extern void _ZN9S19016C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C159S19016C14__9S19016C11[] = {
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&_ZN9S19016C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn152_N9S19016C15D1Ev,_ZThn100_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn152_N9S19016C15D0Ev,_ZThn100_N9S19016C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C159S19016C14__9S19016C11[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn136_N9S19016C15D1Ev,_ZThn88_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn136_N9S19016C15D0Ev,_ZThn88_N9S19016C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__A1__9S19016C159S19016C14__9S19016C11[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev)();
extern void ABISELECT(_ZThn152_N9S19016C14D1Ev,_ZThn100_N9S19016C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev)();
extern void ABISELECT(_ZThn152_N9S19016C14D0Ev,_ZThn100_N9S19016C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C14__9S19016C11[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev)();
extern void ABISELECT(_ZThn136_N9S19016C14D1Ev,_ZThn88_N9S19016C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev)();
extern void ABISELECT(_ZThn136_N9S19016C14D0Ev,_ZThn88_N9S19016C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C14__9S19016C11[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev),
};
extern void _ZN9S19016C16D1Ev();
extern void _ZN9S19016C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C16__9S19016C11[] = {
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&_ZN9S19016C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev)();
extern void ABISELECT(_ZThn184_N9S19016C16D1Ev,_ZThn112_N9S19016C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev)();
extern void ABISELECT(_ZThn184_N9S19016C16D0Ev,_ZThn112_N9S19016C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C13__9S19016C16__9S19016C11[] = {
  ABISELECT(-184,-112),
  ABISELECT(-88,-56),
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19016C16D1Ev,_ZThn56_N9S19016C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19016C16D0Ev,_ZThn56_N9S19016C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C16__9S19016C11[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev),
};
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C9__A__9S19016C11[] = {
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZThn80_N8S19016C9D1Ev,_ZThn48_N8S19016C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
extern void ABISELECT(_ZThn80_N8S19016C9D0Ev,_ZThn48_N8S19016C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C9__A__9S19016C11[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern void _ZN9S19016C12D1Ev();
extern void _ZN9S19016C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C12__9S19016C11[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&_ZN9S19016C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C12D0Ev,
};
extern void _ZN9S19016C13D1Ev();
extern void _ZN9S19016C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C139S19016C12__9S19016C11[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&_ZN9S19016C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S19016C13D1Ev,_ZThn36_N9S19016C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S19016C13D0Ev,_ZThn36_N9S19016C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C139S19016C12__9S19016C11[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19016C12D1Ev,_ZThn36_N9S19016C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19016C12D0Ev,_ZThn36_N9S19016C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C12__9S19016C11[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S19016C12D1Ev,_ZThn48_N9S19016C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S19016C12D0Ev,_ZThn48_N9S19016C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C12__9S19016C11[] = {
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZThn96_N9S19016C12D1Ev,_ZThn60_N9S19016C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev)();
extern void ABISELECT(_ZThn96_N9S19016C12D0Ev,_ZThn60_N9S19016C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C2__9S19016C12__9S19016C11[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19016C12D1Ev,_ZTvn20_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19016C12D0Ev,_ZTvn20_n12_N9S19016C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C58S19016C2__A2__9S19016C12__9S19016C11[] = {
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C12D1Ev,_ZTvn20_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C12D0Ev,_ZTvn20_n12_N9S19016C12D0Ev),
};
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C11[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C9__9S19016C11[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern void _ZN9S19016C13D1Ev();
extern void _ZN9S19016C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C13__A1__9S19016C11[] = {
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&_ZN9S19016C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C13__A1__9S19016C11[] = {
  ABISELECT(88,56),
  ABISELECT(88,56),
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev),
};
static  VTT_ENTRY vtt_S19016C11[] = {
  {&(_ZTV9S19016C11[10]),  10,64},
  {&(_tg__ZTV9S19016C14__9S19016C11[7]),  7,9},
  {&(_tg__ZTV9S19016C159S19016C14__9S19016C11[6]),  6,8},
  {&(_tg__ZTV8S19016C9__9S19016C159S19016C14__9S19016C11[6]),  6,8},
  {&(_tg__ZTV8S19016C5__A1__9S19016C159S19016C14__9S19016C11[3]),  3,5},
  {&(_tg__ZTV8S19016C9__9S19016C14__9S19016C11[6]),  6,8},
  {&(_tg__ZTV8S19016C5__9S19016C14__9S19016C11[3]),  3,5},
  {&(_tg__ZTV9S19016C16__9S19016C11[5]),  5,7},
  {&(_tg__ZTV9S19016C13__9S19016C16__9S19016C11[4]),  4,6},
  {&(_tg__ZTV8S19016C5__9S19016C16__9S19016C11[3]),  3,5},
  {&(_tg__ZTV8S19016C9__A__9S19016C11[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C9__A__9S19016C11[3]),  3,5},
  {&(_ZTV9S19016C11[34]),  34,64},
  {&(_ZTV9S19016C11[39]),  39,64},
  {&(_ZTV9S19016C11[47]),  47,64},
  {&(_ZTV9S19016C11[52]),  52,64},
  {&(_ZTV9S19016C11[56]),  56,64},
  {&(_ZTV9S19016C11[17]),  17,64},
  {&(_ZTV9S19016C11[62]),  62,64},
  {&(_ZTV9S19016C11[24]),  24,64},
  {&(_tg__ZTV9S19016C12__9S19016C11[7]),  7,9},
  {&(_tg__ZTV9S19016C139S19016C12__9S19016C11[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C139S19016C12__9S19016C11[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C12__9S19016C11[3]),  3,5},
  {&(_tg__ZTV8S19016C9__9S19016C12__9S19016C11[6]),  6,8},
  {&(_tg__ZTV8S19016C2__9S19016C12__9S19016C11[3]),  3,5},
  {&(_tg__ZTV8S19016C58S19016C2__A2__9S19016C12__9S19016C11[2]),  2,4},
  {&(_tg__ZTV8S19016C9__9S19016C11[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C9__9S19016C11[3]),  3,5},
  {&(_tg__ZTV9S19016C13__A1__9S19016C11[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C13__A1__9S19016C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19016C11[];
extern  VTBL_ENTRY _ZTV9S19016C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C11[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19016C12D0Ev,_ZThn48_N9S19016C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19016C12D1Ev,_ZThn48_N9S19016C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19016C12D0Ev,_ZThn60_N9S19016C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C12D0Ev,_ZThn36_N9S19016C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19016C12D1Ev,_ZThn60_N9S19016C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C12D1Ev,_ZThn36_N9S19016C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C13D0Ev,_ZThn36_N9S19016C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C13D1Ev,_ZThn36_N9S19016C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19016C9D0Ev,_ZThn48_N8S19016C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19016C9D1Ev,_ZThn48_N8S19016C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19016C16D0Ev,_ZThn56_N9S19016C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19016C16D1Ev,_ZThn56_N9S19016C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19016C16D0Ev,_ZThn112_N9S19016C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19016C16D1Ev,_ZThn112_N9S19016C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19016C14D0Ev,_ZThn88_N9S19016C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19016C14D1Ev,_ZThn88_N9S19016C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19016C14D0Ev,_ZThn100_N9S19016C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19016C14D1Ev,_ZThn100_N9S19016C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19016C15D0Ev,_ZThn88_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19016C15D1Ev,_ZThn88_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19016C15D0Ev,_ZThn100_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19016C15D1Ev,_ZThn100_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C11D0Ev,_ZTv0_n16_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19016C11D0Ev,_ZThn144_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C11D1Ev,_ZTv0_n16_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19016C11D1Ev,_ZThn144_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C11D0Ev,_ZTv0_n24_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19016C11D0Ev,_ZThn100_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C11D1Ev,_ZTv0_n24_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19016C11D1Ev,_ZThn100_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19016C11D0Ev,_ZThn112_N9S19016C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19016C11D0Ev,_ZThn88_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19016C11D1Ev,_ZThn112_N9S19016C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19016C11D1Ev,_ZThn88_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19016C11D0Ev,_ZTv0_n32_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19016C11D0Ev,_ZThn52_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19016C11D1Ev,_ZTv0_n32_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19016C11D1Ev,_ZThn52_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C11 = {  "S19016C11", // class name
  bases_S19016C11, 25,
  &(vtc_S19016C11[0]), // expected_vtbl_contents
  &(vtt_S19016C11[0]), // expected_vtt_contents
  ABISELECT(240,156), // object size
  NSPAIRA(_ZTI9S19016C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19016C11),64, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19016C11),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C8  : S19016C9 , S19016C11 {
  long s19016c8f0;
  ~S19016C8(); // tgen
  S19016C8(); // tgen
};
//SIG(-1 S19016C8) C1{ BC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ VBC9{ BC10{ VBC4 FL} VBC3 VBC6 VBC2 VBC11{ BC12{ BC3 BC4 BC5 BC6 Fs:16 Fl} BC4 Fi} vd Fl FC10} BC13{ VBC2 BC14{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]} BC15{ VBC10 VBC6 Fc:1} BC2} Fl}


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

static void Test_S19016C8()
{
  extern Class_Descriptor cd_S19016C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,44)];
    init_test(&cd_S19016C8, buf);
    S19016C8 *dp, &lv = *(dp=new (buf) S19016C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,172), "sizeof(S19016C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C8)");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C9*), 0, "S19016C8");
    /*is_ambiguous_... S19016C12::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C12*), 0, "S19016C8");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C9*), 0, "S19016C8");
    check_base_class_offset(lv, (S2014C38*)(S19016C15*)(S19016C14*)(S19016C11*), 0, "S19016C8");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C9*)(S19016C11*), 0, "S19016C8");
    /*is_ambiguous_... S19016C8::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(112,68), "S19016C8");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C9*), ABISELECT(112,68), "S19016C8");
    check_base_class_offset(lv, (S19016C5*)(S19016C13*)(S19016C12*), ABISELECT(112,68), "S19016C8");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C9*), ABISELECT(112,68), "S19016C8");
    /*is_ambiguous_... S19016C8::S19016C13 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C13*), ABISELECT(112,68), "S19016C8");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C9*)(S19016C11*), ABISELECT(112,68), "S19016C8");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*), ABISELECT(124,76), "S19016C8");
    /*is_ambiguous_... S19016C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C12*), ABISELECT(124,76), "S19016C8");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*), ABISELECT(124,76), "S19016C8");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C16*)(S19016C11*), ABISELECT(124,76), "S19016C8");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*)(S19016C11*), ABISELECT(124,76), "S19016C8");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C9*), 0, "S19016C8");
    check_base_class_offset(lv, (S19016C13*)(S19016C12*), ABISELECT(128,80), "S19016C8");
    check_base_class_offset(lv, (S19016C9*)(S19016C12*), ABISELECT(184,116), "S19016C8");
    check_base_class_offset(lv, (S19016C9*)(S19016C14*)(S19016C11*), ABISELECT(184,116), "S19016C8");
    check_base_class_offset(lv, (S19016C9*)(S19016C15*)(S19016C14*)(S19016C11*), ABISELECT(184,116), "S19016C8");
    check_base_class_offset(lv, (S2014C38*)(S19016C3*)(S19016C2*), ABISELECT(208,128), "S19016C8");
    check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C3*)(S19016C2*), ABISELECT(208,128), "S19016C8");
    check_base_class_offset(lv, (S19016C5*)(S19016C3*)(S19016C2*), ABISELECT(208,128), "S19016C8");
    /*is_ambiguous_... S19016C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C3*)(S19016C2*), ABISELECT(217,133), "S19016C8");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C3*)(S19016C2*), ABISELECT(220,136), "S19016C8");
    check_base_class_offset(lv, (S19016C3*)(S19016C2*), ABISELECT(208,128), "S19016C8");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C2*), ABISELECT(240,148), "S19016C8");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C2*), ABISELECT(240,148), "S19016C8");
    check_base_class_offset(lv, (S19016C2*)(S19016C12*), ABISELECT(208,128), "S19016C8");
    check_base_class_offset(lv, (S19016C12*)(S19016C11*), ABISELECT(128,80), "S19016C8");
    /*is_ambiguous_... S19016C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C15*)(S19016C14*)(S19016C11*), ABISELECT(33,17), "S19016C8");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C15*)(S19016C14*)(S19016C11*), ABISELECT(24,12), "S19016C8");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C15*)(S19016C14*)(S19016C11*), ABISELECT(24,12), "S19016C8");
    check_base_class_offset(lv, (S19016C15*)(S19016C14*)(S19016C11*), ABISELECT(24,12), "S19016C8");
    /*is_ambiguous_... S19016C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C14*)(S19016C11*), 0, "S19016C8");
    check_base_class_offset(lv, (S19016C14*)(S19016C11*), ABISELECT(24,12), "S19016C8");
    check_base_class_offset(lv, (S19016C13*)(S19016C16*)(S19016C11*), ABISELECT(256,160), "S19016C8");
    check_base_class_offset(lv, (S19016C16*)(S19016C11*), ABISELECT(64,44), "S19016C8");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C9*)(S19016C11*), ABISELECT(80,52), "S19016C8");
    check_base_class_offset(lv, (S19016C11*), ABISELECT(24,12), "S19016C8");
    check_field_offset(lv, s19016c8f0, ABISELECT(104,64), "S19016C8.s19016c8f0");
    test_class_info(&lv, &cd_S19016C8);
    dp->~S19016C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C8(Test_S19016C8, "S19016C8", ABISELECT(272,172));

#else // __cplusplus

extern void _ZN8S19016C8C1Ev();
extern void _ZN8S19016C8D1Ev();
Name_Map name_map_S19016C8[] = {
  NSPAIR(_ZN8S19016C8C1Ev),
  NSPAIR(_ZN8S19016C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S19016C13;
extern VTBL_ENTRY _ZTI9S19016C13[];
extern  VTBL_ENTRY _ZTV9S19016C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C13[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C3;
extern VTBL_ENTRY _ZTI8S19016C3[];
extern  VTBL_ENTRY _ZTV8S19016C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C2;
extern VTBL_ENTRY _ZTI8S19016C2[];
extern  VTBL_ENTRY _ZTV8S19016C2[];
extern Class_Descriptor cd_S19016C12;
extern VTBL_ENTRY _ZTI9S19016C12[];
extern  VTBL_ENTRY _ZTV9S19016C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C15;
extern VTBL_ENTRY _ZTI9S19016C15[];
extern  VTBL_ENTRY _ZTV9S19016C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C14;
extern VTBL_ENTRY _ZTI9S19016C14[];
extern  VTBL_ENTRY _ZTV9S19016C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C14[];
extern Class_Descriptor cd_S19016C13;
extern VTBL_ENTRY _ZTI9S19016C13[];
extern  VTBL_ENTRY _ZTV9S19016C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C13[];
extern Class_Descriptor cd_S19016C16;
extern VTBL_ENTRY _ZTI9S19016C16[];
extern  VTBL_ENTRY _ZTV9S19016C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C16[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S19016C11;
extern VTBL_ENTRY _ZTI9S19016C11[];
extern  VTBL_ENTRY _ZTV9S19016C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C11[];
static Base_Class bases_S19016C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(112,68), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(124,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19016C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19016C13,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19016C9,    ABISELECT(184,116), //bcp->offset
    53, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(208,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(208,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(208,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(217,133), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(220,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19016C3,    ABISELECT(208,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(240,148), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19016C2,    ABISELECT(208,128), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19016C12,    ABISELECT(128,80), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(33,17), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19016C15,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19016C14,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19016C13,    ABISELECT(256,160), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19016C16,    ABISELECT(64,44), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19016C9,    ABISELECT(80,52), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19016C11,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19016C8[];
extern void _ZN8S19016C8D1Ev();
extern void _ZN8S19016C8D0Ev();
extern void ABISELECT(_ZThn24_N8S19016C8D1Ev,_ZThn12_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19016C8D0Ev,_ZThn12_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19016C8D1Ev,_ZThn44_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19016C8D0Ev,_ZThn44_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn80_N8S19016C8D1Ev,_ZThn52_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn80_N8S19016C8D0Ev,_ZThn52_N8S19016C8D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S19016C8D1Ev,_ZThn68_N8S19016C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S19016C8D0Ev,_ZThn68_N8S19016C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19016C8D1Ev,_ZTv0_n32_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S19016C8D1Ev,_ZThn80_N8S19016C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19016C8D0Ev,_ZTv0_n32_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S19016C8D0Ev,_ZThn80_N8S19016C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19016C8D1Ev,_ZTv0_n24_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn184_N8S19016C8D1Ev,_ZThn116_N8S19016C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19016C8D0Ev,_ZTv0_n24_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn184_N8S19016C8D0Ev,_ZThn116_N8S19016C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn208_N8S19016C8D1Ev,_ZThn128_N8S19016C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn208_N8S19016C8D0Ev,_ZThn128_N8S19016C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19016C8D1Ev,_ZTvn20_n12_N8S19016C8D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19016C8D0Ev,_ZTvn20_n12_N8S19016C8D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19016C8D1Ev,_ZTv0_n16_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19016C8D1Ev,_ZThn160_N8S19016C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19016C8D0Ev,_ZTv0_n16_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19016C8D0Ev,_ZThn160_N8S19016C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19016C8[] = {
  ABISELECT(256,160),
  0,
  ABISELECT(208,128),
  ABISELECT(184,116),
  ABISELECT(128,80),
  ABISELECT(124,76),
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&_ZN8S19016C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C8D0Ev,
  ABISELECT(232,148),
  ABISELECT(184,116),
  ABISELECT(104,68),
  ABISELECT(-24,-12),
  ABISELECT(100,64),
  ABISELECT(88,56),
  ABISELECT(160,104),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19016C8D1Ev,_ZThn12_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19016C8D0Ev,_ZThn12_N8S19016C8D0Ev),
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(192,116),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19016C8D1Ev,_ZThn44_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19016C8D0Ev,_ZThn44_N8S19016C8D0Ev),
  ABISELECT(44,24),
  ABISELECT(32,16),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19016C8D1Ev,_ZThn52_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19016C8D0Ev,_ZThn52_N8S19016C8D0Ev),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev),
  ABISELECT(-128,-80),
  ABISELECT(80,48),
  ABISELECT(56,36),
  -4,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19016C8D1Ev,_ZTv0_n32_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19016C8D0Ev,_ZTv0_n32_N8S19016C8D0Ev),
  ABISELECT(-184,-116),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-116),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19016C8D1Ev,_ZTv0_n24_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19016C8D0Ev,_ZTv0_n24_N8S19016C8D0Ev),
  ABISELECT(-208,-128),
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19016C8D1Ev,_ZTvn20_n12_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19016C8D0Ev,_ZTvn20_n12_N8S19016C8D0Ev),
  ABISELECT(-256,-160),
  ABISELECT(-144,-92),
  ABISELECT(-256,-160),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19016C8D1Ev,_ZTv0_n16_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19016C8D0Ev,_ZTv0_n16_N8S19016C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19016C8[];
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C9__A__8S19016C8[] = {
  ABISELECT(124,76),
  ABISELECT(112,68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S19016C9D1Ev,_ZThn68_N8S19016C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S19016C9D0Ev,_ZThn68_N8S19016C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C9__A__8S19016C8[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern void _ZN9S19016C11D1Ev();
extern void _ZN9S19016C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C11__8S19016C8[] = {
  ABISELECT(232,148),
  ABISELECT(184,116),
  ABISELECT(104,68),
  ABISELECT(-24,-12),
  ABISELECT(100,64),
  ABISELECT(88,56),
  ABISELECT(160,104),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&_ZN9S19016C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C11D0Ev,
};
extern void _ZN9S19016C14D1Ev();
extern void _ZN9S19016C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C149S19016C11__8S19016C8[] = {
  ABISELECT(-24,-12),
  ABISELECT(100,64),
  ABISELECT(88,56),
  ABISELECT(160,104),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&_ZN9S19016C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C14D0Ev,
};
extern void _ZN9S19016C15D1Ev();
extern void _ZN9S19016C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C159S19016C149S19016C11__8S19016C8[] = {
  ABISELECT(100,64),
  ABISELECT(88,56),
  ABISELECT(160,104),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&_ZN9S19016C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn160_N9S19016C15D1Ev,_ZThn104_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn160_N9S19016C15D0Ev,_ZThn104_N9S19016C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C159S19016C149S19016C11__8S19016C8[] = {
  ABISELECT(-160,-104),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-116),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn88_N9S19016C15D1Ev,_ZThn56_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn88_N9S19016C15D0Ev,_ZThn56_N9S19016C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__A1__9S19016C159S19016C149S19016C11__8S19016C8[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev)();
extern void ABISELECT(_ZThn160_N9S19016C14D1Ev,_ZThn104_N9S19016C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev)();
extern void ABISELECT(_ZThn160_N9S19016C14D0Ev,_ZThn104_N9S19016C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C149S19016C11__8S19016C8[] = {
  ABISELECT(-160,-104),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-116),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev)();
extern void ABISELECT(_ZThn88_N9S19016C14D1Ev,_ZThn56_N9S19016C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev)();
extern void ABISELECT(_ZThn88_N9S19016C14D0Ev,_ZThn56_N9S19016C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C149S19016C11__8S19016C8[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev),
};
extern void _ZN9S19016C16D1Ev();
extern void _ZN9S19016C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C169S19016C11__8S19016C8[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&_ZN9S19016C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S19016C16D1Ev,_ZThn116_N9S19016C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S19016C16D0Ev,_ZThn116_N9S19016C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C13__9S19016C169S19016C11__8S19016C8[] = {
  ABISELECT(-192,-116),
  ABISELECT(-144,-92),
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev)();
extern void ABISELECT(_ZThn48_N9S19016C16D1Ev,_ZThn24_N9S19016C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev)();
extern void ABISELECT(_ZThn48_N9S19016C16D0Ev,_ZThn24_N9S19016C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C169S19016C11__8S19016C8[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev),
};
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C99S19016C11__A2__8S19016C8[] = {
  ABISELECT(44,24),
  ABISELECT(32,16),
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19016C9D1Ev,_ZThn16_N8S19016C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19016C9D0Ev,_ZThn16_N8S19016C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C99S19016C11__A2__8S19016C8[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19016C11D1Ev,_ZTv0_n32_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S19016C11D1Ev,_ZThn68_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19016C11D0Ev,_ZTv0_n32_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn104_N9S19016C11D0Ev,_ZThn68_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C12__9S19016C11__8S19016C8[] = {
  ABISELECT(-104,-68),
  ABISELECT(80,48),
  ABISELECT(56,36),
  -4,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19016C11D1Ev,_ZTv0_n32_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19016C11D0Ev,_ZTv0_n32_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn88_N9S19016C11D1Ev,_ZThn56_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn88_N9S19016C11D0Ev,_ZThn56_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C11__8S19016C8[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19016C11D1Ev,_ZTv0_n24_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S19016C11D1Ev,_ZThn104_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C11D0Ev,_ZTv0_n24_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S19016C11D0Ev,_ZThn104_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C11__8S19016C8[] = {
  ABISELECT(-160,-104),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-116),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C11D1Ev,_ZTv0_n24_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C11D0Ev,_ZTv0_n24_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn184_N9S19016C11D1Ev,_ZThn116_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn184_N9S19016C11D0Ev,_ZThn116_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C2__9S19016C11__8S19016C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19016C11D1Ev,_ZTvn20_n12_N9S19016C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19016C11D0Ev,_ZTvn20_n12_N9S19016C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C58S19016C2__A2__9S19016C11__8S19016C8[] = {
  ABISELECT(-216,-136),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C11D1Ev,_ZTvn20_n12_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C11D0Ev,_ZTvn20_n12_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZThn40_N9S19016C11D1Ev,_ZThn32_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S19016C11D0Ev,_ZThn32_N9S19016C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19016C16__9S19016C11__8S19016C8[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(192,116),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19016C11D1Ev,_ZThn32_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19016C11D0Ev,_ZThn32_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19016C11D1Ev,_ZTv0_n16_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn232_N9S19016C11D1Ev,_ZThn148_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19016C11D0Ev,_ZTv0_n16_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn232_N9S19016C11D0Ev,_ZThn148_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C13__A1__9S19016C11__8S19016C8[] = {
  ABISELECT(-232,-148),
  ABISELECT(-144,-92),
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C11D1Ev,_ZTv0_n16_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C11D0Ev,_ZTv0_n16_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZThn56_N9S19016C11D1Ev,_ZThn40_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S19016C11D0Ev,_ZThn40_N9S19016C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C9__A__9S19016C11__8S19016C8[] = {
  ABISELECT(44,24),
  ABISELECT(32,16),
  ABISELECT(-80,-52),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19016C11D1Ev,_ZThn40_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19016C11D0Ev,_ZThn40_N9S19016C11D0Ev),
};
extern void _ZN9S19016C12D1Ev();
extern void _ZN9S19016C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C12__8S19016C8[] = {
  ABISELECT(80,48),
  ABISELECT(56,36),
  -4,
  ABISELECT(-128,-80),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&_ZN9S19016C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C12D0Ev,
};
extern void _ZN9S19016C13D1Ev();
extern void _ZN9S19016C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C139S19016C12__8S19016C8[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&_ZN9S19016C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C139S19016C12__8S19016C8[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C12__8S19016C8[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19016C12D1Ev,_ZThn36_N9S19016C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19016C12D0Ev,_ZThn36_N9S19016C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C12__8S19016C8[] = {
  ABISELECT(-56,-36),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-116),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZThn80_N9S19016C12D1Ev,_ZThn48_N9S19016C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev)();
extern void ABISELECT(_ZThn80_N9S19016C12D0Ev,_ZThn48_N9S19016C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C2__9S19016C12__8S19016C8[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19016C12D1Ev,_ZTvn20_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19016C12D0Ev,_ZTvn20_n12_N9S19016C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C58S19016C2__A2__9S19016C12__8S19016C8[] = {
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C12D1Ev,_ZTvn20_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C12D0Ev,_ZTvn20_n12_N9S19016C12D0Ev),
};
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C9__A1__8S19016C8[] = {
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-184,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C9__A1__8S19016C8[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern void _ZN9S19016C13D1Ev();
extern void _ZN9S19016C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C13__A1__8S19016C8[] = {
  ABISELECT(-144,-92),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&_ZN9S19016C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C13__A1__8S19016C8[] = {
  ABISELECT(144,92),
  ABISELECT(144,92),
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev),
};
static  VTT_ENTRY vtt_S19016C8[] = {
  {&(_ZTV8S19016C8[10]),  10,76},
  {&(_tg__ZTV8S19016C9__A__8S19016C8[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C9__A__8S19016C8[3]),  3,5},
  {&(_tg__ZTV9S19016C11__8S19016C8[10]),  10,12},
  {&(_tg__ZTV9S19016C149S19016C11__8S19016C8[7]),  7,9},
  {&(_tg__ZTV9S19016C159S19016C149S19016C11__8S19016C8[6]),  6,8},
  {&(_tg__ZTV8S19016C9__9S19016C159S19016C149S19016C11__8S19016C8[6]),  6,8},
  {&(_tg__ZTV8S19016C5__A1__9S19016C159S19016C149S19016C11__8S19016C8[3]),  3,5},
  {&(_tg__ZTV8S19016C9__9S19016C149S19016C11__8S19016C8[6]),  6,8},
  {&(_tg__ZTV8S19016C5__9S19016C149S19016C11__8S19016C8[3]),  3,5},
  {&(_tg__ZTV9S19016C169S19016C11__8S19016C8[5]),  5,7},
  {&(_tg__ZTV9S19016C13__9S19016C169S19016C11__8S19016C8[4]),  4,6},
  {&(_tg__ZTV8S19016C5__9S19016C169S19016C11__8S19016C8[3]),  3,5},
  {&(_tg__ZTV8S19016C99S19016C11__A2__8S19016C8[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C99S19016C11__A2__8S19016C8[3]),  3,5},
  {&(_tg__ZTV9S19016C12__9S19016C11__8S19016C8[8]),  8,10},
  {&(_tg__ZTV8S19016C5__9S19016C11__8S19016C8[3]),  3,5},
  {&(_tg__ZTV8S19016C9__9S19016C11__8S19016C8[6]),  6,8},
  {&(_tg__ZTV8S19016C2__9S19016C11__8S19016C8[3]),  3,5},
  {&(_tg__ZTV8S19016C58S19016C2__A2__9S19016C11__8S19016C8[2]),  2,4},
  {&(_tg__ZTV9S19016C16__9S19016C11__8S19016C8[5]),  5,7},
  {&(_tg__ZTV9S19016C13__A1__9S19016C11__8S19016C8[4]),  4,6},
  {&(_tg__ZTV8S19016C9__A__9S19016C11__8S19016C8[5]),  5,7},
  {&(_ZTV8S19016C8[41]),  41,76},
  {&(_ZTV8S19016C8[22]),  22,76},
  {&(_ZTV8S19016C8[51]),  51,76},
  {&(_ZTV8S19016C8[59]),  59,76},
  {&(_ZTV8S19016C8[64]),  64,76},
  {&(_ZTV8S19016C8[68]),  68,76},
  {&(_ZTV8S19016C8[29]),  29,76},
  {&(_ZTV8S19016C8[74]),  74,76},
  {&(_ZTV8S19016C8[36]),  36,76},
  {&(_tg__ZTV9S19016C12__8S19016C8[7]),  7,9},
  {&(_tg__ZTV9S19016C139S19016C12__8S19016C8[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C139S19016C12__8S19016C8[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C12__8S19016C8[3]),  3,5},
  {&(_tg__ZTV8S19016C9__9S19016C12__8S19016C8[6]),  6,8},
  {&(_tg__ZTV8S19016C2__9S19016C12__8S19016C8[3]),  3,5},
  {&(_tg__ZTV8S19016C58S19016C2__A2__9S19016C12__8S19016C8[2]),  2,4},
  {&(_tg__ZTV8S19016C9__A1__8S19016C8[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C9__A1__8S19016C8[3]),  3,5},
  {&(_tg__ZTV9S19016C13__A1__8S19016C8[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C13__A1__8S19016C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19016C8[];
extern  VTBL_ENTRY _ZTV8S19016C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C8[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19016C12D0Ev,_ZThn48_N9S19016C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19016C12D1Ev,_ZThn48_N9S19016C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C12D0Ev,_ZThn36_N9S19016C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C12D1Ev,_ZThn36_N9S19016C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C11D0Ev,_ZTv0_n16_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19016C11D0Ev,_ZThn148_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C11D1Ev,_ZTv0_n16_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19016C11D1Ev,_ZThn148_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C11D0Ev,_ZTv0_n24_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C11D0Ev,_ZThn104_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C11D1Ev,_ZTv0_n24_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C11D1Ev,_ZThn104_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19016C11D0Ev,_ZThn116_N9S19016C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C11D0Ev,_ZThn56_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19016C11D1Ev,_ZThn116_N9S19016C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C11D1Ev,_ZThn56_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19016C11D0Ev,_ZTv0_n32_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19016C11D0Ev,_ZThn68_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19016C11D1Ev,_ZTv0_n32_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19016C11D1Ev,_ZThn68_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19016C16D0Ev,_ZThn24_N9S19016C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19016C16D1Ev,_ZThn24_N9S19016C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19016C16D0Ev,_ZThn116_N9S19016C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S19016C16D1Ev,_ZThn116_N9S19016C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C14D0Ev,_ZThn56_N9S19016C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C14D1Ev,_ZThn56_N9S19016C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C14D0Ev,_ZThn104_N9S19016C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C14D1Ev,_ZThn104_N9S19016C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C15D0Ev,_ZThn56_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C15D1Ev,_ZThn56_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C15D0Ev,_ZThn104_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C15D1Ev,_ZThn104_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19016C9D0Ev,_ZThn16_N8S19016C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19016C9D0Ev,_ZThn68_N8S19016C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19016C9D1Ev,_ZThn16_N8S19016C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19016C9D1Ev,_ZThn68_N8S19016C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19016C8D0Ev,_ZTv0_n16_N8S19016C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19016C8D0Ev,_ZThn160_N8S19016C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19016C8D1Ev,_ZTv0_n16_N8S19016C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19016C8D1Ev,_ZThn160_N8S19016C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19016C8D0Ev,_ZTv0_n24_N8S19016C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19016C8D0Ev,_ZThn116_N8S19016C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19016C8D1Ev,_ZTv0_n24_N8S19016C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19016C8D1Ev,_ZThn116_N8S19016C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19016C8D0Ev,_ZTv0_n32_N8S19016C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19016C8D0Ev,_ZThn80_N8S19016C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19016C8D1Ev,_ZTv0_n32_N8S19016C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19016C8D1Ev,_ZThn80_N8S19016C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19016C8D0Ev,_ZThn128_N8S19016C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19016C8D0Ev,_ZThn68_N8S19016C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19016C8D1Ev,_ZThn128_N8S19016C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19016C8D1Ev,_ZThn68_N8S19016C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C8 = {  "S19016C8", // class name
  bases_S19016C8, 27,
  &(vtc_S19016C8[0]), // expected_vtbl_contents
  &(vtt_S19016C8[0]), // expected_vtt_contents
  ABISELECT(272,172), // object size
  NSPAIRA(_ZTI8S19016C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19016C8),76, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19016C8),43, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C17  : virtual S2014C24 , virtual S19016C9 , S2014C21 , virtual S19016C15 , S3222C8_nt {
  ::S19017C20_nt s19016c17f0[6];
  short s19016c17f1;
  virtual  ~S19016C17(); // _ZN9S19016C17D2Ev
  S19016C17(); // tgen
};
//SIG(-1 S19016C17) C1{ VBC2{ m} VBC3{ VBC4{ m} VBC5{ BC6{ m} vd FC6} VBC7{ m Fi} vd Fp FC8{}} BC9{ m} VBC10{ BC6 BC5 VBC4 VBC3 vd} BC7 vd FU11{ m}[6] Fs}


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

static void Test_S19016C17()
{
  extern Class_Descriptor cd_S19016C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S19016C17, buf);
    S19016C17 *dp, &lv = *(dp=new (buf) S19016C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S19016C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C17)");
    check_base_class_offset(lv, (S2014C24*), 0, "S19016C17");
    check_base_class_offset(lv, (S2014C38*)(S19016C9*), 0, "S19016C17");
    check_base_class_offset(lv, (S2014C38*)(S19016C15*), 0, "S19016C17");
    /*is_ambiguous_... S19016C17::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(48,28), "S19016C17");
    check_base_class_offset(lv, (S19016C5*)(S19016C9*), ABISELECT(48,28), "S19016C17");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*), ABISELECT(60,36), "S19016C17");
    check_base_class_offset(lv, (S19016C9*), ABISELECT(24,16), "S19016C17");
    check_base_class_offset(lv, (S19016C9*)(S19016C15*), ABISELECT(24,16), "S19016C17");
    check_base_class_offset(lv, (S2014C21*), 0, "S19016C17");
    /*is_ambiguous_... S19016C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C15*), ABISELECT(73,45), "S19016C17");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C15*), ABISELECT(64,40), "S19016C17");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C15*), ABISELECT(64,40), "S19016C17");
    check_base_class_offset(lv, (S19016C15*), ABISELECT(64,40), "S19016C17");
    /*is_ambiguous_... S19016C17::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(8,4), "S19016C17");
    check_field_offset(lv, s19016c17f0, ABISELECT(12,8), "S19016C17.s19016c17f0");
    check_field_offset(lv, s19016c17f1, ABISELECT(18,14), "S19016C17.s19016c17f1");
    test_class_info(&lv, &cd_S19016C17);
    dp->~S19016C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C17(Test_S19016C17, "S19016C17", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN9S19016C17C1Ev();
extern void _ZN9S19016C17D2Ev();
Name_Map name_map_S19016C17[] = {
  NSPAIR(_ZN9S19016C17C1Ev),
  NSPAIR(_ZN9S19016C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S2014C21;
extern VTBL_ENTRY _ZTI8S2014C21[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C15;
extern VTBL_ENTRY _ZTI9S19016C15[];
extern  VTBL_ENTRY _ZTV9S19016C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C15[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19016C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(48,28), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19016C9,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(73,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19016C15,    ABISELECT(64,40), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_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 _ZTI9S19016C17[];
extern void _ZN9S19016C17D1Ev();
extern void _ZN9S19016C17D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19016C17D1Ev,_ZTv0_n24_N9S19016C17D1Ev)();
extern void ABISELECT(_ZThn24_N9S19016C17D1Ev,_ZThn16_N9S19016C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C17D0Ev,_ZTv0_n24_N9S19016C17D0Ev)();
extern void ABISELECT(_ZThn24_N9S19016C17D0Ev,_ZThn16_N9S19016C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C17D1Ev,_ZTv0_n12_N9S19016C17D1Ev)();
extern void ABISELECT(_ZThn48_N9S19016C17D1Ev,_ZThn28_N9S19016C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C17D0Ev,_ZTv0_n12_N9S19016C17D0Ev)();
extern void ABISELECT(_ZThn48_N9S19016C17D0Ev,_ZThn28_N9S19016C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19016C17D1Ev,_ZTv0_n28_N9S19016C17D1Ev)();
extern void ABISELECT(_ZThn64_N9S19016C17D1Ev,_ZThn40_N9S19016C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19016C17D0Ev,_ZTv0_n28_N9S19016C17D0Ev)();
extern void ABISELECT(_ZThn64_N9S19016C17D0Ev,_ZThn40_N9S19016C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19016C17[] = {
  ABISELECT(64,40),
  ABISELECT(60,36),
  ABISELECT(48,28),
  0,
  ABISELECT(24,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C17[0]),
  (VTBL_ENTRY)&_ZN9S19016C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C17D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19016C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C17D1Ev,_ZTv0_n24_N9S19016C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C17D0Ev,_ZTv0_n24_N9S19016C17D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19016C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C17D1Ev,_ZTv0_n12_N9S19016C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C17D0Ev,_ZTv0_n12_N9S19016C17D0Ev),
  ABISELECT(-64,-40),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI9S19016C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19016C17D1Ev,_ZTv0_n28_N9S19016C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19016C17D0Ev,_ZTv0_n28_N9S19016C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19016C17[];
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C17[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19016C9D1Ev,_ZThn12_N8S19016C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19016C9D0Ev,_ZThn12_N8S19016C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C9__9S19016C17[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern void _ZN9S19016C15D1Ev();
extern void _ZN9S19016C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C15__9S19016C17[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&_ZN9S19016C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C15__9S19016C17[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__A1__9S19016C15__9S19016C17[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev),
};
static  VTT_ENTRY vtt_S19016C17[] = {
  {&(_ZTV9S19016C17[8]),  8,32},
  {&(_ZTV9S19016C17[16]),  16,32},
  {&(_ZTV9S19016C17[21]),  21,32},
  {&(_ZTV9S19016C17[30]),  30,32},
  {&(_tg__ZTV8S19016C9__9S19016C17[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C9__9S19016C17[3]),  3,5},
  {&(_tg__ZTV9S19016C15__9S19016C17[6]),  6,8},
  {&(_tg__ZTV8S19016C9__9S19016C15__9S19016C17[6]),  6,8},
  {&(_tg__ZTV8S19016C5__A1__9S19016C15__9S19016C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19016C17[];
extern  VTBL_ENTRY _ZTV9S19016C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C17[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19016C9D0Ev,_ZThn12_N8S19016C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19016C9D1Ev,_ZThn12_N8S19016C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19016C17D0Ev,_ZTv0_n28_N9S19016C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19016C17D0Ev,_ZThn40_N9S19016C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19016C17D1Ev,_ZTv0_n28_N9S19016C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19016C17D1Ev,_ZThn40_N9S19016C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C17D0Ev,_ZTv0_n12_N9S19016C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19016C17D0Ev,_ZThn28_N9S19016C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C17D1Ev,_ZTv0_n12_N9S19016C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19016C17D1Ev,_ZThn28_N9S19016C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C17D0Ev,_ZTv0_n24_N9S19016C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19016C17D0Ev,_ZThn16_N9S19016C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C17D1Ev,_ZTv0_n24_N9S19016C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19016C17D1Ev,_ZThn16_N9S19016C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C17 = {  "S19016C17", // class name
  bases_S19016C17, 12,
  &(vtc_S19016C17[0]), // expected_vtbl_contents
  &(vtt_S19016C17[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI9S19016C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19016C17),32, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19016C17),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19016C1  : virtual S19016C2 , virtual S19016C8 , virtual S19016C17 {
  virtual  ~S19016C1(); // _ZN8S19016C1D2Ev
  virtual void  v1(); // _ZN8S19016C12v1Ev
  S19016C1(); // tgen
};
//SIG(1 S19016C1) C1{ VBC2{ BC3{ BC4{ m} BC5{ BC6{ m} vd FC6} BC6 BC7{ m Fi} Fs:16 Fl} BC5 Fi} VBC8{ BC9{ VBC4 VBC5 VBC7 vd Fp FC10{}} BC11{ VBC12{ BC13{ VBC5 FL} VBC4 VBC7 VBC9 VBC2 vd Fl FC13} BC14{ VBC9 BC15{ BC6 BC5 VBC4 VBC9 vd} VBC6 vd FC7[6]} BC16{ VBC13 VBC7 Fc:1} BC9} Fl} VBC17{ VBC18{ m} VBC9 BC19{ m} VBC15 BC7 vd FU20{ m}[6] Fs} vd v1}


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

static void Test_S19016C1()
{
  extern Class_Descriptor cd_S19016C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,51)];
    init_test(&cd_S19016C1, buf);
    S19016C1 *dp, &lv = *(dp=new (buf) S19016C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,200), "sizeof(S19016C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19016C1)");
    check_base_class_offset(lv, (S2014C38*)(S19016C3*)(S19016C2*), ABISELECT(8,4), "S19016C1");
    check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C3*)(S19016C2*), ABISELECT(8,4), "S19016C1");
    check_base_class_offset(lv, (S19016C5*)(S19016C3*)(S19016C2*), ABISELECT(8,4), "S19016C1");
    /*is_ambiguous_... S19016C3::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C3*)(S19016C2*), ABISELECT(17,9), "S19016C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C3*)(S19016C2*), ABISELECT(20,12), "S19016C1");
    check_base_class_offset(lv, (S19016C3*)(S19016C2*), ABISELECT(8,4), "S19016C1");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C2*), ABISELECT(40,24), "S19016C1");
    /*is_ambiguous_... S19016C2::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C2*), ABISELECT(40,24), "S19016C1");
    check_base_class_offset(lv, (S19016C2*), ABISELECT(8,4), "S19016C1");
    check_base_class_offset(lv, (S19016C2*)(S19016C12*), ABISELECT(8,4), "S19016C1");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C9*)(S19016C8*), 0, "S19016C1");
    /*is_ambiguous_... S19016C12::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C12*), 0, "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C9*), 0, "S19016C1");
    check_base_class_offset(lv, (S2014C38*)(S19016C15*)(S19016C14*)(S19016C11*)(S19016C8*), 0, "S19016C1");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C9*)(S19016C11*)(S19016C8*), 0, "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C15 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19016C15*), 0, "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*), ABISELECT(168,104), "S19016C1");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C9*)(S19016C8*), ABISELECT(168,104), "S19016C1");
    check_base_class_offset(lv, (S19016C5*)(S19016C13*)(S19016C12*), ABISELECT(168,104), "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C9*), ABISELECT(168,104), "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C13 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C13*), ABISELECT(168,104), "S19016C1");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C9*)(S19016C11*)(S19016C8*), ABISELECT(168,104), "S19016C1");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*)(S19016C8*), ABISELECT(180,112), "S19016C1");
    /*is_ambiguous_... S19016C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C12*), ABISELECT(180,112), "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*), ABISELECT(180,112), "S19016C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19016C16*)(S19016C11*)(S19016C8*), ABISELECT(180,112), "S19016C1");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C9*)(S19016C11*)(S19016C8*), ABISELECT(180,112), "S19016C1");
    /*is_ambiguous_... S19016C8::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C9*)(S19016C8*), ABISELECT(56,36), "S19016C1");
    check_base_class_offset(lv, (S19016C13*)(S19016C12*), ABISELECT(184,116), "S19016C1");
    check_base_class_offset(lv, (S19016C9*)(S19016C12*), ABISELECT(240,152), "S19016C1");
    check_base_class_offset(lv, (S19016C9*)(S19016C14*)(S19016C11*)(S19016C8*), ABISELECT(240,152), "S19016C1");
    check_base_class_offset(lv, (S19016C9*)(S19016C15*)(S19016C14*)(S19016C11*)(S19016C8*), ABISELECT(240,152), "S19016C1");
    check_base_class_offset(lv, (S19016C9*)(S19016C17*), ABISELECT(240,152), "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C15 */ AMB_check_base_class_offset(lv, (S19016C9*)(S19016C15*), ABISELECT(240,152), "S19016C1");
    check_base_class_offset(lv, (S19016C12*)(S19016C11*)(S19016C8*), ABISELECT(184,116), "S19016C1");
    /*is_ambiguous_... S19016C15::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C15*)(S19016C14*)(S19016C11*)(S19016C8*), ABISELECT(89,53), "S19016C1");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C15*)(S19016C14*)(S19016C11*)(S19016C8*), ABISELECT(80,48), "S19016C1");
    /*is_ambiguous_... S19016C15::S19016C5 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C15*)(S19016C14*)(S19016C11*)(S19016C8*), ABISELECT(80,48), "S19016C1");
    check_base_class_offset(lv, (S19016C15*)(S19016C14*)(S19016C11*)(S19016C8*), ABISELECT(80,48), "S19016C1");
    /*is_ambiguous_... S19016C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C14*)(S19016C11*)(S19016C8*), 0, "S19016C1");
    check_base_class_offset(lv, (S19016C14*)(S19016C11*)(S19016C8*), ABISELECT(80,48), "S19016C1");
    check_base_class_offset(lv, (S19016C13*)(S19016C16*)(S19016C11*)(S19016C8*), ABISELECT(264,164), "S19016C1");
    check_base_class_offset(lv, (S19016C16*)(S19016C11*)(S19016C8*), ABISELECT(120,80), "S19016C1");
    /*is_ambiguous_... S19016C11::S19016C9 */ AMB_check_base_class_offset(lv, (S19016C9*)(S19016C11*)(S19016C8*), ABISELECT(136,88), "S19016C1");
    check_base_class_offset(lv, (S19016C11*)(S19016C8*), ABISELECT(80,48), "S19016C1");
    check_base_class_offset(lv, (S19016C8*), ABISELECT(56,36), "S19016C1");
    check_base_class_offset(lv, (S2014C24*)(S19016C17*), 0, "S19016C1");
    check_base_class_offset(lv, (S2014C21*)(S19016C17*), ABISELECT(280,176), "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C15 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C15*), ABISELECT(313,197), "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C15 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19016C5*)(S19016C15*), ABISELECT(304,192), "S19016C1");
    /*is_ambiguous_... S19016C1::S19016C15 */ AMB_check_base_class_offset(lv, (S19016C5*)(S19016C15*), ABISELECT(304,192), "S19016C1");
    check_base_class_offset(lv, (S19016C15*)(S19016C17*), ABISELECT(304,192), "S19016C1");
    /*is_ambiguous_... S19016C17::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19016C17*), ABISELECT(288,180), "S19016C1");
    check_base_class_offset(lv, (S19016C17*), ABISELECT(280,176), "S19016C1");
    test_class_info(&lv, &cd_S19016C1);
    dp->~S19016C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19016C1(Test_S19016C1, "S19016C1", ABISELECT(320,200));

#else // __cplusplus

extern void _ZN8S19016C1C1Ev();
extern void _ZN8S19016C1D2Ev();
Name_Map name_map_S19016C1[] = {
  NSPAIR(_ZN8S19016C1C1Ev),
  NSPAIR(_ZN8S19016C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C3;
extern VTBL_ENTRY _ZTI8S19016C3[];
extern  VTBL_ENTRY _ZTV8S19016C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C2;
extern VTBL_ENTRY _ZTI8S19016C2[];
extern  VTBL_ENTRY _ZTV8S19016C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S19016C13;
extern VTBL_ENTRY _ZTI9S19016C13[];
extern  VTBL_ENTRY _ZTV9S19016C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C13[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S19016C12;
extern VTBL_ENTRY _ZTI9S19016C12[];
extern  VTBL_ENTRY _ZTV9S19016C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C15;
extern VTBL_ENTRY _ZTI9S19016C15[];
extern  VTBL_ENTRY _ZTV9S19016C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C14;
extern VTBL_ENTRY _ZTI9S19016C14[];
extern  VTBL_ENTRY _ZTV9S19016C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C14[];
extern Class_Descriptor cd_S19016C13;
extern VTBL_ENTRY _ZTI9S19016C13[];
extern  VTBL_ENTRY _ZTV9S19016C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C13[];
extern Class_Descriptor cd_S19016C16;
extern VTBL_ENTRY _ZTI9S19016C16[];
extern  VTBL_ENTRY _ZTV9S19016C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C16[];
extern Class_Descriptor cd_S19016C9;
extern VTBL_ENTRY _ZTI8S19016C9[];
extern  VTBL_ENTRY _ZTV8S19016C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C9[];
extern Class_Descriptor cd_S19016C11;
extern VTBL_ENTRY _ZTI9S19016C11[];
extern  VTBL_ENTRY _ZTV9S19016C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C11[];
extern Class_Descriptor cd_S19016C8;
extern VTBL_ENTRY _ZTI8S19016C8[];
extern  VTBL_ENTRY _ZTV8S19016C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C8[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C21;
extern VTBL_ENTRY _ZTI8S2014C21[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19016C5;
extern VTBL_ENTRY _ZTI8S19016C5[];
extern  VTBL_ENTRY _ZTV8S19016C5[];
extern Class_Descriptor cd_S19016C15;
extern VTBL_ENTRY _ZTI9S19016C15[];
extern  VTBL_ENTRY _ZTV9S19016C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C15[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19016C17;
extern VTBL_ENTRY _ZTI9S19016C17[];
extern  VTBL_ENTRY _ZTV9S19016C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19016C17[];
static Base_Class bases_S19016C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2014C28,    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_S19016C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(20,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19016C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(40,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19016C2,    ABISELECT(8,4), //bcp->offset
    17, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(168,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
    11, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(168,104), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(180,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19016C9,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19016C13,    ABISELECT(184,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19016C9,    ABISELECT(240,152), //bcp->offset
    80, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19016C12,    ABISELECT(184,116), //bcp->offset
    70, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(89,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19016C15,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19016C14,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19016C13,    ABISELECT(264,164), //bcp->offset
    88, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19016C16,    ABISELECT(120,80), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19016C9,    ABISELECT(136,88), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19016C11,    ABISELECT(80,48), //bcp->offset
    39, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19016C8,    ABISELECT(56,36), //bcp->offset
    26, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S2014C21,    ABISELECT(280,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(313,197), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19016C5,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19016C15,    ABISELECT(304,192), //bcp->offset
    105, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19016C17,    ABISELECT(280,176), //bcp->offset
    94, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19016C1[];
extern void _ZN8S19016C1D1Ev();
extern void _ZN8S19016C1D0Ev();
extern void _ZN8S19016C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19016C1D1Ev,_ZTv0_n12_N8S19016C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19016C1D1Ev,_ZThn4_N8S19016C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C1D0Ev,_ZTv0_n12_N8S19016C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19016C1D0Ev,_ZThn4_N8S19016C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19016C1D1Ev,_ZTvn20_n12_N8S19016C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19016C1D0Ev,_ZTvn20_n12_N8S19016C1D0Ev)();
extern void ABISELECT(_ZTv0_n88_N8S19016C1D1Ev,_ZTv0_n44_N8S19016C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19016C1D1Ev,_ZThn36_N8S19016C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19016C1D0Ev,_ZTv0_n44_N8S19016C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19016C1D0Ev,_ZThn36_N8S19016C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn24_n88_N8S19016C1D1Ev,_ZTvn12_n44_N8S19016C1D1Ev)();
extern void ABISELECT(_ZTvn24_n88_N8S19016C1D0Ev,_ZTvn12_n44_N8S19016C1D0Ev)();
extern void ABISELECT(_ZTvn64_n88_N8S19016C1D1Ev,_ZTvn44_n44_N8S19016C1D1Ev)();
extern void ABISELECT(_ZTvn64_n88_N8S19016C1D0Ev,_ZTvn44_n44_N8S19016C1D0Ev)();
extern void ABISELECT(_ZTvn80_n88_N8S19016C1D1Ev,_ZTvn52_n44_N8S19016C1D1Ev)();
extern void ABISELECT(_ZTvn80_n88_N8S19016C1D0Ev,_ZTvn52_n44_N8S19016C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19016C1D1Ev,_ZTv0_n12_N8S19016C1D1Ev)();
extern void ABISELECT(_ZThn168_N8S19016C1D1Ev,_ZThn104_N8S19016C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C1D0Ev,_ZTv0_n12_N8S19016C1D0Ev)();
extern void ABISELECT(_ZThn168_N8S19016C1D0Ev,_ZThn104_N8S19016C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19016C1D1Ev,_ZTv0_n32_N8S19016C1D1Ev)();
extern void ABISELECT(_ZThn184_N8S19016C1D1Ev,_ZThn116_N8S19016C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19016C1D0Ev,_ZTv0_n32_N8S19016C1D0Ev)();
extern void ABISELECT(_ZThn184_N8S19016C1D0Ev,_ZThn116_N8S19016C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19016C1D1Ev,_ZTv0_n24_N8S19016C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S19016C1D1Ev,_ZThn152_N8S19016C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19016C1D0Ev,_ZTv0_n24_N8S19016C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S19016C1D0Ev,_ZThn152_N8S19016C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19016C1D1Ev,_ZTv0_n16_N8S19016C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19016C1D1Ev,_ZThn164_N8S19016C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19016C1D0Ev,_ZTv0_n16_N8S19016C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19016C1D0Ev,_ZThn164_N8S19016C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19016C1D1Ev,_ZTv0_n36_N8S19016C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19016C1D1Ev,_ZThn176_N8S19016C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19016C1D0Ev,_ZTv0_n36_N8S19016C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19016C1D0Ev,_ZThn176_N8S19016C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19016C1D1Ev,_ZTv0_n28_N8S19016C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S19016C1D1Ev,_ZThn192_N8S19016C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19016C1D0Ev,_ZTv0_n28_N8S19016C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S19016C1D0Ev,_ZThn192_N8S19016C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19016C1[] = {
  ABISELECT(304,192),
  0,
  ABISELECT(280,176),
  ABISELECT(264,164),
  0,
  ABISELECT(240,152),
  ABISELECT(184,116),
  ABISELECT(180,112),
  ABISELECT(168,104),
  0,
  ABISELECT(56,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&_ZN8S19016C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19016C12v1Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C1D1Ev,_ZTv0_n12_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C1D0Ev,_ZTv0_n12_N8S19016C1D0Ev),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19016C1D1Ev,_ZTvn20_n12_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19016C1D0Ev,_ZTvn20_n12_N8S19016C1D0Ev),
  ABISELECT(-56,-36),
  ABISELECT(208,128),
  ABISELECT(-56,-36),
  ABISELECT(-48,-32),
  ABISELECT(184,116),
  ABISELECT(128,80),
  ABISELECT(124,76),
  ABISELECT(112,68),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19016C1D1Ev,_ZTv0_n44_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19016C1D0Ev,_ZTv0_n44_N8S19016C1D0Ev),
  ABISELECT(184,116),
  ABISELECT(-72,-44),
  ABISELECT(104,68),
  ABISELECT(-80,-48),
  ABISELECT(100,64),
  ABISELECT(88,56),
  ABISELECT(160,104),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n88_N8S19016C1D1Ev,_ZTvn12_n44_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n88_N8S19016C1D0Ev,_ZTvn12_n44_N8S19016C1D0Ev),
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(144,84),
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19016C1D1Ev,_ZTvn44_n44_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19016C1D0Ev,_ZTvn44_n44_N8S19016C1D0Ev),
  ABISELECT(44,24),
  ABISELECT(32,16),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n88_N8S19016C1D1Ev,_ZTvn52_n44_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n88_N8S19016C1D0Ev,_ZTvn52_n44_N8S19016C1D0Ev),
  ABISELECT(-168,-104),
  ABISELECT(-168,-104),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C1D1Ev,_ZTv0_n12_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C1D0Ev,_ZTv0_n12_N8S19016C1D0Ev),
  ABISELECT(-184,-116),
  ABISELECT(-176,-112),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-184,-116),
  ABISELECT(-16,-12),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19016C1D1Ev,_ZTv0_n32_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19016C1D0Ev,_ZTv0_n32_N8S19016C1D0Ev),
  ABISELECT(-240,-152),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-152),
  ABISELECT(-240,-152),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19016C1D1Ev,_ZTv0_n24_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19016C1D0Ev,_ZTv0_n24_N8S19016C1D0Ev),
  ABISELECT(-264,-164),
  ABISELECT(-96,-60),
  ABISELECT(-264,-164),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19016C1D1Ev,_ZTv0_n16_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19016C1D0Ev,_ZTv0_n16_N8S19016C1D0Ev),
  ABISELECT(-280,-176),
  ABISELECT(24,16),
  ABISELECT(-100,-64),
  ABISELECT(-112,-72),
  ABISELECT(-280,-176),
  ABISELECT(-40,-24),
  ABISELECT(-280,-176),
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19016C1D1Ev,_ZTv0_n36_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19016C1D0Ev,_ZTv0_n36_N8S19016C1D0Ev),
  ABISELECT(-304,-192),
  ABISELECT(-124,-80),
  ABISELECT(-136,-88),
  ABISELECT(-64,-40),
  ABISELECT(-304,-192),
  ABISELECT(-304,-192),
  (VTBL_ENTRY)&(_ZTI8S19016C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19016C1D1Ev,_ZTv0_n28_N8S19016C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19016C1D0Ev,_ZTv0_n28_N8S19016C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19016C1[];
extern void _ZN8S19016C8D1Ev();
extern void _ZN8S19016C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C8__8S19016C1[] = {
  ABISELECT(208,128),
  ABISELECT(-56,-36),
  ABISELECT(-48,-32),
  ABISELECT(184,116),
  ABISELECT(128,80),
  ABISELECT(124,76),
  ABISELECT(112,68),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&_ZN8S19016C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C8D0Ev,
};
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C98S19016C8__8S19016C1[] = {
  ABISELECT(124,76),
  ABISELECT(112,68),
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S19016C9D1Ev,_ZThn68_N8S19016C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S19016C9D0Ev,_ZThn68_N8S19016C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C98S19016C8__8S19016C1[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern void _ZN9S19016C11D1Ev();
extern void _ZN9S19016C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(184,116),
  ABISELECT(-72,-44),
  ABISELECT(104,68),
  ABISELECT(-80,-48),
  ABISELECT(100,64),
  ABISELECT(88,56),
  ABISELECT(160,104),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&_ZN9S19016C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C11D0Ev,
};
extern void _ZN9S19016C14D1Ev();
extern void _ZN9S19016C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C149S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(100,64),
  ABISELECT(88,56),
  ABISELECT(160,104),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&_ZN9S19016C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C14D0Ev,
};
extern void _ZN9S19016C15D1Ev();
extern void _ZN9S19016C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C159S19016C149S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(100,64),
  ABISELECT(88,56),
  ABISELECT(160,104),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&_ZN9S19016C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn160_N9S19016C15D1Ev,_ZThn104_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn160_N9S19016C15D0Ev,_ZThn104_N9S19016C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C159S19016C149S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-160,-104),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-152),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev)();
extern void ABISELECT(_ZThn88_N9S19016C15D1Ev,_ZThn56_N9S19016C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev)();
extern void ABISELECT(_ZThn88_N9S19016C15D0Ev,_ZThn56_N9S19016C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__A1__9S19016C159S19016C149S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev)();
extern void ABISELECT(_ZThn160_N9S19016C14D1Ev,_ZThn104_N9S19016C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev)();
extern void ABISELECT(_ZThn160_N9S19016C14D0Ev,_ZThn104_N9S19016C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C149S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-160,-104),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-152),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev)();
extern void ABISELECT(_ZThn88_N9S19016C14D1Ev,_ZThn56_N9S19016C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev)();
extern void ABISELECT(_ZThn88_N9S19016C14D0Ev,_ZThn56_N9S19016C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C149S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19016C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev),
};
extern void _ZN9S19016C16D1Ev();
extern void _ZN9S19016C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C169S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&_ZN9S19016C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev)();
extern void ABISELECT(_ZThn144_N9S19016C16D1Ev,_ZThn84_N9S19016C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev)();
extern void ABISELECT(_ZThn144_N9S19016C16D0Ev,_ZThn84_N9S19016C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C13__9S19016C169S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-144,-84),
  ABISELECT(-96,-60),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev)();
extern void ABISELECT(_ZThn48_N9S19016C16D1Ev,_ZThn24_N9S19016C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev)();
extern void ABISELECT(_ZThn48_N9S19016C16D0Ev,_ZThn24_N9S19016C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C169S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19016C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev),
};
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C99S19016C118S19016C8__A2__8S19016C1[] = {
  ABISELECT(44,24),
  ABISELECT(32,16),
  ABISELECT(-136,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19016C9D1Ev,_ZThn16_N8S19016C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19016C9D0Ev,_ZThn16_N8S19016C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C99S19016C118S19016C8__A2__8S19016C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19016C11D1Ev,_ZTv0_n32_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S19016C11D1Ev,_ZThn68_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19016C11D0Ev,_ZTv0_n32_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn104_N9S19016C11D0Ev,_ZThn68_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C12__9S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(-176,-112),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-184,-116),
  ABISELECT(-16,-12),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19016C11D1Ev,_ZTv0_n32_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19016C11D0Ev,_ZTv0_n32_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn88_N9S19016C11D1Ev,_ZThn56_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn88_N9S19016C11D0Ev,_ZThn56_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19016C11D1Ev,_ZTv0_n24_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn160_N9S19016C11D1Ev,_ZThn104_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C11D0Ev,_ZTv0_n24_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn160_N9S19016C11D0Ev,_ZThn104_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-160,-104),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-152),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C11D1Ev,_ZTv0_n24_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C11D0Ev,_ZTv0_n24_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C2__9S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(72,44),
  ABISELECT(72,44),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19016C11D1Ev,_ZTvn20_n12_N9S19016C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19016C11D0Ev,_ZTvn20_n12_N9S19016C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C58S19016C2__A2__9S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C11D1Ev,_ZTvn20_n12_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C11D0Ev,_ZTvn20_n12_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZThn40_N9S19016C11D1Ev,_ZThn32_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S19016C11D0Ev,_ZThn32_N9S19016C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19016C16__9S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(144,84),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19016C11D1Ev,_ZThn32_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19016C11D0Ev,_ZThn32_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19016C11D1Ev,_ZTv0_n16_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn184_N9S19016C11D1Ev,_ZThn116_N9S19016C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19016C11D0Ev,_ZTv0_n16_N9S19016C11D0Ev)();
extern void ABISELECT(_ZThn184_N9S19016C11D0Ev,_ZThn116_N9S19016C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C13__A1__9S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(-184,-116),
  ABISELECT(-96,-60),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C11D1Ev,_ZTv0_n16_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19016C11D0Ev,_ZTv0_n16_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZThn56_N9S19016C11D1Ev,_ZThn40_N9S19016C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S19016C11D0Ev,_ZThn40_N9S19016C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C9__A__9S19016C118S19016C8__8S19016C1[] = {
  ABISELECT(44,24),
  ABISELECT(32,16),
  ABISELECT(-136,-88),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19016C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19016C11D1Ev,_ZThn40_N9S19016C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19016C11D0Ev,_ZThn40_N9S19016C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S19016C8D1Ev,_ZThn68_N8S19016C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S19016C8D0Ev,_ZThn68_N8S19016C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C8__8S19016C1[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19016C8D1Ev,_ZThn12_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19016C8D0Ev,_ZThn12_N8S19016C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19016C11__8S19016C8__8S19016C1[] = {
  ABISELECT(184,116),
  ABISELECT(-72,-44),
  ABISELECT(104,68),
  ABISELECT(-80,-48),
  ABISELECT(100,64),
  ABISELECT(88,56),
  ABISELECT(160,104),
  ABISELECT(-80,-48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19016C8D1Ev,_ZThn12_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19016C8D0Ev,_ZThn12_N8S19016C8D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19016C8D1Ev,_ZTv0_n32_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S19016C8D1Ev,_ZThn80_N8S19016C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19016C8D0Ev,_ZTv0_n32_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S19016C8D0Ev,_ZThn80_N8S19016C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C12__8S19016C8__8S19016C1[] = {
  ABISELECT(-128,-80),
  ABISELECT(-176,-112),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-184,-116),
  ABISELECT(-16,-12),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19016C8D1Ev,_ZTv0_n32_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19016C8D0Ev,_ZTv0_n32_N8S19016C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19016C8D1Ev,_ZTv0_n24_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn184_N8S19016C8D1Ev,_ZThn116_N8S19016C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19016C8D0Ev,_ZTv0_n24_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn184_N8S19016C8D0Ev,_ZThn116_N8S19016C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__A1__8S19016C8__8S19016C1[] = {
  ABISELECT(-184,-116),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-152),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19016C8D1Ev,_ZTv0_n24_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19016C8D0Ev,_ZTv0_n24_N8S19016C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C2__8S19016C8__8S19016C1[] = {
  ABISELECT(48,32),
  ABISELECT(48,32),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S19016C8D1Ev,_ZTvn20_n12_N8S19016C8D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19016C8D0Ev,_ZTvn20_n12_N8S19016C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C58S19016C2__A2__8S19016C8__8S19016C1[] = {
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19016C8D1Ev,_ZTvn20_n12_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19016C8D0Ev,_ZTvn20_n12_N8S19016C8D0Ev),
};
extern void ABISELECT(_ZThn64_N8S19016C8D1Ev,_ZThn44_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19016C8D0Ev,_ZThn44_N8S19016C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19016C169S19016C11__8S19016C8__8S19016C1[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(144,84),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19016C8D1Ev,_ZThn44_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19016C8D0Ev,_ZThn44_N8S19016C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19016C8D1Ev,_ZTv0_n16_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn208_N8S19016C8D1Ev,_ZThn128_N8S19016C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19016C8D0Ev,_ZTv0_n16_N8S19016C8D0Ev)();
extern void ABISELECT(_ZThn208_N8S19016C8D0Ev,_ZThn128_N8S19016C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C13__A1__8S19016C8__8S19016C1[] = {
  ABISELECT(-208,-128),
  ABISELECT(-96,-60),
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19016C8D1Ev,_ZTv0_n16_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19016C8D0Ev,_ZTv0_n16_N8S19016C8D0Ev),
};
extern void ABISELECT(_ZThn80_N8S19016C8D1Ev,_ZThn52_N8S19016C8D1Ev)();
extern void ABISELECT(_ZThn80_N8S19016C8D0Ev,_ZThn52_N8S19016C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C99S19016C11__A2__8S19016C8__8S19016C1[] = {
  ABISELECT(44,24),
  ABISELECT(32,16),
  ABISELECT(-136,-88),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19016C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19016C8D1Ev,_ZThn52_N8S19016C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19016C8D0Ev,_ZThn52_N8S19016C8D0Ev),
};
extern void _ZN9S19016C12D1Ev();
extern void _ZN9S19016C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C12__8S19016C1[] = {
  ABISELECT(-176,-112),
  ABISELECT(56,36),
  ABISELECT(-4,-4),
  ABISELECT(-184,-116),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&_ZN9S19016C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C12D0Ev,
};
extern void _ZN9S19016C13D1Ev();
extern void _ZN9S19016C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C139S19016C12__8S19016C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&_ZN9S19016C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C139S19016C12__8S19016C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C12__8S19016C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19016C12D1Ev,_ZThn36_N9S19016C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19016C12D0Ev,_ZThn36_N9S19016C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C12__8S19016C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-152),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C2__9S19016C12__8S19016C1[] = {
  ABISELECT(176,112),
  ABISELECT(176,112),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D1Ev,_ZTv0_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C12D0Ev,_ZTv0_n12_N9S19016C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19016C12D1Ev,_ZTvn20_n12_N9S19016C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19016C12D0Ev,_ZTvn20_n12_N9S19016C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C58S19016C2__A2__9S19016C12__8S19016C1[] = {
  ABISELECT(144,92),
  (VTBL_ENTRY)&(_ZTI9S19016C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C12D1Ev,_ZTvn20_n12_N9S19016C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19016C12D0Ev,_ZTvn20_n12_N9S19016C12D0Ev),
};
extern void _ZN8S19016C9D1Ev();
extern void _ZN8S19016C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19016C9__A1__8S19016C1[] = {
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&_ZN8S19016C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19016C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__8S19016C9__A1__8S19016C1[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S19016C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev),
};
extern void _ZN9S19016C13D1Ev();
extern void _ZN9S19016C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C13__A1__8S19016C1[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&_ZN9S19016C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C13__A1__8S19016C1[] = {
  ABISELECT(96,60),
  ABISELECT(96,60),
  (VTBL_ENTRY)&(_ZTI9S19016C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D1Ev,_ZTv0_n12_N9S19016C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C13D0Ev,_ZTv0_n12_N9S19016C13D0Ev),
};
extern void _ZN9S19016C17D1Ev();
extern void _ZN9S19016C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C17__8S19016C1[] = {
  ABISELECT(24,16),
  ABISELECT(-100,-64),
  ABISELECT(-112,-72),
  ABISELECT(-280,-176),
  ABISELECT(-40,-24),
  ABISELECT(-280,-176),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C17[0]),
  (VTBL_ENTRY)&_ZN9S19016C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C17D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19016C17D1Ev,_ZTv0_n24_N9S19016C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19016C17D0Ev,_ZTv0_n24_N9S19016C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C17__8S19016C1[] = {
  ABISELECT(40,24),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-152),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S19016C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C17D1Ev,_ZTv0_n24_N9S19016C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C17D0Ev,_ZTv0_n24_N9S19016C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C17D1Ev,_ZTv0_n12_N9S19016C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C17D0Ev,_ZTv0_n12_N9S19016C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__9S19016C17__8S19016C1[] = {
  ABISELECT(112,72),
  ABISELECT(112,72),
  (VTBL_ENTRY)&(_ZTI9S19016C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C17D1Ev,_ZTv0_n12_N9S19016C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C17D0Ev,_ZTv0_n12_N9S19016C17D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S19016C17D1Ev,_ZTv0_n28_N9S19016C17D1Ev)();
extern void ABISELECT(_ZThn24_N9S19016C17D1Ev,_ZThn16_N9S19016C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19016C17D0Ev,_ZTv0_n28_N9S19016C17D0Ev)();
extern void ABISELECT(_ZThn24_N9S19016C17D0Ev,_ZThn16_N9S19016C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19016C15__9S19016C17__8S19016C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-124,-80),
  ABISELECT(-136,-88),
  ABISELECT(-64,-40),
  ABISELECT(-304,-192),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19016C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19016C17D1Ev,_ZTv0_n28_N9S19016C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19016C17D0Ev,_ZTv0_n28_N9S19016C17D0Ev),
};
extern void _ZN9S19016C15D1Ev();
extern void _ZN9S19016C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19016C15__A1__8S19016C1[] = {
  ABISELECT(-124,-80),
  ABISELECT(-136,-88),
  ABISELECT(-64,-40),
  ABISELECT(-304,-192),
  0,
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&_ZN9S19016C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19016C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C9__9S19016C15__A1__8S19016C1[] = {
  ABISELECT(64,40),
  ABISELECT(-60,-40),
  ABISELECT(-72,-48),
  ABISELECT(-240,-152),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19016C5__A1__9S19016C15__A1__8S19016C1[] = {
  ABISELECT(136,88),
  ABISELECT(136,88),
  (VTBL_ENTRY)&(_ZTI9S19016C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev),
};
static  VTT_ENTRY vtt_S19016C1[] = {
  {&(_ZTV8S19016C1[14]),  14,114},
  {&(_ZTV8S19016C1[20]),  20,114},
  {&(_ZTV8S19016C1[24]),  24,114},
  {&(_ZTV8S19016C1[37]),  37,114},
  {&(_ZTV8S19016C1[68]),  68,114},
  {&(_ZTV8S19016C1[49]),  49,114},
  {&(_ZTV8S19016C1[78]),  78,114},
  {&(_ZTV8S19016C1[86]),  86,114},
  {&(_ZTV8S19016C1[56]),  56,114},
  {&(_ZTV8S19016C1[92]),  92,114},
  {&(_ZTV8S19016C1[63]),  63,114},
  {&(_ZTV8S19016C1[103]),  103,114},
  {&(_ZTV8S19016C1[112]),  112,114},
  {&(_tg__ZTV8S19016C8__8S19016C1[10]),  10,12},
  {&(_tg__ZTV8S19016C98S19016C8__8S19016C1[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C98S19016C8__8S19016C1[3]),  3,5},
  {&(_tg__ZTV9S19016C118S19016C8__8S19016C1[10]),  10,12},
  {&(_tg__ZTV9S19016C149S19016C118S19016C8__8S19016C1[7]),  7,9},
  {&(_tg__ZTV9S19016C159S19016C149S19016C118S19016C8__8S19016C1[6]),  6,8},
  {&(_tg__ZTV8S19016C9__9S19016C159S19016C149S19016C118S19016C8__8S19016C1[6]),  6,8},
  {&(_tg__ZTV8S19016C5__A1__9S19016C159S19016C149S19016C118S19016C8__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C9__9S19016C149S19016C118S19016C8__8S19016C1[6]),  6,8},
  {&(_tg__ZTV8S19016C5__9S19016C149S19016C118S19016C8__8S19016C1[3]),  3,5},
  {&(_tg__ZTV9S19016C169S19016C118S19016C8__8S19016C1[5]),  5,7},
  {&(_tg__ZTV9S19016C13__9S19016C169S19016C118S19016C8__8S19016C1[4]),  4,6},
  {&(_tg__ZTV8S19016C5__9S19016C169S19016C118S19016C8__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C99S19016C118S19016C8__A2__8S19016C1[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C99S19016C118S19016C8__A2__8S19016C1[3]),  3,5},
  {&(_tg__ZTV9S19016C12__9S19016C118S19016C8__8S19016C1[8]),  8,10},
  {&(_tg__ZTV8S19016C5__9S19016C118S19016C8__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C9__9S19016C118S19016C8__8S19016C1[6]),  6,8},
  {&(_tg__ZTV8S19016C2__9S19016C118S19016C8__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C58S19016C2__A2__9S19016C118S19016C8__8S19016C1[2]),  2,4},
  {&(_tg__ZTV9S19016C16__9S19016C118S19016C8__8S19016C1[5]),  5,7},
  {&(_tg__ZTV9S19016C13__A1__9S19016C118S19016C8__8S19016C1[4]),  4,6},
  {&(_tg__ZTV8S19016C9__A__9S19016C118S19016C8__8S19016C1[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C8__8S19016C1[3]),  3,5},
  {&(_tg__ZTV9S19016C11__8S19016C8__8S19016C1[10]),  10,12},
  {&(_tg__ZTV9S19016C12__8S19016C8__8S19016C1[8]),  8,10},
  {&(_tg__ZTV8S19016C9__A1__8S19016C8__8S19016C1[6]),  6,8},
  {&(_tg__ZTV8S19016C2__8S19016C8__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C58S19016C2__A2__8S19016C8__8S19016C1[2]),  2,4},
  {&(_tg__ZTV9S19016C169S19016C11__8S19016C8__8S19016C1[5]),  5,7},
  {&(_tg__ZTV9S19016C13__A1__8S19016C8__8S19016C1[4]),  4,6},
  {&(_tg__ZTV8S19016C99S19016C11__A2__8S19016C8__8S19016C1[5]),  5,7},
  {&(_tg__ZTV9S19016C12__8S19016C1[7]),  7,9},
  {&(_tg__ZTV9S19016C139S19016C12__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C139S19016C12__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C12__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C9__9S19016C12__8S19016C1[6]),  6,8},
  {&(_tg__ZTV8S19016C2__9S19016C12__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C58S19016C2__A2__9S19016C12__8S19016C1[2]),  2,4},
  {&(_tg__ZTV8S19016C9__A1__8S19016C1[5]),  5,7},
  {&(_tg__ZTV8S19016C5__8S19016C9__A1__8S19016C1[3]),  3,5},
  {&(_tg__ZTV9S19016C13__A1__8S19016C1[3]),  3,5},
  {&(_tg__ZTV8S19016C5__9S19016C13__A1__8S19016C1[3]),  3,5},
  {&(_tg__ZTV9S19016C17__8S19016C1[8]),  8,10},
  {&(_tg__ZTV8S19016C9__9S19016C17__8S19016C1[6]),  6,8},
  {&(_tg__ZTV8S19016C5__9S19016C17__8S19016C1[3]),  3,5},
  {&(_tg__ZTV9S19016C15__9S19016C17__8S19016C1[7]),  7,9},
  {&(_tg__ZTV9S19016C15__A1__8S19016C1[6]),  6,8},
  {&(_tg__ZTV8S19016C9__9S19016C15__A1__8S19016C1[6]),  6,8},
  {&(_tg__ZTV8S19016C5__A1__9S19016C15__A1__8S19016C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19016C1[];
extern  VTBL_ENTRY _ZTV8S19016C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19016C1[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19016C17D0Ev,_ZTv0_n28_N9S19016C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19016C17D0Ev,_ZThn16_N9S19016C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19016C17D1Ev,_ZTv0_n28_N9S19016C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19016C17D1Ev,_ZThn16_N9S19016C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C12D0Ev,_ZTv0_n24_N9S19016C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C12D0Ev,_ZThn36_N9S19016C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C12D1Ev,_ZTv0_n24_N9S19016C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19016C12D1Ev,_ZThn36_N9S19016C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19016C8D0Ev,_ZTv0_n16_N8S19016C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19016C8D0Ev,_ZThn128_N8S19016C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19016C8D1Ev,_ZTv0_n16_N8S19016C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19016C8D1Ev,_ZThn128_N8S19016C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19016C8D0Ev,_ZTv0_n24_N8S19016C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19016C8D0Ev,_ZThn116_N8S19016C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19016C8D1Ev,_ZTv0_n24_N8S19016C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19016C8D1Ev,_ZThn116_N8S19016C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19016C8D0Ev,_ZTv0_n32_N8S19016C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19016C8D0Ev,_ZThn80_N8S19016C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19016C8D1Ev,_ZTv0_n32_N8S19016C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19016C8D1Ev,_ZThn80_N8S19016C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C8D0Ev,_ZTv0_n12_N8S19016C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19016C8D0Ev,_ZThn68_N8S19016C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C8D1Ev,_ZTv0_n12_N8S19016C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19016C8D1Ev,_ZThn68_N8S19016C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C11D0Ev,_ZTv0_n16_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19016C11D0Ev,_ZThn116_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C11D1Ev,_ZTv0_n16_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19016C11D1Ev,_ZThn116_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C11D0Ev,_ZTv0_n24_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C11D0Ev,_ZThn104_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C11D1Ev,_ZTv0_n24_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C11D1Ev,_ZThn104_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C11D0Ev,_ZTv0_n12_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C11D0Ev,_ZThn56_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C11D1Ev,_ZTv0_n12_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C11D1Ev,_ZThn56_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19016C11D0Ev,_ZTv0_n32_N9S19016C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19016C11D0Ev,_ZThn68_N9S19016C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19016C11D1Ev,_ZTv0_n32_N9S19016C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19016C11D1Ev,_ZThn68_N9S19016C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C16D0Ev,_ZTv0_n12_N9S19016C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19016C16D0Ev,_ZThn24_N9S19016C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C16D1Ev,_ZTv0_n12_N9S19016C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19016C16D1Ev,_ZThn24_N9S19016C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C16D0Ev,_ZTv0_n16_N9S19016C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19016C16D0Ev,_ZThn84_N9S19016C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19016C16D1Ev,_ZTv0_n16_N9S19016C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19016C16D1Ev,_ZThn84_N9S19016C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C14D0Ev,_ZTv0_n12_N9S19016C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C14D0Ev,_ZThn56_N9S19016C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C14D1Ev,_ZTv0_n12_N9S19016C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C14D1Ev,_ZThn56_N9S19016C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C14D0Ev,_ZTv0_n24_N9S19016C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C14D0Ev,_ZThn104_N9S19016C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C14D1Ev,_ZTv0_n24_N9S19016C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C14D1Ev,_ZThn104_N9S19016C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D0Ev,_ZTv0_n12_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C15D0Ev,_ZThn56_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19016C15D1Ev,_ZTv0_n12_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19016C15D1Ev,_ZThn56_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D0Ev,_ZTv0_n24_N9S19016C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C15D0Ev,_ZThn104_N9S19016C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19016C15D1Ev,_ZTv0_n24_N9S19016C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19016C15D1Ev,_ZThn104_N9S19016C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D0Ev,_ZTv0_n12_N8S19016C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19016C9D0Ev,_ZThn16_N8S19016C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19016C9D0Ev,_ZThn68_N8S19016C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C9D1Ev,_ZTv0_n12_N8S19016C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19016C9D1Ev,_ZThn16_N8S19016C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19016C9D1Ev,_ZThn68_N8S19016C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19016C1D0Ev,_ZTv0_n28_N8S19016C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19016C1D0Ev,_ZThn192_N8S19016C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19016C1D1Ev,_ZTv0_n28_N8S19016C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19016C1D1Ev,_ZThn192_N8S19016C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19016C1D0Ev,_ZTv0_n36_N8S19016C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19016C1D0Ev,_ZThn176_N8S19016C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19016C1D1Ev,_ZTv0_n36_N8S19016C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19016C1D1Ev,_ZThn176_N8S19016C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19016C1D0Ev,_ZTv0_n16_N8S19016C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19016C1D0Ev,_ZThn164_N8S19016C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19016C1D1Ev,_ZTv0_n16_N8S19016C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19016C1D1Ev,_ZThn164_N8S19016C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19016C1D0Ev,_ZTv0_n24_N8S19016C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19016C1D0Ev,_ZThn152_N8S19016C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19016C1D1Ev,_ZTv0_n24_N8S19016C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19016C1D1Ev,_ZThn152_N8S19016C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19016C1D0Ev,_ZTv0_n32_N8S19016C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19016C1D0Ev,_ZThn116_N8S19016C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19016C1D1Ev,_ZTv0_n32_N8S19016C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19016C1D1Ev,_ZThn116_N8S19016C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19016C1D0Ev,_ZTv0_n44_N8S19016C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19016C1D0Ev,_ZThn36_N8S19016C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19016C1D1Ev,_ZTv0_n44_N8S19016C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19016C1D1Ev,_ZThn36_N8S19016C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C1D0Ev,_ZTv0_n12_N8S19016C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19016C1D0Ev,_ZThn104_N8S19016C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19016C1D0Ev,_ZThn4_N8S19016C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19016C1D1Ev,_ZTv0_n12_N8S19016C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19016C1D1Ev,_ZThn104_N8S19016C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19016C1D1Ev,_ZThn4_N8S19016C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19016C1 = {  "S19016C1", // class name
  bases_S19016C1, 36,
  &(vtc_S19016C1[0]), // expected_vtbl_contents
  &(vtt_S19016C1[0]), // expected_vtt_contents
  ABISELECT(320,200), // object size
  NSPAIRA(_ZTI8S19016C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19016C1),114, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19016C1),63, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C5  : S2014C38 {
  ::S2014C38 s7276c5f0;
  virtual  ~S7276C5(); // _ZN7S7276C5D1Ev
  S7276C5(); // tgen
};
//SIG(-1 S7276C5) C1{ BC2{ m} vd FC2}


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

static void Test_S7276C5()
{
  extern Class_Descriptor cd_S7276C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7276C5, buf);
    S7276C5 *dp, &lv = *(dp=new (buf) S7276C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7276C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C5)");
    check_base_class_offset(lv, (S2014C38*), 0, "S7276C5");
    check_field_offset(lv, s7276c5f0, ABISELECT(8,4), "S7276C5.s7276c5f0");
    test_class_info(&lv, &cd_S7276C5);
    dp->~S7276C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C5(Test_S7276C5, "S7276C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7276C5C1Ev();
extern void _ZN7S7276C5D1Ev();
Name_Map name_map_S7276C5[] = {
  NSPAIR(_ZN7S7276C5C1Ev),
  NSPAIR(_ZN7S7276C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S7276C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7276C5[];
extern void _ZN7S7276C5D1Ev();
extern void _ZN7S7276C5D0Ev();
static  VTBL_ENTRY vtc_S7276C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C5[0]),
  (VTBL_ENTRY)&_ZN7S7276C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
Class_Descriptor cd_S7276C5 = {  "S7276C5", // class name
  bases_S7276C5, 1,
  &(vtc_S7276C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7276C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7276C5),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  S7276C7  : virtual S2014C28 , virtual S7276C5 , virtual S3222C8_nt {
  void *s7276c7f0;
  ::S19762C18_nt s7276c7f1;
  virtual  ~S7276C7(); // _ZN7S7276C7D2Ev
  S7276C7(); // tgen
};
//SIG(-1 S7276C7) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S7276C7()
{
  extern Class_Descriptor cd_S7276C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7276C7, buf);
    S7276C7 *dp, &lv = *(dp=new (buf) S7276C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7276C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C7)");
    check_base_class_offset(lv, (S2014C28*), 0, "S7276C7");
    check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(24,12), "S7276C7");
    check_base_class_offset(lv, (S7276C5*), ABISELECT(24,12), "S7276C7");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S7276C7");
    check_field_offset(lv, s7276c7f0, ABISELECT(8,4), "S7276C7.s7276c7f0");
    check_field_offset(lv, s7276c7f1, ABISELECT(16,8), "S7276C7.s7276c7f1");
    test_class_info(&lv, &cd_S7276C7);
    dp->~S7276C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C7(Test_S7276C7, "S7276C7", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S7276C7C1Ev();
extern void _ZN7S7276C7D2Ev();
Name_Map name_map_S7276C7[] = {
  NSPAIR(_ZN7S7276C7C1Ev),
  NSPAIR(_ZN7S7276C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S7276C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7276C7[];
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C7[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S7276C7[];
static  VTT_ENTRY vtt_S7276C7[] = {
  {&(_ZTV7S7276C7[5]),  5,12},
  {&(_ZTV7S7276C7[10]),  10,12},
};
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C7 = {  "S7276C7", // class name
  bases_S7276C7, 4,
  &(vtc_S7276C7[0]), // expected_vtbl_contents
  &(vtt_S7276C7[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S7276C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7276C7),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7276C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C3  : S2014C38 , S7276C5 , virtual S2014C28 , virtual S7276C7 {
  virtual  ~S7276C3(); // _ZN7S7276C3D2Ev
  S7276C3(); // tgen
};
//SIG(-1 S7276C3) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S7276C3()
{
  extern Class_Descriptor cd_S7276C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S7276C3, buf);
    S7276C3 *dp, &lv = *(dp=new (buf) S7276C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S7276C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C3)");
    /*is_ambiguous_... S7276C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S7276C3");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), 0, "S7276C3");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*), 0, "S7276C3");
    check_base_class_offset(lv, (S2014C28*), 0, "S7276C3");
    check_base_class_offset(lv, (S2014C28*)(S7276C7*), 0, "S7276C3");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(40,20), "S7276C3");
    check_base_class_offset(lv, (S7276C5*)(S7276C7*), ABISELECT(40,20), "S7276C3");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*), ABISELECT(52,28), "S7276C3");
    check_base_class_offset(lv, (S7276C7*), ABISELECT(16,8), "S7276C3");
    test_class_info(&lv, &cd_S7276C3);
    dp->~S7276C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C3(Test_S7276C3, "S7276C3", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S7276C3C1Ev();
extern void _ZN7S7276C3D2Ev();
Name_Map name_map_S7276C3[] = {
  NSPAIR(_ZN7S7276C3C1Ev),
  NSPAIR(_ZN7S7276C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
static Base_Class bases_S7276C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7276C7,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7276C3[];
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7276C3D1Ev,_ZThn8_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7276C3D0Ev,_ZThn8_N7S7276C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn20_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn20_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C3[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S7276C3[];
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C3[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C7__7S7276C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
static  VTT_ENTRY vtt_S7276C3[] = {
  {&(_ZTV7S7276C3[6]),  6,21},
  {&(_ZTV7S7276C3[14]),  14,21},
  {&(_ZTV7S7276C3[19]),  19,21},
  {&(_tg__ZTV7S7276C7__7S7276C3[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C7__7S7276C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn20_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn20_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7276C3D0Ev,_ZThn8_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7276C3D1Ev,_ZThn8_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C3 = {  "S7276C3", // class name
  bases_S7276C3, 8,
  &(vtc_S7276C3[0]), // expected_vtbl_contents
  &(vtt_S7276C3[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S7276C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7276C3),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7276C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C2  : virtual S7276C3 {
  virtual  ~S7276C2(); // _ZN7S7276C2D2Ev
  S7276C2(); // tgen
};
//SIG(-1 S7276C2) C1{ VBC2{ BC3{ m} BC4{ BC3 vd FC3} VBC5{ m} VBC6{ VBC5 VBC4 VBC7{ m Fi} vd Fp FC8{}} vd} vd}


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

static void Test_S7276C2()
{
  extern Class_Descriptor cd_S7276C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7276C2, buf);
    S7276C2 *dp, &lv = *(dp=new (buf) S7276C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7276C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C2)");
    /*is_ambiguous_... S7276C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C3*), ABISELECT(17,9), "S7276C2");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C3*), ABISELECT(8,4), "S7276C2");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C3*), ABISELECT(8,4), "S7276C2");
    check_base_class_offset(lv, (S2014C28*)(S7276C3*), 0, "S7276C2");
    check_base_class_offset(lv, (S2014C28*)(S7276C7*), 0, "S7276C2");
    /*is_ambiguous_... S7276C2::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(48,24), "S7276C2");
    check_base_class_offset(lv, (S7276C5*)(S7276C7*), ABISELECT(48,24), "S7276C2");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*), ABISELECT(60,32), "S7276C2");
    check_base_class_offset(lv, (S7276C7*)(S7276C3*), ABISELECT(24,12), "S7276C2");
    check_base_class_offset(lv, (S7276C3*), ABISELECT(8,4), "S7276C2");
    test_class_info(&lv, &cd_S7276C2);
    dp->~S7276C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C2(Test_S7276C2, "S7276C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S7276C2C1Ev();
extern void _ZN7S7276C2D2Ev();
Name_Map name_map_S7276C2[] = {
  NSPAIR(_ZN7S7276C2C1Ev),
  NSPAIR(_ZN7S7276C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
extern Class_Descriptor cd_S7276C3;
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
static Base_Class bases_S7276C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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_S7276C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(48,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7276C7,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //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
    8, //immediately_derived
  0, 1},
  {&cd_S7276C3,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7276C2[];
extern void _ZN7S7276C2D1Ev();
extern void _ZN7S7276C2D0Ev();
extern void ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7276C2D1Ev,_ZThn4_N7S7276C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7276C2D0Ev,_ZThn4_N7S7276C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C2D1Ev,_ZThn12_N7S7276C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C2D0Ev,_ZThn12_N7S7276C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7276C2D1Ev,_ZThn24_N7S7276C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7276C2D0Ev,_ZThn24_N7S7276C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C2[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&_ZN7S7276C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7276C2[];
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C3__7S7276C2[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7276C3D1Ev,_ZThn8_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7276C3D0Ev,_ZThn8_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C3__7S7276C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn20_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn20_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C3__7S7276C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C2[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C7__7S7276C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
static  VTT_ENTRY vtt_S7276C2[] = {
  {&(_ZTV7S7276C2[7]),  7,31},
  {&(_ZTV7S7276C2[16]),  16,31},
  {&(_ZTV7S7276C2[24]),  24,31},
  {&(_ZTV7S7276C2[29]),  29,31},
  {&(_tg__ZTV7S7276C3__7S7276C2[6]),  6,8},
  {&(_tg__ZTV7S7276C7__7S7276C3__7S7276C2[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C3__7S7276C2[3]),  3,5},
  {&(_tg__ZTV7S7276C7__7S7276C2[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C7__7S7276C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7276C2[];
extern  VTBL_ENTRY _ZTV7S7276C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C2[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn20_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn20_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7276C3D0Ev,_ZThn8_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7276C3D1Ev,_ZThn8_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7276C2D0Ev,_ZThn24_N7S7276C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7276C2D1Ev,_ZThn24_N7S7276C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C2D0Ev,_ZThn12_N7S7276C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C2D1Ev,_ZThn12_N7S7276C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7276C2D0Ev,_ZThn4_N7S7276C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7276C2D1Ev,_ZThn4_N7S7276C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C2 = {  "S7276C2", // class name
  bases_S7276C2, 9,
  &(vtc_S7276C2[0]), // expected_vtbl_contents
  &(vtt_S7276C2[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S7276C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7276C2),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7276C2),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C11  : virtual S7276C5 {
  __tsi64 s7276c11f0;
  ~S7276C11(); // tgen
  S7276C11(); // tgen
};
//SIG(-1 S7276C11) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S7276C11()
{
  extern Class_Descriptor cd_S7276C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7276C11, buf);
    S7276C11 *dp, &lv = *(dp=new (buf) S7276C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7276C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C11)");
    check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(16,12), "S7276C11");
    check_base_class_offset(lv, (S7276C5*), ABISELECT(16,12), "S7276C11");
    check_field_offset(lv, s7276c11f0, ABISELECT(8,4), "S7276C11.s7276c11f0");
    test_class_info(&lv, &cd_S7276C11);
    dp->~S7276C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C11(Test_S7276C11, "S7276C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S7276C11C1Ev();
extern void _ZN8S7276C11D1Ev();
Name_Map name_map_S7276C11[] = {
  NSPAIR(_ZN8S7276C11C1Ev),
  NSPAIR(_ZN8S7276C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
static Base_Class bases_S7276C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C11[];
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7276C11D1Ev,_ZThn12_N8S7276C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7276C11D0Ev,_ZThn12_N8S7276C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C11[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7276C11[];
static  VTT_ENTRY vtt_S7276C11[] = {
  {&(_ZTV8S7276C11[3]),  3,10},
  {&(_ZTV8S7276C11[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C11D0Ev,_ZThn12_N8S7276C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C11D1Ev,_ZThn12_N8S7276C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C11 = {  "S7276C11", // class name
  bases_S7276C11, 2,
  &(vtc_S7276C11[0]), // expected_vtbl_contents
  &(vtt_S7276C11[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S7276C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7276C11),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7276C11),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C15  : S2014C28 , S7276C5 , S2014C38 , S3222C8_nt {
  short s7276c15f0:16;
  __tsi64 s7276c15f1;
  ~S7276C15(); // tgen
  S7276C15(); // tgen
};
//SIG(-1 S7276C15) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 FL}


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

static void Test_S7276C15()
{
  extern Class_Descriptor cd_S7276C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S7276C15, buf);
    S7276C15 *dp, &lv = *(dp=new (buf) S7276C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S7276C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C15)");
    check_base_class_offset(lv, (S2014C28*), 0, "S7276C15");
    check_base_class_offset(lv, (S2014C38*)(S7276C5*), 0, "S7276C15");
    check_base_class_offset(lv, (S7276C5*), 0, "S7276C15");
    /*is_ambiguous_... S7276C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S7276C15");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S7276C15");
    set_bf_and_test(lv, s7276c15f0, ABISELECT(16,12), 0, 16, 1, "S7276C15");
    set_bf_and_test(lv, s7276c15f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S7276C15");
    check_field_offset(lv, s7276c15f1, ABISELECT(24,16), "S7276C15.s7276c15f1");
    test_class_info(&lv, &cd_S7276C15);
    dp->~S7276C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C15(Test_S7276C15, "S7276C15", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S7276C15C1Ev();
extern void _ZN8S7276C15D1Ev();
Name_Map name_map_S7276C15[] = {
  NSPAIR(_ZN8S7276C15C1Ev),
  NSPAIR(_ZN8S7276C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S7276C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C15[];
extern void _ZN8S7276C15D1Ev();
extern void _ZN8S7276C15D0Ev();
static  VTBL_ENTRY vtc_S7276C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C15[0]),
  (VTBL_ENTRY)&_ZN8S7276C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C15D0Ev,
};
extern VTBL_ENTRY _ZTI8S7276C15[];
extern  VTBL_ENTRY _ZTV8S7276C15[];
Class_Descriptor cd_S7276C15 = {  "S7276C15", // class name
  bases_S7276C15, 5,
  &(vtc_S7276C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S7276C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7276C15),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  S7276C14  : S7276C15 , S7276C5 {
  int s7276c14f0;
  ~S7276C14(); // tgen
  S7276C14(); // tgen
};
//SIG(-1 S7276C14) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 FL} BC4 Fi}


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

static void Test_S7276C14()
{
  extern Class_Descriptor cd_S7276C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S7276C14, buf);
    S7276C14 *dp, &lv = *(dp=new (buf) S7276C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S7276C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C14)");
    check_base_class_offset(lv, (S2014C28*)(S7276C15*), 0, "S7276C14");
    check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C15*), 0, "S7276C14");
    check_base_class_offset(lv, (S7276C5*)(S7276C15*), 0, "S7276C14");
    /*is_ambiguous_... S7276C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C15*), ABISELECT(9,5), "S7276C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C15*), ABISELECT(12,8), "S7276C14");
    check_base_class_offset(lv, (S7276C15*), 0, "S7276C14");
    /*is_ambiguous_... S7276C14::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(32,24), "S7276C14");
    /*is_ambiguous_... S7276C14::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*), ABISELECT(32,24), "S7276C14");
    check_field_offset(lv, s7276c14f0, ABISELECT(44,32), "S7276C14.s7276c14f0");
    test_class_info(&lv, &cd_S7276C14);
    dp->~S7276C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C14(Test_S7276C14, "S7276C14", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN8S7276C14C1Ev();
extern void _ZN8S7276C14D1Ev();
Name_Map name_map_S7276C14[] = {
  NSPAIR(_ZN8S7276C14C1Ev),
  NSPAIR(_ZN8S7276C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C15;
extern VTBL_ENTRY _ZTI8S7276C15[];
extern  VTBL_ENTRY _ZTV8S7276C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
static Base_Class bases_S7276C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S7276C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(32,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C14[];
extern void _ZN8S7276C14D1Ev();
extern void _ZN8S7276C14D0Ev();
extern void ABISELECT(_ZThn32_N8S7276C14D1Ev,_ZThn24_N8S7276C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S7276C14D0Ev,_ZThn24_N8S7276C14D0Ev)();
static  VTBL_ENTRY vtc_S7276C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C14[0]),
  (VTBL_ENTRY)&_ZN8S7276C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C14D0Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7276C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7276C14D1Ev,_ZThn24_N8S7276C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7276C14D0Ev,_ZThn24_N8S7276C14D0Ev),
};
extern VTBL_ENTRY _ZTI8S7276C14[];
extern  VTBL_ENTRY _ZTV8S7276C14[];
Class_Descriptor cd_S7276C14 = {  "S7276C14", // class name
  bases_S7276C14, 8,
  &(vtc_S7276C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI8S7276C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7276C14),8, //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  S7276C13  : S7276C11 , virtual S2014C28 , virtual S3222C8_nt , virtual S7276C7 , virtual S7276C14 {
  long s7276c13f0;
  ::S7276C11 s7276c13f1;
  virtual  ~S7276C13(); // _ZN8S7276C13D2Ev
  S7276C13(); // tgen
};
//SIG(-1 S7276C13) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 FL} BC3 Fi} vd Fl FC2}


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

static void Test_S7276C13()
{
  extern Class_Descriptor cd_S7276C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S7276C13, buf);
    S7276C13 *dp, &lv = *(dp=new (buf) S7276C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S7276C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C13)");
    /*is_ambiguous_... S7276C13::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(56,36), "S7276C13");
    check_base_class_offset(lv, (S7276C5*)(S7276C11*), ABISELECT(56,36), "S7276C13");
    check_base_class_offset(lv, (S7276C5*)(S7276C7*), ABISELECT(56,36), "S7276C13");
    check_base_class_offset(lv, (S7276C11*), 0, "S7276C13");
    /*is_ambiguous_... S7276C13::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), 0, "S7276C13");
    check_base_class_offset(lv, (S2014C28*)(S7276C7*), 0, "S7276C13");
    /*is_ambiguous_... S7276C13::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S7276C13");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*), ABISELECT(68,44), "S7276C13");
    check_base_class_offset(lv, (S7276C7*), ABISELECT(72,48), "S7276C13");
    check_base_class_offset(lv, (S2014C28*)(S7276C15*)(S7276C14*), ABISELECT(96,60), "S7276C13");
    check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(96,60), "S7276C13");
    check_base_class_offset(lv, (S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(96,60), "S7276C13");
    /*is_ambiguous_... S7276C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C15*)(S7276C14*), ABISELECT(105,65), "S7276C13");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C15*)(S7276C14*), ABISELECT(108,68), "S7276C13");
    check_base_class_offset(lv, (S7276C15*)(S7276C14*), ABISELECT(96,60), "S7276C13");
    /*is_ambiguous_... S7276C14::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C14*), ABISELECT(128,84), "S7276C13");
    /*is_ambiguous_... S7276C14::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C14*), ABISELECT(128,84), "S7276C13");
    check_base_class_offset(lv, (S7276C14*), ABISELECT(96,60), "S7276C13");
    check_field_offset(lv, s7276c13f0, ABISELECT(16,12), "S7276C13.s7276c13f0");
    check_field_offset(lv, s7276c13f1, ABISELECT(24,16), "S7276C13.s7276c13f1");
    test_class_info(&lv, &cd_S7276C13);
    dp->~S7276C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C13(Test_S7276C13, "S7276C13", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN8S7276C13C1Ev();
extern void _ZN8S7276C13D2Ev();
Name_Map name_map_S7276C13[] = {
  NSPAIR(_ZN8S7276C13C1Ev),
  NSPAIR(_ZN8S7276C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C15;
extern VTBL_ENTRY _ZTI8S7276C15[];
extern  VTBL_ENTRY _ZTV8S7276C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C14;
extern VTBL_ENTRY _ZTI8S7276C14[];
extern  VTBL_ENTRY _ZTV8S7276C14[];
static Base_Class bases_S7276C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7276C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7276C7,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7276C15,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(128,84), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7276C14,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C13[];
extern void _ZN8S7276C13D1Ev();
extern void _ZN8S7276C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C13D1Ev,_ZThn36_N8S7276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7276C13D0Ev,_ZThn36_N8S7276C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev)();
extern void ABISELECT(_ZThn72_N8S7276C13D1Ev,_ZThn48_N8S7276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev)();
extern void ABISELECT(_ZThn72_N8S7276C13D0Ev,_ZThn48_N8S7276C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZThn96_N8S7276C13D1Ev,_ZThn60_N8S7276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev)();
extern void ABISELECT(_ZThn96_N8S7276C13D0Ev,_ZThn60_N8S7276C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S7276C13D1Ev,_ZTvn24_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7276C13D0Ev,_ZTvn24_n12_N8S7276C13D0Ev)();
static  VTBL_ENTRY vtc_S7276C13[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&_ZN8S7276C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C13D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C13D1Ev,_ZTvn24_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C13D0Ev,_ZTvn24_n12_N8S7276C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S7276C13[];
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C11__8S7276C13[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C11D1Ev,_ZThn36_N8S7276C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S7276C11D0Ev,_ZThn36_N8S7276C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C11__8S7276C13[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C13[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C7__8S7276C13[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
static  VTT_ENTRY vtt_S7276C13[] = {
  {&(_ZTV8S7276C13[7]),  7,31},
  {&(_tg__ZTV8S7276C11__8S7276C13[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C11__8S7276C13[3]),  3,5},
  {&(_ZTV8S7276C13[12]),  12,31},
  {&(_ZTV8S7276C13[20]),  20,31},
  {&(_ZTV8S7276C13[25]),  25,31},
  {&(_ZTV8S7276C13[29]),  29,31},
  {&(_tg__ZTV7S7276C7__8S7276C13[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C7__8S7276C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7276C13[];
extern  VTBL_ENTRY _ZTV8S7276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C13[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C11D0Ev,_ZThn36_N8S7276C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C11D1Ev,_ZThn36_N8S7276C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7276C13D0Ev,_ZThn48_N8S7276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7276C13D1Ev,_ZThn48_N8S7276C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7276C13D0Ev,_ZThn60_N8S7276C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C13D0Ev,_ZThn36_N8S7276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7276C13D1Ev,_ZThn60_N8S7276C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C13D1Ev,_ZThn36_N8S7276C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C13 = {  "S7276C13", // class name
  bases_S7276C13, 15,
  &(vtc_S7276C13[0]), // expected_vtbl_contents
  &(vtt_S7276C13[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI8S7276C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7276C13),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7276C13),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C16  : virtual S7276C7 , S7276C3 , virtual S2014C38 {
  ::S3222C8_nt s7276c16f0[6];
  virtual  ~S7276C16(); // _ZN8S7276C16D2Ev
  S7276C16(); // tgen
};
//SIG(-1 S7276C16) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S7276C16()
{
  extern Class_Descriptor cd_S7276C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S7276C16, buf);
    S7276C16 *dp, &lv = *(dp=new (buf) S7276C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S7276C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C16)");
    check_base_class_offset(lv, (S2014C28*)(S7276C7*), 0, "S7276C16");
    check_base_class_offset(lv, (S2014C28*)(S7276C3*), 0, "S7276C16");
    /*is_ambiguous_... S7276C16::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(64,44), "S7276C16");
    check_base_class_offset(lv, (S7276C5*)(S7276C7*), ABISELECT(64,44), "S7276C16");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*), ABISELECT(76,52), "S7276C16");
    check_base_class_offset(lv, (S7276C7*), ABISELECT(40,32), "S7276C16");
    check_base_class_offset(lv, (S7276C7*)(S7276C3*), ABISELECT(40,32), "S7276C16");
    /*is_ambiguous_... S7276C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C3*), ABISELECT(9,5), "S7276C16");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C3*), 0, "S7276C16");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C3*), 0, "S7276C16");
    check_base_class_offset(lv, (S7276C3*), 0, "S7276C16");
    /*is_ambiguous_... S7276C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(80,56), "S7276C16");
    check_field_offset(lv, s7276c16f0, ABISELECT(12,8), "S7276C16.s7276c16f0");
    test_class_info(&lv, &cd_S7276C16);
    dp->~S7276C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C16(Test_S7276C16, "S7276C16", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN8S7276C16C1Ev();
extern void _ZN8S7276C16D2Ev();
Name_Map name_map_S7276C16[] = {
  NSPAIR(_ZN8S7276C16C1Ev),
  NSPAIR(_ZN8S7276C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C3;
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S7276C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7276C7,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7276C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C16[];
extern void _ZN8S7276C16D1Ev();
extern void _ZN8S7276C16D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev)();
extern void ABISELECT(_ZThn40_N8S7276C16D1Ev,_ZThn32_N8S7276C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev)();
extern void ABISELECT(_ZThn40_N8S7276C16D0Ev,_ZThn32_N8S7276C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev)();
extern void ABISELECT(_ZThn64_N8S7276C16D1Ev,_ZThn44_N8S7276C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev)();
extern void ABISELECT(_ZThn64_N8S7276C16D0Ev,_ZThn44_N8S7276C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C16[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&_ZN8S7276C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C16D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev),
};
extern VTBL_ENTRY _ZTV8S7276C16[];
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C3__8S7276C16[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn32_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn32_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C3__8S7276C16[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S7276C3D1Ev,_ZThn44_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S7276C3D0Ev,_ZThn44_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C3__8S7276C16[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C16[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C7__8S7276C16[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
static  VTT_ENTRY vtt_S7276C16[] = {
  {&(_ZTV8S7276C16[7]),  7,22},
  {&(_tg__ZTV7S7276C3__8S7276C16[6]),  6,8},
  {&(_tg__ZTV7S7276C7__7S7276C3__8S7276C16[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C3__8S7276C16[3]),  3,5},
  {&(_ZTV8S7276C16[15]),  15,22},
  {&(_ZTV8S7276C16[20]),  20,22},
  {&(_tg__ZTV7S7276C7__8S7276C16[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C7__8S7276C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7276C16[];
extern  VTBL_ENTRY _ZTV8S7276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C16[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7276C3D0Ev,_ZThn44_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7276C3D1Ev,_ZThn44_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn32_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn32_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7276C16D0Ev,_ZThn44_N8S7276C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7276C16D1Ev,_ZThn44_N8S7276C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7276C16D0Ev,_ZThn32_N8S7276C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7276C16D1Ev,_ZThn32_N8S7276C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C16 = {  "S7276C16", // class name
  bases_S7276C16, 10,
  &(vtc_S7276C16[0]), // expected_vtbl_contents
  &(vtt_S7276C16[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI8S7276C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7276C16),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7276C16),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C17  : virtual S7276C11 , virtual S3222C8_nt {
  unsigned char s7276c17f0:1;
  ~S7276C17(); // tgen
  S7276C17(); // tgen
};
//SIG(-1 S7276C17) C1{ VBC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m Fi} Fc:1}


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

static void Test_S7276C17()
{
  extern Class_Descriptor cd_S7276C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S7276C17, buf);
    S7276C17 *dp, &lv = *(dp=new (buf) S7276C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S7276C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C17)");
    check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(32,20), "S7276C17");
    check_base_class_offset(lv, (S7276C5*)(S7276C11*), ABISELECT(32,20), "S7276C17");
    check_base_class_offset(lv, (S7276C11*), ABISELECT(16,8), "S7276C17");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(44,28), "S7276C17");
    set_bf_and_test(lv, s7276c17f0, ABISELECT(8,4), 0, 1, 1, "S7276C17");
    test_class_info(&lv, &cd_S7276C17);
    dp->~S7276C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C17(Test_S7276C17, "S7276C17", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S7276C17C1Ev();
extern void _ZN8S7276C17D1Ev();
Name_Map name_map_S7276C17[] = {
  NSPAIR(_ZN8S7276C17C1Ev),
  NSPAIR(_ZN8S7276C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S7276C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7276C11,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(44,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C17[];
extern void _ZN8S7276C17D1Ev();
extern void _ZN8S7276C17D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev)();
extern void ABISELECT(_ZThn16_N8S7276C17D1Ev,_ZThn8_N8S7276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev)();
extern void ABISELECT(_ZThn16_N8S7276C17D0Ev,_ZThn8_N8S7276C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S7276C17D1Ev,_ZThn20_N8S7276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev)();
extern void ABISELECT(_ZThn32_N8S7276C17D0Ev,_ZThn20_N8S7276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C17[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&_ZN8S7276C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C17D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev),
};
extern VTBL_ENTRY _ZTV8S7276C17[];
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C11__8S7276C17[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7276C11D1Ev,_ZThn12_N8S7276C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7276C11D0Ev,_ZThn12_N8S7276C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C11__8S7276C17[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
static  VTT_ENTRY vtt_S7276C17[] = {
  {&(_ZTV8S7276C17[5]),  5,18},
  {&(_ZTV8S7276C17[11]),  11,18},
  {&(_ZTV8S7276C17[16]),  16,18},
  {&(_tg__ZTV8S7276C11__8S7276C17[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C11__8S7276C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7276C17[];
extern  VTBL_ENTRY _ZTV8S7276C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C17[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C11D0Ev,_ZThn12_N8S7276C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C11D1Ev,_ZThn12_N8S7276C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7276C17D0Ev,_ZThn20_N8S7276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7276C17D1Ev,_ZThn20_N8S7276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C17D0Ev,_ZThn8_N8S7276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C17D1Ev,_ZThn8_N8S7276C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C17 = {  "S7276C17", // class name
  bases_S7276C17, 4,
  &(vtc_S7276C17[0]), // expected_vtbl_contents
  &(vtt_S7276C17[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S7276C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7276C17),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7276C17),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C12  : virtual S7276C13 , S7276C16 , S7276C17 , S7276C7 {
  ~S7276C12(); // tgen
  S7276C12(); // tgen
};
//SIG(-1 S7276C12) C1{ VBC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 FL} BC4 Fi} vd Fl FC3} BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} BC14{ VBC3 VBC7 Fc:1} BC8}


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

static void Test_S7276C12()
{
  extern Class_Descriptor cd_S7276C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S7276C12, buf);
    S7276C12 *dp, &lv = *(dp=new (buf) S7276C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S7276C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C12)");
    /*is_ambiguous_... S7276C12::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(136,88), "S7276C12");
    check_base_class_offset(lv, (S7276C5*)(S7276C11*)(S7276C13*), ABISELECT(136,88), "S7276C12");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C7*), ABISELECT(136,88), "S7276C12");
    /*is_ambiguous_... S7276C12::S7276C11 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C11*), ABISELECT(136,88), "S7276C12");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C7*), ABISELECT(136,88), "S7276C12");
    check_base_class_offset(lv, (S7276C11*)(S7276C13*), ABISELECT(80,52), "S7276C12");
    /*is_ambiguous_... S7276C13::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C13*), 0, "S7276C12");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C7*), 0, "S7276C12");
    check_base_class_offset(lv, (S2014C28*)(S7276C3*)(S7276C16*), 0, "S7276C12");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C7*), 0, "S7276C12");
    /*is_ambiguous_... S7276C13::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C13*), ABISELECT(148,96), "S7276C12");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*), ABISELECT(148,96), "S7276C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C17*), ABISELECT(148,96), "S7276C12");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*), ABISELECT(148,96), "S7276C12");
    check_base_class_offset(lv, (S7276C7*)(S7276C13*), ABISELECT(152,100), "S7276C12");
    check_base_class_offset(lv, (S7276C7*)(S7276C16*), ABISELECT(152,100), "S7276C12");
    check_base_class_offset(lv, (S7276C7*)(S7276C3*)(S7276C16*), ABISELECT(152,100), "S7276C12");
    check_base_class_offset(lv, (S2014C28*)(S7276C15*)(S7276C14*), ABISELECT(176,112), "S7276C12");
    check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(176,112), "S7276C12");
    check_base_class_offset(lv, (S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(176,112), "S7276C12");
    /*is_ambiguous_... S7276C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C15*)(S7276C14*), ABISELECT(185,117), "S7276C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C15*)(S7276C14*), ABISELECT(188,120), "S7276C12");
    check_base_class_offset(lv, (S7276C15*)(S7276C14*), ABISELECT(176,112), "S7276C12");
    /*is_ambiguous_... S7276C14::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C14*), ABISELECT(208,136), "S7276C12");
    /*is_ambiguous_... S7276C14::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C14*), ABISELECT(208,136), "S7276C12");
    check_base_class_offset(lv, (S7276C14*)(S7276C13*), ABISELECT(176,112), "S7276C12");
    check_base_class_offset(lv, (S7276C13*), ABISELECT(80,52), "S7276C12");
    /*is_ambiguous_... S7276C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C3*)(S7276C16*), ABISELECT(9,5), "S7276C12");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C3*)(S7276C16*), 0, "S7276C12");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C3*)(S7276C16*), 0, "S7276C12");
    check_base_class_offset(lv, (S7276C3*)(S7276C16*), 0, "S7276C12");
    /*is_ambiguous_... S7276C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C16*), ABISELECT(224,148), "S7276C12");
    check_base_class_offset(lv, (S7276C16*), 0, "S7276C12");
    check_base_class_offset(lv, (S7276C11*)(S7276C17*), ABISELECT(224,148), "S7276C12");
    check_base_class_offset(lv, (S7276C17*), ABISELECT(40,32), "S7276C12");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S7276C7*), ABISELECT(56,40), "S7276C12");
    test_class_info(&lv, &cd_S7276C12);
    dp->~S7276C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C12(Test_S7276C12, "S7276C12", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN8S7276C12C1Ev();
extern void _ZN8S7276C12D1Ev();
Name_Map name_map_S7276C12[] = {
  NSPAIR(_ZN8S7276C12C1Ev),
  NSPAIR(_ZN8S7276C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C15;
extern VTBL_ENTRY _ZTI8S7276C15[];
extern  VTBL_ENTRY _ZTV8S7276C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C14;
extern VTBL_ENTRY _ZTI8S7276C14[];
extern  VTBL_ENTRY _ZTV8S7276C14[];
extern Class_Descriptor cd_S7276C13;
extern VTBL_ENTRY _ZTI8S7276C13[];
extern  VTBL_ENTRY _ZTV8S7276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C3;
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C16;
extern VTBL_ENTRY _ZTI8S7276C16[];
extern  VTBL_ENTRY _ZTV8S7276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C16[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
extern Class_Descriptor cd_S7276C17;
extern VTBL_ENTRY _ZTI8S7276C17[];
extern  VTBL_ENTRY _ZTV8S7276C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C17[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
static Base_Class bases_S7276C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(136,88), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7276C11,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(148,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7276C7,    ABISELECT(152,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(185,117), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(188,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
    11, //immediately_derived
  0, 0},
  {&cd_S7276C15,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(208,136), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7276C14,    ABISELECT(176,112), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7276C13,    ABISELECT(80,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(224,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7276C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7276C11,    ABISELECT(224,148), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S7276C17,    ABISELECT(40,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7276C7,    ABISELECT(56,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C12[];
extern void _ZN8S7276C12D1Ev();
extern void _ZN8S7276C12D0Ev();
extern void ABISELECT(_ZThn40_N8S7276C12D1Ev,_ZThn32_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S7276C12D0Ev,_ZThn32_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn56_N8S7276C12D1Ev,_ZThn40_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C12D0Ev,_ZThn40_N8S7276C12D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S7276C12D1Ev,_ZTv0_n32_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn80_N8S7276C12D1Ev,_ZThn52_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7276C12D0Ev,_ZTv0_n32_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn80_N8S7276C12D0Ev,_ZThn52_N8S7276C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn136_N8S7276C12D1Ev,_ZThn88_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn136_N8S7276C12D0Ev,_ZThn88_N8S7276C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C12D1Ev,_ZTv0_n24_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn152_N8S7276C12D1Ev,_ZThn100_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C12D0Ev,_ZTv0_n24_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn152_N8S7276C12D0Ev,_ZThn100_N8S7276C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn176_N8S7276C12D1Ev,_ZThn112_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn176_N8S7276C12D0Ev,_ZThn112_N8S7276C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S7276C12D1Ev,_ZTvn24_n12_N8S7276C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7276C12D0Ev,_ZTvn24_n12_N8S7276C12D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7276C12D1Ev,_ZTv0_n16_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn224_N8S7276C12D1Ev,_ZThn148_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7276C12D0Ev,_ZTv0_n16_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn224_N8S7276C12D0Ev,_ZThn148_N8S7276C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C12[] = {
  ABISELECT(224,148),
  ABISELECT(176,112),
  ABISELECT(80,52),
  ABISELECT(224,148),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&_ZN8S7276C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C12D0Ev,
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,116),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C12D1Ev,_ZThn32_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C12D0Ev,_ZThn32_N8S7276C12D0Ev),
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C12D1Ev,_ZThn40_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C12D0Ev,_ZThn40_N8S7276C12D0Ev),
  ABISELECT(-80,-52),
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C12D1Ev,_ZTv0_n32_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C12D0Ev,_ZTv0_n32_N8S7276C12D0Ev),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev),
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C12D1Ev,_ZTv0_n24_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C12D0Ev,_ZTv0_n24_N8S7276C12D0Ev),
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C12D1Ev,_ZTvn24_n12_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C12D0Ev,_ZTvn24_n12_N8S7276C12D0Ev),
  ABISELECT(-224,-148),
  ABISELECT(-88,-60),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C12D1Ev,_ZTv0_n16_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C12D0Ev,_ZTv0_n16_N8S7276C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S7276C12[];
extern void _ZN8S7276C16D1Ev();
extern void _ZN8S7276C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C16__8S7276C12[] = {
  ABISELECT(224,148),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&_ZN8S7276C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C16D0Ev,
};
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C38S7276C16__8S7276C12[] = {
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn152_N7S7276C3D1Ev,_ZThn100_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn152_N7S7276C3D0Ev,_ZThn100_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C38S7276C16__8S7276C12[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn136_N7S7276C3D1Ev,_ZThn88_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn136_N7S7276C3D0Ev,_ZThn88_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C38S7276C16__8S7276C12[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev)();
extern void ABISELECT(_ZThn152_N8S7276C16D1Ev,_ZThn100_N8S7276C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev)();
extern void ABISELECT(_ZThn152_N8S7276C16D0Ev,_ZThn100_N8S7276C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C16__8S7276C12[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev)();
extern void ABISELECT(_ZThn136_N8S7276C16D1Ev,_ZThn88_N8S7276C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev)();
extern void ABISELECT(_ZThn136_N8S7276C16D0Ev,_ZThn88_N8S7276C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C16__8S7276C12[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev),
};
extern void _ZN8S7276C17D1Ev();
extern void _ZN8S7276C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C17__8S7276C12[] = {
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&_ZN8S7276C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C17D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev)();
extern void ABISELECT(_ZThn184_N8S7276C17D1Ev,_ZThn116_N8S7276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev)();
extern void ABISELECT(_ZThn184_N8S7276C17D0Ev,_ZThn116_N8S7276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C11__8S7276C17__8S7276C12[] = {
  ABISELECT(-184,-116),
  ABISELECT(-88,-60),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S7276C17D1Ev,_ZThn56_N8S7276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev)();
extern void ABISELECT(_ZThn96_N8S7276C17D0Ev,_ZThn56_N8S7276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C17__8S7276C12[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C7__A__8S7276C12[] = {
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZThn80_N7S7276C7D1Ev,_ZThn48_N7S7276C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
extern void ABISELECT(_ZThn80_N7S7276C7D0Ev,_ZThn48_N7S7276C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C7__A__8S7276C12[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
extern void _ZN8S7276C13D1Ev();
extern void _ZN8S7276C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C13__8S7276C12[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&_ZN8S7276C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C13D0Ev,
};
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C118S7276C13__8S7276C12[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C11D1Ev,_ZThn36_N8S7276C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S7276C11D0Ev,_ZThn36_N8S7276C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C118S7276C13__8S7276C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C13D1Ev,_ZThn36_N8S7276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7276C13D0Ev,_ZThn36_N8S7276C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C13__8S7276C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev)();
extern void ABISELECT(_ZThn72_N8S7276C13D1Ev,_ZThn48_N8S7276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev)();
extern void ABISELECT(_ZThn72_N8S7276C13D0Ev,_ZThn48_N8S7276C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C13__8S7276C12[] = {
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZThn96_N8S7276C13D1Ev,_ZThn60_N8S7276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev)();
extern void ABISELECT(_ZThn96_N8S7276C13D0Ev,_ZThn60_N8S7276C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C14__8S7276C13__8S7276C12[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7276C13D1Ev,_ZTvn24_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7276C13D0Ev,_ZTvn24_n12_N8S7276C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C58S7276C14__A2__8S7276C13__8S7276C12[] = {
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C13D1Ev,_ZTvn24_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C13D0Ev,_ZTvn24_n12_N8S7276C13D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C12[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C7__8S7276C12[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C11__A1__8S7276C12[] = {
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C11__A1__8S7276C12[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
static  VTT_ENTRY vtt_S7276C12[] = {
  {&(_ZTV8S7276C12[10]),  10,64},
  {&(_tg__ZTV8S7276C16__8S7276C12[7]),  7,9},
  {&(_tg__ZTV7S7276C38S7276C16__8S7276C12[6]),  6,8},
  {&(_tg__ZTV7S7276C7__7S7276C38S7276C16__8S7276C12[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C38S7276C16__8S7276C12[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C16__8S7276C12[6]),  6,8},
  {&(_tg__ZTV7S7276C5__8S7276C16__8S7276C12[3]),  3,5},
  {&(_tg__ZTV8S7276C17__8S7276C12[5]),  5,7},
  {&(_tg__ZTV8S7276C11__8S7276C17__8S7276C12[4]),  4,6},
  {&(_tg__ZTV7S7276C5__8S7276C17__8S7276C12[3]),  3,5},
  {&(_tg__ZTV7S7276C7__A__8S7276C12[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C7__A__8S7276C12[3]),  3,5},
  {&(_ZTV8S7276C12[34]),  34,64},
  {&(_ZTV8S7276C12[39]),  39,64},
  {&(_ZTV8S7276C12[47]),  47,64},
  {&(_ZTV8S7276C12[52]),  52,64},
  {&(_ZTV8S7276C12[56]),  56,64},
  {&(_ZTV8S7276C12[17]),  17,64},
  {&(_ZTV8S7276C12[62]),  62,64},
  {&(_ZTV8S7276C12[24]),  24,64},
  {&(_tg__ZTV8S7276C13__8S7276C12[7]),  7,9},
  {&(_tg__ZTV8S7276C118S7276C13__8S7276C12[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C118S7276C13__8S7276C12[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C13__8S7276C12[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C13__8S7276C12[6]),  6,8},
  {&(_tg__ZTV8S7276C14__8S7276C13__8S7276C12[3]),  3,5},
  {&(_tg__ZTV7S7276C58S7276C14__A2__8S7276C13__8S7276C12[2]),  2,4},
  {&(_tg__ZTV7S7276C7__8S7276C12[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C7__8S7276C12[3]),  3,5},
  {&(_tg__ZTV8S7276C11__A1__8S7276C12[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C11__A1__8S7276C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7276C12[];
extern  VTBL_ENTRY _ZTV8S7276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C12[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7276C13D0Ev,_ZThn48_N8S7276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7276C13D1Ev,_ZThn48_N8S7276C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7276C13D0Ev,_ZThn60_N8S7276C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C13D0Ev,_ZThn36_N8S7276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7276C13D1Ev,_ZThn60_N8S7276C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C13D1Ev,_ZThn36_N8S7276C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C11D0Ev,_ZThn36_N8S7276C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C11D1Ev,_ZThn36_N8S7276C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7276C7D0Ev,_ZThn48_N7S7276C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7276C7D1Ev,_ZThn48_N7S7276C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7276C17D0Ev,_ZThn56_N8S7276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7276C17D1Ev,_ZThn56_N8S7276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S7276C17D0Ev,_ZThn116_N8S7276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S7276C17D1Ev,_ZThn116_N8S7276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7276C16D0Ev,_ZThn88_N8S7276C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7276C16D1Ev,_ZThn88_N8S7276C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7276C16D0Ev,_ZThn100_N8S7276C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7276C16D1Ev,_ZThn100_N8S7276C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7276C3D0Ev,_ZThn88_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7276C3D1Ev,_ZThn88_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S7276C3D0Ev,_ZThn100_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S7276C3D1Ev,_ZThn100_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C12D0Ev,_ZTv0_n16_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7276C12D0Ev,_ZThn148_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C12D1Ev,_ZTv0_n16_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7276C12D1Ev,_ZThn148_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C12D0Ev,_ZTv0_n24_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7276C12D0Ev,_ZThn100_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C12D1Ev,_ZTv0_n24_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7276C12D1Ev,_ZThn100_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7276C12D0Ev,_ZThn112_N8S7276C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7276C12D0Ev,_ZThn88_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7276C12D1Ev,_ZThn112_N8S7276C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7276C12D1Ev,_ZThn88_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C12D0Ev,_ZTv0_n32_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7276C12D0Ev,_ZThn52_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C12D1Ev,_ZTv0_n32_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7276C12D1Ev,_ZThn52_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C12 = {  "S7276C12", // class name
  bases_S7276C12, 25,
  &(vtc_S7276C12[0]), // expected_vtbl_contents
  &(vtt_S7276C12[0]), // expected_vtt_contents
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI8S7276C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7276C12),64, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7276C12),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C10  : virtual S7276C11 , S7276C12 , S7276C14 , S2014C38 , virtual S7276C16 {
  virtual  ~S7276C10(); // _ZN8S7276C10D2Ev
  S7276C10(); // tgen
};
//SIG(-1 S7276C10) C1{ VBC2{ VBC3{ BC4{ m} vd FC4} FL} BC5{ VBC6{ BC2 VBC7{ m} VBC8{ m Fi} VBC9{ VBC7 VBC3 VBC8 vd Fp FC10{}} VBC11{ BC12{ BC7 BC3 BC4 BC8 Fs:16 FL} BC3 Fi} vd Fl FC2} BC13{ VBC9 BC14{ BC4 BC3 VBC7 VBC9 vd} VBC4 vd FC8[6]} BC15{ VBC2 VBC8 Fc:1} BC9} BC11 BC4 VBC13 vd}


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

static void Test_S7276C10()
{
  extern Class_Descriptor cd_S7276C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,59)];
    init_test(&cd_S7276C10, buf);
    S7276C10 *dp, &lv = *(dp=new (buf) S7276C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,232), "sizeof(S7276C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C10)");
    /*is_ambiguous_... S7276C10::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(144,100), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C11 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C11*), ABISELECT(144,100), "S7276C10");
    check_base_class_offset(lv, (S7276C5*)(S7276C11*)(S7276C13*), ABISELECT(144,100), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C7 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C7*), ABISELECT(144,100), "S7276C10");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C7*)(S7276C12*), ABISELECT(144,100), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C11 */ AMB_check_base_class_offset(lv, (S7276C11*), ABISELECT(128,88), "S7276C10");
    check_base_class_offset(lv, (S7276C11*)(S7276C17*)(S7276C12*), ABISELECT(128,88), "S7276C10");
    check_base_class_offset(lv, (S7276C11*)(S7276C13*), ABISELECT(160,108), "S7276C10");
    /*is_ambiguous_... S7276C13::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C13*), 0, "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C7*), 0, "S7276C10");
    check_base_class_offset(lv, (S2014C28*)(S7276C3*)(S7276C16*)(S7276C12*), 0, "S7276C10");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C7*)(S7276C12*), 0, "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C3*)(S7276C16*), 0, "S7276C10");
    /*is_ambiguous_... S7276C13::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C13*), ABISELECT(216,144), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*), ABISELECT(216,144), "S7276C10");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C17*)(S7276C12*), ABISELECT(216,144), "S7276C10");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*)(S7276C12*), ABISELECT(216,144), "S7276C10");
    check_base_class_offset(lv, (S7276C7*)(S7276C13*), ABISELECT(224,148), "S7276C10");
    check_base_class_offset(lv, (S7276C7*)(S7276C16*)(S7276C12*), ABISELECT(224,148), "S7276C10");
    check_base_class_offset(lv, (S7276C7*)(S7276C3*)(S7276C16*)(S7276C12*), ABISELECT(224,148), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C7*)(S7276C16*), ABISELECT(224,148), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C7*)(S7276C3*)(S7276C16*), ABISELECT(224,148), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C15*)(S7276C14*), ABISELECT(248,160), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(248,160), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(248,160), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C15*)(S7276C14*), ABISELECT(257,165), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C15*)(S7276C14*), ABISELECT(260,168), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C15*)(S7276C14*), ABISELECT(248,160), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C14*), ABISELECT(280,184), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C14*), ABISELECT(280,184), "S7276C10");
    check_base_class_offset(lv, (S7276C14*)(S7276C13*), ABISELECT(248,160), "S7276C10");
    check_base_class_offset(lv, (S7276C13*)(S7276C12*), ABISELECT(160,108), "S7276C10");
    /*is_ambiguous_... S7276C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C3*)(S7276C16*)(S7276C12*), ABISELECT(9,5), "S7276C10");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C3*)(S7276C16*)(S7276C12*), 0, "S7276C10");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C3*)(S7276C16*)(S7276C12*), 0, "S7276C10");
    check_base_class_offset(lv, (S7276C3*)(S7276C16*)(S7276C12*), 0, "S7276C10");
    /*is_ambiguous_... S7276C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C16*)(S7276C12*), ABISELECT(296,196), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C16*), ABISELECT(296,196), "S7276C10");
    check_base_class_offset(lv, (S7276C16*)(S7276C12*), 0, "S7276C10");
    check_base_class_offset(lv, (S7276C17*)(S7276C12*), ABISELECT(40,32), "S7276C10");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S7276C7*)(S7276C12*), ABISELECT(56,40), "S7276C10");
    check_base_class_offset(lv, (S7276C12*), 0, "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C15*)(S7276C14*), ABISELECT(80,52), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(80,52), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(80,52), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C15*)(S7276C14*), ABISELECT(89,57), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C15*)(S7276C14*), ABISELECT(92,60), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C15*)(S7276C14*), ABISELECT(80,52), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C14*), ABISELECT(112,76), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C14*), ABISELECT(112,76), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C14*), ABISELECT(80,52), "S7276C10");
    /*is_ambiguous_... S7276C10::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(128,88), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C3*)(S7276C16*), ABISELECT(313,205), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C3*)(S7276C16*), ABISELECT(304,200), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C3*)(S7276C16*), ABISELECT(304,200), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C3*)(S7276C16*), ABISELECT(304,200), "S7276C10");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C16*), ABISELECT(304,200), "S7276C10");
    test_class_info(&lv, &cd_S7276C10);
    dp->~S7276C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C10(Test_S7276C10, "S7276C10", ABISELECT(344,232));

#else // __cplusplus

extern void _ZN8S7276C10C1Ev();
extern void _ZN8S7276C10D2Ev();
Name_Map name_map_S7276C10[] = {
  NSPAIR(_ZN8S7276C10C1Ev),
  NSPAIR(_ZN8S7276C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C15;
extern VTBL_ENTRY _ZTI8S7276C15[];
extern  VTBL_ENTRY _ZTV8S7276C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C14;
extern VTBL_ENTRY _ZTI8S7276C14[];
extern  VTBL_ENTRY _ZTV8S7276C14[];
extern Class_Descriptor cd_S7276C13;
extern VTBL_ENTRY _ZTI8S7276C13[];
extern  VTBL_ENTRY _ZTV8S7276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C3;
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C16;
extern VTBL_ENTRY _ZTI8S7276C16[];
extern  VTBL_ENTRY _ZTV8S7276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C16[];
extern Class_Descriptor cd_S7276C17;
extern VTBL_ENTRY _ZTI8S7276C17[];
extern  VTBL_ENTRY _ZTV8S7276C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C17[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
extern Class_Descriptor cd_S7276C12;
extern VTBL_ENTRY _ZTI8S7276C12[];
extern  VTBL_ENTRY _ZTV8S7276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C15;
extern VTBL_ENTRY _ZTI8S7276C15[];
extern  VTBL_ENTRY _ZTV8S7276C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C14;
extern VTBL_ENTRY _ZTI8S7276C14[];
extern  VTBL_ENTRY _ZTV8S7276C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C3;
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
extern Class_Descriptor cd_S7276C16;
extern VTBL_ENTRY _ZTI8S7276C16[];
extern  VTBL_ENTRY _ZTV8S7276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C16[];
static Base_Class bases_S7276C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(144,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7276C11,    ABISELECT(128,88), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7276C11,    ABISELECT(160,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(216,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7276C7,    ABISELECT(224,148), //bcp->offset
    56, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(257,165), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(260,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7276C15,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(280,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(280,184), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7276C14,    ABISELECT(248,160), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7276C13,    ABISELECT(160,108), //bcp->offset
    46, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7276C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S7276C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S7276C16,    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
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7276C17,    ABISELECT(40,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7276C7,    ABISELECT(56,40), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7276C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(89,57), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(92,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7276C15,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(112,76), //bcp->offset
    31, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7276C14,    ABISELECT(80,52), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(313,205), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7276C3,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S7276C16,    ABISELECT(304,200), //bcp->offset
    73, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C10[];
extern void _ZN8S7276C10D1Ev();
extern void _ZN8S7276C10D0Ev();
extern void ABISELECT(_ZThn40_N8S7276C10D1Ev,_ZThn32_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S7276C10D0Ev,_ZThn32_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S7276C10D1Ev,_ZThn40_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C10D0Ev,_ZThn40_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn80_N8S7276C10D1Ev,_ZThn52_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn80_N8S7276C10D0Ev,_ZThn52_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn112_N8S7276C10D1Ev,_ZThn76_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn112_N8S7276C10D0Ev,_ZThn76_N8S7276C10D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7276C10D1Ev,_ZTv0_n16_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn128_N8S7276C10D1Ev,_ZThn88_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7276C10D0Ev,_ZTv0_n16_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn128_N8S7276C10D0Ev,_ZThn88_N8S7276C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn144_N8S7276C10D1Ev,_ZThn100_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn144_N8S7276C10D0Ev,_ZThn100_N8S7276C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn160_N8S7276C10D1Ev,_ZThn108_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn160_N8S7276C10D0Ev,_ZThn108_N8S7276C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C10D1Ev,_ZTv0_n24_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S7276C10D1Ev,_ZThn148_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C10D0Ev,_ZTv0_n24_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn224_N8S7276C10D0Ev,_ZThn148_N8S7276C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn248_N8S7276C10D1Ev,_ZThn160_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn248_N8S7276C10D0Ev,_ZThn160_N8S7276C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S7276C10D1Ev,_ZTvn24_n12_N8S7276C10D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7276C10D0Ev,_ZTvn24_n12_N8S7276C10D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn304_N8S7276C10D1Ev,_ZThn200_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn304_N8S7276C10D0Ev,_ZThn200_N8S7276C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C10[] = {
  ABISELECT(304,200),
  ABISELECT(128,88),
  ABISELECT(248,160),
  ABISELECT(160,108),
  ABISELECT(296,196),
  ABISELECT(216,144),
  ABISELECT(144,100),
  ABISELECT(224,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&_ZN8S7276C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C10D0Ev,
  ABISELECT(176,112),
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C10D1Ev,_ZThn32_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C10D0Ev,_ZThn32_N8S7276C10D0Ev),
  ABISELECT(160,104),
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C10D1Ev,_ZThn40_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C10D0Ev,_ZThn40_N8S7276C10D0Ev),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S7276C10D1Ev,_ZThn52_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S7276C10D0Ev,_ZThn52_N8S7276C10D0Ev),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S7276C10D1Ev,_ZThn76_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S7276C10D0Ev,_ZThn76_N8S7276C10D0Ev),
  ABISELECT(-128,-88),
  ABISELECT(16,12),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C10D1Ev,_ZTv0_n16_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C10D0Ev,_ZTv0_n16_N8S7276C10D0Ev),
  ABISELECT(-144,-100),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev),
  ABISELECT(-160,-108),
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-160,-108),
  ABISELECT(-16,-8),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev),
  ABISELECT(-224,-148),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-148),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C10D1Ev,_ZTv0_n24_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C10D0Ev,_ZTv0_n24_N8S7276C10D0Ev),
  ABISELECT(-248,-160),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev),
  ABISELECT(-280,-184),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C10D1Ev,_ZTvn24_n12_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C10D0Ev,_ZTvn24_n12_N8S7276C10D0Ev),
  ABISELECT(-304,-200),
  ABISELECT(-8,-4),
  ABISELECT(-88,-56),
  ABISELECT(-160,-100),
  ABISELECT(-80,-52),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S7276C10[];
extern void _ZN8S7276C12D1Ev();
extern void _ZN8S7276C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C12__8S7276C10[] = {
  ABISELECT(128,88),
  ABISELECT(248,160),
  ABISELECT(160,108),
  ABISELECT(296,196),
  ABISELECT(216,144),
  ABISELECT(144,100),
  ABISELECT(224,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&_ZN8S7276C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C12D0Ev,
};
extern void _ZN8S7276C16D1Ev();
extern void _ZN8S7276C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C168S7276C12__8S7276C10[] = {
  ABISELECT(296,196),
  ABISELECT(216,144),
  ABISELECT(144,100),
  ABISELECT(224,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&_ZN8S7276C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C16D0Ev,
};
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C38S7276C168S7276C12__8S7276C10[] = {
  ABISELECT(216,144),
  ABISELECT(144,100),
  ABISELECT(224,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S7276C3D1Ev,_ZThn148_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn224_N7S7276C3D0Ev,_ZThn148_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C38S7276C168S7276C12__8S7276C10[] = {
  ABISELECT(-224,-148),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-148),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn144_N7S7276C3D1Ev,_ZThn100_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn144_N7S7276C3D0Ev,_ZThn100_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C38S7276C168S7276C12__8S7276C10[] = {
  ABISELECT(-144,-100),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev)();
extern void ABISELECT(_ZThn224_N8S7276C16D1Ev,_ZThn148_N8S7276C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev)();
extern void ABISELECT(_ZThn224_N8S7276C16D0Ev,_ZThn148_N8S7276C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C168S7276C12__8S7276C10[] = {
  ABISELECT(-224,-148),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-148),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev)();
extern void ABISELECT(_ZThn144_N8S7276C16D1Ev,_ZThn100_N8S7276C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev)();
extern void ABISELECT(_ZThn144_N8S7276C16D0Ev,_ZThn100_N8S7276C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C168S7276C12__8S7276C10[] = {
  ABISELECT(-144,-100),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev),
};
extern void _ZN8S7276C17D1Ev();
extern void _ZN8S7276C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C178S7276C12__8S7276C10[] = {
  ABISELECT(176,112),
  ABISELECT(104,68),
  ABISELECT(88,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&_ZN8S7276C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C17D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev)();
extern void ABISELECT(_ZThn88_N8S7276C17D1Ev,_ZThn56_N8S7276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev)();
extern void ABISELECT(_ZThn88_N8S7276C17D0Ev,_ZThn56_N8S7276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C11__8S7276C178S7276C12__8S7276C10[] = {
  ABISELECT(-88,-56),
  ABISELECT(16,12),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev)();
extern void ABISELECT(_ZThn104_N8S7276C17D1Ev,_ZThn68_N8S7276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev)();
extern void ABISELECT(_ZThn104_N8S7276C17D0Ev,_ZThn68_N8S7276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C178S7276C12__8S7276C10[] = {
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C78S7276C12__A1__8S7276C10[] = {
  ABISELECT(160,104),
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S7276C7D1Ev,_ZThn60_N7S7276C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S7276C7D0Ev,_ZThn60_N7S7276C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C78S7276C12__A1__8S7276C10[] = {
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7276C12D1Ev,_ZTv0_n32_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S7276C12D1Ev,_ZThn108_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7276C12D0Ev,_ZTv0_n32_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S7276C12D0Ev,_ZThn108_N8S7276C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C13__8S7276C12__8S7276C10[] = {
  ABISELECT(-160,-108),
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-160,-108),
  ABISELECT(-16,-8),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C12D1Ev,_ZTv0_n32_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C12D0Ev,_ZTv0_n32_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn144_N8S7276C12D1Ev,_ZThn100_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn144_N8S7276C12D0Ev,_ZThn100_N8S7276C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C12__8S7276C10[] = {
  ABISELECT(-144,-100),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C12D1Ev,_ZTv0_n24_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn224_N8S7276C12D1Ev,_ZThn148_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C12D0Ev,_ZTv0_n24_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn224_N8S7276C12D0Ev,_ZThn148_N8S7276C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C12__8S7276C10[] = {
  ABISELECT(-224,-148),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-148),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C12D1Ev,_ZTv0_n24_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C12D0Ev,_ZTv0_n24_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn248_N8S7276C12D1Ev,_ZThn160_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn248_N8S7276C12D0Ev,_ZThn160_N8S7276C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C14__8S7276C12__8S7276C10[] = {
  ABISELECT(-248,-160),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7276C12D1Ev,_ZTvn24_n12_N8S7276C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7276C12D0Ev,_ZTvn24_n12_N8S7276C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C58S7276C14__A2__8S7276C12__8S7276C10[] = {
  ABISELECT(-280,-184),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C12D1Ev,_ZTvn24_n12_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C12D0Ev,_ZTvn24_n12_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZThn40_N8S7276C12D1Ev,_ZThn32_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S7276C12D0Ev,_ZThn32_N8S7276C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7276C17__8S7276C12__8S7276C10[] = {
  ABISELECT(176,112),
  ABISELECT(104,68),
  ABISELECT(88,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C12D1Ev,_ZThn32_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C12D0Ev,_ZThn32_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7276C12D1Ev,_ZTv0_n16_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn128_N8S7276C12D1Ev,_ZThn88_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7276C12D0Ev,_ZTv0_n16_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn128_N8S7276C12D0Ev,_ZThn88_N8S7276C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C11__A1__8S7276C12__8S7276C10[] = {
  ABISELECT(-128,-88),
  ABISELECT(16,12),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C12D1Ev,_ZTv0_n16_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C12D0Ev,_ZTv0_n16_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZThn56_N8S7276C12D1Ev,_ZThn40_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C12D0Ev,_ZThn40_N8S7276C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__A__8S7276C12__8S7276C10[] = {
  ABISELECT(160,104),
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C12D1Ev,_ZThn40_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C12D0Ev,_ZThn40_N8S7276C12D0Ev),
};
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C11__8S7276C10[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7276C11D1Ev,_ZThn12_N8S7276C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7276C11D0Ev,_ZThn12_N8S7276C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C11__8S7276C10[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
extern void _ZN8S7276C13D1Ev();
extern void _ZN8S7276C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C13__8S7276C10[] = {
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-160,-108),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&_ZN8S7276C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C13D0Ev,
};
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C118S7276C13__A1__8S7276C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C118S7276C13__A1__8S7276C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C13__8S7276C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev)();
extern void ABISELECT(_ZThn64_N8S7276C13D1Ev,_ZThn40_N8S7276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev)();
extern void ABISELECT(_ZThn64_N8S7276C13D0Ev,_ZThn40_N8S7276C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C13__8S7276C10[] = {
  ABISELECT(-64,-40),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-148),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZThn88_N8S7276C13D1Ev,_ZThn52_N8S7276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev)();
extern void ABISELECT(_ZThn88_N8S7276C13D0Ev,_ZThn52_N8S7276C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C14__8S7276C13__8S7276C10[] = {
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7276C13D1Ev,_ZTvn24_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7276C13D0Ev,_ZTvn24_n12_N8S7276C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C58S7276C14__A2__8S7276C13__8S7276C10[] = {
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C13D1Ev,_ZTvn24_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C13D0Ev,_ZTvn24_n12_N8S7276C13D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C7__8S7276C10[] = {
  ABISELECT(80,48),
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
extern void _ZN8S7276C16D1Ev();
extern void _ZN8S7276C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C16__A1__8S7276C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-88,-56),
  ABISELECT(-160,-100),
  ABISELECT(-80,-52),
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&_ZN8S7276C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C16D0Ev,
};
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C38S7276C16__A1__8S7276C10[] = {
  ABISELECT(-88,-56),
  ABISELECT(-160,-100),
  ABISELECT(-80,-52),
  ABISELECT(-304,-200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C38S7276C16__A1__8S7276C10[] = {
  ABISELECT(80,52),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-148),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C38S7276C16__A1__8S7276C10[] = {
  ABISELECT(160,100),
  ABISELECT(160,100),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C16__A1__8S7276C10[] = {
  ABISELECT(80,52),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-148),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C16__A1__8S7276C10[] = {
  ABISELECT(160,100),
  ABISELECT(160,100),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev),
};
static  VTT_ENTRY vtt_S7276C10[] = {
  {&(_ZTV8S7276C10[11]),  11,83},
  {&(_tg__ZTV8S7276C12__8S7276C10[10]),  10,12},
  {&(_tg__ZTV8S7276C168S7276C12__8S7276C10[7]),  7,9},
  {&(_tg__ZTV7S7276C38S7276C168S7276C12__8S7276C10[6]),  6,8},
  {&(_tg__ZTV7S7276C7__7S7276C38S7276C168S7276C12__8S7276C10[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C38S7276C168S7276C12__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C168S7276C12__8S7276C10[6]),  6,8},
  {&(_tg__ZTV7S7276C5__8S7276C168S7276C12__8S7276C10[3]),  3,5},
  {&(_tg__ZTV8S7276C178S7276C12__8S7276C10[5]),  5,7},
  {&(_tg__ZTV8S7276C11__8S7276C178S7276C12__8S7276C10[4]),  4,6},
  {&(_tg__ZTV7S7276C5__8S7276C178S7276C12__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C78S7276C12__A1__8S7276C10[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C78S7276C12__A1__8S7276C10[3]),  3,5},
  {&(_tg__ZTV8S7276C13__8S7276C12__8S7276C10[8]),  8,10},
  {&(_tg__ZTV7S7276C5__8S7276C12__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C12__8S7276C10[6]),  6,8},
  {&(_tg__ZTV8S7276C14__8S7276C12__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C58S7276C14__A2__8S7276C12__8S7276C10[2]),  2,4},
  {&(_tg__ZTV8S7276C17__8S7276C12__8S7276C10[5]),  5,7},
  {&(_tg__ZTV8S7276C11__A1__8S7276C12__8S7276C10[4]),  4,6},
  {&(_tg__ZTV7S7276C7__A__8S7276C12__8S7276C10[5]),  5,7},
  {&(_ZTV8S7276C10[39]),  39,83},
  {&(_ZTV8S7276C10[44]),  44,83},
  {&(_ZTV8S7276C10[54]),  54,83},
  {&(_ZTV8S7276C10[62]),  62,83},
  {&(_ZTV8S7276C10[67]),  67,83},
  {&(_ZTV8S7276C10[71]),  71,83},
  {&(_ZTV8S7276C10[18]),  18,83},
  {&(_ZTV8S7276C10[25]),  25,83},
  {&(_ZTV8S7276C10[81]),  81,83},
  {&(_tg__ZTV8S7276C11__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C11__8S7276C10[3]),  3,5},
  {&(_tg__ZTV8S7276C13__8S7276C10[7]),  7,9},
  {&(_tg__ZTV8S7276C118S7276C13__A1__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C118S7276C13__A1__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C13__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C13__8S7276C10[6]),  6,8},
  {&(_tg__ZTV8S7276C14__8S7276C13__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C58S7276C14__A2__8S7276C13__8S7276C10[2]),  2,4},
  {&(_tg__ZTV7S7276C7__8S7276C10[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C7__8S7276C10[3]),  3,5},
  {&(_tg__ZTV8S7276C16__A1__8S7276C10[7]),  7,9},
  {&(_tg__ZTV7S7276C38S7276C16__A1__8S7276C10[6]),  6,8},
  {&(_tg__ZTV7S7276C7__7S7276C38S7276C16__A1__8S7276C10[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C38S7276C16__A1__8S7276C10[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C16__A1__8S7276C10[6]),  6,8},
  {&(_tg__ZTV7S7276C5__8S7276C16__A1__8S7276C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7276C10[];
extern  VTBL_ENTRY _ZTV8S7276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C10[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7276C13D0Ev,_ZThn52_N8S7276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7276C13D1Ev,_ZThn52_N8S7276C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7276C13D0Ev,_ZThn40_N8S7276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7276C13D1Ev,_ZThn40_N8S7276C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C11D0Ev,_ZThn12_N8S7276C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C11D1Ev,_ZThn12_N8S7276C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C12D0Ev,_ZTv0_n16_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7276C12D0Ev,_ZThn88_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C12D1Ev,_ZTv0_n16_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7276C12D1Ev,_ZThn88_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C12D0Ev,_ZTv0_n24_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7276C12D0Ev,_ZThn148_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C12D1Ev,_ZTv0_n24_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7276C12D1Ev,_ZThn148_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7276C12D0Ev,_ZThn160_N8S7276C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7276C12D0Ev,_ZThn100_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7276C12D1Ev,_ZThn160_N8S7276C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7276C12D1Ev,_ZThn100_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C12D0Ev,_ZTv0_n32_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7276C12D0Ev,_ZThn108_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C12D1Ev,_ZTv0_n32_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7276C12D1Ev,_ZThn108_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7276C7D0Ev,_ZThn60_N7S7276C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7276C7D1Ev,_ZThn60_N7S7276C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7276C17D0Ev,_ZThn68_N8S7276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7276C17D1Ev,_ZThn68_N8S7276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7276C17D0Ev,_ZThn56_N8S7276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7276C17D1Ev,_ZThn56_N8S7276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7276C16D0Ev,_ZThn100_N8S7276C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7276C16D1Ev,_ZThn100_N8S7276C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7276C16D0Ev,_ZThn148_N8S7276C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7276C16D1Ev,_ZThn148_N8S7276C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7276C3D0Ev,_ZThn100_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7276C3D1Ev,_ZThn100_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7276C3D0Ev,_ZThn148_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7276C3D1Ev,_ZThn148_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C10D0Ev,_ZTv0_n24_N8S7276C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7276C10D0Ev,_ZThn148_N8S7276C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C10D1Ev,_ZTv0_n24_N8S7276C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7276C10D1Ev,_ZThn148_N8S7276C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S7276C10D0Ev,_ZThn200_N8S7276C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7276C10D0Ev,_ZThn108_N8S7276C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S7276C10D1Ev,_ZThn200_N8S7276C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7276C10D1Ev,_ZThn108_N8S7276C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7276C10D0Ev,_ZThn160_N8S7276C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7276C10D0Ev,_ZThn100_N8S7276C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7276C10D1Ev,_ZThn160_N8S7276C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7276C10D1Ev,_ZThn100_N8S7276C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C10D0Ev,_ZTv0_n16_N8S7276C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7276C10D0Ev,_ZThn88_N8S7276C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C10D1Ev,_ZTv0_n16_N8S7276C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7276C10D1Ev,_ZThn88_N8S7276C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C10 = {  "S7276C10", // class name
  bases_S7276C10, 41,
  &(vtc_S7276C10[0]), // expected_vtbl_contents
  &(vtt_S7276C10[0]), // expected_vtt_contents
  ABISELECT(344,232), // object size
  NSPAIRA(_ZTI8S7276C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7276C10),83, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7276C10),47, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C18  : S7276C11 {
  virtual  ~S7276C18(); // _ZN8S7276C18D2Ev
  S7276C18(); // tgen
};
//SIG(-1 S7276C18) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} vd}


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

static void Test_S7276C18()
{
  extern Class_Descriptor cd_S7276C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7276C18, buf);
    S7276C18 *dp, &lv = *(dp=new (buf) S7276C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7276C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C18)");
    check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(16,12), "S7276C18");
    check_base_class_offset(lv, (S7276C5*)(S7276C11*), ABISELECT(16,12), "S7276C18");
    check_base_class_offset(lv, (S7276C11*), 0, "S7276C18");
    test_class_info(&lv, &cd_S7276C18);
    dp->~S7276C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C18(Test_S7276C18, "S7276C18", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S7276C18C1Ev();
extern void _ZN8S7276C18D2Ev();
Name_Map name_map_S7276C18[] = {
  NSPAIR(_ZN8S7276C18C1Ev),
  NSPAIR(_ZN8S7276C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
static Base_Class bases_S7276C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7276C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C18[];
extern void _ZN8S7276C18D1Ev();
extern void _ZN8S7276C18D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7276C18D1Ev,_ZTv0_n12_N8S7276C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7276C18D1Ev,_ZThn12_N8S7276C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C18D0Ev,_ZTv0_n12_N8S7276C18D0Ev)();
extern void ABISELECT(_ZThn16_N8S7276C18D0Ev,_ZThn12_N8S7276C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C18[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C18[0]),
  (VTBL_ENTRY)&_ZN8S7276C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C18D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7276C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C18D1Ev,_ZTv0_n12_N8S7276C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C18D0Ev,_ZTv0_n12_N8S7276C18D0Ev),
};
extern VTBL_ENTRY _ZTV8S7276C18[];
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C11__8S7276C18[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7276C11D1Ev,_ZThn12_N8S7276C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7276C11D0Ev,_ZThn12_N8S7276C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C11__8S7276C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
static  VTT_ENTRY vtt_S7276C18[] = {
  {&(_ZTV8S7276C18[3]),  3,10},
  {&(_tg__ZTV8S7276C11__8S7276C18[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C11__8S7276C18[3]),  3,5},
  {&(_ZTV8S7276C18[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7276C18[];
extern  VTBL_ENTRY _ZTV8S7276C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C18[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C11D0Ev,_ZThn12_N8S7276C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C11D1Ev,_ZThn12_N8S7276C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C18D0Ev,_ZTv0_n12_N8S7276C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C18D0Ev,_ZThn12_N8S7276C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C18D1Ev,_ZTv0_n12_N8S7276C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7276C18D1Ev,_ZThn12_N8S7276C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C18 = {  "S7276C18", // class name
  bases_S7276C18, 3,
  &(vtc_S7276C18[0]), // expected_vtbl_contents
  &(vtt_S7276C18[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S7276C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7276C18),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7276C18),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C20  : virtual S7276C2 {
  ~S7276C20(); // tgen
  S7276C20(); // tgen
};
//SIG(-1 S7276C20) C1{ VBC2{ VBC3{ BC4{ m} BC5{ BC4 vd FC4} VBC6{ m} VBC7{ VBC6 VBC5 VBC8{ m Fi} vd Fp FC9{}} vd} vd}}


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

static void Test_S7276C20()
{
  extern Class_Descriptor cd_S7276C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7276C20, buf);
    S7276C20 *dp, &lv = *(dp=new (buf) S7276C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7276C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C20)");
    /*is_ambiguous_... S7276C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C3*), ABISELECT(17,9), "S7276C20");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C3*), ABISELECT(8,4), "S7276C20");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C3*), ABISELECT(8,4), "S7276C20");
    check_base_class_offset(lv, (S2014C28*)(S7276C3*), 0, "S7276C20");
    check_base_class_offset(lv, (S2014C28*)(S7276C7*), 0, "S7276C20");
    /*is_ambiguous_... S7276C20::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(48,24), "S7276C20");
    check_base_class_offset(lv, (S7276C5*)(S7276C7*), ABISELECT(48,24), "S7276C20");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*), ABISELECT(60,32), "S7276C20");
    check_base_class_offset(lv, (S7276C7*)(S7276C3*), ABISELECT(24,12), "S7276C20");
    check_base_class_offset(lv, (S7276C3*)(S7276C2*), ABISELECT(8,4), "S7276C20");
    check_base_class_offset(lv, (S7276C2*), 0, "S7276C20");
    test_class_info(&lv, &cd_S7276C20);
    dp->~S7276C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C20(Test_S7276C20, "S7276C20", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S7276C20C1Ev();
extern void _ZN8S7276C20D1Ev();
Name_Map name_map_S7276C20[] = {
  NSPAIR(_ZN8S7276C20C1Ev),
  NSPAIR(_ZN8S7276C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
extern Class_Descriptor cd_S7276C3;
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
extern Class_Descriptor cd_S7276C2;
extern VTBL_ENTRY _ZTI7S7276C2[];
extern  VTBL_ENTRY _ZTV7S7276C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C2[];
static Base_Class bases_S7276C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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_S7276C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(48,24), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7276C7,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7276C3,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7276C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7276C20[];
extern void _ZN8S7276C20D1Ev();
extern void _ZN8S7276C20D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7276C20D1Ev,_ZTv0_n28_N8S7276C20D1Ev)();
extern void ABISELECT(_ZThn8_N8S7276C20D1Ev,_ZThn4_N8S7276C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7276C20D0Ev,_ZTv0_n28_N8S7276C20D0Ev)();
extern void ABISELECT(_ZThn8_N8S7276C20D0Ev,_ZThn4_N8S7276C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C20D1Ev,_ZTv0_n24_N8S7276C20D1Ev)();
extern void ABISELECT(_ZThn24_N8S7276C20D1Ev,_ZThn12_N8S7276C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7276C20D0Ev,_ZTv0_n24_N8S7276C20D0Ev)();
extern void ABISELECT(_ZThn24_N8S7276C20D0Ev,_ZThn12_N8S7276C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C20D1Ev,_ZTv0_n12_N8S7276C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7276C20D1Ev,_ZThn24_N8S7276C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C20D0Ev,_ZTv0_n12_N8S7276C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7276C20D0Ev,_ZThn24_N8S7276C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C20[] = {
  0,
  0,
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C20[0]),
  (VTBL_ENTRY)&_ZN8S7276C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C20D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7276C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7276C20D1Ev,_ZTv0_n28_N8S7276C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7276C20D0Ev,_ZTv0_n28_N8S7276C20D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7276C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C20D1Ev,_ZTv0_n24_N8S7276C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C20D0Ev,_ZTv0_n24_N8S7276C20D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7276C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C20D1Ev,_ZTv0_n12_N8S7276C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C20D0Ev,_ZTv0_n12_N8S7276C20D0Ev),
};
extern VTBL_ENTRY _ZTV8S7276C20[];
extern void _ZN7S7276C2D1Ev();
extern void _ZN7S7276C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C2__8S7276C20[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&_ZN7S7276C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C2D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7276C2D1Ev,_ZThn4_N7S7276C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7276C2D0Ev,_ZThn4_N7S7276C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C3__7S7276C2__8S7276C20[] = {
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C2D1Ev,_ZThn12_N7S7276C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C2D0Ev,_ZThn12_N7S7276C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C2__8S7276C20[] = {
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7276C2D1Ev,_ZThn24_N7S7276C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7276C2D0Ev,_ZThn24_N7S7276C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C2__8S7276C20[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev),
};
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C3__8S7276C20[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7276C3D1Ev,_ZThn8_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7276C3D0Ev,_ZThn8_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C3__8S7276C20[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn20_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn20_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C3__8S7276C20[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C20[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C7__8S7276C20[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
static  VTT_ENTRY vtt_S7276C20[] = {
  {&(_ZTV8S7276C20[9]),  9,33},
  {&(_ZTV8S7276C20[9]),  9,33},
  {&(_ZTV8S7276C20[18]),  18,33},
  {&(_ZTV8S7276C20[26]),  26,33},
  {&(_ZTV8S7276C20[31]),  31,33},
  {&(_tg__ZTV7S7276C2__8S7276C20[7]),  7,9},
  {&(_tg__ZTV7S7276C3__7S7276C2__8S7276C20[7]),  7,9},
  {&(_tg__ZTV7S7276C7__7S7276C2__8S7276C20[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C2__8S7276C20[3]),  3,5},
  {&(_tg__ZTV7S7276C3__8S7276C20[6]),  6,8},
  {&(_tg__ZTV7S7276C7__7S7276C3__8S7276C20[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C3__8S7276C20[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C20[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C7__8S7276C20[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7276C20[];
extern  VTBL_ENTRY _ZTV8S7276C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C20[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn20_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn20_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7276C3D0Ev,_ZThn8_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7276C3D1Ev,_ZThn8_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7276C2D0Ev,_ZThn24_N7S7276C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7276C2D1Ev,_ZThn24_N7S7276C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C2D0Ev,_ZThn12_N7S7276C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C2D1Ev,_ZThn12_N7S7276C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7276C2D0Ev,_ZThn4_N7S7276C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7276C2D1Ev,_ZThn4_N7S7276C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C20D0Ev,_ZTv0_n12_N8S7276C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7276C20D0Ev,_ZThn24_N8S7276C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C20D1Ev,_ZTv0_n12_N8S7276C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7276C20D1Ev,_ZThn24_N8S7276C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C20D0Ev,_ZTv0_n24_N8S7276C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7276C20D0Ev,_ZThn12_N8S7276C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7276C20D1Ev,_ZTv0_n24_N8S7276C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7276C20D1Ev,_ZThn12_N8S7276C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7276C20D0Ev,_ZTv0_n28_N8S7276C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7276C20D0Ev,_ZThn4_N8S7276C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7276C20D1Ev,_ZTv0_n28_N8S7276C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7276C20D1Ev,_ZThn4_N8S7276C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C20 = {  "S7276C20", // class name
  bases_S7276C20, 10,
  &(vtc_S7276C20[0]), // expected_vtbl_contents
  &(vtt_S7276C20[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S7276C20),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7276C20),33, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7276C20),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7276C1  : S7276C2 , virtual S7276C10 , S7276C18 , virtual S2014C24 , virtual S7276C20 {
  ~S7276C1(); // tgen
  S7276C1(); // tgen
};
//SIG(1 S7276C1) C1{ BC2{ VBC3{ BC4{ m} BC5{ BC4 vd FC4} VBC6{ m} VBC7{ VBC6 VBC5 VBC8{ m Fi} vd Fp FC9{}} vd} vd} VBC10{ VBC11{ VBC5 FL} BC12{ VBC13{ BC11 VBC6 VBC8 VBC7 VBC14{ BC15{ BC6 BC5 BC4 BC8 Fs:16 FL} BC5 Fi} vd Fl FC11} BC16{ VBC7 BC3 VBC4 vd FC8[6]} BC17{ VBC11 VBC8 Fc:1} BC7} BC14 BC4 VBC16 vd} BC18{ BC11 vd} VBC19{ m} VBC20{ VBC2}}


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

static void Test_S7276C1()
{
  extern Class_Descriptor cd_S7276C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,66)];
    init_test(&cd_S7276C1, buf);
    S7276C1 *dp, &lv = *(dp=new (buf) S7276C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,260), "sizeof(S7276C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7276C1)");
    /*is_ambiguous_... S7276C1::S7276C3 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C3*), ABISELECT(33,21), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C3 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C3*), ABISELECT(24,16), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C3 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C3*), ABISELECT(24,16), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C3 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C3*), 0, "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C7*), 0, "S7276C1");
    /*is_ambiguous_... S7276C13::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C13*), 0, "S7276C1");
    check_base_class_offset(lv, (S2014C28*)(S7276C3*)(S7276C16*)(S7276C12*)(S7276C10*), 0, "S7276C1");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C7*)(S7276C12*)(S7276C10*), 0, "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C16 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C3*)(S7276C16*), 0, "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*), ABISELECT(64,36), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C7 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C7*), ABISELECT(64,36), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C11 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C11*), ABISELECT(64,36), "S7276C1");
    check_base_class_offset(lv, (S7276C5*)(S7276C11*)(S7276C13*), ABISELECT(64,36), "S7276C1");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C7*)(S7276C12*)(S7276C10*), ABISELECT(64,36), "S7276C1");
    check_base_class_offset(lv, (S7276C5*)(S7276C11*)(S7276C18*), ABISELECT(64,36), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*), ABISELECT(76,44), "S7276C1");
    /*is_ambiguous_... S7276C13::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C13*), ABISELECT(76,44), "S7276C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S7276C17*)(S7276C12*)(S7276C10*), ABISELECT(76,44), "S7276C1");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C7*)(S7276C12*)(S7276C10*), ABISELECT(76,44), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C3 */ AMB_check_base_class_offset(lv, (S7276C7*)(S7276C3*), ABISELECT(40,24), "S7276C1");
    check_base_class_offset(lv, (S7276C7*)(S7276C13*), ABISELECT(40,24), "S7276C1");
    check_base_class_offset(lv, (S7276C7*)(S7276C16*)(S7276C12*)(S7276C10*), ABISELECT(40,24), "S7276C1");
    check_base_class_offset(lv, (S7276C7*)(S7276C3*)(S7276C16*)(S7276C12*)(S7276C10*), ABISELECT(40,24), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C7*)(S7276C16*), ABISELECT(40,24), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C7*)(S7276C3*)(S7276C16*), ABISELECT(40,24), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C2 */ AMB_check_base_class_offset(lv, (S7276C3*)(S7276C2*), ABISELECT(24,16), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C2 */ AMB_check_base_class_offset(lv, (S7276C3*)(S7276C2*), ABISELECT(24,16), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C2 */ AMB_check_base_class_offset(lv, (S7276C2*), 0, "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C11 */ AMB_check_base_class_offset(lv, (S7276C11*)(S7276C10*), ABISELECT(216,140), "S7276C1");
    check_base_class_offset(lv, (S7276C11*)(S7276C17*)(S7276C12*)(S7276C10*), ABISELECT(216,140), "S7276C1");
    check_base_class_offset(lv, (S7276C11*)(S7276C13*), ABISELECT(232,152), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C15*)(S7276C14*), ABISELECT(288,188), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(288,188), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C15*)(S7276C14*), ABISELECT(288,188), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C15*)(S7276C14*), ABISELECT(297,193), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C14 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C15*)(S7276C14*), ABISELECT(300,196), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C15*)(S7276C14*), ABISELECT(288,188), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C14*), ABISELECT(320,212), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C14*), ABISELECT(320,212), "S7276C1");
    check_base_class_offset(lv, (S7276C14*)(S7276C13*), ABISELECT(288,188), "S7276C1");
    check_base_class_offset(lv, (S7276C13*)(S7276C12*)(S7276C10*), ABISELECT(232,152), "S7276C1");
    /*is_ambiguous_... S7276C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C3*)(S7276C16*)(S7276C12*)(S7276C10*), ABISELECT(89,53), "S7276C1");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C3*)(S7276C16*)(S7276C12*)(S7276C10*), ABISELECT(80,48), "S7276C1");
    /*is_ambiguous_... S7276C3::S7276C5 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C3*)(S7276C16*)(S7276C12*)(S7276C10*), ABISELECT(80,48), "S7276C1");
    check_base_class_offset(lv, (S7276C3*)(S7276C16*)(S7276C12*)(S7276C10*), ABISELECT(80,48), "S7276C1");
    /*is_ambiguous_... S7276C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C16*)(S7276C12*)(S7276C10*), 0, "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C16*), 0, "S7276C1");
    check_base_class_offset(lv, (S7276C16*)(S7276C12*)(S7276C10*), ABISELECT(80,48), "S7276C1");
    check_base_class_offset(lv, (S7276C17*)(S7276C12*)(S7276C10*), ABISELECT(120,80), "S7276C1");
    /*is_ambiguous_... S7276C12::S7276C7 */ AMB_check_base_class_offset(lv, (S7276C7*)(S7276C12*)(S7276C10*), ABISELECT(136,88), "S7276C1");
    check_base_class_offset(lv, (S7276C12*)(S7276C10*), ABISELECT(80,48), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7276C15*)(S7276C14*)(S7276C10*), ABISELECT(160,100), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C15*)(S7276C14*)(S7276C10*), ABISELECT(160,100), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C15*)(S7276C14*)(S7276C10*), ABISELECT(160,100), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C15*)(S7276C14*)(S7276C10*), ABISELECT(169,105), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7276C15*)(S7276C14*)(S7276C10*), ABISELECT(172,108), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C15*)(S7276C14*)(S7276C10*), ABISELECT(160,100), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C14*)(S7276C10*), ABISELECT(192,124), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C14*)(S7276C10*), ABISELECT(192,124), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C14 */ AMB_check_base_class_offset(lv, (S7276C14*)(S7276C10*), ABISELECT(160,100), "S7276C1");
    /*is_ambiguous_... S7276C10::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C10*), ABISELECT(208,136), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C3*)(S7276C16*), ABISELECT(345,229), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7276C5*)(S7276C3*)(S7276C16*), ABISELECT(336,224), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C5*)(S7276C3*)(S7276C16*), ABISELECT(336,224), "S7276C1");
    /*is_ambiguous_... S7276C1::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C3*)(S7276C16*), ABISELECT(336,224), "S7276C1");
    /*is_ambiguous_... S7276C10::S7276C16 */ AMB_check_base_class_offset(lv, (S7276C16*)(S7276C10*), ABISELECT(336,224), "S7276C1");
    check_base_class_offset(lv, (S7276C10*), ABISELECT(80,48), "S7276C1");
    check_base_class_offset(lv, (S7276C11*)(S7276C18*), ABISELECT(8,4), "S7276C1");
    check_base_class_offset(lv, (S7276C18*), ABISELECT(8,4), "S7276C1");
    check_base_class_offset(lv, (S2014C24*), 0, "S7276C1");
    check_base_class_offset(lv, (S7276C2*)(S7276C20*), ABISELECT(376,256), "S7276C1");
    check_base_class_offset(lv, (S7276C20*), ABISELECT(376,256), "S7276C1");
    test_class_info(&lv, &cd_S7276C1);
    dp->~S7276C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7276C1(Test_S7276C1, "S7276C1", ABISELECT(384,260));

#else // __cplusplus

extern void _ZN7S7276C1C1Ev();
extern void _ZN7S7276C1D1Ev();
Name_Map name_map_S7276C1[] = {
  NSPAIR(_ZN7S7276C1C1Ev),
  NSPAIR(_ZN7S7276C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
extern Class_Descriptor cd_S7276C3;
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
extern Class_Descriptor cd_S7276C2;
extern VTBL_ENTRY _ZTI7S7276C2[];
extern  VTBL_ENTRY _ZTV7S7276C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C2[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C15;
extern VTBL_ENTRY _ZTI8S7276C15[];
extern  VTBL_ENTRY _ZTV8S7276C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C14;
extern VTBL_ENTRY _ZTI8S7276C14[];
extern  VTBL_ENTRY _ZTV8S7276C14[];
extern Class_Descriptor cd_S7276C13;
extern VTBL_ENTRY _ZTI8S7276C13[];
extern  VTBL_ENTRY _ZTV8S7276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C3;
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C16;
extern VTBL_ENTRY _ZTI8S7276C16[];
extern  VTBL_ENTRY _ZTV8S7276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C16[];
extern Class_Descriptor cd_S7276C17;
extern VTBL_ENTRY _ZTI8S7276C17[];
extern  VTBL_ENTRY _ZTV8S7276C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C17[];
extern Class_Descriptor cd_S7276C7;
extern VTBL_ENTRY _ZTI7S7276C7[];
extern  VTBL_ENTRY _ZTV7S7276C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C7[];
extern Class_Descriptor cd_S7276C12;
extern VTBL_ENTRY _ZTI8S7276C12[];
extern  VTBL_ENTRY _ZTV8S7276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7276C15;
extern VTBL_ENTRY _ZTI8S7276C15[];
extern  VTBL_ENTRY _ZTV8S7276C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C14;
extern VTBL_ENTRY _ZTI8S7276C14[];
extern  VTBL_ENTRY _ZTV8S7276C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7276C5;
extern VTBL_ENTRY _ZTI7S7276C5[];
extern  VTBL_ENTRY _ZTV7S7276C5[];
extern Class_Descriptor cd_S7276C3;
extern VTBL_ENTRY _ZTI7S7276C3[];
extern  VTBL_ENTRY _ZTV7S7276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C3[];
extern Class_Descriptor cd_S7276C16;
extern VTBL_ENTRY _ZTI8S7276C16[];
extern  VTBL_ENTRY _ZTV8S7276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C16[];
extern Class_Descriptor cd_S7276C10;
extern VTBL_ENTRY _ZTI8S7276C10[];
extern  VTBL_ENTRY _ZTV8S7276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C10[];
extern Class_Descriptor cd_S7276C11;
extern VTBL_ENTRY _ZTI8S7276C11[];
extern  VTBL_ENTRY _ZTV8S7276C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C11[];
extern Class_Descriptor cd_S7276C18;
extern VTBL_ENTRY _ZTI8S7276C18[];
extern  VTBL_ENTRY _ZTV8S7276C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C18[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S7276C2;
extern VTBL_ENTRY _ZTI7S7276C2[];
extern  VTBL_ENTRY _ZTV7S7276C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C2[];
extern Class_Descriptor cd_S7276C20;
extern VTBL_ENTRY _ZTI8S7276C20[];
extern  VTBL_ENTRY _ZTV8S7276C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7276C20[];
static Base_Class bases_S7276C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(33,21), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(64,36), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7276C7,    ABISELECT(40,24), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7276C3,    ABISELECT(24,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7276C2,    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
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7276C11,    ABISELECT(216,140), //bcp->offset
    81, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S7276C11,    ABISELECT(232,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(288,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(288,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(288,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(297,193), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(300,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7276C15,    ABISELECT(288,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(320,212), //bcp->offset
    102, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7276C14,    ABISELECT(288,188), //bcp->offset
    97, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7276C13,    ABISELECT(232,152), //bcp->offset
    87, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(89,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7276C3,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7276C16,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7276C17,    ABISELECT(120,80), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7276C7,    ABISELECT(136,88), //bcp->offset
    66, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7276C12,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(169,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(172,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
    36, //immediately_derived
  0, 0},
  {&cd_S7276C15,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(192,124), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7276C14,    ABISELECT(160,100), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(345,229), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(336,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7276C5,    ABISELECT(336,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7276C3,    ABISELECT(336,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7276C16,    ABISELECT(336,224), //bcp->offset
    106, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    46, //immediately_derived
  0, 1},
  {&cd_S7276C10,    ABISELECT(80,48), //bcp->offset
    45, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7276C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7276C18,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7276C2,    ABISELECT(376,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    51, //immediately_derived
  0, 1},
  {&cd_S7276C20,    ABISELECT(376,256), //bcp->offset
    116, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7276C1[];
extern void _ZN7S7276C1D1Ev();
extern void _ZN7S7276C1D0Ev();
extern void ABISELECT(_ZThn8_N7S7276C1D1Ev,_ZThn4_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7276C1D0Ev,_ZThn4_N7S7276C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S7276C1D1Ev,_ZTv0_n28_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C1D1Ev,_ZThn16_N7S7276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7276C1D0Ev,_ZTv0_n28_N7S7276C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C1D0Ev,_ZThn16_N7S7276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C1D1Ev,_ZTv0_n24_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S7276C1D1Ev,_ZThn24_N7S7276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C1D0Ev,_ZTv0_n24_N7S7276C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S7276C1D0Ev,_ZThn24_N7S7276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C1D1Ev,_ZTv0_n12_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7276C1D1Ev,_ZThn36_N7S7276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C1D0Ev,_ZTv0_n12_N7S7276C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7276C1D0Ev,_ZThn36_N7S7276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7276C1D1Ev,_ZTv0_n48_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S7276C1D1Ev,_ZThn48_N7S7276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7276C1D0Ev,_ZTv0_n48_N7S7276C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S7276C1D0Ev,_ZThn48_N7S7276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn40_n96_N7S7276C1D1Ev,_ZTvn32_n48_N7S7276C1D1Ev)();
extern void ABISELECT(_ZTvn40_n96_N7S7276C1D0Ev,_ZTvn32_n48_N7S7276C1D0Ev)();
extern void ABISELECT(_ZTvn56_n96_N7S7276C1D1Ev,_ZTvn40_n48_N7S7276C1D1Ev)();
extern void ABISELECT(_ZTvn56_n96_N7S7276C1D0Ev,_ZTvn40_n48_N7S7276C1D0Ev)();
extern void ABISELECT(_ZTvn80_n96_N7S7276C1D1Ev,_ZTvn52_n48_N7S7276C1D1Ev)();
extern void ABISELECT(_ZTvn80_n96_N7S7276C1D0Ev,_ZTvn52_n48_N7S7276C1D0Ev)();
extern void ABISELECT(_ZTvn112_n96_N7S7276C1D1Ev,_ZTvn76_n48_N7S7276C1D1Ev)();
extern void ABISELECT(_ZTvn112_n96_N7S7276C1D0Ev,_ZTvn76_n48_N7S7276C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7276C1D1Ev,_ZTv0_n16_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S7276C1D1Ev,_ZThn140_N7S7276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7276C1D0Ev,_ZTv0_n16_N7S7276C1D0Ev)();
extern void ABISELECT(_ZThn216_N7S7276C1D0Ev,_ZThn140_N7S7276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7276C1D1Ev,_ZTv0_n32_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7276C1D1Ev,_ZThn152_N7S7276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7276C1D0Ev,_ZTv0_n32_N7S7276C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7276C1D0Ev,_ZThn152_N7S7276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C1D1Ev,_ZTv0_n12_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S7276C1D1Ev,_ZThn188_N7S7276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C1D0Ev,_ZTv0_n12_N7S7276C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S7276C1D0Ev,_ZThn188_N7S7276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N7S7276C1D1Ev,_ZTvn24_n12_N7S7276C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N7S7276C1D0Ev,_ZTvn24_n12_N7S7276C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N7S7276C1D1Ev,_ZTv0_n32_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn336_N7S7276C1D1Ev,_ZThn224_N7S7276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7276C1D0Ev,_ZTv0_n32_N7S7276C1D0Ev)();
extern void ABISELECT(_ZThn336_N7S7276C1D0Ev,_ZThn224_N7S7276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7276C1D1Ev,_ZTv0_n32_N7S7276C1D1Ev)();
extern void ABISELECT(_ZThn376_N7S7276C1D1Ev,_ZThn256_N7S7276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7276C1D0Ev,_ZTv0_n32_N7S7276C1D0Ev)();
extern void ABISELECT(_ZThn376_N7S7276C1D0Ev,_ZThn256_N7S7276C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7276C1[] = {
  ABISELECT(376,256),
  ABISELECT(376,256),
  0,
  ABISELECT(336,224),
  0,
  ABISELECT(288,188),
  ABISELECT(232,152),
  ABISELECT(216,140),
  ABISELECT(80,48),
  ABISELECT(76,44),
  ABISELECT(64,36),
  ABISELECT(40,24),
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&_ZN7S7276C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C1D0Ev,
  ABISELECT(56,32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7276C1D1Ev,_ZThn4_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7276C1D0Ev,_ZThn4_N7S7276C1D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C1D1Ev,_ZTv0_n28_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C1D0Ev,_ZTv0_n28_N7S7276C1D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C1D1Ev,_ZTv0_n24_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C1D0Ev,_ZTv0_n24_N7S7276C1D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C1D1Ev,_ZTv0_n12_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C1D0Ev,_ZTv0_n12_N7S7276C1D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(256,176),
  ABISELECT(136,92),
  ABISELECT(208,140),
  ABISELECT(152,104),
  ABISELECT(-80,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7276C1D1Ev,_ZTv0_n48_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7276C1D0Ev,_ZTv0_n48_N7S7276C1D0Ev),
  ABISELECT(-44,-36),
  ABISELECT(-56,-44),
  ABISELECT(96,60),
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n96_N7S7276C1D1Ev,_ZTvn32_n48_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n96_N7S7276C1D0Ev,_ZTvn32_n48_N7S7276C1D0Ev),
  ABISELECT(-60,-44),
  ABISELECT(-72,-52),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n96_N7S7276C1D1Ev,_ZTvn40_n48_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n96_N7S7276C1D0Ev,_ZTvn40_n48_N7S7276C1D0Ev),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n96_N7S7276C1D1Ev,_ZTvn52_n48_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n96_N7S7276C1D0Ev,_ZTvn52_n48_N7S7276C1D0Ev),
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n96_N7S7276C1D1Ev,_ZTvn76_n48_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n96_N7S7276C1D0Ev,_ZTvn76_n48_N7S7276C1D0Ev),
  ABISELECT(-216,-140),
  ABISELECT(-152,-104),
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7276C1D1Ev,_ZTv0_n16_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7276C1D0Ev,_ZTv0_n16_N7S7276C1D0Ev),
  ABISELECT(-232,-152),
  ABISELECT(56,36),
  ABISELECT(-192,-128),
  ABISELECT(-156,-108),
  ABISELECT(-232,-152),
  ABISELECT(-168,-116),
  ABISELECT(-232,-152),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7276C1D1Ev,_ZTv0_n32_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7276C1D0Ev,_ZTv0_n32_N7S7276C1D0Ev),
  ABISELECT(-288,-188),
  ABISELECT(-288,-188),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C1D1Ev,_ZTv0_n12_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C1D0Ev,_ZTv0_n12_N7S7276C1D0Ev),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N7S7276C1D1Ev,_ZTvn24_n12_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N7S7276C1D0Ev,_ZTvn24_n12_N7S7276C1D0Ev),
  ABISELECT(-336,-224),
  ABISELECT(-336,-224),
  ABISELECT(-260,-180),
  ABISELECT(-272,-188),
  ABISELECT(-296,-200),
  ABISELECT(-336,-224),
  ABISELECT(-336,-224),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7276C1D1Ev,_ZTv0_n32_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7276C1D0Ev,_ZTv0_n32_N7S7276C1D0Ev),
  0,
  ABISELECT(-376,-256),
  ABISELECT(-300,-212),
  ABISELECT(-312,-220),
  ABISELECT(-336,-232),
  ABISELECT(-376,-256),
  ABISELECT(-352,-240),
  ABISELECT(-376,-256),
  (VTBL_ENTRY)&(_ZTI7S7276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7276C1D1Ev,_ZTv0_n32_N7S7276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7276C1D0Ev,_ZTv0_n32_N7S7276C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7276C1[];
extern void _ZN7S7276C2D1Ev();
extern void _ZN7S7276C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C2__A__7S7276C1[] = {
  ABISELECT(76,44),
  ABISELECT(64,36),
  ABISELECT(40,24),
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&_ZN7S7276C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C2D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C2D1Ev,_ZThn16_N7S7276C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C2D0Ev,_ZThn16_N7S7276C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C3__7S7276C2__A__7S7276C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7276C2D1Ev,_ZThn24_N7S7276C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7276C2D0Ev,_ZThn24_N7S7276C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C2__A__7S7276C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7276C2D1Ev,_ZThn36_N7S7276C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7276C2D0Ev,_ZThn36_N7S7276C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C2__A__7S7276C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev),
};
extern void _ZN8S7276C18D1Ev();
extern void _ZN8S7276C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C18__7S7276C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C18[0]),
  (VTBL_ENTRY)&_ZN8S7276C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C18D0Ev,
};
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C118S7276C18__A2__7S7276C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C11D1Ev,_ZThn32_N8S7276C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S7276C11D0Ev,_ZThn32_N8S7276C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C118S7276C18__A2__7S7276C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C18D1Ev,_ZTv0_n12_N8S7276C18D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C18D1Ev,_ZThn32_N8S7276C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C18D0Ev,_ZTv0_n12_N8S7276C18D0Ev)();
extern void ABISELECT(_ZThn56_N8S7276C18D0Ev,_ZThn32_N8S7276C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C18__7S7276C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7276C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C18D1Ev,_ZTv0_n12_N8S7276C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C18D0Ev,_ZTv0_n12_N8S7276C18D0Ev),
};
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C3__7S7276C1[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7276C3D1Ev,_ZThn8_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7276C3D0Ev,_ZThn8_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C3__7S7276C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn20_N7S7276C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn20_N7S7276C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C3__7S7276C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C1[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C7__7S7276C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
extern void _ZN8S7276C10D1Ev();
extern void _ZN8S7276C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C10__7S7276C1[] = {
  ABISELECT(256,176),
  ABISELECT(136,92),
  ABISELECT(208,140),
  ABISELECT(152,104),
  ABISELECT(-80,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&_ZN8S7276C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C10D0Ev,
};
extern void _ZN8S7276C12D1Ev();
extern void _ZN8S7276C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(136,92),
  ABISELECT(208,140),
  ABISELECT(152,104),
  ABISELECT(-80,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&_ZN8S7276C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C12D0Ev,
};
extern void _ZN8S7276C16D1Ev();
extern void _ZN8S7276C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C168S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(-80,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&_ZN8S7276C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C16D0Ev,
};
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C38S7276C168S7276C128S7276C10__A1__7S7276C1[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C38S7276C168S7276C128S7276C10__A1__7S7276C1[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C38S7276C168S7276C128S7276C10__A1__7S7276C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C168S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C168S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev),
};
extern void _ZN8S7276C17D1Ev();
extern void _ZN8S7276C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C178S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(-44,-36),
  ABISELECT(-56,-44),
  ABISELECT(96,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&_ZN8S7276C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C17D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S7276C17D1Ev,_ZThn60_N8S7276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev)();
extern void ABISELECT(_ZThn96_N8S7276C17D0Ev,_ZThn60_N8S7276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C11__8S7276C178S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(-152,-104),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C178S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(56,44),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S7276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C17D1Ev,_ZTv0_n12_N8S7276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C17D0Ev,_ZTv0_n12_N8S7276C17D0Ev),
};
extern void _ZN7S7276C7D1Ev();
extern void _ZN7S7276C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C78S7276C128S7276C10__A1__7S7276C1[] = {
  ABISELECT(-60,-44),
  ABISELECT(-72,-52),
  ABISELECT(-136,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&_ZN7S7276C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__7S7276C78S7276C128S7276C10__A1__7S7276C1[] = {
  ABISELECT(72,52),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI7S7276C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7276C12D1Ev,_ZTv0_n32_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn152_N8S7276C12D1Ev,_ZThn104_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7276C12D0Ev,_ZTv0_n32_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn152_N8S7276C12D0Ev,_ZThn104_N8S7276C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C13__8S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(56,36),
  ABISELECT(-192,-128),
  ABISELECT(-156,-108),
  ABISELECT(-232,-152),
  ABISELECT(-168,-116),
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C12D1Ev,_ZTv0_n32_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C12D0Ev,_ZTv0_n32_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C12D1Ev,_ZTv0_n24_N8S7276C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7276C12D0Ev,_ZTv0_n24_N8S7276C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C12D1Ev,_ZTv0_n24_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C12D0Ev,_ZTv0_n24_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn208_N8S7276C12D1Ev,_ZThn140_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn208_N8S7276C12D0Ev,_ZThn140_N8S7276C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C14__8S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(-208,-140),
  ABISELECT(-208,-140),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7276C12D1Ev,_ZTvn24_n12_N8S7276C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7276C12D0Ev,_ZTvn24_n12_N8S7276C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C58S7276C14__A2__8S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C12D1Ev,_ZTvn24_n12_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C12D0Ev,_ZTvn24_n12_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZThn40_N8S7276C12D1Ev,_ZThn32_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S7276C12D0Ev,_ZThn32_N8S7276C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7276C17__8S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(-44,-36),
  ABISELECT(-56,-44),
  ABISELECT(96,60),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C12D1Ev,_ZThn32_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C12D0Ev,_ZThn32_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7276C12D1Ev,_ZTv0_n16_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn136_N8S7276C12D1Ev,_ZThn92_N8S7276C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7276C12D0Ev,_ZTv0_n16_N8S7276C12D0Ev)();
extern void ABISELECT(_ZThn136_N8S7276C12D0Ev,_ZThn92_N8S7276C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C11__A1__8S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(-136,-92),
  ABISELECT(-152,-104),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C12D1Ev,_ZTv0_n16_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C12D0Ev,_ZTv0_n16_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZThn56_N8S7276C12D1Ev,_ZThn40_N8S7276C12D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C12D0Ev,_ZThn40_N8S7276C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__A__8S7276C128S7276C10__7S7276C1[] = {
  ABISELECT(-60,-44),
  ABISELECT(-72,-52),
  ABISELECT(-136,-88),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7276C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C12D1Ev,_ZThn40_N8S7276C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C12D0Ev,_ZThn40_N8S7276C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7276C10D1Ev,_ZTv0_n16_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn136_N8S7276C10D1Ev,_ZThn92_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7276C10D0Ev,_ZTv0_n16_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn136_N8S7276C10D0Ev,_ZThn92_N8S7276C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C11__8S7276C10__7S7276C1[] = {
  ABISELECT(-136,-92),
  ABISELECT(-152,-104),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C10D1Ev,_ZTv0_n16_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7276C10D0Ev,_ZTv0_n16_N8S7276C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C10__7S7276C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn152_N8S7276C10D1Ev,_ZThn104_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn152_N8S7276C10D0Ev,_ZThn104_N8S7276C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C13__8S7276C10__7S7276C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(56,36),
  ABISELECT(-192,-128),
  ABISELECT(-156,-108),
  ABISELECT(-232,-152),
  ABISELECT(-168,-116),
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C10D1Ev,_ZTv0_n24_N8S7276C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7276C10D0Ev,_ZTv0_n24_N8S7276C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C10__7S7276C1[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C10D1Ev,_ZTv0_n24_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C10D0Ev,_ZTv0_n24_N8S7276C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn208_N8S7276C10D1Ev,_ZThn140_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn208_N8S7276C10D0Ev,_ZThn140_N8S7276C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C14__8S7276C10__7S7276C1[] = {
  ABISELECT(-208,-140),
  ABISELECT(-208,-140),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7276C10D1Ev,_ZTvn24_n12_N8S7276C10D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7276C10D0Ev,_ZTvn24_n12_N8S7276C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C58S7276C14__A2__8S7276C10__7S7276C1[] = {
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C10D1Ev,_ZTvn24_n12_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C10D0Ev,_ZTvn24_n12_N8S7276C10D0Ev),
};
extern void ABISELECT(_ZThn40_N8S7276C10D1Ev,_ZThn32_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S7276C10D0Ev,_ZThn32_N8S7276C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7276C178S7276C12__8S7276C10__7S7276C1[] = {
  ABISELECT(-44,-36),
  ABISELECT(-56,-44),
  ABISELECT(96,60),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C10D1Ev,_ZThn32_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7276C10D0Ev,_ZThn32_N8S7276C10D0Ev),
};
extern void ABISELECT(_ZThn56_N8S7276C10D1Ev,_ZThn40_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C10D0Ev,_ZThn40_N8S7276C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C78S7276C12__A1__8S7276C10__7S7276C1[] = {
  ABISELECT(-60,-44),
  ABISELECT(-72,-52),
  ABISELECT(-136,-88),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C10D1Ev,_ZThn40_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7276C10D0Ev,_ZThn40_N8S7276C10D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev)();
extern void ABISELECT(_ZThn256_N8S7276C10D1Ev,_ZThn176_N8S7276C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev)();
extern void ABISELECT(_ZThn256_N8S7276C10D0Ev,_ZThn176_N8S7276C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C16__A1__8S7276C10__7S7276C1[] = {
  ABISELECT(-256,-176),
  ABISELECT(-336,-224),
  ABISELECT(-260,-180),
  ABISELECT(-272,-188),
  ABISELECT(-296,-200),
  ABISELECT(-336,-224),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S7276C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev),
};
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C11__7S7276C1[] = {
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C11__7S7276C1[] = {
  ABISELECT(152,104),
  ABISELECT(152,104),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
extern void _ZN8S7276C13D1Ev();
extern void _ZN8S7276C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C13__7S7276C1[] = {
  ABISELECT(56,36),
  ABISELECT(-192,-128),
  ABISELECT(-156,-108),
  ABISELECT(-232,-152),
  ABISELECT(-168,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&_ZN8S7276C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C13D0Ev,
};
extern void _ZN8S7276C11D1Ev();
extern void _ZN8S7276C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C118S7276C13__A1__7S7276C1[] = {
  ABISELECT(-168,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&_ZN8S7276C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C118S7276C13__A1__7S7276C1[] = {
  ABISELECT(168,116),
  ABISELECT(168,116),
  (VTBL_ENTRY)&(_ZTI8S7276C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C13__7S7276C1[] = {
  ABISELECT(168,116),
  ABISELECT(168,116),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C13__7S7276C1[] = {
  ABISELECT(192,128),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C13D1Ev,_ZTv0_n24_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C13D0Ev,_ZTv0_n24_N8S7276C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7276C13D1Ev,_ZThn36_N8S7276C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7276C13D0Ev,_ZThn36_N8S7276C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C14__8S7276C13__7S7276C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7276C13D1Ev,_ZTvn24_n12_N8S7276C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7276C13D0Ev,_ZTvn24_n12_N8S7276C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C58S7276C14__A2__8S7276C13__7S7276C1[] = {
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S7276C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C13D1Ev,_ZTvn24_n12_N8S7276C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7276C13D0Ev,_ZTvn24_n12_N8S7276C13D0Ev),
};
extern void _ZN8S7276C16D1Ev();
extern void _ZN8S7276C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7276C16__A1__7S7276C1[] = {
  ABISELECT(-336,-224),
  ABISELECT(-260,-180),
  ABISELECT(-272,-188),
  ABISELECT(-296,-200),
  ABISELECT(-336,-224),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&_ZN8S7276C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7276C16D0Ev,
};
extern void _ZN7S7276C3D1Ev();
extern void _ZN7S7276C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C38S7276C16__A2__7S7276C1[] = {
  ABISELECT(-260,-180),
  ABISELECT(-272,-188),
  ABISELECT(-296,-200),
  ABISELECT(-336,-224),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&_ZN7S7276C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C38S7276C16__A2__7S7276C1[] = {
  ABISELECT(296,200),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(296,200),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C38S7276C16__A2__7S7276C1[] = {
  ABISELECT(272,188),
  ABISELECT(272,188),
  (VTBL_ENTRY)&(_ZTI7S7276C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C16__A1__7S7276C1[] = {
  ABISELECT(296,200),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(296,200),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D1Ev,_ZTv0_n24_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C16D0Ev,_ZTv0_n24_N8S7276C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__8S7276C16__A1__7S7276C1[] = {
  ABISELECT(272,188),
  ABISELECT(272,188),
  (VTBL_ENTRY)&(_ZTI8S7276C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D1Ev,_ZTv0_n12_N8S7276C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C16D0Ev,_ZTv0_n12_N8S7276C16D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7276C20D1Ev,_ZTv0_n32_N8S7276C20D1Ev)();
extern void _ZN8S7276C20D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7276C20D0Ev,_ZTv0_n32_N8S7276C20D0Ev)();
extern void _ZN8S7276C20D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7276C20__7S7276C1[] = {
  0,
  0,
  ABISELECT(-300,-212),
  ABISELECT(-312,-220),
  ABISELECT(-336,-232),
  ABISELECT(-376,-256),
  ABISELECT(-352,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S7276C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C20D1Ev,_ZTv0_n32_N8S7276C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7276C20D0Ev,_ZTv0_n32_N8S7276C20D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S7276C20D1Ev,_ZTv0_n28_N8S7276C20D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7276C20D0Ev,_ZTv0_n28_N8S7276C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C3__8S7276C20__7S7276C1[] = {
  ABISELECT(352,240),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  ABISELECT(352,240),
  (VTBL_ENTRY)&(_ZTI8S7276C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7276C20D1Ev,_ZTv0_n28_N8S7276C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7276C20D0Ev,_ZTv0_n28_N8S7276C20D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7276C20D1Ev,_ZTv0_n24_N8S7276C20D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7276C20D0Ev,_ZTv0_n24_N8S7276C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__8S7276C20__7S7276C1[] = {
  ABISELECT(336,232),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(336,232),
  (VTBL_ENTRY)&(_ZTI8S7276C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C20D1Ev,_ZTv0_n24_N8S7276C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7276C20D0Ev,_ZTv0_n24_N8S7276C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7276C20D1Ev,_ZTv0_n12_N8S7276C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7276C20D0Ev,_ZTv0_n12_N8S7276C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__8S7276C20__7S7276C1[] = {
  ABISELECT(312,220),
  ABISELECT(312,220),
  (VTBL_ENTRY)&(_ZTI8S7276C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C20D1Ev,_ZTv0_n12_N8S7276C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7276C20D0Ev,_ZTv0_n12_N8S7276C20D0Ev),
};
extern void _ZN7S7276C2D1Ev();
extern void _ZN7S7276C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7276C2__A1__7S7276C1[] = {
  ABISELECT(-300,-212),
  ABISELECT(-312,-220),
  ABISELECT(-336,-232),
  ABISELECT(-376,-256),
  ABISELECT(-352,-240),
  0,
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&_ZN7S7276C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7276C2D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev)();
extern void ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C3__7S7276C2__A1__7S7276C1[] = {
  ABISELECT(352,240),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  ABISELECT(352,240),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C7__7S7276C2__A1__7S7276C1[] = {
  ABISELECT(336,232),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(336,232),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7276C5__A1__7S7276C2__A1__7S7276C1[] = {
  ABISELECT(312,220),
  ABISELECT(312,220),
  (VTBL_ENTRY)&(_ZTI7S7276C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev),
};
static  VTT_ENTRY vtt_S7276C1[] = {
  {&(_ZTV7S7276C1[16]),  16,127},
  {&(_tg__ZTV7S7276C2__A__7S7276C1[7]),  7,9},
  {&(_tg__ZTV7S7276C3__7S7276C2__A__7S7276C1[7]),  7,9},
  {&(_tg__ZTV7S7276C7__7S7276C2__A__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C2__A__7S7276C1[3]),  3,5},
  {&(_tg__ZTV8S7276C18__7S7276C1[3]),  3,5},
  {&(_tg__ZTV8S7276C118S7276C18__A2__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C118S7276C18__A2__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C18__7S7276C1[3]),  3,5},
  {&(_ZTV7S7276C1[30]),  30,127},
  {&(_ZTV7S7276C1[38]),  38,127},
  {&(_ZTV7S7276C1[43]),  43,127},
  {&(_ZTV7S7276C1[57]),  57,127},
  {&(_ZTV7S7276C1[85]),  85,127},
  {&(_ZTV7S7276C1[95]),  95,127},
  {&(_ZTV7S7276C1[100]),  100,127},
  {&(_ZTV7S7276C1[104]),  104,127},
  {&(_ZTV7S7276C1[64]),  64,127},
  {&(_ZTV7S7276C1[71]),  71,127},
  {&(_ZTV7S7276C1[75]),  75,127},
  {&(_ZTV7S7276C1[79]),  79,127},
  {&(_ZTV7S7276C1[114]),  114,127},
  {&(_ZTV7S7276C1[21]),  21,127},
  {&(_ZTV7S7276C1[125]),  125,127},
  {&(_ZTV7S7276C1[125]),  125,127},
  {&(_tg__ZTV7S7276C3__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C7__7S7276C3__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C3__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C7__7S7276C1[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C7__7S7276C1[3]),  3,5},
  {&(_tg__ZTV8S7276C10__7S7276C1[11]),  11,13},
  {&(_tg__ZTV8S7276C128S7276C10__7S7276C1[10]),  10,12},
  {&(_tg__ZTV8S7276C168S7276C128S7276C10__7S7276C1[7]),  7,9},
  {&(_tg__ZTV7S7276C38S7276C168S7276C128S7276C10__A1__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C7__7S7276C38S7276C168S7276C128S7276C10__A1__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C38S7276C168S7276C128S7276C10__A1__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C168S7276C128S7276C10__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C5__8S7276C168S7276C128S7276C10__7S7276C1[3]),  3,5},
  {&(_tg__ZTV8S7276C178S7276C128S7276C10__7S7276C1[5]),  5,7},
  {&(_tg__ZTV8S7276C11__8S7276C178S7276C128S7276C10__7S7276C1[4]),  4,6},
  {&(_tg__ZTV7S7276C5__8S7276C178S7276C128S7276C10__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C78S7276C128S7276C10__A1__7S7276C1[5]),  5,7},
  {&(_tg__ZTV7S7276C5__7S7276C78S7276C128S7276C10__A1__7S7276C1[3]),  3,5},
  {&(_tg__ZTV8S7276C13__8S7276C128S7276C10__7S7276C1[8]),  8,10},
  {&(_tg__ZTV7S7276C5__8S7276C128S7276C10__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C128S7276C10__7S7276C1[6]),  6,8},
  {&(_tg__ZTV8S7276C14__8S7276C128S7276C10__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C58S7276C14__A2__8S7276C128S7276C10__7S7276C1[2]),  2,4},
  {&(_tg__ZTV8S7276C17__8S7276C128S7276C10__7S7276C1[5]),  5,7},
  {&(_tg__ZTV8S7276C11__A1__8S7276C128S7276C10__7S7276C1[4]),  4,6},
  {&(_tg__ZTV7S7276C7__A__8S7276C128S7276C10__7S7276C1[5]),  5,7},
  {&(_tg__ZTV8S7276C11__8S7276C10__7S7276C1[4]),  4,6},
  {&(_tg__ZTV7S7276C5__8S7276C10__7S7276C1[3]),  3,5},
  {&(_tg__ZTV8S7276C13__8S7276C10__7S7276C1[8]),  8,10},
  {&(_tg__ZTV7S7276C7__8S7276C10__7S7276C1[6]),  6,8},
  {&(_tg__ZTV8S7276C14__8S7276C10__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C58S7276C14__A2__8S7276C10__7S7276C1[2]),  2,4},
  {&(_tg__ZTV8S7276C178S7276C12__8S7276C10__7S7276C1[5]),  5,7},
  {&(_tg__ZTV7S7276C78S7276C12__A1__8S7276C10__7S7276C1[5]),  5,7},
  {&(_tg__ZTV8S7276C16__A1__8S7276C10__7S7276C1[8]),  8,10},
  {&(_tg__ZTV8S7276C11__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C11__7S7276C1[3]),  3,5},
  {&(_tg__ZTV8S7276C13__7S7276C1[7]),  7,9},
  {&(_tg__ZTV8S7276C118S7276C13__A1__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C118S7276C13__A1__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C5__8S7276C13__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C13__7S7276C1[6]),  6,8},
  {&(_tg__ZTV8S7276C14__8S7276C13__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C58S7276C14__A2__8S7276C13__7S7276C1[2]),  2,4},
  {&(_tg__ZTV8S7276C16__A1__7S7276C1[7]),  7,9},
  {&(_tg__ZTV7S7276C38S7276C16__A2__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C7__7S7276C38S7276C16__A2__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C38S7276C16__A2__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C7__8S7276C16__A1__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C5__8S7276C16__A1__7S7276C1[3]),  3,5},
  {&(_tg__ZTV8S7276C20__7S7276C1[9]),  9,11},
  {&(_tg__ZTV8S7276C20__7S7276C1[9]),  9,11},
  {&(_tg__ZTV7S7276C3__8S7276C20__7S7276C1[7]),  7,9},
  {&(_tg__ZTV7S7276C7__8S7276C20__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__8S7276C20__7S7276C1[3]),  3,5},
  {&(_tg__ZTV7S7276C2__A1__7S7276C1[7]),  7,9},
  {&(_tg__ZTV7S7276C3__7S7276C2__A1__7S7276C1[7]),  7,9},
  {&(_tg__ZTV7S7276C7__7S7276C2__A1__7S7276C1[6]),  6,8},
  {&(_tg__ZTV7S7276C5__A1__7S7276C2__A1__7S7276C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7276C1[];
extern  VTBL_ENTRY _ZTV7S7276C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7276C1[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C20D0Ev,_ZTv0_n32_N8S7276C20D0Ev), // 
  (VTBL_ENTRY)_ZN8S7276C20D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C20D1Ev,_ZTv0_n32_N8S7276C20D1Ev), // 
  (VTBL_ENTRY)_ZN8S7276C20D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C13D0Ev,_ZTv0_n12_N8S7276C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C13D0Ev,_ZThn36_N8S7276C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C13D1Ev,_ZTv0_n12_N8S7276C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C13D1Ev,_ZThn36_N8S7276C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C10D0Ev,_ZTv0_n12_N8S7276C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7276C10D0Ev,_ZThn140_N8S7276C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C10D1Ev,_ZTv0_n12_N8S7276C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7276C10D1Ev,_ZThn140_N8S7276C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C10D0Ev,_ZTv0_n32_N8S7276C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S7276C10D0Ev,_ZThn176_N8S7276C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7276C10D0Ev,_ZThn104_N8S7276C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C10D1Ev,_ZTv0_n32_N8S7276C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S7276C10D1Ev,_ZThn176_N8S7276C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7276C10D1Ev,_ZThn104_N8S7276C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C10D0Ev,_ZTv0_n16_N8S7276C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7276C10D0Ev,_ZThn92_N8S7276C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C10D1Ev,_ZTv0_n16_N8S7276C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7276C10D1Ev,_ZThn92_N8S7276C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C12D0Ev,_ZTv0_n16_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7276C12D0Ev,_ZThn92_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C12D1Ev,_ZTv0_n16_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7276C12D1Ev,_ZThn92_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C12D0Ev,_ZTv0_n12_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7276C12D0Ev,_ZThn140_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C12D1Ev,_ZTv0_n12_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7276C12D1Ev,_ZThn140_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C12D0Ev,_ZTv0_n32_N8S7276C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7276C12D0Ev,_ZThn104_N8S7276C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7276C12D1Ev,_ZTv0_n32_N8S7276C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7276C12D1Ev,_ZThn104_N8S7276C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C17D0Ev,_ZTv0_n16_N8S7276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7276C17D0Ev,_ZThn60_N8S7276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7276C17D1Ev,_ZTv0_n16_N8S7276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7276C17D1Ev,_ZThn60_N8S7276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D0Ev,_ZTv0_n12_N7S7276C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D0Ev,_ZThn12_N7S7276C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C7D1Ev,_ZTv0_n12_N7S7276C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C7D1Ev,_ZThn12_N7S7276C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D0Ev,_ZTv0_n12_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D0Ev,_ZThn20_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C3D1Ev,_ZTv0_n12_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C3D1Ev,_ZThn20_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D0Ev,_ZTv0_n24_N7S7276C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7276C3D0Ev,_ZThn8_N7S7276C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C3D1Ev,_ZTv0_n24_N7S7276C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7276C3D1Ev,_ZThn8_N7S7276C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C18D0Ev,_ZTv0_n12_N8S7276C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C18D0Ev,_ZThn32_N8S7276C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C18D1Ev,_ZTv0_n12_N8S7276C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C18D1Ev,_ZThn32_N8S7276C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D0Ev,_ZTv0_n12_N8S7276C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C11D0Ev,_ZThn32_N8S7276C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7276C11D1Ev,_ZTv0_n12_N8S7276C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7276C11D1Ev,_ZThn32_N8S7276C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C2D0Ev,_ZTv0_n12_N7S7276C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7276C2D0Ev,_ZThn36_N7S7276C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C2D1Ev,_ZTv0_n12_N7S7276C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7276C2D1Ev,_ZThn36_N7S7276C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C2D0Ev,_ZTv0_n24_N7S7276C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C2D0Ev,_ZThn24_N7S7276C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C2D1Ev,_ZTv0_n24_N7S7276C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C2D1Ev,_ZThn24_N7S7276C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7276C2D0Ev,_ZTv0_n28_N7S7276C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C2D0Ev,_ZThn16_N7S7276C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7276C2D1Ev,_ZTv0_n28_N7S7276C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C2D1Ev,_ZThn16_N7S7276C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7276C1D0Ev,_ZTv0_n32_N7S7276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7276C1D0Ev,_ZThn256_N7S7276C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7276C1D0Ev,_ZThn224_N7S7276C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7276C1D0Ev,_ZThn152_N7S7276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7276C1D1Ev,_ZTv0_n32_N7S7276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7276C1D1Ev,_ZThn256_N7S7276C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7276C1D1Ev,_ZThn224_N7S7276C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7276C1D1Ev,_ZThn152_N7S7276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7276C1D0Ev,_ZTv0_n16_N7S7276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7276C1D0Ev,_ZThn140_N7S7276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7276C1D1Ev,_ZTv0_n16_N7S7276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7276C1D1Ev,_ZThn140_N7S7276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7276C1D0Ev,_ZTv0_n48_N7S7276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7276C1D0Ev,_ZThn48_N7S7276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7276C1D1Ev,_ZTv0_n48_N7S7276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7276C1D1Ev,_ZThn48_N7S7276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C1D0Ev,_ZTv0_n12_N7S7276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7276C1D0Ev,_ZThn188_N7S7276C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7276C1D0Ev,_ZThn36_N7S7276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7276C1D1Ev,_ZTv0_n12_N7S7276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7276C1D1Ev,_ZThn188_N7S7276C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7276C1D1Ev,_ZThn36_N7S7276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C1D0Ev,_ZTv0_n24_N7S7276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C1D0Ev,_ZThn24_N7S7276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7276C1D1Ev,_ZTv0_n24_N7S7276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7276C1D1Ev,_ZThn24_N7S7276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7276C1D0Ev,_ZTv0_n28_N7S7276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C1D0Ev,_ZThn16_N7S7276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7276C1D1Ev,_ZTv0_n28_N7S7276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7276C1D1Ev,_ZThn16_N7S7276C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7276C1 = {  "S7276C1", // class name
  bases_S7276C1, 52,
  &(vtc_S7276C1[0]), // expected_vtbl_contents
  &(vtt_S7276C1[0]), // expected_vtt_contents
  ABISELECT(384,260), // object size
  NSPAIRA(_ZTI7S7276C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7276C1),127, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7276C1),84, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C5  : S2014C38 {
  ::S2014C38 s7275c5f0;
  virtual  ~S7275C5(); // _ZN7S7275C5D1Ev
  S7275C5(); // tgen
};
//SIG(-1 S7275C5) C1{ BC2{ m} vd FC2}


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

static void Test_S7275C5()
{
  extern Class_Descriptor cd_S7275C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7275C5, buf);
    S7275C5 *dp, &lv = *(dp=new (buf) S7275C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7275C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C5)");
    check_base_class_offset(lv, (S2014C38*), 0, "S7275C5");
    check_field_offset(lv, s7275c5f0, ABISELECT(8,4), "S7275C5.s7275c5f0");
    test_class_info(&lv, &cd_S7275C5);
    dp->~S7275C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C5(Test_S7275C5, "S7275C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7275C5C1Ev();
extern void _ZN7S7275C5D1Ev();
Name_Map name_map_S7275C5[] = {
  NSPAIR(_ZN7S7275C5C1Ev),
  NSPAIR(_ZN7S7275C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S7275C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7275C5[];
extern void _ZN7S7275C5D1Ev();
extern void _ZN7S7275C5D0Ev();
static  VTBL_ENTRY vtc_S7275C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C5[0]),
  (VTBL_ENTRY)&_ZN7S7275C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
Class_Descriptor cd_S7275C5 = {  "S7275C5", // class name
  bases_S7275C5, 1,
  &(vtc_S7275C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7275C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7275C5),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  S7275C7  : virtual S2014C28 , virtual S7275C5 , virtual S3222C8_nt {
  void *s7275c7f0;
  ::S19762C18_nt s7275c7f1;
  virtual  ~S7275C7(); // _ZN7S7275C7D2Ev
  S7275C7(); // tgen
};
//SIG(-1 S7275C7) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S7275C7()
{
  extern Class_Descriptor cd_S7275C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7275C7, buf);
    S7275C7 *dp, &lv = *(dp=new (buf) S7275C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7275C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C7)");
    check_base_class_offset(lv, (S2014C28*), 0, "S7275C7");
    check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(24,12), "S7275C7");
    check_base_class_offset(lv, (S7275C5*), ABISELECT(24,12), "S7275C7");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S7275C7");
    check_field_offset(lv, s7275c7f0, ABISELECT(8,4), "S7275C7.s7275c7f0");
    check_field_offset(lv, s7275c7f1, ABISELECT(16,8), "S7275C7.s7275c7f1");
    test_class_info(&lv, &cd_S7275C7);
    dp->~S7275C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C7(Test_S7275C7, "S7275C7", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S7275C7C1Ev();
extern void _ZN7S7275C7D2Ev();
Name_Map name_map_S7275C7[] = {
  NSPAIR(_ZN7S7275C7C1Ev),
  NSPAIR(_ZN7S7275C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S7275C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7275C7[];
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C7[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S7275C7[];
static  VTT_ENTRY vtt_S7275C7[] = {
  {&(_ZTV7S7275C7[5]),  5,12},
  {&(_ZTV7S7275C7[10]),  10,12},
};
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C7 = {  "S7275C7", // class name
  bases_S7275C7, 4,
  &(vtc_S7275C7[0]), // expected_vtbl_contents
  &(vtt_S7275C7[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S7275C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7275C7),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7275C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C3  : S2014C38 , S7275C5 , virtual S2014C28 , virtual S7275C7 {
  virtual  ~S7275C3(); // _ZN7S7275C3D2Ev
  S7275C3(); // tgen
};
//SIG(-1 S7275C3) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S7275C3()
{
  extern Class_Descriptor cd_S7275C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S7275C3, buf);
    S7275C3 *dp, &lv = *(dp=new (buf) S7275C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S7275C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C3)");
    /*is_ambiguous_... S7275C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S7275C3");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), 0, "S7275C3");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*), 0, "S7275C3");
    check_base_class_offset(lv, (S2014C28*), 0, "S7275C3");
    check_base_class_offset(lv, (S2014C28*)(S7275C7*), 0, "S7275C3");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(40,20), "S7275C3");
    check_base_class_offset(lv, (S7275C5*)(S7275C7*), ABISELECT(40,20), "S7275C3");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*), ABISELECT(52,28), "S7275C3");
    check_base_class_offset(lv, (S7275C7*), ABISELECT(16,8), "S7275C3");
    test_class_info(&lv, &cd_S7275C3);
    dp->~S7275C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C3(Test_S7275C3, "S7275C3", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S7275C3C1Ev();
extern void _ZN7S7275C3D2Ev();
Name_Map name_map_S7275C3[] = {
  NSPAIR(_ZN7S7275C3C1Ev),
  NSPAIR(_ZN7S7275C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
static Base_Class bases_S7275C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7275C7,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7275C3[];
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7275C3D1Ev,_ZThn8_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7275C3D0Ev,_ZThn8_N7S7275C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn20_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn20_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C3[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S7275C3[];
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C3[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C7__7S7275C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
static  VTT_ENTRY vtt_S7275C3[] = {
  {&(_ZTV7S7275C3[6]),  6,21},
  {&(_ZTV7S7275C3[14]),  14,21},
  {&(_ZTV7S7275C3[19]),  19,21},
  {&(_tg__ZTV7S7275C7__7S7275C3[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C7__7S7275C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn20_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn20_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7275C3D0Ev,_ZThn8_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7275C3D1Ev,_ZThn8_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C3 = {  "S7275C3", // class name
  bases_S7275C3, 8,
  &(vtc_S7275C3[0]), // expected_vtbl_contents
  &(vtt_S7275C3[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S7275C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7275C3),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7275C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C2  : virtual S7275C3 {
  virtual  ~S7275C2(); // _ZN7S7275C2D2Ev
  S7275C2(); // tgen
};
//SIG(-1 S7275C2) C1{ VBC2{ BC3{ m} BC4{ BC3 vd FC3} VBC5{ m} VBC6{ VBC5 VBC4 VBC7{ m Fi} vd Fp FC8{}} vd} vd}


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

static void Test_S7275C2()
{
  extern Class_Descriptor cd_S7275C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7275C2, buf);
    S7275C2 *dp, &lv = *(dp=new (buf) S7275C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7275C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C2)");
    /*is_ambiguous_... S7275C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C3*), ABISELECT(17,9), "S7275C2");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C3*), ABISELECT(8,4), "S7275C2");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C3*), ABISELECT(8,4), "S7275C2");
    check_base_class_offset(lv, (S2014C28*)(S7275C3*), 0, "S7275C2");
    check_base_class_offset(lv, (S2014C28*)(S7275C7*), 0, "S7275C2");
    /*is_ambiguous_... S7275C2::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(48,24), "S7275C2");
    check_base_class_offset(lv, (S7275C5*)(S7275C7*), ABISELECT(48,24), "S7275C2");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*), ABISELECT(60,32), "S7275C2");
    check_base_class_offset(lv, (S7275C7*)(S7275C3*), ABISELECT(24,12), "S7275C2");
    check_base_class_offset(lv, (S7275C3*), ABISELECT(8,4), "S7275C2");
    test_class_info(&lv, &cd_S7275C2);
    dp->~S7275C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C2(Test_S7275C2, "S7275C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S7275C2C1Ev();
extern void _ZN7S7275C2D2Ev();
Name_Map name_map_S7275C2[] = {
  NSPAIR(_ZN7S7275C2C1Ev),
  NSPAIR(_ZN7S7275C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
extern Class_Descriptor cd_S7275C3;
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
static Base_Class bases_S7275C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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_S7275C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(48,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7275C7,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //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
    8, //immediately_derived
  0, 1},
  {&cd_S7275C3,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7275C2[];
extern void _ZN7S7275C2D1Ev();
extern void _ZN7S7275C2D0Ev();
extern void ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7275C2D1Ev,_ZThn4_N7S7275C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7275C2D0Ev,_ZThn4_N7S7275C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C2D1Ev,_ZThn12_N7S7275C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C2D0Ev,_ZThn12_N7S7275C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7275C2D1Ev,_ZThn24_N7S7275C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7275C2D0Ev,_ZThn24_N7S7275C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C2[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&_ZN7S7275C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7275C2[];
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C3__7S7275C2[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7275C3D1Ev,_ZThn8_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7275C3D0Ev,_ZThn8_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C3__7S7275C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn20_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn20_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C3__7S7275C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C2[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C7__7S7275C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
static  VTT_ENTRY vtt_S7275C2[] = {
  {&(_ZTV7S7275C2[7]),  7,31},
  {&(_ZTV7S7275C2[16]),  16,31},
  {&(_ZTV7S7275C2[24]),  24,31},
  {&(_ZTV7S7275C2[29]),  29,31},
  {&(_tg__ZTV7S7275C3__7S7275C2[6]),  6,8},
  {&(_tg__ZTV7S7275C7__7S7275C3__7S7275C2[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C3__7S7275C2[3]),  3,5},
  {&(_tg__ZTV7S7275C7__7S7275C2[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C7__7S7275C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7275C2[];
extern  VTBL_ENTRY _ZTV7S7275C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C2[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn20_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn20_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7275C3D0Ev,_ZThn8_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7275C3D1Ev,_ZThn8_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7275C2D0Ev,_ZThn24_N7S7275C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7275C2D1Ev,_ZThn24_N7S7275C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C2D0Ev,_ZThn12_N7S7275C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C2D1Ev,_ZThn12_N7S7275C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7275C2D0Ev,_ZThn4_N7S7275C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7275C2D1Ev,_ZThn4_N7S7275C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C2 = {  "S7275C2", // class name
  bases_S7275C2, 9,
  &(vtc_S7275C2[0]), // expected_vtbl_contents
  &(vtt_S7275C2[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S7275C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7275C2),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7275C2),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C11  : virtual S7275C5 {
  __tsi64 s7275c11f0;
  ~S7275C11(); // tgen
  S7275C11(); // tgen
};
//SIG(-1 S7275C11) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S7275C11()
{
  extern Class_Descriptor cd_S7275C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7275C11, buf);
    S7275C11 *dp, &lv = *(dp=new (buf) S7275C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7275C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C11)");
    check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(16,12), "S7275C11");
    check_base_class_offset(lv, (S7275C5*), ABISELECT(16,12), "S7275C11");
    check_field_offset(lv, s7275c11f0, ABISELECT(8,4), "S7275C11.s7275c11f0");
    test_class_info(&lv, &cd_S7275C11);
    dp->~S7275C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C11(Test_S7275C11, "S7275C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S7275C11C1Ev();
extern void _ZN8S7275C11D1Ev();
Name_Map name_map_S7275C11[] = {
  NSPAIR(_ZN8S7275C11C1Ev),
  NSPAIR(_ZN8S7275C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
static Base_Class bases_S7275C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C11[];
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7275C11D1Ev,_ZThn12_N8S7275C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7275C11D0Ev,_ZThn12_N8S7275C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C11[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7275C11[];
static  VTT_ENTRY vtt_S7275C11[] = {
  {&(_ZTV8S7275C11[3]),  3,10},
  {&(_ZTV8S7275C11[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C11D0Ev,_ZThn12_N8S7275C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C11D1Ev,_ZThn12_N8S7275C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C11 = {  "S7275C11", // class name
  bases_S7275C11, 2,
  &(vtc_S7275C11[0]), // expected_vtbl_contents
  &(vtt_S7275C11[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S7275C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7275C11),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7275C11),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C15  : S2014C28 , S7275C5 , S2014C38 , S3222C8_nt {
  short s7275c15f0:16;
  long s7275c15f1;
  ~S7275C15(); // tgen
  S7275C15(); // tgen
};
//SIG(-1 S7275C15) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 Fl}


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

static void Test_S7275C15()
{
  extern Class_Descriptor cd_S7275C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7275C15, buf);
    S7275C15 *dp, &lv = *(dp=new (buf) S7275C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7275C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C15)");
    check_base_class_offset(lv, (S2014C28*), 0, "S7275C15");
    check_base_class_offset(lv, (S2014C38*)(S7275C5*), 0, "S7275C15");
    check_base_class_offset(lv, (S7275C5*), 0, "S7275C15");
    /*is_ambiguous_... S7275C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S7275C15");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S7275C15");
    set_bf_and_test(lv, s7275c15f0, ABISELECT(16,12), 0, 16, 1, "S7275C15");
    set_bf_and_test(lv, s7275c15f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S7275C15");
    check_field_offset(lv, s7275c15f1, ABISELECT(24,16), "S7275C15.s7275c15f1");
    test_class_info(&lv, &cd_S7275C15);
    dp->~S7275C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C15(Test_S7275C15, "S7275C15", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S7275C15C1Ev();
extern void _ZN8S7275C15D1Ev();
Name_Map name_map_S7275C15[] = {
  NSPAIR(_ZN8S7275C15C1Ev),
  NSPAIR(_ZN8S7275C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S7275C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C15[];
extern void _ZN8S7275C15D1Ev();
extern void _ZN8S7275C15D0Ev();
static  VTBL_ENTRY vtc_S7275C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C15[0]),
  (VTBL_ENTRY)&_ZN8S7275C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C15D0Ev,
};
extern VTBL_ENTRY _ZTI8S7275C15[];
extern  VTBL_ENTRY _ZTV8S7275C15[];
Class_Descriptor cd_S7275C15 = {  "S7275C15", // class name
  bases_S7275C15, 5,
  &(vtc_S7275C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S7275C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7275C15),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  S7275C14  : S7275C15 , S7275C5 {
  int s7275c14f0;
  ~S7275C14(); // tgen
  S7275C14(); // tgen
};
//SIG(-1 S7275C14) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 Fl} BC4 Fi}


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

static void Test_S7275C14()
{
  extern Class_Descriptor cd_S7275C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S7275C14, buf);
    S7275C14 *dp, &lv = *(dp=new (buf) S7275C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S7275C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C14)");
    check_base_class_offset(lv, (S2014C28*)(S7275C15*), 0, "S7275C14");
    check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C15*), 0, "S7275C14");
    check_base_class_offset(lv, (S7275C5*)(S7275C15*), 0, "S7275C14");
    /*is_ambiguous_... S7275C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C15*), ABISELECT(9,5), "S7275C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C15*), ABISELECT(12,8), "S7275C14");
    check_base_class_offset(lv, (S7275C15*), 0, "S7275C14");
    /*is_ambiguous_... S7275C14::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(32,20), "S7275C14");
    /*is_ambiguous_... S7275C14::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*), ABISELECT(32,20), "S7275C14");
    check_field_offset(lv, s7275c14f0, ABISELECT(44,28), "S7275C14.s7275c14f0");
    test_class_info(&lv, &cd_S7275C14);
    dp->~S7275C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C14(Test_S7275C14, "S7275C14", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S7275C14C1Ev();
extern void _ZN8S7275C14D1Ev();
Name_Map name_map_S7275C14[] = {
  NSPAIR(_ZN8S7275C14C1Ev),
  NSPAIR(_ZN8S7275C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C15;
extern VTBL_ENTRY _ZTI8S7275C15[];
extern  VTBL_ENTRY _ZTV8S7275C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
static Base_Class bases_S7275C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S7275C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(32,20), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C14[];
extern void _ZN8S7275C14D1Ev();
extern void _ZN8S7275C14D0Ev();
extern void ABISELECT(_ZThn32_N8S7275C14D1Ev,_ZThn20_N8S7275C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S7275C14D0Ev,_ZThn20_N8S7275C14D0Ev)();
static  VTBL_ENTRY vtc_S7275C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C14[0]),
  (VTBL_ENTRY)&_ZN8S7275C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C14D0Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7275C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7275C14D1Ev,_ZThn20_N8S7275C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7275C14D0Ev,_ZThn20_N8S7275C14D0Ev),
};
extern VTBL_ENTRY _ZTI8S7275C14[];
extern  VTBL_ENTRY _ZTV8S7275C14[];
Class_Descriptor cd_S7275C14 = {  "S7275C14", // class name
  bases_S7275C14, 8,
  &(vtc_S7275C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S7275C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7275C14),8, //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  S7275C13  : S7275C11 , virtual S2014C28 , virtual S3222C8_nt , virtual S7275C7 , virtual S7275C14 {
  long s7275c13f0;
  ::S7275C11 s7275c13f1;
  virtual  ~S7275C13(); // _ZN8S7275C13D2Ev
  S7275C13(); // tgen
};
//SIG(-1 S7275C13) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 Fl} BC3 Fi} vd Fl FC2}


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

static void Test_S7275C13()
{
  extern Class_Descriptor cd_S7275C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S7275C13, buf);
    S7275C13 *dp, &lv = *(dp=new (buf) S7275C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S7275C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C13)");
    /*is_ambiguous_... S7275C13::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(56,36), "S7275C13");
    check_base_class_offset(lv, (S7275C5*)(S7275C11*), ABISELECT(56,36), "S7275C13");
    check_base_class_offset(lv, (S7275C5*)(S7275C7*), ABISELECT(56,36), "S7275C13");
    check_base_class_offset(lv, (S7275C11*), 0, "S7275C13");
    /*is_ambiguous_... S7275C13::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), 0, "S7275C13");
    check_base_class_offset(lv, (S2014C28*)(S7275C7*), 0, "S7275C13");
    /*is_ambiguous_... S7275C13::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S7275C13");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*), ABISELECT(68,44), "S7275C13");
    check_base_class_offset(lv, (S7275C7*), ABISELECT(72,48), "S7275C13");
    check_base_class_offset(lv, (S2014C28*)(S7275C15*)(S7275C14*), ABISELECT(96,60), "S7275C13");
    check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(96,60), "S7275C13");
    check_base_class_offset(lv, (S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(96,60), "S7275C13");
    /*is_ambiguous_... S7275C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C15*)(S7275C14*), ABISELECT(105,65), "S7275C13");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C15*)(S7275C14*), ABISELECT(108,68), "S7275C13");
    check_base_class_offset(lv, (S7275C15*)(S7275C14*), ABISELECT(96,60), "S7275C13");
    /*is_ambiguous_... S7275C14::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C14*), ABISELECT(128,80), "S7275C13");
    /*is_ambiguous_... S7275C14::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C14*), ABISELECT(128,80), "S7275C13");
    check_base_class_offset(lv, (S7275C14*), ABISELECT(96,60), "S7275C13");
    check_field_offset(lv, s7275c13f0, ABISELECT(16,12), "S7275C13.s7275c13f0");
    check_field_offset(lv, s7275c13f1, ABISELECT(24,16), "S7275C13.s7275c13f1");
    test_class_info(&lv, &cd_S7275C13);
    dp->~S7275C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C13(Test_S7275C13, "S7275C13", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN8S7275C13C1Ev();
extern void _ZN8S7275C13D2Ev();
Name_Map name_map_S7275C13[] = {
  NSPAIR(_ZN8S7275C13C1Ev),
  NSPAIR(_ZN8S7275C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C15;
extern VTBL_ENTRY _ZTI8S7275C15[];
extern  VTBL_ENTRY _ZTV8S7275C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C14;
extern VTBL_ENTRY _ZTI8S7275C14[];
extern  VTBL_ENTRY _ZTV8S7275C14[];
static Base_Class bases_S7275C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7275C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7275C7,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7275C15,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(128,80), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7275C14,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C13[];
extern void _ZN8S7275C13D1Ev();
extern void _ZN8S7275C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C13D1Ev,_ZThn36_N8S7275C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7275C13D0Ev,_ZThn36_N8S7275C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev)();
extern void ABISELECT(_ZThn72_N8S7275C13D1Ev,_ZThn48_N8S7275C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev)();
extern void ABISELECT(_ZThn72_N8S7275C13D0Ev,_ZThn48_N8S7275C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZThn96_N8S7275C13D1Ev,_ZThn60_N8S7275C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev)();
extern void ABISELECT(_ZThn96_N8S7275C13D0Ev,_ZThn60_N8S7275C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S7275C13D1Ev,_ZTvn20_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7275C13D0Ev,_ZTvn20_n12_N8S7275C13D0Ev)();
static  VTBL_ENTRY vtc_S7275C13[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&_ZN8S7275C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C13D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C13D1Ev,_ZTvn20_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C13D0Ev,_ZTvn20_n12_N8S7275C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S7275C13[];
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C11__8S7275C13[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C11D1Ev,_ZThn36_N8S7275C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S7275C11D0Ev,_ZThn36_N8S7275C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C11__8S7275C13[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C13[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C7__8S7275C13[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
static  VTT_ENTRY vtt_S7275C13[] = {
  {&(_ZTV8S7275C13[7]),  7,31},
  {&(_tg__ZTV8S7275C11__8S7275C13[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C11__8S7275C13[3]),  3,5},
  {&(_ZTV8S7275C13[12]),  12,31},
  {&(_ZTV8S7275C13[20]),  20,31},
  {&(_ZTV8S7275C13[25]),  25,31},
  {&(_ZTV8S7275C13[29]),  29,31},
  {&(_tg__ZTV7S7275C7__8S7275C13[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C7__8S7275C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7275C13[];
extern  VTBL_ENTRY _ZTV8S7275C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C13[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C11D0Ev,_ZThn36_N8S7275C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C11D1Ev,_ZThn36_N8S7275C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7275C13D0Ev,_ZThn48_N8S7275C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7275C13D1Ev,_ZThn48_N8S7275C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7275C13D0Ev,_ZThn60_N8S7275C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C13D0Ev,_ZThn36_N8S7275C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7275C13D1Ev,_ZThn60_N8S7275C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C13D1Ev,_ZThn36_N8S7275C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C13 = {  "S7275C13", // class name
  bases_S7275C13, 15,
  &(vtc_S7275C13[0]), // expected_vtbl_contents
  &(vtt_S7275C13[0]), // expected_vtt_contents
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI8S7275C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7275C13),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7275C13),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C16  : virtual S7275C7 , S7275C3 , virtual S2014C38 {
  ::S3222C8_nt s7275c16f0[6];
  virtual  ~S7275C16(); // _ZN8S7275C16D2Ev
  S7275C16(); // tgen
};
//SIG(-1 S7275C16) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S7275C16()
{
  extern Class_Descriptor cd_S7275C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S7275C16, buf);
    S7275C16 *dp, &lv = *(dp=new (buf) S7275C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S7275C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C16)");
    check_base_class_offset(lv, (S2014C28*)(S7275C7*), 0, "S7275C16");
    check_base_class_offset(lv, (S2014C28*)(S7275C3*), 0, "S7275C16");
    /*is_ambiguous_... S7275C16::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(64,44), "S7275C16");
    check_base_class_offset(lv, (S7275C5*)(S7275C7*), ABISELECT(64,44), "S7275C16");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*), ABISELECT(76,52), "S7275C16");
    check_base_class_offset(lv, (S7275C7*), ABISELECT(40,32), "S7275C16");
    check_base_class_offset(lv, (S7275C7*)(S7275C3*), ABISELECT(40,32), "S7275C16");
    /*is_ambiguous_... S7275C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C3*), ABISELECT(9,5), "S7275C16");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C3*), 0, "S7275C16");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C3*), 0, "S7275C16");
    check_base_class_offset(lv, (S7275C3*), 0, "S7275C16");
    /*is_ambiguous_... S7275C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(80,56), "S7275C16");
    check_field_offset(lv, s7275c16f0, ABISELECT(12,8), "S7275C16.s7275c16f0");
    test_class_info(&lv, &cd_S7275C16);
    dp->~S7275C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C16(Test_S7275C16, "S7275C16", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN8S7275C16C1Ev();
extern void _ZN8S7275C16D2Ev();
Name_Map name_map_S7275C16[] = {
  NSPAIR(_ZN8S7275C16C1Ev),
  NSPAIR(_ZN8S7275C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C3;
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S7275C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7275C7,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7275C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C16[];
extern void _ZN8S7275C16D1Ev();
extern void _ZN8S7275C16D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev)();
extern void ABISELECT(_ZThn40_N8S7275C16D1Ev,_ZThn32_N8S7275C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev)();
extern void ABISELECT(_ZThn40_N8S7275C16D0Ev,_ZThn32_N8S7275C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev)();
extern void ABISELECT(_ZThn64_N8S7275C16D1Ev,_ZThn44_N8S7275C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev)();
extern void ABISELECT(_ZThn64_N8S7275C16D0Ev,_ZThn44_N8S7275C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C16[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&_ZN8S7275C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C16D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev),
};
extern VTBL_ENTRY _ZTV8S7275C16[];
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C3__8S7275C16[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn32_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn32_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C3__8S7275C16[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S7275C3D1Ev,_ZThn44_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S7275C3D0Ev,_ZThn44_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C3__8S7275C16[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C16[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C7__8S7275C16[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
static  VTT_ENTRY vtt_S7275C16[] = {
  {&(_ZTV8S7275C16[7]),  7,22},
  {&(_tg__ZTV7S7275C3__8S7275C16[6]),  6,8},
  {&(_tg__ZTV7S7275C7__7S7275C3__8S7275C16[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C3__8S7275C16[3]),  3,5},
  {&(_ZTV8S7275C16[15]),  15,22},
  {&(_ZTV8S7275C16[20]),  20,22},
  {&(_tg__ZTV7S7275C7__8S7275C16[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C7__8S7275C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7275C16[];
extern  VTBL_ENTRY _ZTV8S7275C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C16[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7275C3D0Ev,_ZThn44_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7275C3D1Ev,_ZThn44_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn32_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn32_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7275C16D0Ev,_ZThn44_N8S7275C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7275C16D1Ev,_ZThn44_N8S7275C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7275C16D0Ev,_ZThn32_N8S7275C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7275C16D1Ev,_ZThn32_N8S7275C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C16 = {  "S7275C16", // class name
  bases_S7275C16, 10,
  &(vtc_S7275C16[0]), // expected_vtbl_contents
  &(vtt_S7275C16[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI8S7275C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7275C16),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7275C16),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C17  : virtual S7275C11 , virtual S3222C8_nt {
  unsigned char s7275c17f0:1;
  ~S7275C17(); // tgen
  S7275C17(); // tgen
};
//SIG(-1 S7275C17) C1{ VBC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m Fi} Fc:1}


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

static void Test_S7275C17()
{
  extern Class_Descriptor cd_S7275C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S7275C17, buf);
    S7275C17 *dp, &lv = *(dp=new (buf) S7275C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S7275C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C17)");
    check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(32,20), "S7275C17");
    check_base_class_offset(lv, (S7275C5*)(S7275C11*), ABISELECT(32,20), "S7275C17");
    check_base_class_offset(lv, (S7275C11*), ABISELECT(16,8), "S7275C17");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(44,28), "S7275C17");
    set_bf_and_test(lv, s7275c17f0, ABISELECT(8,4), 0, 1, 1, "S7275C17");
    test_class_info(&lv, &cd_S7275C17);
    dp->~S7275C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C17(Test_S7275C17, "S7275C17", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S7275C17C1Ev();
extern void _ZN8S7275C17D1Ev();
Name_Map name_map_S7275C17[] = {
  NSPAIR(_ZN8S7275C17C1Ev),
  NSPAIR(_ZN8S7275C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S7275C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7275C11,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(44,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C17[];
extern void _ZN8S7275C17D1Ev();
extern void _ZN8S7275C17D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev)();
extern void ABISELECT(_ZThn16_N8S7275C17D1Ev,_ZThn8_N8S7275C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev)();
extern void ABISELECT(_ZThn16_N8S7275C17D0Ev,_ZThn8_N8S7275C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S7275C17D1Ev,_ZThn20_N8S7275C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev)();
extern void ABISELECT(_ZThn32_N8S7275C17D0Ev,_ZThn20_N8S7275C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C17[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&_ZN8S7275C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C17D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev),
};
extern VTBL_ENTRY _ZTV8S7275C17[];
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C11__8S7275C17[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7275C11D1Ev,_ZThn12_N8S7275C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7275C11D0Ev,_ZThn12_N8S7275C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C11__8S7275C17[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
static  VTT_ENTRY vtt_S7275C17[] = {
  {&(_ZTV8S7275C17[5]),  5,18},
  {&(_ZTV8S7275C17[11]),  11,18},
  {&(_ZTV8S7275C17[16]),  16,18},
  {&(_tg__ZTV8S7275C11__8S7275C17[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C11__8S7275C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7275C17[];
extern  VTBL_ENTRY _ZTV8S7275C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C17[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C11D0Ev,_ZThn12_N8S7275C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C11D1Ev,_ZThn12_N8S7275C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7275C17D0Ev,_ZThn20_N8S7275C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7275C17D1Ev,_ZThn20_N8S7275C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C17D0Ev,_ZThn8_N8S7275C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C17D1Ev,_ZThn8_N8S7275C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C17 = {  "S7275C17", // class name
  bases_S7275C17, 4,
  &(vtc_S7275C17[0]), // expected_vtbl_contents
  &(vtt_S7275C17[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S7275C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7275C17),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7275C17),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C12  : virtual S7275C13 , S7275C16 , S7275C17 , S7275C7 {
  ~S7275C12(); // tgen
  S7275C12(); // tgen
};
//SIG(-1 S7275C12) C1{ VBC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 Fl} BC4 Fi} vd Fl FC3} BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} BC14{ VBC3 VBC7 Fc:1} BC8}


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

static void Test_S7275C12()
{
  extern Class_Descriptor cd_S7275C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,40)];
    init_test(&cd_S7275C12, buf);
    S7275C12 *dp, &lv = *(dp=new (buf) S7275C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,156), "sizeof(S7275C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C12)");
    /*is_ambiguous_... S7275C12::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(136,88), "S7275C12");
    check_base_class_offset(lv, (S7275C5*)(S7275C11*)(S7275C13*), ABISELECT(136,88), "S7275C12");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C7*), ABISELECT(136,88), "S7275C12");
    /*is_ambiguous_... S7275C12::S7275C11 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C11*), ABISELECT(136,88), "S7275C12");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C7*), ABISELECT(136,88), "S7275C12");
    check_base_class_offset(lv, (S7275C11*)(S7275C13*), ABISELECT(80,52), "S7275C12");
    /*is_ambiguous_... S7275C13::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C13*), 0, "S7275C12");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C7*), 0, "S7275C12");
    check_base_class_offset(lv, (S2014C28*)(S7275C3*)(S7275C16*), 0, "S7275C12");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C7*), 0, "S7275C12");
    /*is_ambiguous_... S7275C13::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C13*), ABISELECT(148,96), "S7275C12");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*), ABISELECT(148,96), "S7275C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C17*), ABISELECT(148,96), "S7275C12");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*), ABISELECT(148,96), "S7275C12");
    check_base_class_offset(lv, (S7275C7*)(S7275C13*), ABISELECT(152,100), "S7275C12");
    check_base_class_offset(lv, (S7275C7*)(S7275C16*), ABISELECT(152,100), "S7275C12");
    check_base_class_offset(lv, (S7275C7*)(S7275C3*)(S7275C16*), ABISELECT(152,100), "S7275C12");
    check_base_class_offset(lv, (S2014C28*)(S7275C15*)(S7275C14*), ABISELECT(176,112), "S7275C12");
    check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(176,112), "S7275C12");
    check_base_class_offset(lv, (S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(176,112), "S7275C12");
    /*is_ambiguous_... S7275C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C15*)(S7275C14*), ABISELECT(185,117), "S7275C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C15*)(S7275C14*), ABISELECT(188,120), "S7275C12");
    check_base_class_offset(lv, (S7275C15*)(S7275C14*), ABISELECT(176,112), "S7275C12");
    /*is_ambiguous_... S7275C14::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C14*), ABISELECT(208,132), "S7275C12");
    /*is_ambiguous_... S7275C14::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C14*), ABISELECT(208,132), "S7275C12");
    check_base_class_offset(lv, (S7275C14*)(S7275C13*), ABISELECT(176,112), "S7275C12");
    check_base_class_offset(lv, (S7275C13*), ABISELECT(80,52), "S7275C12");
    /*is_ambiguous_... S7275C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C3*)(S7275C16*), ABISELECT(9,5), "S7275C12");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C3*)(S7275C16*), 0, "S7275C12");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C3*)(S7275C16*), 0, "S7275C12");
    check_base_class_offset(lv, (S7275C3*)(S7275C16*), 0, "S7275C12");
    /*is_ambiguous_... S7275C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C16*), ABISELECT(224,144), "S7275C12");
    check_base_class_offset(lv, (S7275C16*), 0, "S7275C12");
    check_base_class_offset(lv, (S7275C11*)(S7275C17*), ABISELECT(224,144), "S7275C12");
    check_base_class_offset(lv, (S7275C17*), ABISELECT(40,32), "S7275C12");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S7275C7*), ABISELECT(56,40), "S7275C12");
    test_class_info(&lv, &cd_S7275C12);
    dp->~S7275C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C12(Test_S7275C12, "S7275C12", ABISELECT(240,156));

#else // __cplusplus

extern void _ZN8S7275C12C1Ev();
extern void _ZN8S7275C12D1Ev();
Name_Map name_map_S7275C12[] = {
  NSPAIR(_ZN8S7275C12C1Ev),
  NSPAIR(_ZN8S7275C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C15;
extern VTBL_ENTRY _ZTI8S7275C15[];
extern  VTBL_ENTRY _ZTV8S7275C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C14;
extern VTBL_ENTRY _ZTI8S7275C14[];
extern  VTBL_ENTRY _ZTV8S7275C14[];
extern Class_Descriptor cd_S7275C13;
extern VTBL_ENTRY _ZTI8S7275C13[];
extern  VTBL_ENTRY _ZTV8S7275C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C3;
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C16;
extern VTBL_ENTRY _ZTI8S7275C16[];
extern  VTBL_ENTRY _ZTV8S7275C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C16[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
extern Class_Descriptor cd_S7275C17;
extern VTBL_ENTRY _ZTI8S7275C17[];
extern  VTBL_ENTRY _ZTV8S7275C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C17[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
static Base_Class bases_S7275C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(136,88), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7275C11,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(148,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7275C7,    ABISELECT(152,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(185,117), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(188,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
    11, //immediately_derived
  0, 0},
  {&cd_S7275C15,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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
    13, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(208,132), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7275C14,    ABISELECT(176,112), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7275C13,    ABISELECT(80,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7275C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7275C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7275C11,    ABISELECT(224,144), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S7275C17,    ABISELECT(40,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7275C7,    ABISELECT(56,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C12[];
extern void _ZN8S7275C12D1Ev();
extern void _ZN8S7275C12D0Ev();
extern void ABISELECT(_ZThn40_N8S7275C12D1Ev,_ZThn32_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S7275C12D0Ev,_ZThn32_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn56_N8S7275C12D1Ev,_ZThn40_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C12D0Ev,_ZThn40_N8S7275C12D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S7275C12D1Ev,_ZTv0_n32_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn80_N8S7275C12D1Ev,_ZThn52_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7275C12D0Ev,_ZTv0_n32_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn80_N8S7275C12D0Ev,_ZThn52_N8S7275C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn136_N8S7275C12D1Ev,_ZThn88_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn136_N8S7275C12D0Ev,_ZThn88_N8S7275C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C12D1Ev,_ZTv0_n24_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn152_N8S7275C12D1Ev,_ZThn100_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C12D0Ev,_ZTv0_n24_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn152_N8S7275C12D0Ev,_ZThn100_N8S7275C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn176_N8S7275C12D1Ev,_ZThn112_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn176_N8S7275C12D0Ev,_ZThn112_N8S7275C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S7275C12D1Ev,_ZTvn20_n12_N8S7275C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7275C12D0Ev,_ZTvn20_n12_N8S7275C12D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7275C12D1Ev,_ZTv0_n16_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn224_N8S7275C12D1Ev,_ZThn144_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7275C12D0Ev,_ZTv0_n16_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn224_N8S7275C12D0Ev,_ZThn144_N8S7275C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C12[] = {
  ABISELECT(224,144),
  ABISELECT(176,112),
  ABISELECT(80,52),
  ABISELECT(224,144),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&_ZN8S7275C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C12D0Ev,
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,112),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C12D1Ev,_ZThn32_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C12D0Ev,_ZThn32_N8S7275C12D0Ev),
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C12D1Ev,_ZThn40_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C12D0Ev,_ZThn40_N8S7275C12D0Ev),
  ABISELECT(-80,-52),
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C12D1Ev,_ZTv0_n32_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C12D0Ev,_ZTv0_n32_N8S7275C12D0Ev),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev),
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C12D1Ev,_ZTv0_n24_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C12D0Ev,_ZTv0_n24_N8S7275C12D0Ev),
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C12D1Ev,_ZTvn20_n12_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C12D0Ev,_ZTvn20_n12_N8S7275C12D0Ev),
  ABISELECT(-224,-144),
  ABISELECT(-88,-56),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C12D1Ev,_ZTv0_n16_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C12D0Ev,_ZTv0_n16_N8S7275C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S7275C12[];
extern void _ZN8S7275C16D1Ev();
extern void _ZN8S7275C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C16__8S7275C12[] = {
  ABISELECT(224,144),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&_ZN8S7275C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C16D0Ev,
};
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C38S7275C16__8S7275C12[] = {
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn152_N7S7275C3D1Ev,_ZThn100_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn152_N7S7275C3D0Ev,_ZThn100_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C38S7275C16__8S7275C12[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn136_N7S7275C3D1Ev,_ZThn88_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn136_N7S7275C3D0Ev,_ZThn88_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C38S7275C16__8S7275C12[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev)();
extern void ABISELECT(_ZThn152_N8S7275C16D1Ev,_ZThn100_N8S7275C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev)();
extern void ABISELECT(_ZThn152_N8S7275C16D0Ev,_ZThn100_N8S7275C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C16__8S7275C12[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev)();
extern void ABISELECT(_ZThn136_N8S7275C16D1Ev,_ZThn88_N8S7275C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev)();
extern void ABISELECT(_ZThn136_N8S7275C16D0Ev,_ZThn88_N8S7275C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C16__8S7275C12[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev),
};
extern void _ZN8S7275C17D1Ev();
extern void _ZN8S7275C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C17__8S7275C12[] = {
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&_ZN8S7275C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C17D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev)();
extern void ABISELECT(_ZThn184_N8S7275C17D1Ev,_ZThn112_N8S7275C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev)();
extern void ABISELECT(_ZThn184_N8S7275C17D0Ev,_ZThn112_N8S7275C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C11__8S7275C17__8S7275C12[] = {
  ABISELECT(-184,-112),
  ABISELECT(-88,-56),
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S7275C17D1Ev,_ZThn56_N8S7275C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev)();
extern void ABISELECT(_ZThn96_N8S7275C17D0Ev,_ZThn56_N8S7275C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C17__8S7275C12[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C7__A__8S7275C12[] = {
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZThn80_N7S7275C7D1Ev,_ZThn48_N7S7275C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
extern void ABISELECT(_ZThn80_N7S7275C7D0Ev,_ZThn48_N7S7275C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C7__A__8S7275C12[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
extern void _ZN8S7275C13D1Ev();
extern void _ZN8S7275C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C13__8S7275C12[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&_ZN8S7275C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C13D0Ev,
};
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C118S7275C13__8S7275C12[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C11D1Ev,_ZThn36_N8S7275C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S7275C11D0Ev,_ZThn36_N8S7275C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C118S7275C13__8S7275C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C13D1Ev,_ZThn36_N8S7275C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7275C13D0Ev,_ZThn36_N8S7275C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C13__8S7275C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev)();
extern void ABISELECT(_ZThn72_N8S7275C13D1Ev,_ZThn48_N8S7275C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev)();
extern void ABISELECT(_ZThn72_N8S7275C13D0Ev,_ZThn48_N8S7275C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C13__8S7275C12[] = {
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZThn96_N8S7275C13D1Ev,_ZThn60_N8S7275C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev)();
extern void ABISELECT(_ZThn96_N8S7275C13D0Ev,_ZThn60_N8S7275C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C14__8S7275C13__8S7275C12[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7275C13D1Ev,_ZTvn20_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7275C13D0Ev,_ZTvn20_n12_N8S7275C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C58S7275C14__A2__8S7275C13__8S7275C12[] = {
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C13D1Ev,_ZTvn20_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C13D0Ev,_ZTvn20_n12_N8S7275C13D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C12[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C7__8S7275C12[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C11__A1__8S7275C12[] = {
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C11__A1__8S7275C12[] = {
  ABISELECT(88,56),
  ABISELECT(88,56),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
static  VTT_ENTRY vtt_S7275C12[] = {
  {&(_ZTV8S7275C12[10]),  10,64},
  {&(_tg__ZTV8S7275C16__8S7275C12[7]),  7,9},
  {&(_tg__ZTV7S7275C38S7275C16__8S7275C12[6]),  6,8},
  {&(_tg__ZTV7S7275C7__7S7275C38S7275C16__8S7275C12[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C38S7275C16__8S7275C12[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C16__8S7275C12[6]),  6,8},
  {&(_tg__ZTV7S7275C5__8S7275C16__8S7275C12[3]),  3,5},
  {&(_tg__ZTV8S7275C17__8S7275C12[5]),  5,7},
  {&(_tg__ZTV8S7275C11__8S7275C17__8S7275C12[4]),  4,6},
  {&(_tg__ZTV7S7275C5__8S7275C17__8S7275C12[3]),  3,5},
  {&(_tg__ZTV7S7275C7__A__8S7275C12[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C7__A__8S7275C12[3]),  3,5},
  {&(_ZTV8S7275C12[34]),  34,64},
  {&(_ZTV8S7275C12[39]),  39,64},
  {&(_ZTV8S7275C12[47]),  47,64},
  {&(_ZTV8S7275C12[52]),  52,64},
  {&(_ZTV8S7275C12[56]),  56,64},
  {&(_ZTV8S7275C12[17]),  17,64},
  {&(_ZTV8S7275C12[62]),  62,64},
  {&(_ZTV8S7275C12[24]),  24,64},
  {&(_tg__ZTV8S7275C13__8S7275C12[7]),  7,9},
  {&(_tg__ZTV8S7275C118S7275C13__8S7275C12[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C118S7275C13__8S7275C12[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C13__8S7275C12[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C13__8S7275C12[6]),  6,8},
  {&(_tg__ZTV8S7275C14__8S7275C13__8S7275C12[3]),  3,5},
  {&(_tg__ZTV7S7275C58S7275C14__A2__8S7275C13__8S7275C12[2]),  2,4},
  {&(_tg__ZTV7S7275C7__8S7275C12[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C7__8S7275C12[3]),  3,5},
  {&(_tg__ZTV8S7275C11__A1__8S7275C12[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C11__A1__8S7275C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7275C12[];
extern  VTBL_ENTRY _ZTV8S7275C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C12[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7275C13D0Ev,_ZThn48_N8S7275C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7275C13D1Ev,_ZThn48_N8S7275C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7275C13D0Ev,_ZThn60_N8S7275C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C13D0Ev,_ZThn36_N8S7275C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7275C13D1Ev,_ZThn60_N8S7275C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C13D1Ev,_ZThn36_N8S7275C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C11D0Ev,_ZThn36_N8S7275C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C11D1Ev,_ZThn36_N8S7275C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7275C7D0Ev,_ZThn48_N7S7275C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7275C7D1Ev,_ZThn48_N7S7275C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7275C17D0Ev,_ZThn56_N8S7275C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7275C17D1Ev,_ZThn56_N8S7275C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S7275C17D0Ev,_ZThn112_N8S7275C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S7275C17D1Ev,_ZThn112_N8S7275C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7275C16D0Ev,_ZThn88_N8S7275C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7275C16D1Ev,_ZThn88_N8S7275C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7275C16D0Ev,_ZThn100_N8S7275C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7275C16D1Ev,_ZThn100_N8S7275C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7275C3D0Ev,_ZThn88_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7275C3D1Ev,_ZThn88_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S7275C3D0Ev,_ZThn100_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S7275C3D1Ev,_ZThn100_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C12D0Ev,_ZTv0_n16_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7275C12D0Ev,_ZThn144_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C12D1Ev,_ZTv0_n16_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7275C12D1Ev,_ZThn144_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C12D0Ev,_ZTv0_n24_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7275C12D0Ev,_ZThn100_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C12D1Ev,_ZTv0_n24_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7275C12D1Ev,_ZThn100_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7275C12D0Ev,_ZThn112_N8S7275C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7275C12D0Ev,_ZThn88_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7275C12D1Ev,_ZThn112_N8S7275C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7275C12D1Ev,_ZThn88_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C12D0Ev,_ZTv0_n32_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7275C12D0Ev,_ZThn52_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C12D1Ev,_ZTv0_n32_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7275C12D1Ev,_ZThn52_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C12 = {  "S7275C12", // class name
  bases_S7275C12, 25,
  &(vtc_S7275C12[0]), // expected_vtbl_contents
  &(vtt_S7275C12[0]), // expected_vtt_contents
  ABISELECT(240,156), // object size
  NSPAIRA(_ZTI8S7275C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7275C12),64, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7275C12),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C10  : virtual S7275C11 , S7275C12 , S7275C14 , S2014C38 , virtual S7275C16 {
  virtual  ~S7275C10(); // _ZN8S7275C10D2Ev
  S7275C10(); // tgen
};
//SIG(-1 S7275C10) C1{ VBC2{ VBC3{ BC4{ m} vd FC4} FL} BC5{ VBC6{ BC2 VBC7{ m} VBC8{ m Fi} VBC9{ VBC7 VBC3 VBC8 vd Fp FC10{}} VBC11{ BC12{ BC7 BC3 BC4 BC8 Fs:16 Fl} BC3 Fi} vd Fl FC2} BC13{ VBC9 BC14{ BC4 BC3 VBC7 VBC9 vd} VBC4 vd FC8[6]} BC15{ VBC2 VBC8 Fc:1} BC9} BC11 BC4 VBC13 vd}


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

static void Test_S7275C10()
{
  extern Class_Descriptor cd_S7275C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,57)];
    init_test(&cd_S7275C10, buf);
    S7275C10 *dp, &lv = *(dp=new (buf) S7275C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,224), "sizeof(S7275C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C10)");
    /*is_ambiguous_... S7275C10::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(144,96), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C11 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C11*), ABISELECT(144,96), "S7275C10");
    check_base_class_offset(lv, (S7275C5*)(S7275C11*)(S7275C13*), ABISELECT(144,96), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C7 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C7*), ABISELECT(144,96), "S7275C10");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C7*)(S7275C12*), ABISELECT(144,96), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C11 */ AMB_check_base_class_offset(lv, (S7275C11*), ABISELECT(128,84), "S7275C10");
    check_base_class_offset(lv, (S7275C11*)(S7275C17*)(S7275C12*), ABISELECT(128,84), "S7275C10");
    check_base_class_offset(lv, (S7275C11*)(S7275C13*), ABISELECT(160,104), "S7275C10");
    /*is_ambiguous_... S7275C13::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C13*), 0, "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C7*), 0, "S7275C10");
    check_base_class_offset(lv, (S2014C28*)(S7275C3*)(S7275C16*)(S7275C12*), 0, "S7275C10");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C7*)(S7275C12*), 0, "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C3*)(S7275C16*), 0, "S7275C10");
    /*is_ambiguous_... S7275C13::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C13*), ABISELECT(216,140), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*), ABISELECT(216,140), "S7275C10");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C17*)(S7275C12*), ABISELECT(216,140), "S7275C10");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*)(S7275C12*), ABISELECT(216,140), "S7275C10");
    check_base_class_offset(lv, (S7275C7*)(S7275C13*), ABISELECT(224,144), "S7275C10");
    check_base_class_offset(lv, (S7275C7*)(S7275C16*)(S7275C12*), ABISELECT(224,144), "S7275C10");
    check_base_class_offset(lv, (S7275C7*)(S7275C3*)(S7275C16*)(S7275C12*), ABISELECT(224,144), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C7*)(S7275C16*), ABISELECT(224,144), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C7*)(S7275C3*)(S7275C16*), ABISELECT(224,144), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C15*)(S7275C14*), ABISELECT(248,156), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(248,156), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(248,156), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C15*)(S7275C14*), ABISELECT(257,161), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C15*)(S7275C14*), ABISELECT(260,164), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C15*)(S7275C14*), ABISELECT(248,156), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C14*), ABISELECT(280,176), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C14*), ABISELECT(280,176), "S7275C10");
    check_base_class_offset(lv, (S7275C14*)(S7275C13*), ABISELECT(248,156), "S7275C10");
    check_base_class_offset(lv, (S7275C13*)(S7275C12*), ABISELECT(160,104), "S7275C10");
    /*is_ambiguous_... S7275C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C3*)(S7275C16*)(S7275C12*), ABISELECT(9,5), "S7275C10");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C3*)(S7275C16*)(S7275C12*), 0, "S7275C10");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C3*)(S7275C16*)(S7275C12*), 0, "S7275C10");
    check_base_class_offset(lv, (S7275C3*)(S7275C16*)(S7275C12*), 0, "S7275C10");
    /*is_ambiguous_... S7275C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C16*)(S7275C12*), ABISELECT(296,188), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C16*), ABISELECT(296,188), "S7275C10");
    check_base_class_offset(lv, (S7275C16*)(S7275C12*), 0, "S7275C10");
    check_base_class_offset(lv, (S7275C17*)(S7275C12*), ABISELECT(40,32), "S7275C10");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S7275C7*)(S7275C12*), ABISELECT(56,40), "S7275C10");
    check_base_class_offset(lv, (S7275C12*), 0, "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C15*)(S7275C14*), ABISELECT(80,52), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(80,52), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(80,52), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C15*)(S7275C14*), ABISELECT(89,57), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C15*)(S7275C14*), ABISELECT(92,60), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C15*)(S7275C14*), ABISELECT(80,52), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C14*), ABISELECT(112,72), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C14*), ABISELECT(112,72), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C14*), ABISELECT(80,52), "S7275C10");
    /*is_ambiguous_... S7275C10::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(128,84), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C3*)(S7275C16*), ABISELECT(313,197), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C3*)(S7275C16*), ABISELECT(304,192), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C3*)(S7275C16*), ABISELECT(304,192), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C3*)(S7275C16*), ABISELECT(304,192), "S7275C10");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C16*), ABISELECT(304,192), "S7275C10");
    test_class_info(&lv, &cd_S7275C10);
    dp->~S7275C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C10(Test_S7275C10, "S7275C10", ABISELECT(344,224));

#else // __cplusplus

extern void _ZN8S7275C10C1Ev();
extern void _ZN8S7275C10D2Ev();
Name_Map name_map_S7275C10[] = {
  NSPAIR(_ZN8S7275C10C1Ev),
  NSPAIR(_ZN8S7275C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C15;
extern VTBL_ENTRY _ZTI8S7275C15[];
extern  VTBL_ENTRY _ZTV8S7275C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C14;
extern VTBL_ENTRY _ZTI8S7275C14[];
extern  VTBL_ENTRY _ZTV8S7275C14[];
extern Class_Descriptor cd_S7275C13;
extern VTBL_ENTRY _ZTI8S7275C13[];
extern  VTBL_ENTRY _ZTV8S7275C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C3;
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C16;
extern VTBL_ENTRY _ZTI8S7275C16[];
extern  VTBL_ENTRY _ZTV8S7275C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C16[];
extern Class_Descriptor cd_S7275C17;
extern VTBL_ENTRY _ZTI8S7275C17[];
extern  VTBL_ENTRY _ZTV8S7275C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C17[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
extern Class_Descriptor cd_S7275C12;
extern VTBL_ENTRY _ZTI8S7275C12[];
extern  VTBL_ENTRY _ZTV8S7275C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C15;
extern VTBL_ENTRY _ZTI8S7275C15[];
extern  VTBL_ENTRY _ZTV8S7275C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C14;
extern VTBL_ENTRY _ZTI8S7275C14[];
extern  VTBL_ENTRY _ZTV8S7275C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C3;
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
extern Class_Descriptor cd_S7275C16;
extern VTBL_ENTRY _ZTI8S7275C16[];
extern  VTBL_ENTRY _ZTV8S7275C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C16[];
static Base_Class bases_S7275C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    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
    1, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(144,96), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7275C11,    ABISELECT(128,84), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7275C11,    ABISELECT(160,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(216,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7275C7,    ABISELECT(224,144), //bcp->offset
    56, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(248,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(248,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(248,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(257,161), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(260,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7275C15,    ABISELECT(248,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(280,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(280,176), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7275C14,    ABISELECT(248,156), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7275C13,    ABISELECT(160,104), //bcp->offset
    46, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7275C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S7275C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(296,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S7275C16,    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
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7275C17,    ABISELECT(40,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7275C7,    ABISELECT(56,40), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7275C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(89,57), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(92,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7275C15,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(112,72), //bcp->offset
    31, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7275C14,    ABISELECT(80,52), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(313,197), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7275C3,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S7275C16,    ABISELECT(304,192), //bcp->offset
    73, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C10[];
extern void _ZN8S7275C10D1Ev();
extern void _ZN8S7275C10D0Ev();
extern void ABISELECT(_ZThn40_N8S7275C10D1Ev,_ZThn32_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S7275C10D0Ev,_ZThn32_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S7275C10D1Ev,_ZThn40_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C10D0Ev,_ZThn40_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn80_N8S7275C10D1Ev,_ZThn52_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn80_N8S7275C10D0Ev,_ZThn52_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn112_N8S7275C10D1Ev,_ZThn72_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn112_N8S7275C10D0Ev,_ZThn72_N8S7275C10D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7275C10D1Ev,_ZTv0_n16_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn128_N8S7275C10D1Ev,_ZThn84_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7275C10D0Ev,_ZTv0_n16_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn128_N8S7275C10D0Ev,_ZThn84_N8S7275C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn144_N8S7275C10D1Ev,_ZThn96_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn144_N8S7275C10D0Ev,_ZThn96_N8S7275C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn160_N8S7275C10D1Ev,_ZThn104_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn160_N8S7275C10D0Ev,_ZThn104_N8S7275C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C10D1Ev,_ZTv0_n24_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S7275C10D1Ev,_ZThn144_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C10D0Ev,_ZTv0_n24_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn224_N8S7275C10D0Ev,_ZThn144_N8S7275C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn248_N8S7275C10D1Ev,_ZThn156_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn248_N8S7275C10D0Ev,_ZThn156_N8S7275C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S7275C10D1Ev,_ZTvn20_n12_N8S7275C10D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7275C10D0Ev,_ZTvn20_n12_N8S7275C10D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn304_N8S7275C10D1Ev,_ZThn192_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn304_N8S7275C10D0Ev,_ZThn192_N8S7275C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C10[] = {
  ABISELECT(304,192),
  ABISELECT(128,84),
  ABISELECT(248,156),
  ABISELECT(160,104),
  ABISELECT(296,188),
  ABISELECT(216,140),
  ABISELECT(144,96),
  ABISELECT(224,144),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&_ZN8S7275C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C10D0Ev,
  ABISELECT(176,108),
  ABISELECT(104,64),
  ABISELECT(88,52),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C10D1Ev,_ZThn32_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C10D0Ev,_ZThn32_N8S7275C10D0Ev),
  ABISELECT(160,100),
  ABISELECT(88,56),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C10D1Ev,_ZThn40_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C10D0Ev,_ZThn40_N8S7275C10D0Ev),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S7275C10D1Ev,_ZThn52_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S7275C10D0Ev,_ZThn52_N8S7275C10D0Ev),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S7275C10D1Ev,_ZThn72_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S7275C10D0Ev,_ZThn72_N8S7275C10D0Ev),
  ABISELECT(-128,-84),
  ABISELECT(16,12),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C10D1Ev,_ZTv0_n16_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C10D0Ev,_ZTv0_n16_N8S7275C10D0Ev),
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev),
  ABISELECT(-160,-104),
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-160,-104),
  ABISELECT(-16,-8),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev),
  ABISELECT(-224,-144),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-144),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C10D1Ev,_ZTv0_n24_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C10D0Ev,_ZTv0_n24_N8S7275C10D0Ev),
  ABISELECT(-248,-156),
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev),
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C10D1Ev,_ZTvn20_n12_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C10D0Ev,_ZTvn20_n12_N8S7275C10D0Ev),
  ABISELECT(-304,-192),
  ABISELECT(-8,-4),
  ABISELECT(-88,-52),
  ABISELECT(-160,-96),
  ABISELECT(-80,-48),
  ABISELECT(-304,-192),
  ABISELECT(-304,-192),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S7275C10[];
extern void _ZN8S7275C12D1Ev();
extern void _ZN8S7275C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C12__8S7275C10[] = {
  ABISELECT(128,84),
  ABISELECT(248,156),
  ABISELECT(160,104),
  ABISELECT(296,188),
  ABISELECT(216,140),
  ABISELECT(144,96),
  ABISELECT(224,144),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&_ZN8S7275C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C12D0Ev,
};
extern void _ZN8S7275C16D1Ev();
extern void _ZN8S7275C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C168S7275C12__8S7275C10[] = {
  ABISELECT(296,188),
  ABISELECT(216,140),
  ABISELECT(144,96),
  ABISELECT(224,144),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&_ZN8S7275C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C16D0Ev,
};
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C38S7275C168S7275C12__8S7275C10[] = {
  ABISELECT(216,140),
  ABISELECT(144,96),
  ABISELECT(224,144),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S7275C3D1Ev,_ZThn144_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn224_N7S7275C3D0Ev,_ZThn144_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C38S7275C168S7275C12__8S7275C10[] = {
  ABISELECT(-224,-144),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-144),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn144_N7S7275C3D1Ev,_ZThn96_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn144_N7S7275C3D0Ev,_ZThn96_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C38S7275C168S7275C12__8S7275C10[] = {
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev)();
extern void ABISELECT(_ZThn224_N8S7275C16D1Ev,_ZThn144_N8S7275C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev)();
extern void ABISELECT(_ZThn224_N8S7275C16D0Ev,_ZThn144_N8S7275C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C168S7275C12__8S7275C10[] = {
  ABISELECT(-224,-144),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-144),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev)();
extern void ABISELECT(_ZThn144_N8S7275C16D1Ev,_ZThn96_N8S7275C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev)();
extern void ABISELECT(_ZThn144_N8S7275C16D0Ev,_ZThn96_N8S7275C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C168S7275C12__8S7275C10[] = {
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev),
};
extern void _ZN8S7275C17D1Ev();
extern void _ZN8S7275C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C178S7275C12__8S7275C10[] = {
  ABISELECT(176,108),
  ABISELECT(104,64),
  ABISELECT(88,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&_ZN8S7275C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C17D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev)();
extern void ABISELECT(_ZThn88_N8S7275C17D1Ev,_ZThn52_N8S7275C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev)();
extern void ABISELECT(_ZThn88_N8S7275C17D0Ev,_ZThn52_N8S7275C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C11__8S7275C178S7275C12__8S7275C10[] = {
  ABISELECT(-88,-52),
  ABISELECT(16,12),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev)();
extern void ABISELECT(_ZThn104_N8S7275C17D1Ev,_ZThn64_N8S7275C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev)();
extern void ABISELECT(_ZThn104_N8S7275C17D0Ev,_ZThn64_N8S7275C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C178S7275C12__8S7275C10[] = {
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C78S7275C12__A1__8S7275C10[] = {
  ABISELECT(160,100),
  ABISELECT(88,56),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S7275C7D1Ev,_ZThn56_N7S7275C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S7275C7D0Ev,_ZThn56_N7S7275C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C78S7275C12__A1__8S7275C10[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7275C12D1Ev,_ZTv0_n32_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S7275C12D1Ev,_ZThn104_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7275C12D0Ev,_ZTv0_n32_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S7275C12D0Ev,_ZThn104_N8S7275C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C13__8S7275C12__8S7275C10[] = {
  ABISELECT(-160,-104),
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-160,-104),
  ABISELECT(-16,-8),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C12D1Ev,_ZTv0_n32_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C12D0Ev,_ZTv0_n32_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn144_N8S7275C12D1Ev,_ZThn96_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn144_N8S7275C12D0Ev,_ZThn96_N8S7275C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C12__8S7275C10[] = {
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C12D1Ev,_ZTv0_n24_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn224_N8S7275C12D1Ev,_ZThn144_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C12D0Ev,_ZTv0_n24_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn224_N8S7275C12D0Ev,_ZThn144_N8S7275C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C12__8S7275C10[] = {
  ABISELECT(-224,-144),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-144),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C12D1Ev,_ZTv0_n24_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C12D0Ev,_ZTv0_n24_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn248_N8S7275C12D1Ev,_ZThn156_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn248_N8S7275C12D0Ev,_ZThn156_N8S7275C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C14__8S7275C12__8S7275C10[] = {
  ABISELECT(-248,-156),
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7275C12D1Ev,_ZTvn20_n12_N8S7275C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7275C12D0Ev,_ZTvn20_n12_N8S7275C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C58S7275C14__A2__8S7275C12__8S7275C10[] = {
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C12D1Ev,_ZTvn20_n12_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C12D0Ev,_ZTvn20_n12_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZThn40_N8S7275C12D1Ev,_ZThn32_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S7275C12D0Ev,_ZThn32_N8S7275C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7275C17__8S7275C12__8S7275C10[] = {
  ABISELECT(176,108),
  ABISELECT(104,64),
  ABISELECT(88,52),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C12D1Ev,_ZThn32_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C12D0Ev,_ZThn32_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7275C12D1Ev,_ZTv0_n16_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn128_N8S7275C12D1Ev,_ZThn84_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7275C12D0Ev,_ZTv0_n16_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn128_N8S7275C12D0Ev,_ZThn84_N8S7275C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C11__A1__8S7275C12__8S7275C10[] = {
  ABISELECT(-128,-84),
  ABISELECT(16,12),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C12D1Ev,_ZTv0_n16_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C12D0Ev,_ZTv0_n16_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZThn56_N8S7275C12D1Ev,_ZThn40_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C12D0Ev,_ZThn40_N8S7275C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__A__8S7275C12__8S7275C10[] = {
  ABISELECT(160,100),
  ABISELECT(88,56),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C12D1Ev,_ZThn40_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C12D0Ev,_ZThn40_N8S7275C12D0Ev),
};
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C11__8S7275C10[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7275C11D1Ev,_ZThn12_N8S7275C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7275C11D0Ev,_ZThn12_N8S7275C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C11__8S7275C10[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
extern void _ZN8S7275C13D1Ev();
extern void _ZN8S7275C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C13__8S7275C10[] = {
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-160,-104),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&_ZN8S7275C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C13D0Ev,
};
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C118S7275C13__A1__8S7275C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C118S7275C13__A1__8S7275C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C13__8S7275C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev)();
extern void ABISELECT(_ZThn64_N8S7275C13D1Ev,_ZThn40_N8S7275C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev)();
extern void ABISELECT(_ZThn64_N8S7275C13D0Ev,_ZThn40_N8S7275C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C13__8S7275C10[] = {
  ABISELECT(-64,-40),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-144),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZThn88_N8S7275C13D1Ev,_ZThn52_N8S7275C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev)();
extern void ABISELECT(_ZThn88_N8S7275C13D0Ev,_ZThn52_N8S7275C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C14__8S7275C13__8S7275C10[] = {
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7275C13D1Ev,_ZTvn20_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7275C13D0Ev,_ZTvn20_n12_N8S7275C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C58S7275C14__A2__8S7275C13__8S7275C10[] = {
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C13D1Ev,_ZTvn20_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C13D0Ev,_ZTvn20_n12_N8S7275C13D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C7__8S7275C10[] = {
  ABISELECT(80,48),
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
extern void _ZN8S7275C16D1Ev();
extern void _ZN8S7275C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C16__A1__8S7275C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-88,-52),
  ABISELECT(-160,-96),
  ABISELECT(-80,-48),
  ABISELECT(-304,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&_ZN8S7275C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C16D0Ev,
};
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C38S7275C16__A1__8S7275C10[] = {
  ABISELECT(-88,-52),
  ABISELECT(-160,-96),
  ABISELECT(-80,-48),
  ABISELECT(-304,-192),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C38S7275C16__A1__8S7275C10[] = {
  ABISELECT(80,48),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-144),
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C38S7275C16__A1__8S7275C10[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C16__A1__8S7275C10[] = {
  ABISELECT(80,48),
  ABISELECT(-8,-4),
  ABISELECT(-80,-48),
  ABISELECT(-224,-144),
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C16__A1__8S7275C10[] = {
  ABISELECT(160,96),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev),
};
static  VTT_ENTRY vtt_S7275C10[] = {
  {&(_ZTV8S7275C10[11]),  11,83},
  {&(_tg__ZTV8S7275C12__8S7275C10[10]),  10,12},
  {&(_tg__ZTV8S7275C168S7275C12__8S7275C10[7]),  7,9},
  {&(_tg__ZTV7S7275C38S7275C168S7275C12__8S7275C10[6]),  6,8},
  {&(_tg__ZTV7S7275C7__7S7275C38S7275C168S7275C12__8S7275C10[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C38S7275C168S7275C12__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C168S7275C12__8S7275C10[6]),  6,8},
  {&(_tg__ZTV7S7275C5__8S7275C168S7275C12__8S7275C10[3]),  3,5},
  {&(_tg__ZTV8S7275C178S7275C12__8S7275C10[5]),  5,7},
  {&(_tg__ZTV8S7275C11__8S7275C178S7275C12__8S7275C10[4]),  4,6},
  {&(_tg__ZTV7S7275C5__8S7275C178S7275C12__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C78S7275C12__A1__8S7275C10[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C78S7275C12__A1__8S7275C10[3]),  3,5},
  {&(_tg__ZTV8S7275C13__8S7275C12__8S7275C10[8]),  8,10},
  {&(_tg__ZTV7S7275C5__8S7275C12__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C12__8S7275C10[6]),  6,8},
  {&(_tg__ZTV8S7275C14__8S7275C12__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C58S7275C14__A2__8S7275C12__8S7275C10[2]),  2,4},
  {&(_tg__ZTV8S7275C17__8S7275C12__8S7275C10[5]),  5,7},
  {&(_tg__ZTV8S7275C11__A1__8S7275C12__8S7275C10[4]),  4,6},
  {&(_tg__ZTV7S7275C7__A__8S7275C12__8S7275C10[5]),  5,7},
  {&(_ZTV8S7275C10[39]),  39,83},
  {&(_ZTV8S7275C10[44]),  44,83},
  {&(_ZTV8S7275C10[54]),  54,83},
  {&(_ZTV8S7275C10[62]),  62,83},
  {&(_ZTV8S7275C10[67]),  67,83},
  {&(_ZTV8S7275C10[71]),  71,83},
  {&(_ZTV8S7275C10[18]),  18,83},
  {&(_ZTV8S7275C10[25]),  25,83},
  {&(_ZTV8S7275C10[81]),  81,83},
  {&(_tg__ZTV8S7275C11__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C11__8S7275C10[3]),  3,5},
  {&(_tg__ZTV8S7275C13__8S7275C10[7]),  7,9},
  {&(_tg__ZTV8S7275C118S7275C13__A1__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C118S7275C13__A1__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C13__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C13__8S7275C10[6]),  6,8},
  {&(_tg__ZTV8S7275C14__8S7275C13__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C58S7275C14__A2__8S7275C13__8S7275C10[2]),  2,4},
  {&(_tg__ZTV7S7275C7__8S7275C10[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C7__8S7275C10[3]),  3,5},
  {&(_tg__ZTV8S7275C16__A1__8S7275C10[7]),  7,9},
  {&(_tg__ZTV7S7275C38S7275C16__A1__8S7275C10[6]),  6,8},
  {&(_tg__ZTV7S7275C7__7S7275C38S7275C16__A1__8S7275C10[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C38S7275C16__A1__8S7275C10[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C16__A1__8S7275C10[6]),  6,8},
  {&(_tg__ZTV7S7275C5__8S7275C16__A1__8S7275C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7275C10[];
extern  VTBL_ENTRY _ZTV8S7275C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C10[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7275C13D0Ev,_ZThn52_N8S7275C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7275C13D1Ev,_ZThn52_N8S7275C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7275C13D0Ev,_ZThn40_N8S7275C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7275C13D1Ev,_ZThn40_N8S7275C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C11D0Ev,_ZThn12_N8S7275C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C11D1Ev,_ZThn12_N8S7275C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C12D0Ev,_ZTv0_n16_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7275C12D0Ev,_ZThn84_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C12D1Ev,_ZTv0_n16_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7275C12D1Ev,_ZThn84_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C12D0Ev,_ZTv0_n24_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7275C12D0Ev,_ZThn144_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C12D1Ev,_ZTv0_n24_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7275C12D1Ev,_ZThn144_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7275C12D0Ev,_ZThn156_N8S7275C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7275C12D0Ev,_ZThn96_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7275C12D1Ev,_ZThn156_N8S7275C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7275C12D1Ev,_ZThn96_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C12D0Ev,_ZTv0_n32_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7275C12D0Ev,_ZThn104_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C12D1Ev,_ZTv0_n32_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7275C12D1Ev,_ZThn104_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7275C7D0Ev,_ZThn56_N7S7275C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7275C7D1Ev,_ZThn56_N7S7275C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7275C17D0Ev,_ZThn64_N8S7275C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7275C17D1Ev,_ZThn64_N8S7275C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7275C17D0Ev,_ZThn52_N8S7275C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7275C17D1Ev,_ZThn52_N8S7275C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7275C16D0Ev,_ZThn96_N8S7275C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7275C16D1Ev,_ZThn96_N8S7275C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7275C16D0Ev,_ZThn144_N8S7275C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7275C16D1Ev,_ZThn144_N8S7275C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7275C3D0Ev,_ZThn96_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7275C3D1Ev,_ZThn96_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7275C3D0Ev,_ZThn144_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7275C3D1Ev,_ZThn144_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C10D0Ev,_ZTv0_n24_N8S7275C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7275C10D0Ev,_ZThn144_N8S7275C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C10D1Ev,_ZTv0_n24_N8S7275C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7275C10D1Ev,_ZThn144_N8S7275C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S7275C10D0Ev,_ZThn192_N8S7275C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7275C10D0Ev,_ZThn104_N8S7275C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S7275C10D1Ev,_ZThn192_N8S7275C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7275C10D1Ev,_ZThn104_N8S7275C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7275C10D0Ev,_ZThn156_N8S7275C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7275C10D0Ev,_ZThn96_N8S7275C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7275C10D1Ev,_ZThn156_N8S7275C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7275C10D1Ev,_ZThn96_N8S7275C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C10D0Ev,_ZTv0_n16_N8S7275C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7275C10D0Ev,_ZThn84_N8S7275C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C10D1Ev,_ZTv0_n16_N8S7275C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7275C10D1Ev,_ZThn84_N8S7275C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C10 = {  "S7275C10", // class name
  bases_S7275C10, 41,
  &(vtc_S7275C10[0]), // expected_vtbl_contents
  &(vtt_S7275C10[0]), // expected_vtt_contents
  ABISELECT(344,224), // object size
  NSPAIRA(_ZTI8S7275C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7275C10),83, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7275C10),47, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C18  : S7275C11 {
  virtual  ~S7275C18(); // _ZN8S7275C18D2Ev
  S7275C18(); // tgen
};
//SIG(-1 S7275C18) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} vd}


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

static void Test_S7275C18()
{
  extern Class_Descriptor cd_S7275C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7275C18, buf);
    S7275C18 *dp, &lv = *(dp=new (buf) S7275C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7275C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C18)");
    check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(16,12), "S7275C18");
    check_base_class_offset(lv, (S7275C5*)(S7275C11*), ABISELECT(16,12), "S7275C18");
    check_base_class_offset(lv, (S7275C11*), 0, "S7275C18");
    test_class_info(&lv, &cd_S7275C18);
    dp->~S7275C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C18(Test_S7275C18, "S7275C18", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S7275C18C1Ev();
extern void _ZN8S7275C18D2Ev();
Name_Map name_map_S7275C18[] = {
  NSPAIR(_ZN8S7275C18C1Ev),
  NSPAIR(_ZN8S7275C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
static Base_Class bases_S7275C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7275C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C18[];
extern void _ZN8S7275C18D1Ev();
extern void _ZN8S7275C18D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7275C18D1Ev,_ZTv0_n12_N8S7275C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7275C18D1Ev,_ZThn12_N8S7275C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C18D0Ev,_ZTv0_n12_N8S7275C18D0Ev)();
extern void ABISELECT(_ZThn16_N8S7275C18D0Ev,_ZThn12_N8S7275C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C18[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C18[0]),
  (VTBL_ENTRY)&_ZN8S7275C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C18D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7275C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C18D1Ev,_ZTv0_n12_N8S7275C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C18D0Ev,_ZTv0_n12_N8S7275C18D0Ev),
};
extern VTBL_ENTRY _ZTV8S7275C18[];
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C11__8S7275C18[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7275C11D1Ev,_ZThn12_N8S7275C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7275C11D0Ev,_ZThn12_N8S7275C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C11__8S7275C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
static  VTT_ENTRY vtt_S7275C18[] = {
  {&(_ZTV8S7275C18[3]),  3,10},
  {&(_tg__ZTV8S7275C11__8S7275C18[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C11__8S7275C18[3]),  3,5},
  {&(_ZTV8S7275C18[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7275C18[];
extern  VTBL_ENTRY _ZTV8S7275C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C18[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C11D0Ev,_ZThn12_N8S7275C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C11D1Ev,_ZThn12_N8S7275C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C18D0Ev,_ZTv0_n12_N8S7275C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C18D0Ev,_ZThn12_N8S7275C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C18D1Ev,_ZTv0_n12_N8S7275C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7275C18D1Ev,_ZThn12_N8S7275C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C18 = {  "S7275C18", // class name
  bases_S7275C18, 3,
  &(vtc_S7275C18[0]), // expected_vtbl_contents
  &(vtt_S7275C18[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S7275C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7275C18),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7275C18),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C20  : virtual S7275C2 {
  ~S7275C20(); // tgen
  S7275C20(); // tgen
};
//SIG(-1 S7275C20) C1{ VBC2{ VBC3{ BC4{ m} BC5{ BC4 vd FC4} VBC6{ m} VBC7{ VBC6 VBC5 VBC8{ m Fi} vd Fp FC9{}} vd} vd}}


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

static void Test_S7275C20()
{
  extern Class_Descriptor cd_S7275C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7275C20, buf);
    S7275C20 *dp, &lv = *(dp=new (buf) S7275C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7275C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C20)");
    /*is_ambiguous_... S7275C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C3*), ABISELECT(17,9), "S7275C20");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C3*), ABISELECT(8,4), "S7275C20");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C3*), ABISELECT(8,4), "S7275C20");
    check_base_class_offset(lv, (S2014C28*)(S7275C3*), 0, "S7275C20");
    check_base_class_offset(lv, (S2014C28*)(S7275C7*), 0, "S7275C20");
    /*is_ambiguous_... S7275C20::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(48,24), "S7275C20");
    check_base_class_offset(lv, (S7275C5*)(S7275C7*), ABISELECT(48,24), "S7275C20");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*), ABISELECT(60,32), "S7275C20");
    check_base_class_offset(lv, (S7275C7*)(S7275C3*), ABISELECT(24,12), "S7275C20");
    check_base_class_offset(lv, (S7275C3*)(S7275C2*), ABISELECT(8,4), "S7275C20");
    check_base_class_offset(lv, (S7275C2*), 0, "S7275C20");
    test_class_info(&lv, &cd_S7275C20);
    dp->~S7275C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C20(Test_S7275C20, "S7275C20", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S7275C20C1Ev();
extern void _ZN8S7275C20D1Ev();
Name_Map name_map_S7275C20[] = {
  NSPAIR(_ZN8S7275C20C1Ev),
  NSPAIR(_ZN8S7275C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
extern Class_Descriptor cd_S7275C3;
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
extern Class_Descriptor cd_S7275C2;
extern VTBL_ENTRY _ZTI7S7275C2[];
extern  VTBL_ENTRY _ZTV7S7275C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C2[];
static Base_Class bases_S7275C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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_S7275C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(48,24), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7275C7,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7275C3,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7275C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7275C20[];
extern void _ZN8S7275C20D1Ev();
extern void _ZN8S7275C20D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7275C20D1Ev,_ZTv0_n28_N8S7275C20D1Ev)();
extern void ABISELECT(_ZThn8_N8S7275C20D1Ev,_ZThn4_N8S7275C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7275C20D0Ev,_ZTv0_n28_N8S7275C20D0Ev)();
extern void ABISELECT(_ZThn8_N8S7275C20D0Ev,_ZThn4_N8S7275C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C20D1Ev,_ZTv0_n24_N8S7275C20D1Ev)();
extern void ABISELECT(_ZThn24_N8S7275C20D1Ev,_ZThn12_N8S7275C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7275C20D0Ev,_ZTv0_n24_N8S7275C20D0Ev)();
extern void ABISELECT(_ZThn24_N8S7275C20D0Ev,_ZThn12_N8S7275C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C20D1Ev,_ZTv0_n12_N8S7275C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7275C20D1Ev,_ZThn24_N8S7275C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C20D0Ev,_ZTv0_n12_N8S7275C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7275C20D0Ev,_ZThn24_N8S7275C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C20[] = {
  0,
  0,
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C20[0]),
  (VTBL_ENTRY)&_ZN8S7275C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C20D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7275C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7275C20D1Ev,_ZTv0_n28_N8S7275C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7275C20D0Ev,_ZTv0_n28_N8S7275C20D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7275C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C20D1Ev,_ZTv0_n24_N8S7275C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C20D0Ev,_ZTv0_n24_N8S7275C20D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7275C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C20D1Ev,_ZTv0_n12_N8S7275C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C20D0Ev,_ZTv0_n12_N8S7275C20D0Ev),
};
extern VTBL_ENTRY _ZTV8S7275C20[];
extern void _ZN7S7275C2D1Ev();
extern void _ZN7S7275C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C2__8S7275C20[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&_ZN7S7275C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C2D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7275C2D1Ev,_ZThn4_N7S7275C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7275C2D0Ev,_ZThn4_N7S7275C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C3__7S7275C2__8S7275C20[] = {
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C2D1Ev,_ZThn12_N7S7275C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C2D0Ev,_ZThn12_N7S7275C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C2__8S7275C20[] = {
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7275C2D1Ev,_ZThn24_N7S7275C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7275C2D0Ev,_ZThn24_N7S7275C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C2__8S7275C20[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev),
};
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C3__8S7275C20[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7275C3D1Ev,_ZThn8_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7275C3D0Ev,_ZThn8_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C3__8S7275C20[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn20_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn20_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C3__8S7275C20[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C20[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C7__8S7275C20[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
static  VTT_ENTRY vtt_S7275C20[] = {
  {&(_ZTV8S7275C20[9]),  9,33},
  {&(_ZTV8S7275C20[9]),  9,33},
  {&(_ZTV8S7275C20[18]),  18,33},
  {&(_ZTV8S7275C20[26]),  26,33},
  {&(_ZTV8S7275C20[31]),  31,33},
  {&(_tg__ZTV7S7275C2__8S7275C20[7]),  7,9},
  {&(_tg__ZTV7S7275C3__7S7275C2__8S7275C20[7]),  7,9},
  {&(_tg__ZTV7S7275C7__7S7275C2__8S7275C20[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C2__8S7275C20[3]),  3,5},
  {&(_tg__ZTV7S7275C3__8S7275C20[6]),  6,8},
  {&(_tg__ZTV7S7275C7__7S7275C3__8S7275C20[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C3__8S7275C20[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C20[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C7__8S7275C20[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7275C20[];
extern  VTBL_ENTRY _ZTV8S7275C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C20[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn20_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn20_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7275C3D0Ev,_ZThn8_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7275C3D1Ev,_ZThn8_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7275C2D0Ev,_ZThn24_N7S7275C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7275C2D1Ev,_ZThn24_N7S7275C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C2D0Ev,_ZThn12_N7S7275C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C2D1Ev,_ZThn12_N7S7275C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7275C2D0Ev,_ZThn4_N7S7275C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7275C2D1Ev,_ZThn4_N7S7275C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C20D0Ev,_ZTv0_n12_N8S7275C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7275C20D0Ev,_ZThn24_N8S7275C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C20D1Ev,_ZTv0_n12_N8S7275C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7275C20D1Ev,_ZThn24_N8S7275C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C20D0Ev,_ZTv0_n24_N8S7275C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7275C20D0Ev,_ZThn12_N8S7275C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7275C20D1Ev,_ZTv0_n24_N8S7275C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7275C20D1Ev,_ZThn12_N8S7275C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7275C20D0Ev,_ZTv0_n28_N8S7275C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7275C20D0Ev,_ZThn4_N8S7275C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7275C20D1Ev,_ZTv0_n28_N8S7275C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7275C20D1Ev,_ZThn4_N8S7275C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C20 = {  "S7275C20", // class name
  bases_S7275C20, 10,
  &(vtc_S7275C20[0]), // expected_vtbl_contents
  &(vtt_S7275C20[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S7275C20),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7275C20),33, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7275C20),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7275C1  : S7275C2 , virtual S7275C10 , S7275C18 , virtual S2014C24 , virtual S7275C20 {
  ~S7275C1(); // tgen
  S7275C1(); // tgen
};
//SIG(1 S7275C1) C1{ BC2{ VBC3{ BC4{ m} BC5{ BC4 vd FC4} VBC6{ m} VBC7{ VBC6 VBC5 VBC8{ m Fi} vd Fp FC9{}} vd} vd} VBC10{ VBC11{ VBC5 FL} BC12{ VBC13{ BC11 VBC6 VBC8 VBC7 VBC14{ BC15{ BC6 BC5 BC4 BC8 Fs:16 Fl} BC5 Fi} vd Fl FC11} BC16{ VBC7 BC3 VBC4 vd FC8[6]} BC17{ VBC11 VBC8 Fc:1} BC7} BC14 BC4 VBC16 vd} BC18{ BC11 vd} VBC19{ m} VBC20{ VBC2}}


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

static void Test_S7275C1()
{
  extern Class_Descriptor cd_S7275C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,64)];
    init_test(&cd_S7275C1, buf);
    S7275C1 *dp, &lv = *(dp=new (buf) S7275C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,252), "sizeof(S7275C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7275C1)");
    /*is_ambiguous_... S7275C1::S7275C3 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C3*), ABISELECT(33,21), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C3 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C3*), ABISELECT(24,16), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C3 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C3*), ABISELECT(24,16), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C3 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C3*), 0, "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C7*), 0, "S7275C1");
    /*is_ambiguous_... S7275C13::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C13*), 0, "S7275C1");
    check_base_class_offset(lv, (S2014C28*)(S7275C3*)(S7275C16*)(S7275C12*)(S7275C10*), 0, "S7275C1");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C7*)(S7275C12*)(S7275C10*), 0, "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C16 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C3*)(S7275C16*), 0, "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*), ABISELECT(64,36), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C7 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C7*), ABISELECT(64,36), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C11 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C11*), ABISELECT(64,36), "S7275C1");
    check_base_class_offset(lv, (S7275C5*)(S7275C11*)(S7275C13*), ABISELECT(64,36), "S7275C1");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C7*)(S7275C12*)(S7275C10*), ABISELECT(64,36), "S7275C1");
    check_base_class_offset(lv, (S7275C5*)(S7275C11*)(S7275C18*), ABISELECT(64,36), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*), ABISELECT(76,44), "S7275C1");
    /*is_ambiguous_... S7275C13::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C13*), ABISELECT(76,44), "S7275C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S7275C17*)(S7275C12*)(S7275C10*), ABISELECT(76,44), "S7275C1");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C7*)(S7275C12*)(S7275C10*), ABISELECT(76,44), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C3 */ AMB_check_base_class_offset(lv, (S7275C7*)(S7275C3*), ABISELECT(40,24), "S7275C1");
    check_base_class_offset(lv, (S7275C7*)(S7275C13*), ABISELECT(40,24), "S7275C1");
    check_base_class_offset(lv, (S7275C7*)(S7275C16*)(S7275C12*)(S7275C10*), ABISELECT(40,24), "S7275C1");
    check_base_class_offset(lv, (S7275C7*)(S7275C3*)(S7275C16*)(S7275C12*)(S7275C10*), ABISELECT(40,24), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C7*)(S7275C16*), ABISELECT(40,24), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C7*)(S7275C3*)(S7275C16*), ABISELECT(40,24), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C2 */ AMB_check_base_class_offset(lv, (S7275C3*)(S7275C2*), ABISELECT(24,16), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C2 */ AMB_check_base_class_offset(lv, (S7275C3*)(S7275C2*), ABISELECT(24,16), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C2 */ AMB_check_base_class_offset(lv, (S7275C2*), 0, "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C11 */ AMB_check_base_class_offset(lv, (S7275C11*)(S7275C10*), ABISELECT(216,136), "S7275C1");
    check_base_class_offset(lv, (S7275C11*)(S7275C17*)(S7275C12*)(S7275C10*), ABISELECT(216,136), "S7275C1");
    check_base_class_offset(lv, (S7275C11*)(S7275C13*), ABISELECT(232,148), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C15*)(S7275C14*), ABISELECT(288,184), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(288,184), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C15*)(S7275C14*), ABISELECT(288,184), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C15*)(S7275C14*), ABISELECT(297,189), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C14 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C15*)(S7275C14*), ABISELECT(300,192), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C15*)(S7275C14*), ABISELECT(288,184), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C14*), ABISELECT(320,204), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C14*), ABISELECT(320,204), "S7275C1");
    check_base_class_offset(lv, (S7275C14*)(S7275C13*), ABISELECT(288,184), "S7275C1");
    check_base_class_offset(lv, (S7275C13*)(S7275C12*)(S7275C10*), ABISELECT(232,148), "S7275C1");
    /*is_ambiguous_... S7275C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C3*)(S7275C16*)(S7275C12*)(S7275C10*), ABISELECT(89,53), "S7275C1");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C3*)(S7275C16*)(S7275C12*)(S7275C10*), ABISELECT(80,48), "S7275C1");
    /*is_ambiguous_... S7275C3::S7275C5 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C3*)(S7275C16*)(S7275C12*)(S7275C10*), ABISELECT(80,48), "S7275C1");
    check_base_class_offset(lv, (S7275C3*)(S7275C16*)(S7275C12*)(S7275C10*), ABISELECT(80,48), "S7275C1");
    /*is_ambiguous_... S7275C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C16*)(S7275C12*)(S7275C10*), 0, "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C16*), 0, "S7275C1");
    check_base_class_offset(lv, (S7275C16*)(S7275C12*)(S7275C10*), ABISELECT(80,48), "S7275C1");
    check_base_class_offset(lv, (S7275C17*)(S7275C12*)(S7275C10*), ABISELECT(120,80), "S7275C1");
    /*is_ambiguous_... S7275C12::S7275C7 */ AMB_check_base_class_offset(lv, (S7275C7*)(S7275C12*)(S7275C10*), ABISELECT(136,88), "S7275C1");
    check_base_class_offset(lv, (S7275C12*)(S7275C10*), ABISELECT(80,48), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C28*)(S7275C15*)(S7275C14*)(S7275C10*), ABISELECT(160,100), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C15*)(S7275C14*)(S7275C10*), ABISELECT(160,100), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C15*)(S7275C14*)(S7275C10*), ABISELECT(160,100), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C15*)(S7275C14*)(S7275C10*), ABISELECT(169,105), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S7275C15*)(S7275C14*)(S7275C10*), ABISELECT(172,108), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C15*)(S7275C14*)(S7275C10*), ABISELECT(160,100), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C14*)(S7275C10*), ABISELECT(192,120), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C14*)(S7275C10*), ABISELECT(192,120), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C14 */ AMB_check_base_class_offset(lv, (S7275C14*)(S7275C10*), ABISELECT(160,100), "S7275C1");
    /*is_ambiguous_... S7275C10::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C10*), ABISELECT(208,132), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C3*)(S7275C16*), ABISELECT(345,221), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C16 */ AMB_check_base_class_offset(lv, (S2014C38*)(S7275C5*)(S7275C3*)(S7275C16*), ABISELECT(336,216), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C5*)(S7275C3*)(S7275C16*), ABISELECT(336,216), "S7275C1");
    /*is_ambiguous_... S7275C1::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C3*)(S7275C16*), ABISELECT(336,216), "S7275C1");
    /*is_ambiguous_... S7275C10::S7275C16 */ AMB_check_base_class_offset(lv, (S7275C16*)(S7275C10*), ABISELECT(336,216), "S7275C1");
    check_base_class_offset(lv, (S7275C10*), ABISELECT(80,48), "S7275C1");
    check_base_class_offset(lv, (S7275C11*)(S7275C18*), ABISELECT(8,4), "S7275C1");
    check_base_class_offset(lv, (S7275C18*), ABISELECT(8,4), "S7275C1");
    check_base_class_offset(lv, (S2014C24*), 0, "S7275C1");
    check_base_class_offset(lv, (S7275C2*)(S7275C20*), ABISELECT(376,248), "S7275C1");
    check_base_class_offset(lv, (S7275C20*), ABISELECT(376,248), "S7275C1");
    test_class_info(&lv, &cd_S7275C1);
    dp->~S7275C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7275C1(Test_S7275C1, "S7275C1", ABISELECT(384,252));

#else // __cplusplus

extern void _ZN7S7275C1C1Ev();
extern void _ZN7S7275C1D1Ev();
Name_Map name_map_S7275C1[] = {
  NSPAIR(_ZN7S7275C1C1Ev),
  NSPAIR(_ZN7S7275C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
extern Class_Descriptor cd_S7275C3;
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
extern Class_Descriptor cd_S7275C2;
extern VTBL_ENTRY _ZTI7S7275C2[];
extern  VTBL_ENTRY _ZTV7S7275C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C2[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C15;
extern VTBL_ENTRY _ZTI8S7275C15[];
extern  VTBL_ENTRY _ZTV8S7275C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C14;
extern VTBL_ENTRY _ZTI8S7275C14[];
extern  VTBL_ENTRY _ZTV8S7275C14[];
extern Class_Descriptor cd_S7275C13;
extern VTBL_ENTRY _ZTI8S7275C13[];
extern  VTBL_ENTRY _ZTV8S7275C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C3;
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C16;
extern VTBL_ENTRY _ZTI8S7275C16[];
extern  VTBL_ENTRY _ZTV8S7275C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C16[];
extern Class_Descriptor cd_S7275C17;
extern VTBL_ENTRY _ZTI8S7275C17[];
extern  VTBL_ENTRY _ZTV8S7275C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C17[];
extern Class_Descriptor cd_S7275C7;
extern VTBL_ENTRY _ZTI7S7275C7[];
extern  VTBL_ENTRY _ZTV7S7275C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C7[];
extern Class_Descriptor cd_S7275C12;
extern VTBL_ENTRY _ZTI8S7275C12[];
extern  VTBL_ENTRY _ZTV8S7275C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C12[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S7275C15;
extern VTBL_ENTRY _ZTI8S7275C15[];
extern  VTBL_ENTRY _ZTV8S7275C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C14;
extern VTBL_ENTRY _ZTI8S7275C14[];
extern  VTBL_ENTRY _ZTV8S7275C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7275C5;
extern VTBL_ENTRY _ZTI7S7275C5[];
extern  VTBL_ENTRY _ZTV7S7275C5[];
extern Class_Descriptor cd_S7275C3;
extern VTBL_ENTRY _ZTI7S7275C3[];
extern  VTBL_ENTRY _ZTV7S7275C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C3[];
extern Class_Descriptor cd_S7275C16;
extern VTBL_ENTRY _ZTI8S7275C16[];
extern  VTBL_ENTRY _ZTV8S7275C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C16[];
extern Class_Descriptor cd_S7275C10;
extern VTBL_ENTRY _ZTI8S7275C10[];
extern  VTBL_ENTRY _ZTV8S7275C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C10[];
extern Class_Descriptor cd_S7275C11;
extern VTBL_ENTRY _ZTI8S7275C11[];
extern  VTBL_ENTRY _ZTV8S7275C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C11[];
extern Class_Descriptor cd_S7275C18;
extern VTBL_ENTRY _ZTI8S7275C18[];
extern  VTBL_ENTRY _ZTV8S7275C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C18[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S7275C2;
extern VTBL_ENTRY _ZTI7S7275C2[];
extern  VTBL_ENTRY _ZTV7S7275C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C2[];
extern Class_Descriptor cd_S7275C20;
extern VTBL_ENTRY _ZTI8S7275C20[];
extern  VTBL_ENTRY _ZTV8S7275C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7275C20[];
static Base_Class bases_S7275C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(33,21), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(64,36), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7275C7,    ABISELECT(40,24), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7275C3,    ABISELECT(24,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7275C2,    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
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7275C11,    ABISELECT(216,136), //bcp->offset
    81, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S7275C11,    ABISELECT(232,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(288,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(288,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(288,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(297,189), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(300,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7275C15,    ABISELECT(288,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(320,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(320,204), //bcp->offset
    102, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7275C14,    ABISELECT(288,184), //bcp->offset
    97, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7275C13,    ABISELECT(232,148), //bcp->offset
    87, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(89,53), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7275C3,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7275C16,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7275C17,    ABISELECT(120,80), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7275C7,    ABISELECT(136,88), //bcp->offset
    66, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7275C12,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(169,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(172,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
    36, //immediately_derived
  0, 0},
  {&cd_S7275C15,    ABISELECT(160,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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
    38, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(192,120), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7275C14,    ABISELECT(160,100), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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
    46, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(345,221), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(336,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7275C5,    ABISELECT(336,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7275C3,    ABISELECT(336,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7275C16,    ABISELECT(336,216), //bcp->offset
    106, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    46, //immediately_derived
  0, 1},
  {&cd_S7275C10,    ABISELECT(80,48), //bcp->offset
    45, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7275C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7275C18,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7275C2,    ABISELECT(376,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    51, //immediately_derived
  0, 1},
  {&cd_S7275C20,    ABISELECT(376,248), //bcp->offset
    116, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7275C1[];
extern void _ZN7S7275C1D1Ev();
extern void _ZN7S7275C1D0Ev();
extern void ABISELECT(_ZThn8_N7S7275C1D1Ev,_ZThn4_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7275C1D0Ev,_ZThn4_N7S7275C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S7275C1D1Ev,_ZTv0_n28_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C1D1Ev,_ZThn16_N7S7275C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7275C1D0Ev,_ZTv0_n28_N7S7275C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C1D0Ev,_ZThn16_N7S7275C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C1D1Ev,_ZTv0_n24_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S7275C1D1Ev,_ZThn24_N7S7275C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C1D0Ev,_ZTv0_n24_N7S7275C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S7275C1D0Ev,_ZThn24_N7S7275C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C1D1Ev,_ZTv0_n12_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7275C1D1Ev,_ZThn36_N7S7275C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C1D0Ev,_ZTv0_n12_N7S7275C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7275C1D0Ev,_ZThn36_N7S7275C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7275C1D1Ev,_ZTv0_n48_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S7275C1D1Ev,_ZThn48_N7S7275C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7275C1D0Ev,_ZTv0_n48_N7S7275C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S7275C1D0Ev,_ZThn48_N7S7275C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn40_n96_N7S7275C1D1Ev,_ZTvn32_n48_N7S7275C1D1Ev)();
extern void ABISELECT(_ZTvn40_n96_N7S7275C1D0Ev,_ZTvn32_n48_N7S7275C1D0Ev)();
extern void ABISELECT(_ZTvn56_n96_N7S7275C1D1Ev,_ZTvn40_n48_N7S7275C1D1Ev)();
extern void ABISELECT(_ZTvn56_n96_N7S7275C1D0Ev,_ZTvn40_n48_N7S7275C1D0Ev)();
extern void ABISELECT(_ZTvn80_n96_N7S7275C1D1Ev,_ZTvn52_n48_N7S7275C1D1Ev)();
extern void ABISELECT(_ZTvn80_n96_N7S7275C1D0Ev,_ZTvn52_n48_N7S7275C1D0Ev)();
extern void ABISELECT(_ZTvn112_n96_N7S7275C1D1Ev,_ZTvn72_n48_N7S7275C1D1Ev)();
extern void ABISELECT(_ZTvn112_n96_N7S7275C1D0Ev,_ZTvn72_n48_N7S7275C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7275C1D1Ev,_ZTv0_n16_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S7275C1D1Ev,_ZThn136_N7S7275C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7275C1D0Ev,_ZTv0_n16_N7S7275C1D0Ev)();
extern void ABISELECT(_ZThn216_N7S7275C1D0Ev,_ZThn136_N7S7275C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7275C1D1Ev,_ZTv0_n32_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7275C1D1Ev,_ZThn148_N7S7275C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7275C1D0Ev,_ZTv0_n32_N7S7275C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7275C1D0Ev,_ZThn148_N7S7275C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C1D1Ev,_ZTv0_n12_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S7275C1D1Ev,_ZThn184_N7S7275C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C1D0Ev,_ZTv0_n12_N7S7275C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S7275C1D0Ev,_ZThn184_N7S7275C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N7S7275C1D1Ev,_ZTvn20_n12_N7S7275C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N7S7275C1D0Ev,_ZTvn20_n12_N7S7275C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N7S7275C1D1Ev,_ZTv0_n32_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn336_N7S7275C1D1Ev,_ZThn216_N7S7275C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7275C1D0Ev,_ZTv0_n32_N7S7275C1D0Ev)();
extern void ABISELECT(_ZThn336_N7S7275C1D0Ev,_ZThn216_N7S7275C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7275C1D1Ev,_ZTv0_n32_N7S7275C1D1Ev)();
extern void ABISELECT(_ZThn376_N7S7275C1D1Ev,_ZThn248_N7S7275C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7275C1D0Ev,_ZTv0_n32_N7S7275C1D0Ev)();
extern void ABISELECT(_ZThn376_N7S7275C1D0Ev,_ZThn248_N7S7275C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7275C1[] = {
  ABISELECT(376,248),
  ABISELECT(376,248),
  0,
  ABISELECT(336,216),
  0,
  ABISELECT(288,184),
  ABISELECT(232,148),
  ABISELECT(216,136),
  ABISELECT(80,48),
  ABISELECT(76,44),
  ABISELECT(64,36),
  ABISELECT(40,24),
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&_ZN7S7275C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C1D0Ev,
  ABISELECT(56,32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7275C1D1Ev,_ZThn4_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7275C1D0Ev,_ZThn4_N7S7275C1D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C1D1Ev,_ZTv0_n28_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C1D0Ev,_ZTv0_n28_N7S7275C1D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C1D1Ev,_ZTv0_n24_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C1D0Ev,_ZTv0_n24_N7S7275C1D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C1D1Ev,_ZTv0_n12_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C1D0Ev,_ZTv0_n12_N7S7275C1D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(256,168),
  ABISELECT(136,88),
  ABISELECT(208,136),
  ABISELECT(152,100),
  ABISELECT(-80,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7275C1D1Ev,_ZTv0_n48_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7275C1D0Ev,_ZTv0_n48_N7S7275C1D0Ev),
  ABISELECT(-44,-36),
  ABISELECT(-56,-44),
  ABISELECT(96,56),
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n96_N7S7275C1D1Ev,_ZTvn32_n48_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n96_N7S7275C1D0Ev,_ZTvn32_n48_N7S7275C1D0Ev),
  ABISELECT(-60,-44),
  ABISELECT(-72,-52),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n96_N7S7275C1D1Ev,_ZTvn40_n48_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n96_N7S7275C1D0Ev,_ZTvn40_n48_N7S7275C1D0Ev),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n96_N7S7275C1D1Ev,_ZTvn52_n48_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn80_n96_N7S7275C1D0Ev,_ZTvn52_n48_N7S7275C1D0Ev),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n96_N7S7275C1D1Ev,_ZTvn72_n48_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n96_N7S7275C1D0Ev,_ZTvn72_n48_N7S7275C1D0Ev),
  ABISELECT(-216,-136),
  ABISELECT(-152,-100),
  ABISELECT(-216,-136),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7275C1D1Ev,_ZTv0_n16_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7275C1D0Ev,_ZTv0_n16_N7S7275C1D0Ev),
  ABISELECT(-232,-148),
  ABISELECT(56,36),
  ABISELECT(-192,-124),
  ABISELECT(-156,-104),
  ABISELECT(-232,-148),
  ABISELECT(-168,-112),
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7275C1D1Ev,_ZTv0_n32_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7275C1D0Ev,_ZTv0_n32_N7S7275C1D0Ev),
  ABISELECT(-288,-184),
  ABISELECT(-288,-184),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C1D1Ev,_ZTv0_n12_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C1D0Ev,_ZTv0_n12_N7S7275C1D0Ev),
  ABISELECT(-320,-204),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N7S7275C1D1Ev,_ZTvn20_n12_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N7S7275C1D0Ev,_ZTvn20_n12_N7S7275C1D0Ev),
  ABISELECT(-336,-216),
  ABISELECT(-336,-216),
  ABISELECT(-260,-172),
  ABISELECT(-272,-180),
  ABISELECT(-296,-192),
  ABISELECT(-336,-216),
  ABISELECT(-336,-216),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7275C1D1Ev,_ZTv0_n32_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7275C1D0Ev,_ZTv0_n32_N7S7275C1D0Ev),
  0,
  ABISELECT(-376,-248),
  ABISELECT(-300,-204),
  ABISELECT(-312,-212),
  ABISELECT(-336,-224),
  ABISELECT(-376,-248),
  ABISELECT(-352,-232),
  ABISELECT(-376,-248),
  (VTBL_ENTRY)&(_ZTI7S7275C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7275C1D1Ev,_ZTv0_n32_N7S7275C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7275C1D0Ev,_ZTv0_n32_N7S7275C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7275C1[];
extern void _ZN7S7275C2D1Ev();
extern void _ZN7S7275C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C2__A__7S7275C1[] = {
  ABISELECT(76,44),
  ABISELECT(64,36),
  ABISELECT(40,24),
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&_ZN7S7275C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C2D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C2D1Ev,_ZThn16_N7S7275C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C2D0Ev,_ZThn16_N7S7275C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C3__7S7275C2__A__7S7275C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7275C2D1Ev,_ZThn24_N7S7275C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7275C2D0Ev,_ZThn24_N7S7275C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C2__A__7S7275C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7275C2D1Ev,_ZThn36_N7S7275C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7275C2D0Ev,_ZThn36_N7S7275C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C2__A__7S7275C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev),
};
extern void _ZN8S7275C18D1Ev();
extern void _ZN8S7275C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C18__7S7275C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C18[0]),
  (VTBL_ENTRY)&_ZN8S7275C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C18D0Ev,
};
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C118S7275C18__A2__7S7275C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C11D1Ev,_ZThn32_N8S7275C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S7275C11D0Ev,_ZThn32_N8S7275C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C118S7275C18__A2__7S7275C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C18D1Ev,_ZTv0_n12_N8S7275C18D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C18D1Ev,_ZThn32_N8S7275C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C18D0Ev,_ZTv0_n12_N8S7275C18D0Ev)();
extern void ABISELECT(_ZThn56_N8S7275C18D0Ev,_ZThn32_N8S7275C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C18__7S7275C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7275C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C18D1Ev,_ZTv0_n12_N8S7275C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C18D0Ev,_ZTv0_n12_N8S7275C18D0Ev),
};
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C3__7S7275C1[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7275C3D1Ev,_ZThn8_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7275C3D0Ev,_ZThn8_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C3__7S7275C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn20_N7S7275C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn20_N7S7275C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C3__7S7275C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C1[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C7__7S7275C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
extern void _ZN8S7275C10D1Ev();
extern void _ZN8S7275C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C10__7S7275C1[] = {
  ABISELECT(256,168),
  ABISELECT(136,88),
  ABISELECT(208,136),
  ABISELECT(152,100),
  ABISELECT(-80,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&_ZN8S7275C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C10D0Ev,
};
extern void _ZN8S7275C12D1Ev();
extern void _ZN8S7275C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(136,88),
  ABISELECT(208,136),
  ABISELECT(152,100),
  ABISELECT(-80,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&_ZN8S7275C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C12D0Ev,
};
extern void _ZN8S7275C16D1Ev();
extern void _ZN8S7275C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C168S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(-80,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&_ZN8S7275C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C16D0Ev,
};
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C38S7275C168S7275C128S7275C10__A1__7S7275C1[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C38S7275C168S7275C128S7275C10__A1__7S7275C1[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C38S7275C168S7275C128S7275C10__A1__7S7275C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C168S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C168S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev),
};
extern void _ZN8S7275C17D1Ev();
extern void _ZN8S7275C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C178S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(-44,-36),
  ABISELECT(-56,-44),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&_ZN8S7275C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C17D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev)();
extern void ABISELECT(_ZThn96_N8S7275C17D1Ev,_ZThn56_N8S7275C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev)();
extern void ABISELECT(_ZThn96_N8S7275C17D0Ev,_ZThn56_N8S7275C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C11__8S7275C178S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(-96,-56),
  ABISELECT(-152,-100),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C178S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(56,44),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S7275C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C17D1Ev,_ZTv0_n12_N8S7275C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C17D0Ev,_ZTv0_n12_N8S7275C17D0Ev),
};
extern void _ZN7S7275C7D1Ev();
extern void _ZN7S7275C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C78S7275C128S7275C10__A1__7S7275C1[] = {
  ABISELECT(-60,-44),
  ABISELECT(-72,-52),
  ABISELECT(-136,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&_ZN7S7275C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__7S7275C78S7275C128S7275C10__A1__7S7275C1[] = {
  ABISELECT(72,52),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI7S7275C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7275C12D1Ev,_ZTv0_n32_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn152_N8S7275C12D1Ev,_ZThn100_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7275C12D0Ev,_ZTv0_n32_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn152_N8S7275C12D0Ev,_ZThn100_N8S7275C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C13__8S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(-152,-100),
  ABISELECT(56,36),
  ABISELECT(-192,-124),
  ABISELECT(-156,-104),
  ABISELECT(-232,-148),
  ABISELECT(-168,-112),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C12D1Ev,_ZTv0_n32_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C12D0Ev,_ZTv0_n32_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C12D1Ev,_ZTv0_n24_N8S7275C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7275C12D0Ev,_ZTv0_n24_N8S7275C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C12D1Ev,_ZTv0_n24_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C12D0Ev,_ZTv0_n24_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn208_N8S7275C12D1Ev,_ZThn136_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn208_N8S7275C12D0Ev,_ZThn136_N8S7275C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C14__8S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7275C12D1Ev,_ZTvn20_n12_N8S7275C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7275C12D0Ev,_ZTvn20_n12_N8S7275C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C58S7275C14__A2__8S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C12D1Ev,_ZTvn20_n12_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C12D0Ev,_ZTvn20_n12_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZThn40_N8S7275C12D1Ev,_ZThn32_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S7275C12D0Ev,_ZThn32_N8S7275C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7275C17__8S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(-44,-36),
  ABISELECT(-56,-44),
  ABISELECT(96,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C12D1Ev,_ZThn32_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C12D0Ev,_ZThn32_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7275C12D1Ev,_ZTv0_n16_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn136_N8S7275C12D1Ev,_ZThn88_N8S7275C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7275C12D0Ev,_ZTv0_n16_N8S7275C12D0Ev)();
extern void ABISELECT(_ZThn136_N8S7275C12D0Ev,_ZThn88_N8S7275C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C11__A1__8S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(-136,-88),
  ABISELECT(-152,-100),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C12D1Ev,_ZTv0_n16_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C12D0Ev,_ZTv0_n16_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZThn56_N8S7275C12D1Ev,_ZThn40_N8S7275C12D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C12D0Ev,_ZThn40_N8S7275C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__A__8S7275C128S7275C10__7S7275C1[] = {
  ABISELECT(-60,-44),
  ABISELECT(-72,-52),
  ABISELECT(-136,-88),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7275C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C12D1Ev,_ZThn40_N8S7275C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C12D0Ev,_ZThn40_N8S7275C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7275C10D1Ev,_ZTv0_n16_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn136_N8S7275C10D1Ev,_ZThn88_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7275C10D0Ev,_ZTv0_n16_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn136_N8S7275C10D0Ev,_ZThn88_N8S7275C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C11__8S7275C10__7S7275C1[] = {
  ABISELECT(-136,-88),
  ABISELECT(-152,-100),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C10D1Ev,_ZTv0_n16_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7275C10D0Ev,_ZTv0_n16_N8S7275C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C10__7S7275C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn152_N8S7275C10D1Ev,_ZThn100_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn152_N8S7275C10D0Ev,_ZThn100_N8S7275C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C13__8S7275C10__7S7275C1[] = {
  ABISELECT(-152,-100),
  ABISELECT(56,36),
  ABISELECT(-192,-124),
  ABISELECT(-156,-104),
  ABISELECT(-232,-148),
  ABISELECT(-168,-112),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C10D1Ev,_ZTv0_n24_N8S7275C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7275C10D0Ev,_ZTv0_n24_N8S7275C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C10__7S7275C1[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C10D1Ev,_ZTv0_n24_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C10D0Ev,_ZTv0_n24_N8S7275C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn208_N8S7275C10D1Ev,_ZThn136_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn208_N8S7275C10D0Ev,_ZThn136_N8S7275C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C14__8S7275C10__7S7275C1[] = {
  ABISELECT(-208,-136),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7275C10D1Ev,_ZTvn20_n12_N8S7275C10D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7275C10D0Ev,_ZTvn20_n12_N8S7275C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C58S7275C14__A2__8S7275C10__7S7275C1[] = {
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C10D1Ev,_ZTvn20_n12_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C10D0Ev,_ZTvn20_n12_N8S7275C10D0Ev),
};
extern void ABISELECT(_ZThn40_N8S7275C10D1Ev,_ZThn32_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S7275C10D0Ev,_ZThn32_N8S7275C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7275C178S7275C12__8S7275C10__7S7275C1[] = {
  ABISELECT(-44,-36),
  ABISELECT(-56,-44),
  ABISELECT(96,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C10D1Ev,_ZThn32_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7275C10D0Ev,_ZThn32_N8S7275C10D0Ev),
};
extern void ABISELECT(_ZThn56_N8S7275C10D1Ev,_ZThn40_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C10D0Ev,_ZThn40_N8S7275C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C78S7275C12__A1__8S7275C10__7S7275C1[] = {
  ABISELECT(-60,-44),
  ABISELECT(-72,-52),
  ABISELECT(-136,-88),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C10D1Ev,_ZThn40_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S7275C10D0Ev,_ZThn40_N8S7275C10D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev)();
extern void ABISELECT(_ZThn256_N8S7275C10D1Ev,_ZThn168_N8S7275C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev)();
extern void ABISELECT(_ZThn256_N8S7275C10D0Ev,_ZThn168_N8S7275C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C16__A1__8S7275C10__7S7275C1[] = {
  ABISELECT(-256,-168),
  ABISELECT(-336,-216),
  ABISELECT(-260,-172),
  ABISELECT(-272,-180),
  ABISELECT(-296,-192),
  ABISELECT(-336,-216),
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI8S7275C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev),
};
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C11__7S7275C1[] = {
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C11__7S7275C1[] = {
  ABISELECT(152,100),
  ABISELECT(152,100),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
extern void _ZN8S7275C13D1Ev();
extern void _ZN8S7275C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C13__7S7275C1[] = {
  ABISELECT(56,36),
  ABISELECT(-192,-124),
  ABISELECT(-156,-104),
  ABISELECT(-232,-148),
  ABISELECT(-168,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&_ZN8S7275C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C13D0Ev,
};
extern void _ZN8S7275C11D1Ev();
extern void _ZN8S7275C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C118S7275C13__A1__7S7275C1[] = {
  ABISELECT(-168,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&_ZN8S7275C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C118S7275C13__A1__7S7275C1[] = {
  ABISELECT(168,112),
  ABISELECT(168,112),
  (VTBL_ENTRY)&(_ZTI8S7275C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C13__7S7275C1[] = {
  ABISELECT(168,112),
  ABISELECT(168,112),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C13__7S7275C1[] = {
  ABISELECT(192,124),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(192,124),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C13D1Ev,_ZTv0_n24_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C13D0Ev,_ZTv0_n24_N8S7275C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7275C13D1Ev,_ZThn36_N8S7275C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7275C13D0Ev,_ZThn36_N8S7275C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C14__8S7275C13__7S7275C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S7275C13D1Ev,_ZTvn20_n12_N8S7275C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S7275C13D0Ev,_ZTvn20_n12_N8S7275C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C58S7275C14__A2__8S7275C13__7S7275C1[] = {
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S7275C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C13D1Ev,_ZTvn20_n12_N8S7275C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S7275C13D0Ev,_ZTvn20_n12_N8S7275C13D0Ev),
};
extern void _ZN8S7275C16D1Ev();
extern void _ZN8S7275C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7275C16__A1__7S7275C1[] = {
  ABISELECT(-336,-216),
  ABISELECT(-260,-172),
  ABISELECT(-272,-180),
  ABISELECT(-296,-192),
  ABISELECT(-336,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&_ZN8S7275C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7275C16D0Ev,
};
extern void _ZN7S7275C3D1Ev();
extern void _ZN7S7275C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C38S7275C16__A2__7S7275C1[] = {
  ABISELECT(-260,-172),
  ABISELECT(-272,-180),
  ABISELECT(-296,-192),
  ABISELECT(-336,-216),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&_ZN7S7275C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C38S7275C16__A2__7S7275C1[] = {
  ABISELECT(296,192),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(296,192),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C38S7275C16__A2__7S7275C1[] = {
  ABISELECT(272,180),
  ABISELECT(272,180),
  (VTBL_ENTRY)&(_ZTI7S7275C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C16__A1__7S7275C1[] = {
  ABISELECT(296,192),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(296,192),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D1Ev,_ZTv0_n24_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C16D0Ev,_ZTv0_n24_N8S7275C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__8S7275C16__A1__7S7275C1[] = {
  ABISELECT(272,180),
  ABISELECT(272,180),
  (VTBL_ENTRY)&(_ZTI8S7275C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D1Ev,_ZTv0_n12_N8S7275C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C16D0Ev,_ZTv0_n12_N8S7275C16D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7275C20D1Ev,_ZTv0_n32_N8S7275C20D1Ev)();
extern void _ZN8S7275C20D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7275C20D0Ev,_ZTv0_n32_N8S7275C20D0Ev)();
extern void _ZN8S7275C20D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7275C20__7S7275C1[] = {
  0,
  0,
  ABISELECT(-300,-204),
  ABISELECT(-312,-212),
  ABISELECT(-336,-224),
  ABISELECT(-376,-248),
  ABISELECT(-352,-232),
  0,
  (VTBL_ENTRY)&(_ZTI8S7275C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C20D1Ev,_ZTv0_n32_N8S7275C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7275C20D0Ev,_ZTv0_n32_N8S7275C20D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S7275C20D1Ev,_ZTv0_n28_N8S7275C20D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7275C20D0Ev,_ZTv0_n28_N8S7275C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C3__8S7275C20__7S7275C1[] = {
  ABISELECT(352,232),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  ABISELECT(352,232),
  (VTBL_ENTRY)&(_ZTI8S7275C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7275C20D1Ev,_ZTv0_n28_N8S7275C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7275C20D0Ev,_ZTv0_n28_N8S7275C20D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7275C20D1Ev,_ZTv0_n24_N8S7275C20D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7275C20D0Ev,_ZTv0_n24_N8S7275C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__8S7275C20__7S7275C1[] = {
  ABISELECT(336,224),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(336,224),
  (VTBL_ENTRY)&(_ZTI8S7275C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C20D1Ev,_ZTv0_n24_N8S7275C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7275C20D0Ev,_ZTv0_n24_N8S7275C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7275C20D1Ev,_ZTv0_n12_N8S7275C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7275C20D0Ev,_ZTv0_n12_N8S7275C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__8S7275C20__7S7275C1[] = {
  ABISELECT(312,212),
  ABISELECT(312,212),
  (VTBL_ENTRY)&(_ZTI8S7275C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C20D1Ev,_ZTv0_n12_N8S7275C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7275C20D0Ev,_ZTv0_n12_N8S7275C20D0Ev),
};
extern void _ZN7S7275C2D1Ev();
extern void _ZN7S7275C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7275C2__A1__7S7275C1[] = {
  ABISELECT(-300,-204),
  ABISELECT(-312,-212),
  ABISELECT(-336,-224),
  ABISELECT(-376,-248),
  ABISELECT(-352,-232),
  0,
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&_ZN7S7275C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7275C2D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev)();
extern void ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C3__7S7275C2__A1__7S7275C1[] = {
  ABISELECT(352,232),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  ABISELECT(352,232),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C7__7S7275C2__A1__7S7275C1[] = {
  ABISELECT(336,224),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-24),
  ABISELECT(336,224),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7275C5__A1__7S7275C2__A1__7S7275C1[] = {
  ABISELECT(312,212),
  ABISELECT(312,212),
  (VTBL_ENTRY)&(_ZTI7S7275C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev),
};
static  VTT_ENTRY vtt_S7275C1[] = {
  {&(_ZTV7S7275C1[16]),  16,127},
  {&(_tg__ZTV7S7275C2__A__7S7275C1[7]),  7,9},
  {&(_tg__ZTV7S7275C3__7S7275C2__A__7S7275C1[7]),  7,9},
  {&(_tg__ZTV7S7275C7__7S7275C2__A__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C2__A__7S7275C1[3]),  3,5},
  {&(_tg__ZTV8S7275C18__7S7275C1[3]),  3,5},
  {&(_tg__ZTV8S7275C118S7275C18__A2__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C118S7275C18__A2__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C18__7S7275C1[3]),  3,5},
  {&(_ZTV7S7275C1[30]),  30,127},
  {&(_ZTV7S7275C1[38]),  38,127},
  {&(_ZTV7S7275C1[43]),  43,127},
  {&(_ZTV7S7275C1[57]),  57,127},
  {&(_ZTV7S7275C1[85]),  85,127},
  {&(_ZTV7S7275C1[95]),  95,127},
  {&(_ZTV7S7275C1[100]),  100,127},
  {&(_ZTV7S7275C1[104]),  104,127},
  {&(_ZTV7S7275C1[64]),  64,127},
  {&(_ZTV7S7275C1[71]),  71,127},
  {&(_ZTV7S7275C1[75]),  75,127},
  {&(_ZTV7S7275C1[79]),  79,127},
  {&(_ZTV7S7275C1[114]),  114,127},
  {&(_ZTV7S7275C1[21]),  21,127},
  {&(_ZTV7S7275C1[125]),  125,127},
  {&(_ZTV7S7275C1[125]),  125,127},
  {&(_tg__ZTV7S7275C3__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C7__7S7275C3__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C3__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C7__7S7275C1[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C7__7S7275C1[3]),  3,5},
  {&(_tg__ZTV8S7275C10__7S7275C1[11]),  11,13},
  {&(_tg__ZTV8S7275C128S7275C10__7S7275C1[10]),  10,12},
  {&(_tg__ZTV8S7275C168S7275C128S7275C10__7S7275C1[7]),  7,9},
  {&(_tg__ZTV7S7275C38S7275C168S7275C128S7275C10__A1__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C7__7S7275C38S7275C168S7275C128S7275C10__A1__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C38S7275C168S7275C128S7275C10__A1__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C168S7275C128S7275C10__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C5__8S7275C168S7275C128S7275C10__7S7275C1[3]),  3,5},
  {&(_tg__ZTV8S7275C178S7275C128S7275C10__7S7275C1[5]),  5,7},
  {&(_tg__ZTV8S7275C11__8S7275C178S7275C128S7275C10__7S7275C1[4]),  4,6},
  {&(_tg__ZTV7S7275C5__8S7275C178S7275C128S7275C10__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C78S7275C128S7275C10__A1__7S7275C1[5]),  5,7},
  {&(_tg__ZTV7S7275C5__7S7275C78S7275C128S7275C10__A1__7S7275C1[3]),  3,5},
  {&(_tg__ZTV8S7275C13__8S7275C128S7275C10__7S7275C1[8]),  8,10},
  {&(_tg__ZTV7S7275C5__8S7275C128S7275C10__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C128S7275C10__7S7275C1[6]),  6,8},
  {&(_tg__ZTV8S7275C14__8S7275C128S7275C10__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C58S7275C14__A2__8S7275C128S7275C10__7S7275C1[2]),  2,4},
  {&(_tg__ZTV8S7275C17__8S7275C128S7275C10__7S7275C1[5]),  5,7},
  {&(_tg__ZTV8S7275C11__A1__8S7275C128S7275C10__7S7275C1[4]),  4,6},
  {&(_tg__ZTV7S7275C7__A__8S7275C128S7275C10__7S7275C1[5]),  5,7},
  {&(_tg__ZTV8S7275C11__8S7275C10__7S7275C1[4]),  4,6},
  {&(_tg__ZTV7S7275C5__8S7275C10__7S7275C1[3]),  3,5},
  {&(_tg__ZTV8S7275C13__8S7275C10__7S7275C1[8]),  8,10},
  {&(_tg__ZTV7S7275C7__8S7275C10__7S7275C1[6]),  6,8},
  {&(_tg__ZTV8S7275C14__8S7275C10__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C58S7275C14__A2__8S7275C10__7S7275C1[2]),  2,4},
  {&(_tg__ZTV8S7275C178S7275C12__8S7275C10__7S7275C1[5]),  5,7},
  {&(_tg__ZTV7S7275C78S7275C12__A1__8S7275C10__7S7275C1[5]),  5,7},
  {&(_tg__ZTV8S7275C16__A1__8S7275C10__7S7275C1[8]),  8,10},
  {&(_tg__ZTV8S7275C11__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C11__7S7275C1[3]),  3,5},
  {&(_tg__ZTV8S7275C13__7S7275C1[7]),  7,9},
  {&(_tg__ZTV8S7275C118S7275C13__A1__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C118S7275C13__A1__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C5__8S7275C13__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C13__7S7275C1[6]),  6,8},
  {&(_tg__ZTV8S7275C14__8S7275C13__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C58S7275C14__A2__8S7275C13__7S7275C1[2]),  2,4},
  {&(_tg__ZTV8S7275C16__A1__7S7275C1[7]),  7,9},
  {&(_tg__ZTV7S7275C38S7275C16__A2__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C7__7S7275C38S7275C16__A2__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C38S7275C16__A2__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C7__8S7275C16__A1__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C5__8S7275C16__A1__7S7275C1[3]),  3,5},
  {&(_tg__ZTV8S7275C20__7S7275C1[9]),  9,11},
  {&(_tg__ZTV8S7275C20__7S7275C1[9]),  9,11},
  {&(_tg__ZTV7S7275C3__8S7275C20__7S7275C1[7]),  7,9},
  {&(_tg__ZTV7S7275C7__8S7275C20__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__8S7275C20__7S7275C1[3]),  3,5},
  {&(_tg__ZTV7S7275C2__A1__7S7275C1[7]),  7,9},
  {&(_tg__ZTV7S7275C3__7S7275C2__A1__7S7275C1[7]),  7,9},
  {&(_tg__ZTV7S7275C7__7S7275C2__A1__7S7275C1[6]),  6,8},
  {&(_tg__ZTV7S7275C5__A1__7S7275C2__A1__7S7275C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7275C1[];
extern  VTBL_ENTRY _ZTV7S7275C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7275C1[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C20D0Ev,_ZTv0_n32_N8S7275C20D0Ev), // 
  (VTBL_ENTRY)_ZN8S7275C20D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C20D1Ev,_ZTv0_n32_N8S7275C20D1Ev), // 
  (VTBL_ENTRY)_ZN8S7275C20D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C13D0Ev,_ZTv0_n12_N8S7275C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C13D0Ev,_ZThn36_N8S7275C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C13D1Ev,_ZTv0_n12_N8S7275C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C13D1Ev,_ZThn36_N8S7275C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C10D0Ev,_ZTv0_n12_N8S7275C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7275C10D0Ev,_ZThn136_N8S7275C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C10D1Ev,_ZTv0_n12_N8S7275C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7275C10D1Ev,_ZThn136_N8S7275C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C10D0Ev,_ZTv0_n32_N8S7275C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S7275C10D0Ev,_ZThn168_N8S7275C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7275C10D0Ev,_ZThn100_N8S7275C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C10D1Ev,_ZTv0_n32_N8S7275C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S7275C10D1Ev,_ZThn168_N8S7275C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7275C10D1Ev,_ZThn100_N8S7275C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C10D0Ev,_ZTv0_n16_N8S7275C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7275C10D0Ev,_ZThn88_N8S7275C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C10D1Ev,_ZTv0_n16_N8S7275C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7275C10D1Ev,_ZThn88_N8S7275C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C12D0Ev,_ZTv0_n16_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7275C12D0Ev,_ZThn88_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C12D1Ev,_ZTv0_n16_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S7275C12D1Ev,_ZThn88_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C12D0Ev,_ZTv0_n12_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7275C12D0Ev,_ZThn136_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C12D1Ev,_ZTv0_n12_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7275C12D1Ev,_ZThn136_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C12D0Ev,_ZTv0_n32_N8S7275C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7275C12D0Ev,_ZThn100_N8S7275C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7275C12D1Ev,_ZTv0_n32_N8S7275C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7275C12D1Ev,_ZThn100_N8S7275C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C17D0Ev,_ZTv0_n16_N8S7275C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7275C17D0Ev,_ZThn56_N8S7275C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7275C17D1Ev,_ZTv0_n16_N8S7275C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7275C17D1Ev,_ZThn56_N8S7275C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D0Ev,_ZTv0_n12_N7S7275C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D0Ev,_ZThn12_N7S7275C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C7D1Ev,_ZTv0_n12_N7S7275C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C7D1Ev,_ZThn12_N7S7275C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D0Ev,_ZTv0_n12_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D0Ev,_ZThn20_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C3D1Ev,_ZTv0_n12_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C3D1Ev,_ZThn20_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D0Ev,_ZTv0_n24_N7S7275C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7275C3D0Ev,_ZThn8_N7S7275C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C3D1Ev,_ZTv0_n24_N7S7275C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7275C3D1Ev,_ZThn8_N7S7275C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C18D0Ev,_ZTv0_n12_N8S7275C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C18D0Ev,_ZThn32_N8S7275C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C18D1Ev,_ZTv0_n12_N8S7275C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C18D1Ev,_ZThn32_N8S7275C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D0Ev,_ZTv0_n12_N8S7275C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C11D0Ev,_ZThn32_N8S7275C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7275C11D1Ev,_ZTv0_n12_N8S7275C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7275C11D1Ev,_ZThn32_N8S7275C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C2D0Ev,_ZTv0_n12_N7S7275C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7275C2D0Ev,_ZThn36_N7S7275C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C2D1Ev,_ZTv0_n12_N7S7275C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7275C2D1Ev,_ZThn36_N7S7275C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C2D0Ev,_ZTv0_n24_N7S7275C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C2D0Ev,_ZThn24_N7S7275C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C2D1Ev,_ZTv0_n24_N7S7275C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C2D1Ev,_ZThn24_N7S7275C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7275C2D0Ev,_ZTv0_n28_N7S7275C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C2D0Ev,_ZThn16_N7S7275C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7275C2D1Ev,_ZTv0_n28_N7S7275C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C2D1Ev,_ZThn16_N7S7275C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7275C1D0Ev,_ZTv0_n32_N7S7275C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7275C1D0Ev,_ZThn248_N7S7275C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7275C1D0Ev,_ZThn216_N7S7275C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7275C1D0Ev,_ZThn148_N7S7275C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7275C1D1Ev,_ZTv0_n32_N7S7275C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7275C1D1Ev,_ZThn248_N7S7275C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N7S7275C1D1Ev,_ZThn216_N7S7275C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7275C1D1Ev,_ZThn148_N7S7275C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7275C1D0Ev,_ZTv0_n16_N7S7275C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7275C1D0Ev,_ZThn136_N7S7275C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7275C1D1Ev,_ZTv0_n16_N7S7275C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7275C1D1Ev,_ZThn136_N7S7275C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7275C1D0Ev,_ZTv0_n48_N7S7275C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7275C1D0Ev,_ZThn48_N7S7275C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7275C1D1Ev,_ZTv0_n48_N7S7275C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7275C1D1Ev,_ZThn48_N7S7275C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C1D0Ev,_ZTv0_n12_N7S7275C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7275C1D0Ev,_ZThn184_N7S7275C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7275C1D0Ev,_ZThn36_N7S7275C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7275C1D1Ev,_ZTv0_n12_N7S7275C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7275C1D1Ev,_ZThn184_N7S7275C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7275C1D1Ev,_ZThn36_N7S7275C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C1D0Ev,_ZTv0_n24_N7S7275C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C1D0Ev,_ZThn24_N7S7275C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7275C1D1Ev,_ZTv0_n24_N7S7275C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7275C1D1Ev,_ZThn24_N7S7275C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7275C1D0Ev,_ZTv0_n28_N7S7275C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C1D0Ev,_ZThn16_N7S7275C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7275C1D1Ev,_ZTv0_n28_N7S7275C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7275C1D1Ev,_ZThn16_N7S7275C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7275C1 = {  "S7275C1", // class name
  bases_S7275C1, 52,
  &(vtc_S7275C1[0]), // expected_vtbl_contents
  &(vtt_S7275C1[0]), // expected_vtt_contents
  ABISELECT(384,252), // object size
  NSPAIRA(_ZTI7S7275C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7275C1),127, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7275C1),84, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C3_nt  {
  long s19169c3f0[10];
  void  mf19169c3(); // _ZN11S19169C3_nt9mf19169c3Ev
};
//SIG(-1 S19169C3_nt) C1{ m Fl[10]}


void  S19169C3_nt ::mf19169c3(){}

//skip512 S19169C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19169C3_nt[];
VTBL_ENTRY *P__ZTI11S19169C3_nt = _ZTI11S19169C3_nt; 
Class_Descriptor cd_S19169C3_nt = {  "S19169C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI11S19169C3_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  S19169C6_nt  {
  void *s19169c6f0[6];
  void  mf19169c6(); // _ZN11S19169C6_nt9mf19169c6Ev
};
//SIG(-1 S19169C6_nt) C1{ m Fp[6]}


void  S19169C6_nt ::mf19169c6(){}

//skip512 S19169C6_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19169C6_nt[];
VTBL_ENTRY *P__ZTI11S19169C6_nt = _ZTI11S19169C6_nt; 
Class_Descriptor cd_S19169C6_nt = {  "S19169C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI11S19169C6_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  S19169C5_nt  : virtual S19169C6_nt {
  __tsi64 s19169c5f0;
  ~S19169C5_nt(); // tgen
  S19169C5_nt(); // tgen
};
//SIG(-1 S19169C5_nt) C1{ VBC2{ m Fp[6]} FL}


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

//skip512 S19169C5_nt

#else // __cplusplus

extern void _ZN11S19169C5_ntC1Ev();
extern void _ZN11S19169C5_ntD1Ev();
Name_Map name_map_S19169C5_nt[] = {
  NSPAIR(_ZN11S19169C5_ntC1Ev),
  NSPAIR(_ZN11S19169C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S19169C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
static  VTBL_ENTRY vtc_S19169C5_nt[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19169C5_nt[];
static  VTT_ENTRY vtt_S19169C5_nt[] = {
  {&(_ZTV11S19169C5_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
VTBL_ENTRY *P__ZTI11S19169C5_nt = _ZTI11S19169C5_nt; 
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
Class_Descriptor cd_S19169C5_nt = {  "S19169C5_nt", // class name
  bases_S19169C5_nt, 1,
  &(vtc_S19169C5_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C5_nt[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI11S19169C5_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S19169C5_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19169C5_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C7_nt  : virtual S19169C6_nt {
  ~S19169C7_nt(); // tgen
  S19169C7_nt(); // tgen
};
//SIG(-1 S19169C7_nt) C1{ VBC2{ m Fp[6]}}


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

//skip512 S19169C7_nt

#else // __cplusplus

extern void _ZN11S19169C7_ntC1Ev();
extern void _ZN11S19169C7_ntD1Ev();
Name_Map name_map_S19169C7_nt[] = {
  NSPAIR(_ZN11S19169C7_ntC1Ev),
  NSPAIR(_ZN11S19169C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S19169C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_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 _ZTI11S19169C7_nt[];
static  VTBL_ENTRY vtc_S19169C7_nt[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19169C7_nt[];
static  VTT_ENTRY vtt_S19169C7_nt[] = {
  {&(_ZTV11S19169C7_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
VTBL_ENTRY *P__ZTI11S19169C7_nt = _ZTI11S19169C7_nt; 
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
Class_Descriptor cd_S19169C7_nt = {  "S19169C7_nt", // class name
  bases_S19169C7_nt, 1,
  &(vtc_S19169C7_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C7_nt[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI11S19169C7_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S19169C7_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19169C7_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C8_nt  : S19169C6_nt , S19169C5_nt , virtual S19169C7_nt {
  ~S19169C8_nt(); // tgen
  S19169C8_nt(); // tgen
};
//SIG(-1 S19169C8_nt) C1{ BC2{ m Fp[6]} BC3{ VBC2 FL} VBC4{ VBC2}}


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

//skip512 S19169C8_nt

#else // __cplusplus

extern void _ZN11S19169C8_ntC1Ev();
extern void _ZN11S19169C8_ntD1Ev();
Name_Map name_map_S19169C8_nt[] = {
  NSPAIR(_ZN11S19169C8_ntC1Ev),
  NSPAIR(_ZN11S19169C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
static Base_Class bases_S19169C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19169C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C7_nt,    ABISELECT(112,60), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
static  VTBL_ENTRY vtc_S19169C8_nt[] = {
  ABISELECT(112,60),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
  ABISELECT(-48,-24),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19169C8_nt[];
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt__11S19169C8_nt[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTT_ENTRY vtt_S19169C8_nt[] = {
  {&(_ZTV11S19169C8_nt[4]),  4,7},
  {&(_tg__ZTV11S19169C5_nt__11S19169C8_nt[3]),  3,3},
  {&(_ZTV11S19169C8_nt[7]),  7,7},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
VTBL_ENTRY *P__ZTI11S19169C8_nt = _ZTI11S19169C8_nt; 
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
Class_Descriptor cd_S19169C8_nt = {  "S19169C8_nt", // class name
  bases_S19169C8_nt, 4,
  &(vtc_S19169C8_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C8_nt[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI11S19169C8_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S19169C8_nt),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19169C8_nt),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C4_nt  : S19169C5_nt , S19169C3_nt , S19169C7_nt , S19169C8_nt {
  ::S19169C5_nt s19169c4f0;
  virtual  ~S19169C4_nt(); // _ZN11S19169C4_ntD2Ev
  S19169C4_nt(); // tgen
};
//SIG(-1 S19169C4_nt) C1{ BC2{ VBC3{ m Fp[6]} FL} BC4{ m Fl[10]} BC5{ VBC3} BC6{ BC3 BC2 VBC5} vd FC2}


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

//skip512 S19169C4_nt

#else // __cplusplus

extern void _ZN11S19169C4_ntC1Ev();
extern void _ZN11S19169C4_ntD2Ev();
Name_Map name_map_S19169C4_nt[] = {
  NSPAIR(_ZN11S19169C4_ntC1Ev),
  NSPAIR(_ZN11S19169C4_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C8_nt;
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
static Base_Class bases_S19169C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(232,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19169C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C3_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C7_nt,    ABISELECT(96,52), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(120,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(280,152), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19169C8_nt,    ABISELECT(104,56), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S19169C4_nt[];
extern void _ZN11S19169C4_ntD1Ev();
extern void _ZN11S19169C4_ntD0Ev();
static  VTBL_ENTRY vtc_S19169C4_nt[] = {
  ABISELECT(280,152),
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C4_ntD0Ev,
  ABISELECT(136,76),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
  ABISELECT(-48,-24),
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19169C4_nt[];
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt__11S19169C4_nt[] = {
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A__11S19169C4_nt[] = {
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt__11S19169C4_nt[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C8_nt__A1__11S19169C4_nt[] = {
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt__11S19169C4_nt[] = {
  ABISELECT(-48,-24),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__11S19169C4_nt[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTT_ENTRY vtt_S19169C4_nt[] = {
  {&(_ZTV11S19169C4_nt[4]),  4,16},
  {&(_tg__ZTV11S19169C5_nt__11S19169C4_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A__11S19169C4_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt__11S19169C4_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt11S19169C8_nt__A1__11S19169C4_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt__11S19169C4_nt[3]),  3,3},
  {&(_ZTV11S19169C4_nt[9]),  9,16},
  {&(_ZTV11S19169C4_nt[13]),  13,16},
  {&(_ZTV11S19169C4_nt[16]),  16,16},
  {&(_tg__ZTV11S19169C7_nt__A1__11S19169C4_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S19169C4_nt[];
VTBL_ENTRY *P__ZTI11S19169C4_nt = _ZTI11S19169C4_nt; 
extern  VTBL_ENTRY _ZTV11S19169C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C4_nt[];
Class_Descriptor cd_S19169C4_nt = {  "S19169C4_nt", // class name
  bases_S19169C4_nt, 8,
  &(vtc_S19169C4_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C4_nt[0]), // expected_vtt_contents
  ABISELECT(288,156), // object size
  NSPAIRA(_ZTI11S19169C4_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV11S19169C4_nt),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19169C4_nt),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C9_nt  : S19169C3_nt , S19169C6_nt , S19169C7_nt , virtual S19169C4_nt {
  virtual  ~S19169C9_nt(); // _ZN11S19169C9_ntD2Ev
  S19169C9_nt(); // tgen
};
//SIG(-1 S19169C9_nt) C1{ BC2{ m Fl[10]} BC3{ m Fp[6]} BC4{ VBC3} VBC5{ BC6{ VBC3 FL} BC2 BC4 BC7{ BC3 BC6 VBC4} vd FC6} vd}


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

//skip512 S19169C9_nt

#else // __cplusplus

extern void _ZN11S19169C9_ntC1Ev();
extern void _ZN11S19169C9_ntD2Ev();
Name_Map name_map_S19169C9_nt[] = {
  NSPAIR(_ZN11S19169C9_ntC1Ev),
  NSPAIR(_ZN11S19169C9_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C8_nt;
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
extern Class_Descriptor cd_S19169C4_nt;
extern VTBL_ENTRY _ZTI11S19169C4_nt[];
extern  VTBL_ENTRY _ZTV11S19169C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C4_nt[];
static Base_Class bases_S19169C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C3_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_S19169C6_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19169C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C5_nt,    ABISELECT(184,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(200,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(280,144), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(304,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(416,220), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19169C8_nt,    ABISELECT(288,148), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19169C4_nt,    ABISELECT(184,92), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S19169C9_nt[];
extern void _ZN11S19169C9_ntD1Ev();
extern void _ZN11S19169C9_ntD0Ev();
extern void ABISELECT(_ZTv0_n40_N11S19169C9_ntD1Ev,_ZTv0_n20_N11S19169C9_ntD1Ev)();
extern void ABISELECT(_ZThn184_N11S19169C9_ntD1Ev,_ZThn92_N11S19169C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S19169C9_ntD0Ev,_ZTv0_n20_N11S19169C9_ntD0Ev)();
extern void ABISELECT(_ZThn184_N11S19169C9_ntD0Ev,_ZThn92_N11S19169C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19169C9_nt[] = {
  ABISELECT(416,220),
  ABISELECT(184,92),
  ABISELECT(136,68),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C9_ntD0Ev,
  ABISELECT(-184,-92),
  ABISELECT(232,128),
  ABISELECT(-48,-24),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C9_ntD1Ev,_ZTv0_n20_N11S19169C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C9_ntD0Ev,_ZTv0_n20_N11S19169C9_ntD0Ev),
  ABISELECT(-144,-76),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
  ABISELECT(128,72),
  ABISELECT(-152,-80),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
  ABISELECT(-280,-152),
  ABISELECT(-416,-220),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19169C9_nt[];
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A__11S19169C9_nt[] = {
  ABISELECT(136,68),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
extern void _ZN11S19169C4_ntD1Ev();
extern void _ZN11S19169C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__11S19169C9_nt[] = {
  ABISELECT(232,128),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C4_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C4_nt__11S19169C9_nt[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__A1__11S19169C9_nt[] = {
  ABISELECT(-144,-76),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C9_nt[] = {
  ABISELECT(128,72),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A1__11S19169C9_nt[] = {
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__11S19169C9_nt[] = {
  ABISELECT(-280,-152),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A__11S19169C4_nt__11S19169C9_nt[] = {
  ABISELECT(-144,-76),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt__11S19169C4_nt__11S19169C9_nt[] = {
  ABISELECT(128,72),
  ABISELECT(-152,-80),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__11S19169C9_nt[] = {
  ABISELECT(-280,-152),
  ABISELECT(-232,-128),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A2__11S19169C9_nt[] = {
  ABISELECT(-280,-152),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTT_ENTRY vtt_S19169C9_nt[] = {
  {&(_ZTV11S19169C9_nt[5]),  5,24},
  {&(_tg__ZTV11S19169C7_nt__A__11S19169C9_nt[3]),  3,3},
  {&(_ZTV11S19169C9_nt[12]),  12,24},
  {&(_ZTV11S19169C9_nt[17]),  17,24},
  {&(_ZTV11S19169C9_nt[21]),  21,24},
  {&(_ZTV11S19169C9_nt[24]),  24,24},
  {&(_tg__ZTV11S19169C4_nt__11S19169C9_nt[4]),  4,6},
  {&(_tg__ZTV11S19169C5_nt11S19169C4_nt__11S19169C9_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__A1__11S19169C9_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C9_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A1__11S19169C9_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__11S19169C9_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A__11S19169C4_nt__11S19169C9_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt__11S19169C4_nt__11S19169C9_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__11S19169C9_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A2__11S19169C9_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S19169C9_nt[];
VTBL_ENTRY *P__ZTI11S19169C9_nt = _ZTI11S19169C9_nt; 
extern  VTBL_ENTRY _ZTV11S19169C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C9_nt[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C9_ntD0Ev,_ZTv0_n20_N11S19169C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N11S19169C9_ntD0Ev,_ZThn92_N11S19169C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C9_ntD1Ev,_ZTv0_n20_N11S19169C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N11S19169C9_ntD1Ev,_ZThn92_N11S19169C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19169C9_nt = {  "S19169C9_nt", // class name
  bases_S19169C9_nt, 12,
  &(vtc_S19169C9_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C9_nt[0]), // expected_vtt_contents
  ABISELECT(424,224), // object size
  NSPAIRA(_ZTI11S19169C9_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV11S19169C9_nt),24, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19169C9_nt),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C11_nt  {
  void  mf19169c11(); // _ZN12S19169C11_nt10mf19169c11Ev
  virtual  ~S19169C11_nt(); // _ZN12S19169C11_ntD1Ev
  S19169C11_nt(); // tgen
};
//SIG(-1 S19169C11_nt) C1{ vd m}


void  S19169C11_nt ::mf19169c11(){}
 S19169C11_nt ::~S19169C11_nt(){ note_dtor("S19169C11_nt", this);}
S19169C11_nt ::S19169C11_nt(){ note_ctor("S19169C11_nt", this);} // tgen

//skip512 S19169C11_nt

#else // __cplusplus

extern void _ZN12S19169C11_ntC1Ev();
extern void _ZN12S19169C11_ntD1Ev();
Name_Map name_map_S19169C11_nt[] = {
  NSPAIR(_ZN12S19169C11_ntC1Ev),
  NSPAIR(_ZN12S19169C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern void _ZN12S19169C11_ntD1Ev();
extern void _ZN12S19169C11_ntD0Ev();
static  VTBL_ENTRY vtc_S19169C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S19169C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19169C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
VTBL_ENTRY *P__ZTI12S19169C11_nt = _ZTI12S19169C11_nt; 
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
Class_Descriptor cd_S19169C11_nt = {  "S19169C11_nt", // class name
  0,0,//no base classes
  &(vtc_S19169C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S19169C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S19169C11_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  S19169C2_nt  : S19169C3_nt , virtual S19169C4_nt , S19169C9_nt , virtual S3222C8_nt , S19169C11_nt {
  __tsi64 s19169c2f0;
  void *s19169c2f1;
  virtual  ~S19169C2_nt(); // _ZN11S19169C2_ntD2Ev
  S19169C2_nt(); // tgen
};
//SIG(-1 S19169C2_nt) C1{ BC2{ m Fl[10]} VBC3{ BC4{ VBC5{ m Fp[6]} FL} BC2 BC6{ VBC5} BC7{ BC5 BC4 VBC6} vd FC4} BC8{ BC2 BC5 BC6 VBC3 vd} VBC9{ m Fi} BC10{ vd m} vd FL Fp}


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

//skip512 S19169C2_nt

#else // __cplusplus

extern void _ZN11S19169C2_ntC1Ev();
extern void _ZN11S19169C2_ntD2Ev();
Name_Map name_map_S19169C2_nt[] = {
  NSPAIR(_ZN11S19169C2_ntC1Ev),
  NSPAIR(_ZN11S19169C2_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C8_nt;
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
extern Class_Descriptor cd_S19169C4_nt;
extern VTBL_ENTRY _ZTI11S19169C4_nt[];
extern  VTBL_ENTRY _ZTV11S19169C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C4_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C9_nt;
extern VTBL_ENTRY _ZTI11S19169C9_nt[];
extern  VTBL_ENTRY _ZTV11S19169C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C9_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
static Base_Class bases_S19169C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C3_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(472,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19169C5_nt,    ABISELECT(240,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(256,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(336,176), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(360,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(344,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(520,276), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19169C8_nt,    ABISELECT(344,180), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C4_nt,    ABISELECT(240,124), //bcp->offset
    12, //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
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C3_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
    13, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19169C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3222C8_nt,    ABISELECT(528,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19169C11_nt,    ABISELECT(216,108), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S19169C2_nt[];
extern void _ZN11S19169C2_ntD1Ev();
extern void _ZN11S19169C2_ntD0Ev();
extern void ABISELECT(_ZThn216_N11S19169C2_ntD1Ev,_ZThn108_N11S19169C2_ntD1Ev)();
extern void ABISELECT(_ZThn216_N11S19169C2_ntD0Ev,_ZThn108_N11S19169C2_ntD0Ev)();
extern void ABISELECT(_ZTv0_n40_N11S19169C2_ntD1Ev,_ZTv0_n20_N11S19169C2_ntD1Ev)();
extern void ABISELECT(_ZThn240_N11S19169C2_ntD1Ev,_ZThn124_N11S19169C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S19169C2_ntD0Ev,_ZTv0_n20_N11S19169C2_ntD0Ev)();
extern void ABISELECT(_ZThn240_N11S19169C2_ntD0Ev,_ZThn124_N11S19169C2_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19169C2_nt[] = {
  ABISELECT(528,280),
  ABISELECT(520,276),
  ABISELECT(240,124),
  ABISELECT(472,252),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C2_ntD0Ev,
  ABISELECT(-216,-108),
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N11S19169C2_ntD1Ev,_ZThn108_N11S19169C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N11S19169C2_ntD0Ev,_ZThn108_N11S19169C2_ntD0Ev),
  ABISELECT(-240,-124),
  ABISELECT(280,152),
  ABISELECT(232,128),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C2_ntD1Ev,_ZTv0_n20_N11S19169C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C2_ntD0Ev,_ZTv0_n20_N11S19169C2_ntD0Ev),
  ABISELECT(136,76),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
  ABISELECT(-48,-24),
  ABISELECT(-520,-276),
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19169C2_nt[];
extern void _ZN11S19169C9_ntD1Ev();
extern void _ZN11S19169C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19169C9_nt__11S19169C2_nt[] = {
  ABISELECT(520,276),
  ABISELECT(240,124),
  ABISELECT(472,252),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C9_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C9_nt__A2__11S19169C2_nt[] = {
  ABISELECT(472,252),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N11S19169C9_ntD1Ev,_ZTv0_n20_N11S19169C9_ntD1Ev)();
extern void ABISELECT(_ZThn240_N11S19169C9_ntD1Ev,_ZThn124_N11S19169C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S19169C9_ntD0Ev,_ZTv0_n20_N11S19169C9_ntD0Ev)();
extern void ABISELECT(_ZThn240_N11S19169C9_ntD0Ev,_ZThn124_N11S19169C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__11S19169C9_nt__11S19169C2_nt[] = {
  ABISELECT(-240,-124),
  ABISELECT(280,152),
  ABISELECT(232,128),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C9_ntD1Ev,_ZTv0_n20_N11S19169C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C9_ntD0Ev,_ZTv0_n20_N11S19169C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__A1__11S19169C9_nt__11S19169C2_nt[] = {
  ABISELECT(136,76),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C9_nt__11S19169C2_nt[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A2__11S19169C9_nt__11S19169C2_nt[] = {
  ABISELECT(-48,-24),
  ABISELECT(-520,-276),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
};
extern void _ZN11S19169C4_ntD1Ev();
extern void _ZN11S19169C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__11S19169C2_nt[] = {
  ABISELECT(280,152),
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C4_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C4_nt__11S19169C2_nt[] = {
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__11S19169C2_nt[] = {
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C2_nt[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A1__11S19169C2_nt[] = {
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__11S19169C2_nt[] = {
  ABISELECT(-48,-24),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A__11S19169C4_nt__11S19169C2_nt[] = {
  ABISELECT(136,76),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt__11S19169C4_nt__11S19169C2_nt[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__11S19169C2_nt[] = {
  ABISELECT(-48,-24),
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__11S19169C2_nt[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTT_ENTRY vtt_S19169C2_nt[] = {
  {&(_ZTV11S19169C2_nt[6]),  6,29},
  {&(_tg__ZTV11S19169C9_nt__11S19169C2_nt[5]),  5,7},
  {&(_tg__ZTV11S19169C7_nt11S19169C9_nt__A2__11S19169C2_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C4_nt__11S19169C9_nt__11S19169C2_nt[5]),  5,7},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__A1__11S19169C9_nt__11S19169C2_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C9_nt__11S19169C2_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt__A2__11S19169C9_nt__11S19169C2_nt[3]),  3,3},
  {&(_ZTV11S19169C2_nt[17]),  17,29},
  {&(_ZTV11S19169C2_nt[22]),  22,29},
  {&(_ZTV11S19169C2_nt[26]),  26,29},
  {&(_ZTV11S19169C2_nt[29]),  29,29},
  {&(_tg__ZTV11S19169C4_nt__11S19169C2_nt[4]),  4,6},
  {&(_tg__ZTV11S19169C5_nt11S19169C4_nt__11S19169C2_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__11S19169C2_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C2_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A1__11S19169C2_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__11S19169C2_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A__11S19169C4_nt__11S19169C2_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt__11S19169C4_nt__11S19169C2_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__11S19169C2_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A1__11S19169C2_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S19169C2_nt[];
VTBL_ENTRY *P__ZTI11S19169C2_nt = _ZTI11S19169C2_nt; 
extern  VTBL_ENTRY _ZTV11S19169C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C2_nt[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C9_ntD0Ev,_ZTv0_n20_N11S19169C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S19169C9_ntD0Ev,_ZThn124_N11S19169C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C9_ntD1Ev,_ZTv0_n20_N11S19169C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S19169C9_ntD1Ev,_ZThn124_N11S19169C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C2_ntD0Ev,_ZTv0_n20_N11S19169C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S19169C2_ntD0Ev,_ZThn124_N11S19169C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C2_ntD1Ev,_ZTv0_n20_N11S19169C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S19169C2_ntD1Ev,_ZThn124_N11S19169C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19169C2_nt = {  "S19169C2_nt", // class name
  bases_S19169C2_nt, 16,
  &(vtc_S19169C2_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C2_nt[0]), // expected_vtt_contents
  ABISELECT(536,284), // object size
  NSPAIRA(_ZTI11S19169C2_nt),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV11S19169C2_nt),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19169C2_nt),21, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C14_nt  : S3222C8_nt , S19169C6_nt , S19169C7_nt , S19169C5_nt , virtual S19169C3_nt {
  int s19169c14f0;
  ~S19169C14_nt(); // tgen
  S19169C14_nt(); // tgen
};
//SIG(-1 S19169C14_nt) C1{ BC2{ m Fi} BC3{ m Fp[6]} BC4{ VBC3} BC5{ VBC3 FL} VBC6{ m Fl[10]} Fi}


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

//skip512 S19169C14_nt

#else // __cplusplus

extern void _ZN12S19169C14_ntC1Ev();
extern void _ZN12S19169C14_ntD1Ev();
Name_Map name_map_S19169C14_nt[] = {
  NSPAIR(_ZN12S19169C14_ntC1Ev),
  NSPAIR(_ZN12S19169C14_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
static Base_Class bases_S19169C14_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3222C8_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_S19169C6_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19169C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C5_nt,    ABISELECT(64,32), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C3_nt,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI12S19169C14_nt[];
static  VTBL_ENTRY vtc_S19169C14_nt[] = {
  ABISELECT(136,72),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
  ABISELECT(24,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
};
extern VTBL_ENTRY _ZTV12S19169C14_nt[];
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__12S19169C14_nt[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt__12S19169C14_nt[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTT_ENTRY vtt_S19169C14_nt[] = {
  {&(_ZTV12S19169C14_nt[4]),  4,7},
  {&(_tg__ZTV11S19169C7_nt__12S19169C14_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C5_nt__12S19169C14_nt[3]),  3,3},
  {&(_ZTV12S19169C14_nt[7]),  7,7},
};
extern VTBL_ENTRY _ZTI12S19169C14_nt[];
VTBL_ENTRY *P__ZTI12S19169C14_nt = _ZTI12S19169C14_nt; 
extern  VTBL_ENTRY _ZTV12S19169C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C14_nt[];
Class_Descriptor cd_S19169C14_nt = {  "S19169C14_nt", // class name
  bases_S19169C14_nt, 6,
  &(vtc_S19169C14_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C14_nt[0]), // expected_vtt_contents
  ABISELECT(216,112), // object size
  NSPAIRA(_ZTI12S19169C14_nt),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV12S19169C14_nt),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S19169C14_nt),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C13_nt  : virtual S19169C3_nt , virtual S19169C14_nt , virtual S3222C8_nt {
  ~S19169C13_nt(); // tgen
  S19169C13_nt(); // tgen
};
//SIG(-1 S19169C13_nt) C1{ VBC2{ m Fl[10]} VBC3{ BC4{ m Fi} BC5{ m Fp[6]} BC6{ VBC5} BC7{ VBC5 FL} VBC2 Fi} VBC4}


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

//skip512 S19169C13_nt

#else // __cplusplus

extern void _ZN12S19169C13_ntC1Ev();
extern void _ZN12S19169C13_ntD1Ev();
Name_Map name_map_S19169C13_nt[] = {
  NSPAIR(_ZN12S19169C13_ntC1Ev),
  NSPAIR(_ZN12S19169C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C14_nt;
extern VTBL_ENTRY _ZTI12S19169C14_nt[];
extern  VTBL_ENTRY _ZTV12S19169C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C14_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19169C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19169C7_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(152,76), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19169C14_nt,    ABISELECT(88,44), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(224,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI12S19169C13_nt[];
static  VTBL_ENTRY vtc_S19169C13_nt[] = {
  ABISELECT(224,116),
  ABISELECT(176,92),
  ABISELECT(88,44),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
  ABISELECT(-80,-40),
  ABISELECT(88,48),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
  ABISELECT(24,16),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
extern VTBL_ENTRY _ZTV12S19169C13_nt[];
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C13_nt[] = {
  ABISELECT(-80,-40),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt12S19169C14_nt__12S19169C13_nt[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt__12S19169C14_nt__12S19169C13_nt[] = {
  ABISELECT(24,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
};
static  VTT_ENTRY vtt_S19169C13_nt[] = {
  {&(_ZTV12S19169C13_nt[6]),  6,13},
  {&(_ZTV12S19169C13_nt[10]),  10,13},
  {&(_ZTV12S19169C13_nt[13]),  13,13},
  {&(_tg__ZTV12S19169C14_nt__12S19169C13_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt12S19169C14_nt__12S19169C13_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C5_nt__12S19169C14_nt__12S19169C13_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S19169C13_nt[];
VTBL_ENTRY *P__ZTI12S19169C13_nt = _ZTI12S19169C13_nt; 
extern  VTBL_ENTRY _ZTV12S19169C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C13_nt[];
Class_Descriptor cd_S19169C13_nt = {  "S19169C13_nt", // class name
  bases_S19169C13_nt, 8,
  &(vtc_S19169C13_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C13_nt[0]), // expected_vtt_contents
  ABISELECT(232,120), // object size
  NSPAIRA(_ZTI12S19169C13_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV12S19169C13_nt),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S19169C13_nt),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C16_nt  {
  ::S19169C5_nt s19169c16f0;
  void  mf19169c16(); // _ZN12S19169C16_nt10mf19169c16Ev
};
//SIG(-1 S19169C16_nt) C1{ m FC2{ VBC3{ m Fp[6]} FL}}


void  S19169C16_nt ::mf19169c16(){}

//skip512 S19169C16_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S19169C16_nt[];
VTBL_ENTRY *P__ZTI12S19169C16_nt = _ZTI12S19169C16_nt; 
Class_Descriptor cd_S19169C16_nt = {  "S19169C16_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI12S19169C16_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C15_nt  : S19169C8_nt , virtual S19169C13_nt , virtual S19169C4_nt , S19169C16_nt , S19169C6_nt {
  virtual  ~S19169C15_nt(); // _ZN12S19169C15_ntD2Ev
  S19169C15_nt(); // tgen
};
//SIG(-1 S19169C15_nt) C1{ BC2{ BC3{ m Fp[6]} BC4{ VBC3 FL} VBC5{ VBC3}} VBC6{ VBC7{ m Fl[10]} VBC8{ BC9{ m Fi} BC3 BC5 BC4 VBC7 Fi} VBC9} VBC10{ BC4 BC7 BC5 BC2 vd FC4} BC11{ m FC4} BC3 vd}


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

//skip512 S19169C15_nt

#else // __cplusplus

extern void _ZN12S19169C15_ntC1Ev();
extern void _ZN12S19169C15_ntD2Ev();
Name_Map name_map_S19169C15_nt[] = {
  NSPAIR(_ZN12S19169C15_ntC1Ev),
  NSPAIR(_ZN12S19169C15_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C8_nt;
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C14_nt;
extern VTBL_ENTRY _ZTI12S19169C14_nt[];
extern  VTBL_ENTRY _ZTV12S19169C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C14_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C13_nt;
extern VTBL_ENTRY _ZTI12S19169C13_nt[];
extern  VTBL_ENTRY _ZTV12S19169C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C13_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C8_nt;
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
extern Class_Descriptor cd_S19169C4_nt;
extern VTBL_ENTRY _ZTI11S19169C4_nt[];
extern  VTBL_ENTRY _ZTV11S19169C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C4_nt[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S19169C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(176,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
    2, //immediately_derived
  0, 1},
  {&cd_S19169C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(224,120), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19169C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C3_nt,    ABISELECT(240,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(328,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(336,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(320,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(384,200), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19169C14_nt,    ABISELECT(320,168), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(404,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19169C13_nt,    ABISELECT(232,124), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C5_nt,    ABISELECT(408,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(424,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(504,272), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(528,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(512,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19169C8_nt,    ABISELECT(512,276), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19169C4_nt,    ABISELECT(408,220), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C16_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S19169C15_nt[];
extern void _ZN12S19169C15_ntD1Ev();
extern void _ZN12S19169C15_ntD0Ev();
extern void ABISELECT(_ZTv0_n40_N12S19169C15_ntD1Ev,_ZTv0_n20_N12S19169C15_ntD1Ev)();
extern void ABISELECT(_ZThn408_N12S19169C15_ntD1Ev,_ZThn220_N12S19169C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S19169C15_ntD0Ev,_ZTv0_n20_N12S19169C15_ntD0Ev)();
extern void ABISELECT(_ZThn408_N12S19169C15_ntD0Ev,_ZThn220_N12S19169C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19169C15_nt[] = {
  ABISELECT(408,220),
  ABISELECT(404,216),
  ABISELECT(320,168),
  ABISELECT(240,128),
  ABISELECT(232,124),
  ABISELECT(224,120),
  ABISELECT(176,96),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S19169C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19169C15_ntD0Ev,
  ABISELECT(-48,-24),
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  ABISELECT(172,92),
  ABISELECT(-56,-28),
  ABISELECT(88,44),
  ABISELECT(8,4),
  ABISELECT(-232,-124),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  ABISELECT(-80,-40),
  ABISELECT(-144,-72),
  ABISELECT(-320,-168),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  ABISELECT(-208,-104),
  ABISELECT(-384,-200),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  ABISELECT(-408,-220),
  ABISELECT(-184,-100),
  ABISELECT(-232,-124),
  ABISELECT(-408,-220),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C15_ntD1Ev,_ZTv0_n20_N12S19169C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C15_ntD0Ev,_ZTv0_n20_N12S19169C15_ntD0Ev),
  ABISELECT(-328,-176),
  ABISELECT(-504,-272),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  ABISELECT(-288,-156),
  ABISELECT(-336,-180),
  ABISELECT(-512,-276),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
extern VTBL_ENTRY _ZTV12S19169C15_nt[];
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt__12S19169C15_nt[] = {
  ABISELECT(224,120),
  ABISELECT(176,96),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C8_nt__12S19169C15_nt[] = {
  ABISELECT(176,96),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt__12S19169C15_nt[] = {
  ABISELECT(-48,-24),
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__12S19169C15_nt[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C13_nt__12S19169C15_nt[] = {
  ABISELECT(172,92),
  ABISELECT(-56,-28),
  ABISELECT(88,44),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C13_nt__12S19169C15_nt[] = {
  ABISELECT(-80,-40),
  ABISELECT(-144,-72),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt__12S19169C15_nt[] = {
  ABISELECT(-208,-104),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C15_nt[] = {
  ABISELECT(-80,-40),
  ABISELECT(-144,-72),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt12S19169C14_nt__A1__12S19169C15_nt[] = {
  ABISELECT(-144,-72),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__A1__12S19169C15_nt[] = {
  ABISELECT(-208,-104),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt__12S19169C14_nt__12S19169C15_nt[] = {
  ABISELECT(-208,-104),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
};
extern void _ZN11S19169C4_ntD1Ev();
extern void _ZN11S19169C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__12S19169C15_nt[] = {
  ABISELECT(-184,-100),
  ABISELECT(-232,-124),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C4_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C4_nt__A2__12S19169C15_nt[] = {
  ABISELECT(-232,-124),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C15_nt[] = {
  ABISELECT(-328,-176),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C15_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-336,-180),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A3__12S19169C15_nt[] = {
  ABISELECT(-336,-180),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__A1__12S19169C15_nt[] = {
  ABISELECT(-48,-24),
  ABISELECT(288,156),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A__11S19169C4_nt__12S19169C15_nt[] = {
  ABISELECT(-328,-176),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt__11S19169C4_nt__12S19169C15_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-336,-180),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__12S19169C15_nt[] = {
  ABISELECT(-48,-24),
  ABISELECT(184,100),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTT_ENTRY vtt_S19169C15_nt[] = {
  {&(_ZTV12S19169C15_nt[9]),  9,41},
  {&(_tg__ZTV11S19169C8_nt__12S19169C15_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt11S19169C8_nt__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt__12S19169C15_nt[3]),  3,3},
  {&(_ZTV12S19169C15_nt[14]),  14,41},
  {&(_ZTV12S19169C15_nt[20]),  20,41},
  {&(_ZTV12S19169C15_nt[24]),  24,41},
  {&(_ZTV12S19169C15_nt[27]),  27,41},
  {&(_ZTV12S19169C15_nt[32]),  32,41},
  {&(_ZTV12S19169C15_nt[37]),  37,41},
  {&(_ZTV12S19169C15_nt[41]),  41,41},
  {&(_tg__ZTV11S19169C7_nt__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV12S19169C13_nt__12S19169C15_nt[6]),  6,6},
  {&(_tg__ZTV12S19169C14_nt__12S19169C13_nt__12S19169C15_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV12S19169C14_nt__12S19169C15_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt12S19169C14_nt__A1__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__A1__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C5_nt__12S19169C14_nt__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C4_nt__12S19169C15_nt[4]),  4,6},
  {&(_tg__ZTV11S19169C5_nt11S19169C4_nt__A2__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C15_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A3__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__A1__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A__11S19169C4_nt__12S19169C15_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt__11S19169C4_nt__12S19169C15_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__12S19169C15_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S19169C15_nt[];
VTBL_ENTRY *P__ZTI12S19169C15_nt = _ZTI12S19169C15_nt; 
extern  VTBL_ENTRY _ZTV12S19169C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C15_nt[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S19169C15_ntD0Ev,_ZTv0_n20_N12S19169C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N12S19169C15_ntD0Ev,_ZThn220_N12S19169C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S19169C15_ntD1Ev,_ZTv0_n20_N12S19169C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N12S19169C15_ntD1Ev,_ZThn220_N12S19169C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19169C15_nt = {  "S19169C15_nt", // class name
  bases_S19169C15_nt, 22,
  &(vtc_S19169C15_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C15_nt[0]), // expected_vtt_contents
  ABISELECT(640,348), // object size
  NSPAIRA(_ZTI12S19169C15_nt),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV12S19169C15_nt),41, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S19169C15_nt),28, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C12_nt  : S19169C13_nt , virtual S19169C7_nt , S19169C6_nt , virtual S19169C15_nt {
  ~S19169C12_nt(); // tgen
  S19169C12_nt(); // tgen
};
//SIG(-1 S19169C12_nt) C1{ BC2{ VBC3{ m Fl[10]} VBC4{ BC5{ m Fi} BC6{ m Fp[6]} BC7{ VBC6} BC8{ VBC6 FL} VBC3 Fi} VBC5} VBC7 BC6 VBC9{ BC10{ BC6 BC8 VBC7} VBC2 VBC11{ BC8 BC3 BC7 BC10 vd FC8} BC12{ m FC8} BC6 vd}}


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

//skip512 S19169C12_nt

#else // __cplusplus

extern void _ZN12S19169C12_ntC1Ev();
extern void _ZN12S19169C12_ntD1Ev();
Name_Map name_map_S19169C12_nt[] = {
  NSPAIR(_ZN12S19169C12_ntC1Ev),
  NSPAIR(_ZN12S19169C12_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C14_nt;
extern VTBL_ENTRY _ZTI12S19169C14_nt[];
extern  VTBL_ENTRY _ZTV12S19169C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C14_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C13_nt;
extern VTBL_ENTRY _ZTI12S19169C13_nt[];
extern  VTBL_ENTRY _ZTV12S19169C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C13_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C8_nt;
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
extern Class_Descriptor cd_S19169C13_nt;
extern VTBL_ENTRY _ZTI12S19169C13_nt[];
extern  VTBL_ENTRY _ZTV12S19169C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C13_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C8_nt;
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
extern Class_Descriptor cd_S19169C4_nt;
extern VTBL_ENTRY _ZTI11S19169C4_nt[];
extern  VTBL_ENTRY _ZTV11S19169C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C4_nt[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C15_nt;
extern VTBL_ENTRY _ZTI12S19169C15_nt[];
extern  VTBL_ENTRY _ZTV12S19169C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C15_nt[];
static Base_Class bases_S19169C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C3_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(152,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(224,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19169C7_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(200,100), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19169C14_nt,    ABISELECT(136,68), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(272,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19169C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C7_nt,    ABISELECT(280,144), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C6_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_S19169C6_nt,    ABISELECT(304,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19169C8_nt,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19169C13_nt,    ABISELECT(464,244), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19169C5_nt,    ABISELECT(472,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(488,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(568,300), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(592,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(576,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19169C8_nt,    ABISELECT(576,304), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19169C4_nt,    ABISELECT(472,248), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19169C16_nt,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(416,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C15_nt,    ABISELECT(288,148), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI12S19169C12_nt[];
extern void _ZN12S19169C12_ntD1Ev();
extern void _ZN12S19169C12_ntD0Ev();
extern void ABISELECT(_ZTv0_n80_N12S19169C12_ntD1Ev,_ZTv0_n40_N12S19169C12_ntD1Ev)();
extern void ABISELECT(_ZThn288_N12S19169C12_ntD1Ev,_ZThn148_N12S19169C12_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S19169C12_ntD0Ev,_ZTv0_n40_N12S19169C12_ntD0Ev)();
extern void ABISELECT(_ZThn288_N12S19169C12_ntD0Ev,_ZThn148_N12S19169C12_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S19169C12_ntD1Ev,_ZTv0_n20_N12S19169C12_ntD1Ev)();
extern void ABISELECT(_ZThn472_N12S19169C12_ntD1Ev,_ZThn248_N12S19169C12_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S19169C12_ntD0Ev,_ZTv0_n20_N12S19169C12_ntD0Ev)();
extern void ABISELECT(_ZThn472_N12S19169C12_ntD0Ev,_ZThn248_N12S19169C12_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19169C12_nt[] = {
  ABISELECT(472,248),
  ABISELECT(464,244),
  ABISELECT(288,148),
  ABISELECT(280,144),
  ABISELECT(272,140),
  ABISELECT(224,116),
  ABISELECT(136,68),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  (VTBL_ENTRY)&_ZN12S19169C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19169C12_ntD0Ev,
  ABISELECT(-80,-40),
  ABISELECT(88,48),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  ABISELECT(24,16),
  ABISELECT(-200,-100),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  ABISELECT(-56,-28),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  ABISELECT(-288,-148),
  ABISELECT(184,100),
  ABISELECT(-16,-8),
  ABISELECT(-152,-80),
  ABISELECT(-232,-120),
  ABISELECT(176,96),
  ABISELECT(-8,-4),
  ABISELECT(-64,-32),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S19169C12_ntD1Ev,_ZTv0_n40_N12S19169C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S19169C12_ntD0Ev,_ZTv0_n40_N12S19169C12_ntD0Ev),
  ABISELECT(-192,-104),
  ABISELECT(-240,-128),
  ABISELECT(-328,-176),
  ABISELECT(-408,-216),
  ABISELECT(-464,-244),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  ABISELECT(-472,-248),
  ABISELECT(-192,-104),
  ABISELECT(-248,-132),
  ABISELECT(-472,-248),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C12_ntD1Ev,_ZTv0_n20_N12S19169C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C12_ntD0Ev,_ZTv0_n20_N12S19169C12_ntD0Ev),
  ABISELECT(-344,-184),
  ABISELECT(-568,-300),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  ABISELECT(-296,-160),
  ABISELECT(-352,-188),
  ABISELECT(-576,-304),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
};
extern VTBL_ENTRY _ZTV12S19169C12_nt[];
static  VTBL_ENTRY _tg__ZTV12S19169C13_nt__A__12S19169C12_nt[] = {
  ABISELECT(272,140),
  ABISELECT(224,116),
  ABISELECT(136,68),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C13_nt__A__12S19169C12_nt[] = {
  ABISELECT(-80,-40),
  ABISELECT(88,48),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt__A__12S19169C12_nt[] = {
  ABISELECT(24,16),
  ABISELECT(-200,-100),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C12_nt[] = {
  ABISELECT(-80,-40),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt12S19169C14_nt__12S19169C12_nt[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C12_nt[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt__12S19169C14_nt__12S19169C12_nt[] = {
  ABISELECT(24,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__12S19169C12_nt[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
extern void _ZN12S19169C15_ntD1Ev();
extern void _ZN12S19169C15_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(184,100),
  ABISELECT(-16,-8),
  ABISELECT(-152,-80),
  ABISELECT(-232,-120),
  ABISELECT(176,96),
  ABISELECT(-8,-4),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S19169C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19169C15_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C8_nt12S19169C15_nt__A1__12S19169C12_nt[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C13_nt__12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(-192,-104),
  ABISELECT(-240,-128),
  ABISELECT(-328,-176),
  ABISELECT(-408,-216),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(-80,-40),
  ABISELECT(88,48),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__A1__12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(24,16),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S19169C15_ntD1Ev,_ZTv0_n20_N12S19169C15_ntD1Ev)();
extern void ABISELECT(_ZThn184_N12S19169C15_ntD1Ev,_ZThn100_N12S19169C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S19169C15_ntD0Ev,_ZTv0_n20_N12S19169C15_ntD0Ev)();
extern void ABISELECT(_ZThn184_N12S19169C15_ntD0Ev,_ZThn100_N12S19169C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(-184,-100),
  ABISELECT(-192,-104),
  ABISELECT(-248,-132),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C15_ntD1Ev,_ZTv0_n20_N12S19169C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C15_ntD0Ev,_ZTv0_n20_N12S19169C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(-344,-184),
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C15_nt__12S19169C12_nt[] = {
  ABISELECT(-296,-160),
  ABISELECT(-352,-188),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C13_nt__A1__12S19169C12_nt[] = {
  ABISELECT(-192,-104),
  ABISELECT(-240,-128),
  ABISELECT(-328,-176),
  ABISELECT(-408,-216),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C13_nt__A1__12S19169C12_nt[] = {
  ABISELECT(-80,-40),
  ABISELECT(88,48),
  ABISELECT(328,176),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt__A1__12S19169C12_nt[] = {
  ABISELECT(24,16),
  ABISELECT(264,144),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
extern void _ZN11S19169C4_ntD1Ev();
extern void _ZN11S19169C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__12S19169C12_nt[] = {
  ABISELECT(-192,-104),
  ABISELECT(-248,-132),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C4_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C4_nt__A2__12S19169C12_nt[] = {
  ABISELECT(-248,-132),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C12_nt[] = {
  ABISELECT(-344,-184),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C12_nt[] = {
  ABISELECT(-296,-160),
  ABISELECT(-352,-188),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A3__12S19169C12_nt[] = {
  ABISELECT(-352,-188),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__A1__12S19169C12_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(296,160),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A__11S19169C4_nt__12S19169C12_nt[] = {
  ABISELECT(-344,-184),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt__11S19169C4_nt__12S19169C12_nt[] = {
  ABISELECT(-296,-160),
  ABISELECT(-352,-188),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__12S19169C12_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTT_ENTRY vtt_S19169C12_nt[] = {
  {&(_ZTV12S19169C12_nt[10]),  10,54},
  {&(_tg__ZTV12S19169C13_nt__A__12S19169C12_nt[6]),  6,6},
  {&(_tg__ZTV12S19169C14_nt__12S19169C13_nt__A__12S19169C12_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt__A__12S19169C12_nt[3]),  3,3},
  {&(_ZTV12S19169C12_nt[16]),  16,54},
  {&(_ZTV12S19169C12_nt[19]),  19,54},
  {&(_ZTV12S19169C12_nt[22]),  22,54},
  {&(_ZTV12S19169C12_nt[32]),  32,54},
  {&(_ZTV12S19169C12_nt[40]),  40,54},
  {&(_ZTV12S19169C12_nt[45]),  45,54},
  {&(_ZTV12S19169C12_nt[50]),  50,54},
  {&(_ZTV12S19169C12_nt[54]),  54,54},
  {&(_tg__ZTV12S19169C14_nt__12S19169C12_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt12S19169C14_nt__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C5_nt__12S19169C14_nt__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A1__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV12S19169C15_nt__12S19169C12_nt[9]),  9,11},
  {&(_tg__ZTV11S19169C8_nt12S19169C15_nt__12S19169C12_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt11S19169C8_nt12S19169C15_nt__A1__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt12S19169C15_nt__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__12S19169C15_nt__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV12S19169C13_nt__12S19169C15_nt__12S19169C12_nt[6]),  6,6},
  {&(_tg__ZTV12S19169C14_nt__12S19169C15_nt__12S19169C12_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__A1__12S19169C15_nt__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C4_nt__12S19169C15_nt__12S19169C12_nt[5]),  5,7},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C15_nt__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C15_nt__12S19169C12_nt[4]),  4,4},
  {&(_tg__ZTV12S19169C13_nt__A1__12S19169C12_nt[6]),  6,6},
  {&(_tg__ZTV12S19169C14_nt__12S19169C13_nt__A1__12S19169C12_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt__A1__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C4_nt__12S19169C12_nt[4]),  4,6},
  {&(_tg__ZTV11S19169C5_nt11S19169C4_nt__A2__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C12_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A3__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__A1__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A__11S19169C4_nt__12S19169C12_nt[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt__11S19169C4_nt__12S19169C12_nt[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__12S19169C12_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S19169C12_nt[];
VTBL_ENTRY *P__ZTI12S19169C12_nt = _ZTI12S19169C12_nt; 
extern  VTBL_ENTRY _ZTV12S19169C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C12_nt[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S19169C15_ntD0Ev,_ZTv0_n20_N12S19169C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N12S19169C15_ntD0Ev,_ZThn100_N12S19169C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S19169C15_ntD1Ev,_ZTv0_n20_N12S19169C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N12S19169C15_ntD1Ev,_ZThn100_N12S19169C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S19169C12_ntD0Ev,_ZTv0_n20_N12S19169C12_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N12S19169C12_ntD0Ev,_ZThn248_N12S19169C12_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S19169C12_ntD1Ev,_ZTv0_n20_N12S19169C12_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N12S19169C12_ntD1Ev,_ZThn248_N12S19169C12_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S19169C12_ntD0Ev,_ZTv0_n40_N12S19169C12_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N12S19169C12_ntD0Ev,_ZThn148_N12S19169C12_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S19169C12_ntD1Ev,_ZTv0_n40_N12S19169C12_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N12S19169C12_ntD1Ev,_ZThn148_N12S19169C12_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19169C12_nt = {  "S19169C12_nt", // class name
  bases_S19169C12_nt, 25,
  &(vtc_S19169C12_nt[0]), // expected_vtbl_contents
  &(vtt_S19169C12_nt[0]), // expected_vtt_contents
  ABISELECT(704,376), // object size
  NSPAIRA(_ZTI12S19169C12_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV12S19169C12_nt),54, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S19169C12_nt),40, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C17_nt  : S19169C16_nt , S19169C6_nt , virtual S19169C5_nt , virtual S19169C3_nt {
  int s19169c17f0;
  ~S19169C17_nt(); // tgen
  S19169C17_nt(); // tgen
};
//SIG(1 S19169C17_nt) C1{ BC2{ m FC3{ VBC4{ m Fp[6]} FL}} BC4 VBC3 VBC5{ m Fl[10]} Fi}


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

//skip512 S19169C17_nt

#else // __cplusplus

extern void _ZN12S19169C17_ntC1Ev();
extern void _ZN12S19169C17_ntD1Ev();
Name_Map name_map_S19169C17_nt[] = {
  NSPAIR(_ZN12S19169C17_ntC1Ev),
  NSPAIR(_ZN12S19169C17_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
static Base_Class bases_S19169C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C16_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_S19169C6_nt,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19169C5_nt,    ABISELECT(128,68), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C3_nt,    ABISELECT(192,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},
  {0}};
extern VTBL_ENTRY _ZTI12S19169C17_nt[];
static  VTBL_ENTRY vtc_S19169C17_nt[] = {
  ABISELECT(192,104),
  ABISELECT(144,80),
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C17_nt[0]),
  ABISELECT(16,12),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI12S19169C17_nt[0]),
};
extern VTBL_ENTRY _ZTV12S19169C17_nt[];
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt__12S19169C17_nt[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTT_ENTRY vtt_S19169C17_nt[] = {
  {&(_ZTV12S19169C17_nt[5]),  5,8},
  {&(_ZTV12S19169C17_nt[8]),  8,8},
  {&(_tg__ZTV11S19169C5_nt__12S19169C17_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S19169C17_nt[];
VTBL_ENTRY *P__ZTI12S19169C17_nt = _ZTI12S19169C17_nt; 
extern  VTBL_ENTRY _ZTV12S19169C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C17_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19169C1  : virtual S19169C2_nt , virtual S19169C12_nt {
  ::S19169C17_nt s19169c1f0[3];
  ~S19169C1(); // tgen
  S19169C1(); // tgen
};
//SIG(1 S19169C1) C1{ VBC2{ BC3{ m Fl[10]} VBC4{ BC5{ VBC6{ m Fp[6]} FL} BC3 BC7{ VBC6} BC8{ BC6 BC5 VBC7} vd FC5} BC9{ BC3 BC6 BC7 VBC4 vd} VBC10{ m Fi} BC11{ vd m} vd FL Fp} VBC12{ BC13{ VBC3 VBC14{ BC10 BC6 BC7 BC5 VBC3 Fi} VBC10} VBC7 BC6 VBC15{ BC8 VBC13 VBC4 BC16{ m FC5} BC6 vd}} FC17{ BC16 BC6 VBC5 VBC3 Fi}[3]}


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

static void Test_S19169C1()
{
  extern Class_Descriptor cd_S19169C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(221,234)];
    init_test(&cd_S19169C1, buf);
    S19169C1 *dp, &lv = *(dp=new (buf) S19169C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1760,932), "sizeof(S19169C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19169C1)");
    /*is_ambiguous_... S19169C2_nt::S19169C3_nt */ AMB_check_base_class_offset(lv, (S19169C3_nt*)(S19169C2_nt*), ABISELECT(960,504), "S19169C1");
    /*is_ambiguous_... S19169C4_nt::S19169C5_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C5_nt*)(S19169C4_nt*), ABISELECT(1296,688), "S19169C1");
    /*is_ambiguous_... S19169C4_nt::S19169C7_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C7_nt*)(S19169C4_nt*), ABISELECT(1296,688), "S19169C1");
    check_base_class_offset(lv, (S19169C6_nt*)(S19169C5_nt*)(S19169C8_nt*)(S19169C4_nt*), ABISELECT(1296,688), "S19169C1");
    /*is_ambiguous_... S19169C1::S19169C7_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C7_nt*), ABISELECT(1296,688), "S19169C1");
    /*is_ambiguous_... S19169C9_nt::S19169C7_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C7_nt*)(S19169C9_nt*)(S19169C2_nt*), ABISELECT(1296,688), "S19169C1");
    check_base_class_offset(lv, (S19169C6_nt*)(S19169C7_nt*)(S19169C14_nt*), ABISELECT(1296,688), "S19169C1");
    check_base_class_offset(lv, (S19169C6_nt*)(S19169C5_nt*)(S19169C14_nt*), ABISELECT(1296,688), "S19169C1");
    /*is_ambiguous_... S19169C15_nt::S19169C8_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C5_nt*)(S19169C8_nt*)(S19169C15_nt*), ABISELECT(1296,688), "S19169C1");
    /*is_ambiguous_... S19169C4_nt::S19169C5_nt */ AMB_check_base_class_offset(lv, (S19169C5_nt*)(S19169C4_nt*), ABISELECT(1064,560), "S19169C1");
    check_base_class_offset(lv, (S19169C3_nt*)(S19169C4_nt*), ABISELECT(1080,572), "S19169C1");
    /*is_ambiguous_... S19169C4_nt::S19169C7_nt */ AMB_check_base_class_offset(lv, (S19169C7_nt*)(S19169C4_nt*), ABISELECT(1160,612), "S19169C1");
    /*is_ambiguous_... S19169C8_nt::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C8_nt*)(S19169C4_nt*), ABISELECT(1184,628), "S19169C1");
    check_base_class_offset(lv, (S19169C5_nt*)(S19169C8_nt*)(S19169C4_nt*), ABISELECT(1168,616), "S19169C1");
    check_base_class_offset(lv, (S19169C7_nt*)(S19169C8_nt*)(S19169C4_nt*), 0, "S19169C1");
    /*is_ambiguous_... S19169C12_nt::S19169C7_nt */ AMB_check_base_class_offset(lv, (S19169C7_nt*)(S19169C12_nt*), 0, "S19169C1");
    /*is_ambiguous_... S19169C15_nt::S19169C8_nt */ AMB_check_base_class_offset(lv, (S19169C7_nt*)(S19169C8_nt*)(S19169C15_nt*), 0, "S19169C1");
    check_base_class_offset(lv, (S19169C8_nt*)(S19169C4_nt*), ABISELECT(1168,616), "S19169C1");
    check_base_class_offset(lv, (S19169C4_nt*)(S19169C2_nt*), ABISELECT(1064,560), "S19169C1");
    check_base_class_offset(lv, (S19169C4_nt*)(S19169C9_nt*)(S19169C2_nt*), ABISELECT(1064,560), "S19169C1");
    check_base_class_offset(lv, (S19169C4_nt*)(S19169C15_nt*), ABISELECT(1064,560), "S19169C1");
    /*is_ambiguous_... S19169C9_nt::S19169C3_nt */ AMB_check_base_class_offset(lv, (S19169C3_nt*)(S19169C9_nt*)(S19169C2_nt*), ABISELECT(832,440), "S19169C1");
    /*is_ambiguous_... S19169C9_nt::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C9_nt*)(S19169C2_nt*), ABISELECT(912,480), "S19169C1");
    /*is_ambiguous_... S19169C9_nt::S19169C7_nt */ AMB_check_base_class_offset(lv, (S19169C7_nt*)(S19169C9_nt*)(S19169C2_nt*), ABISELECT(824,436), "S19169C1");
    check_base_class_offset(lv, (S19169C9_nt*)(S19169C2_nt*), ABISELECT(824,436), "S19169C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19169C2_nt*), ABISELECT(1344,712), "S19169C1");
    /*is_ambiguous_... S19169C12_nt::S19169C13_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19169C13_nt*)(S19169C12_nt*), ABISELECT(1344,712), "S19169C1");
    /*is_ambiguous_... S19169C1::S19169C13_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19169C13_nt*), ABISELECT(1344,712), "S19169C1");
    check_base_class_offset(lv, (S19169C11_nt*)(S19169C2_nt*), ABISELECT(1040,544), "S19169C1");
    check_base_class_offset(lv, (S19169C2_nt*), ABISELECT(824,436), "S19169C1");
    /*is_ambiguous_... S19169C12_nt::S19169C13_nt */ AMB_check_base_class_offset(lv, (S19169C3_nt*)(S19169C13_nt*)(S19169C12_nt*), ABISELECT(1408,744), "S19169C1");
    check_base_class_offset(lv, (S19169C3_nt*)(S19169C14_nt*), ABISELECT(1408,744), "S19169C1");
    /*is_ambiguous_... S19169C1::S19169C13_nt */ AMB_check_base_class_offset(lv, (S19169C3_nt*)(S19169C13_nt*), ABISELECT(1408,744), "S19169C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19169C14_nt*), ABISELECT(1496,788), "S19169C1");
    /*is_ambiguous_... S19169C14_nt::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C14_nt*), ABISELECT(1504,792), "S19169C1");
    check_base_class_offset(lv, (S19169C7_nt*)(S19169C14_nt*), ABISELECT(1488,784), "S19169C1");
    check_base_class_offset(lv, (S19169C5_nt*)(S19169C14_nt*), ABISELECT(1552,816), "S19169C1");
    /*is_ambiguous_... S19169C12_nt::S19169C13_nt */ AMB_check_base_class_offset(lv, (S19169C14_nt*)(S19169C13_nt*)(S19169C12_nt*), ABISELECT(1488,784), "S19169C1");
    /*is_ambiguous_... S19169C1::S19169C13_nt */ AMB_check_base_class_offset(lv, (S19169C14_nt*)(S19169C13_nt*), ABISELECT(1488,784), "S19169C1");
    /*is_ambiguous_... S19169C12_nt::S19169C13_nt */ AMB_check_base_class_offset(lv, (S19169C13_nt*)(S19169C12_nt*), ABISELECT(1352,716), "S19169C1");
    /*is_ambiguous_... S19169C12_nt::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C12_nt*), ABISELECT(1360,720), "S19169C1");
    /*is_ambiguous_... S19169C15_nt::S19169C8_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C8_nt*)(S19169C15_nt*), ABISELECT(1592,844), "S19169C1");
    /*is_ambiguous_... S19169C15_nt::S19169C8_nt */ AMB_check_base_class_offset(lv, (S19169C5_nt*)(S19169C8_nt*)(S19169C15_nt*), ABISELECT(1576,832), "S19169C1");
    /*is_ambiguous_... S19169C15_nt::S19169C8_nt */ AMB_check_base_class_offset(lv, (S19169C8_nt*)(S19169C15_nt*), ABISELECT(1576,832), "S19169C1");
    check_base_class_offset(lv, (S19169C13_nt*)(S19169C15_nt*), ABISELECT(1752,928), "S19169C1");
    check_base_class_offset(lv, (S19169C16_nt*)(S19169C15_nt*), ABISELECT(1640,868), "S19169C1");
    /*is_ambiguous_... S19169C15_nt::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19169C15_nt*), ABISELECT(1704,904), "S19169C1");
    check_base_class_offset(lv, (S19169C15_nt*)(S19169C12_nt*), ABISELECT(1576,832), "S19169C1");
    check_base_class_offset(lv, (S19169C12_nt*), ABISELECT(1352,716), "S19169C1");
    check_field_offset(lv, s19169c1f0, ABISELECT(8,4), "S19169C1.s19169c1f0");
    test_class_info(&lv, &cd_S19169C1);
    dp->~S19169C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19169C1(Test_S19169C1, "S19169C1", ABISELECT(1760,932));

#else // __cplusplus

extern void _ZN8S19169C1C1Ev();
extern void _ZN8S19169C1D1Ev();
Name_Map name_map_S19169C1[] = {
  NSPAIR(_ZN8S19169C1C1Ev),
  NSPAIR(_ZN8S19169C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C8_nt;
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
extern Class_Descriptor cd_S19169C4_nt;
extern VTBL_ENTRY _ZTI11S19169C4_nt[];
extern  VTBL_ENTRY _ZTV11S19169C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C4_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C9_nt;
extern VTBL_ENTRY _ZTI11S19169C9_nt[];
extern  VTBL_ENTRY _ZTV11S19169C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C9_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S19169C2_nt;
extern VTBL_ENTRY _ZTI11S19169C2_nt[];
extern  VTBL_ENTRY _ZTV11S19169C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C2_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C7_nt;
extern VTBL_ENTRY _ZTI11S19169C7_nt[];
extern  VTBL_ENTRY _ZTV11S19169C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C7_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C14_nt;
extern VTBL_ENTRY _ZTI12S19169C14_nt[];
extern  VTBL_ENTRY _ZTV12S19169C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C14_nt[];
extern Class_Descriptor cd_S19169C13_nt;
extern VTBL_ENTRY _ZTI12S19169C13_nt[];
extern  VTBL_ENTRY _ZTV12S19169C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C13_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C5_nt;
extern VTBL_ENTRY _ZTI11S19169C5_nt[];
extern  VTBL_ENTRY _ZTV11S19169C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C5_nt[];
extern Class_Descriptor cd_S19169C8_nt;
extern VTBL_ENTRY _ZTI11S19169C8_nt[];
extern  VTBL_ENTRY _ZTV11S19169C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19169C8_nt[];
extern Class_Descriptor cd_S19169C13_nt;
extern VTBL_ENTRY _ZTI12S19169C13_nt[];
extern  VTBL_ENTRY _ZTV12S19169C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C13_nt[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C15_nt;
extern VTBL_ENTRY _ZTI12S19169C15_nt[];
extern  VTBL_ENTRY _ZTV12S19169C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C15_nt[];
extern Class_Descriptor cd_S19169C12_nt;
extern VTBL_ENTRY _ZTI12S19169C12_nt[];
extern  VTBL_ENTRY _ZTV12S19169C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19169C12_nt[];
static Base_Class bases_S19169C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C3_nt,    ABISELECT(960,504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C6_nt,    ABISELECT(1296,688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19169C5_nt,    ABISELECT(1064,560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(1080,572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C7_nt,    ABISELECT(1160,612), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(1184,628), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C5_nt,    ABISELECT(1168,616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19169C8_nt,    ABISELECT(1168,616), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C4_nt,    ABISELECT(1064,560), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19169C3_nt,    ABISELECT(832,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C6_nt,    ABISELECT(912,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19169C7_nt,    ABISELECT(824,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19169C9_nt,    ABISELECT(824,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(1344,712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19169C11_nt,    ABISELECT(1040,544), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19169C2_nt,    ABISELECT(824,436), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C3_nt,    ABISELECT(1408,744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(1496,788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C6_nt,    ABISELECT(1504,792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C7_nt,    ABISELECT(1488,784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(1552,816), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19169C14_nt,    ABISELECT(1488,784), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19169C13_nt,    ABISELECT(1352,716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(1360,720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C6_nt,    ABISELECT(1592,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
    27, //immediately_derived
  0, 0},
  {&cd_S19169C5_nt,    ABISELECT(1576,832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19169C8_nt,    ABISELECT(1576,832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19169C13_nt,    ABISELECT(1752,928), //bcp->offset
    73, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19169C16_nt,    ABISELECT(1640,868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C6_nt,    ABISELECT(1704,904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C15_nt,    ABISELECT(1576,832), //bcp->offset
    61, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S19169C12_nt,    ABISELECT(1352,716), //bcp->offset
    41, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19169C1[];
extern void _ZN8S19169C1D1Ev();
extern void _ZN8S19169C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19169C1D1Ev,_ZTv0_n28_N8S19169C1D1Ev)();
extern void ABISELECT(_ZThn824_N8S19169C1D1Ev,_ZThn436_N8S19169C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19169C1D0Ev,_ZTv0_n28_N8S19169C1D0Ev)();
extern void ABISELECT(_ZThn824_N8S19169C1D0Ev,_ZThn436_N8S19169C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn216_n56_N8S19169C1D1Ev,_ZTvn108_n28_N8S19169C1D1Ev)();
extern void ABISELECT(_ZTvn216_n56_N8S19169C1D0Ev,_ZTvn108_n28_N8S19169C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19169C1D1Ev,_ZTv0_n20_N8S19169C1D1Ev)();
extern void ABISELECT(_ZThn1064_N8S19169C1D1Ev,_ZThn560_N8S19169C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19169C1D0Ev,_ZTv0_n20_N8S19169C1D0Ev)();
extern void ABISELECT(_ZThn1064_N8S19169C1D0Ev,_ZThn560_N8S19169C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19169C1D1Ev,_ZTv0_n44_N8S19169C1D1Ev)();
extern void ABISELECT(_ZThn1352_N8S19169C1D1Ev,_ZThn716_N8S19169C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19169C1D0Ev,_ZTv0_n44_N8S19169C1D0Ev)();
extern void ABISELECT(_ZThn1352_N8S19169C1D0Ev,_ZThn716_N8S19169C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19169C1D1Ev,_ZTv0_n40_N8S19169C1D1Ev)();
extern void ABISELECT(_ZThn1576_N8S19169C1D1Ev,_ZThn832_N8S19169C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19169C1D0Ev,_ZTv0_n40_N8S19169C1D0Ev)();
extern void ABISELECT(_ZThn1576_N8S19169C1D0Ev,_ZThn832_N8S19169C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19169C1[] = {
  ABISELECT(1752,928),
  ABISELECT(1576,832),
  ABISELECT(1488,784),
  ABISELECT(1408,744),
  ABISELECT(1352,716),
  ABISELECT(1344,712),
  0,
  ABISELECT(1064,560),
  ABISELECT(824,436),
  ABISELECT(1296,688),
  0,
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  (VTBL_ENTRY)&_ZN8S19169C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19169C1D0Ev,
  ABISELECT(-824,-436),
  ABISELECT(520,276),
  ABISELECT(-824,-436),
  ABISELECT(240,124),
  ABISELECT(472,252),
  ABISELECT(-824,-436),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19169C1D1Ev,_ZTv0_n28_N8S19169C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19169C1D0Ev,_ZTv0_n28_N8S19169C1D0Ev),
  ABISELECT(-1040,-544),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n56_N8S19169C1D1Ev,_ZTvn108_n28_N8S19169C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n56_N8S19169C1D0Ev,_ZTvn108_n28_N8S19169C1D0Ev),
  ABISELECT(-1064,-560),
  ABISELECT(-1064,-560),
  ABISELECT(232,128),
  ABISELECT(-1064,-560),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19169C1D1Ev,_ZTv0_n20_N8S19169C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19169C1D0Ev,_ZTv0_n20_N8S19169C1D0Ev),
  ABISELECT(136,76),
  ABISELECT(-1160,-612),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  ABISELECT(-1168,-616),
  ABISELECT(128,72),
  ABISELECT(-1168,-616),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  ABISELECT(-1352,-716),
  ABISELECT(-288,-156),
  ABISELECT(400,212),
  ABISELECT(224,116),
  ABISELECT(-1352,-716),
  ABISELECT(-8,-4),
  ABISELECT(-56,-28),
  ABISELECT(136,68),
  ABISELECT(56,28),
  ABISELECT(-1352,-716),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19169C1D1Ev,_ZTv0_n44_N8S19169C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19169C1D0Ev,_ZTv0_n44_N8S19169C1D0Ev),
  ABISELECT(-80,-40),
  ABISELECT(-192,-96),
  ABISELECT(-1488,-784),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  ABISELECT(-256,-128),
  ABISELECT(-1552,-816),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  ABISELECT(-1576,-832),
  ABISELECT(-512,-272),
  ABISELECT(-232,-120),
  ABISELECT(-88,-48),
  ABISELECT(-168,-88),
  ABISELECT(176,96),
  ABISELECT(-1576,-832),
  ABISELECT(-280,-144),
  ABISELECT(-1576,-832),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19169C1D1Ev,_ZTv0_n40_N8S19169C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19169C1D0Ev,_ZTv0_n40_N8S19169C1D0Ev),
  ABISELECT(-408,-216),
  ABISELECT(-456,-240),
  ABISELECT(-264,-144),
  ABISELECT(-344,-184),
  ABISELECT(-1752,-928),
  (VTBL_ENTRY)&(_ZTI8S19169C1[0]),
};
extern VTBL_ENTRY _ZTV8S19169C1[];
extern void _ZN11S19169C2_ntD1Ev();
extern void _ZN11S19169C2_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19169C2_nt__8S19169C1[] = {
  ABISELECT(520,276),
  ABISELECT(-824,-436),
  ABISELECT(240,124),
  ABISELECT(472,252),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C2_ntD0Ev,
};
extern void _ZN11S19169C9_ntD1Ev();
extern void _ZN11S19169C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19169C9_nt11S19169C2_nt__8S19169C1[] = {
  ABISELECT(-824,-436),
  ABISELECT(240,124),
  ABISELECT(472,252),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C9_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C9_nt11S19169C2_nt__A2__8S19169C1[] = {
  ABISELECT(472,252),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N11S19169C9_ntD1Ev,_ZTv0_n20_N11S19169C9_ntD1Ev)();
extern void ABISELECT(_ZThn240_N11S19169C9_ntD1Ev,_ZThn124_N11S19169C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S19169C9_ntD0Ev,_ZTv0_n20_N11S19169C9_ntD0Ev)();
extern void ABISELECT(_ZThn240_N11S19169C9_ntD0Ev,_ZThn124_N11S19169C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__11S19169C9_nt11S19169C2_nt__8S19169C1[] = {
  ABISELECT(-240,-124),
  ABISELECT(-1064,-560),
  ABISELECT(232,128),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C9_ntD1Ev,_ZTv0_n20_N11S19169C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C9_ntD0Ev,_ZTv0_n20_N11S19169C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__A1__11S19169C9_nt11S19169C2_nt__8S19169C1[] = {
  ABISELECT(136,76),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C9_nt11S19169C2_nt__8S19169C1[] = {
  ABISELECT(-1168,-616),
  ABISELECT(128,72),
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A2__11S19169C9_nt11S19169C2_nt__8S19169C1[] = {
  ABISELECT(1296,688),
  ABISELECT(824,436),
  (VTBL_ENTRY)&(_ZTI11S19169C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N11S19169C2_ntD1Ev,_ZTv0_n20_N11S19169C2_ntD1Ev)();
extern void ABISELECT(_ZThn240_N11S19169C2_ntD1Ev,_ZThn124_N11S19169C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S19169C2_ntD0Ev,_ZTv0_n20_N11S19169C2_ntD0Ev)();
extern void ABISELECT(_ZThn240_N11S19169C2_ntD0Ev,_ZThn124_N11S19169C2_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__11S19169C2_nt__8S19169C1[] = {
  ABISELECT(-240,-124),
  ABISELECT(-1064,-560),
  ABISELECT(232,128),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C2_ntD1Ev,_ZTv0_n20_N11S19169C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S19169C2_ntD0Ev,_ZTv0_n20_N11S19169C2_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__11S19169C2_nt__8S19169C1[] = {
  ABISELECT(136,76),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C2_nt__8S19169C1[] = {
  ABISELECT(-1168,-616),
  ABISELECT(128,72),
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__11S19169C2_nt__8S19169C1[] = {
  ABISELECT(1296,688),
  ABISELECT(824,436),
  (VTBL_ENTRY)&(_ZTI11S19169C2_nt[0]),
};
extern void _ZN11S19169C4_ntD1Ev();
extern void _ZN11S19169C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__8S19169C1[] = {
  ABISELECT(-1064,-560),
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19169C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19169C4_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C4_nt__8S19169C1[] = {
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__8S19169C1[] = {
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__8S19169C1[] = {
  ABISELECT(-1168,-616),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A1__8S19169C1[] = {
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__8S19169C1[] = {
  ABISELECT(1296,688),
  ABISELECT(1168,616),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A__11S19169C4_nt__8S19169C1[] = {
  ABISELECT(136,76),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt__11S19169C4_nt__8S19169C1[] = {
  ABISELECT(-1168,-616),
  ABISELECT(128,72),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__8S19169C1[] = {
  ABISELECT(1296,688),
  ABISELECT(1064,560),
  (VTBL_ENTRY)&(_ZTI11S19169C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__8S19169C1[] = {
  ABISELECT(1296,688),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
extern void _ZN12S19169C12_ntD1Ev();
extern void _ZN12S19169C12_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S19169C12_nt__8S19169C1[] = {
  ABISELECT(-288,-156),
  ABISELECT(400,212),
  ABISELECT(224,116),
  ABISELECT(-1352,-716),
  ABISELECT(-8,-4),
  ABISELECT(-56,-28),
  ABISELECT(136,68),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  (VTBL_ENTRY)&_ZN12S19169C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19169C12_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S19169C13_nt12S19169C12_nt__8S19169C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-28),
  ABISELECT(136,68),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C13_nt12S19169C12_nt__8S19169C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-192,-96),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt12S19169C12_nt__8S19169C1[] = {
  ABISELECT(-256,-128),
  ABISELECT(-200,-100),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C12_nt__8S19169C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-192,-96),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C12_nt__8S19169C1[] = {
  ABISELECT(-256,-128),
  ABISELECT(-200,-100),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__A1__12S19169C12_nt__8S19169C1[] = {
  ABISELECT(1296,688),
  ABISELECT(1352,716),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
};
extern void ABISELECT(_ZTv0_n80_N12S19169C12_ntD1Ev,_ZTv0_n40_N12S19169C12_ntD1Ev)();
extern void ABISELECT(_ZThn224_N12S19169C12_ntD1Ev,_ZThn116_N12S19169C12_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S19169C12_ntD0Ev,_ZTv0_n40_N12S19169C12_ntD0Ev)();
extern void ABISELECT(_ZThn224_N12S19169C12_ntD0Ev,_ZThn116_N12S19169C12_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19169C15_nt__12S19169C12_nt__8S19169C1[] = {
  ABISELECT(-224,-116),
  ABISELECT(-512,-272),
  ABISELECT(-232,-120),
  ABISELECT(-88,-48),
  ABISELECT(-168,-88),
  ABISELECT(176,96),
  ABISELECT(-1576,-832),
  ABISELECT(-280,-144),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S19169C12_ntD1Ev,_ZTv0_n40_N12S19169C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S19169C12_ntD0Ev,_ZTv0_n40_N12S19169C12_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S19169C13_nt__A1__12S19169C12_nt__8S19169C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-456,-240),
  ABISELECT(-264,-144),
  ABISELECT(-344,-184),
  ABISELECT(-400,-212),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S19169C12_ntD1Ev,_ZTv0_n20_N12S19169C12_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S19169C12_ntD0Ev,_ZTv0_n20_N12S19169C12_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__12S19169C12_nt__8S19169C1[] = {
  ABISELECT(288,156),
  ABISELECT(-1064,-560),
  ABISELECT(232,128),
  ABISELECT(288,156),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C12_ntD1Ev,_ZTv0_n20_N12S19169C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C12_ntD0Ev,_ZTv0_n20_N12S19169C12_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C12_nt__8S19169C1[] = {
  ABISELECT(136,76),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C12_nt__8S19169C1[] = {
  ABISELECT(-1168,-616),
  ABISELECT(128,72),
  ABISELECT(184,100),
  (VTBL_ENTRY)&(_ZTI12S19169C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__8S19169C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-192,-96),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt12S19169C14_nt__A3__8S19169C1[] = {
  ABISELECT(-192,-96),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__A2__8S19169C1[] = {
  ABISELECT(-256,-128),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt__12S19169C14_nt__8S19169C1[] = {
  ABISELECT(-256,-128),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI12S19169C14_nt[0]),
};
extern void _ZN12S19169C15_ntD1Ev();
extern void _ZN12S19169C15_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S19169C15_nt__8S19169C1[] = {
  ABISELECT(-512,-272),
  ABISELECT(-232,-120),
  ABISELECT(-88,-48),
  ABISELECT(-168,-88),
  ABISELECT(176,96),
  ABISELECT(-1576,-832),
  ABISELECT(-280,-144),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S19169C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19169C15_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt12S19169C15_nt__A1__8S19169C1[] = {
  ABISELECT(-1576,-832),
  ABISELECT(-280,-144),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt11S19169C8_nt12S19169C15_nt__A3__8S19169C1[] = {
  ABISELECT(-280,-144),
  0,
  (VTBL_ENTRY)&(_ZTI11S19169C5_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__11S19169C8_nt12S19169C15_nt__A1__8S19169C1[] = {
  ABISELECT(1296,688),
  ABISELECT(1576,832),
  (VTBL_ENTRY)&(_ZTI11S19169C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt__12S19169C15_nt__8S19169C1[] = {
  ABISELECT(1296,688),
  ABISELECT(1576,832),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C13_nt__12S19169C15_nt__8S19169C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-456,-240),
  ABISELECT(-264,-144),
  ABISELECT(-344,-184),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C15_nt__8S19169C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-192,-96),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__A1__12S19169C15_nt__8S19169C1[] = {
  ABISELECT(-256,-128),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S19169C15_ntD1Ev,_ZTv0_n20_N12S19169C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S19169C15_ntD0Ev,_ZTv0_n20_N12S19169C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S19169C4_nt__12S19169C15_nt__8S19169C1[] = {
  ABISELECT(512,272),
  ABISELECT(-1064,-560),
  ABISELECT(232,128),
  ABISELECT(512,272),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C15_ntD1Ev,_ZTv0_n20_N12S19169C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S19169C15_ntD0Ev,_ZTv0_n20_N12S19169C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C15_nt__8S19169C1[] = {
  ABISELECT(136,76),
  ABISELECT(416,220),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C15_nt__8S19169C1[] = {
  ABISELECT(-1168,-616),
  ABISELECT(128,72),
  ABISELECT(408,216),
  (VTBL_ENTRY)&(_ZTI12S19169C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C13_nt__A1__8S19169C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-456,-240),
  ABISELECT(-264,-144),
  ABISELECT(-344,-184),
  0,
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S19169C14_nt__12S19169C13_nt__A1__8S19169C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-192,-96),
  ABISELECT(264,144),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt__A1__8S19169C1[] = {
  ABISELECT(-256,-128),
  ABISELECT(200,112),
  (VTBL_ENTRY)&(_ZTI12S19169C13_nt[0]),
};
static  VTT_ENTRY vtt_S19169C1[] = {
  {&(_ZTV8S19169C1[12]),  12,79},
  {&(_ZTV8S19169C1[21]),  21,79},
  {&(_ZTV8S19169C1[32]),  32,79},
  {&(_ZTV8S19169C1[37]),  37,79},
  {&(_ZTV8S19169C1[41]),  41,79},
  {&(_ZTV8S19169C1[12]),  12,79},
  {&(_ZTV8S19169C1[25]),  25,79},
  {&(_ZTV8S19169C1[52]),  52,79},
  {&(_ZTV8S19169C1[58]),  58,79},
  {&(_ZTV8S19169C1[61]),  61,79},
  {&(_ZTV8S19169C1[71]),  71,79},
  {&(_ZTV8S19169C1[79]),  79,79},
  {&(_tg__ZTV11S19169C2_nt__8S19169C1[6]),  6,8},
  {&(_tg__ZTV11S19169C9_nt11S19169C2_nt__8S19169C1[5]),  5,7},
  {&(_tg__ZTV11S19169C7_nt11S19169C9_nt11S19169C2_nt__A2__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C4_nt__11S19169C9_nt11S19169C2_nt__8S19169C1[5]),  5,7},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__A1__11S19169C9_nt11S19169C2_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C9_nt11S19169C2_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt__A2__11S19169C9_nt11S19169C2_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C4_nt__11S19169C2_nt__8S19169C1[5]),  5,7},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__11S19169C2_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__11S19169C2_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt__A1__11S19169C2_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C4_nt__8S19169C1[4]),  4,6},
  {&(_tg__ZTV11S19169C5_nt11S19169C4_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt11S19169C8_nt11S19169C4_nt__A1__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt11S19169C4_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A__11S19169C4_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt__11S19169C4_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt__A1__11S19169C4_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A1__8S19169C1[3]),  3,3},
  {&(_tg__ZTV12S19169C12_nt__8S19169C1[10]),  10,12},
  {&(_tg__ZTV12S19169C13_nt12S19169C12_nt__8S19169C1[6]),  6,6},
  {&(_tg__ZTV12S19169C14_nt__12S19169C13_nt12S19169C12_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt12S19169C12_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV12S19169C14_nt__12S19169C12_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C12_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__A1__12S19169C12_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV12S19169C15_nt__12S19169C12_nt__8S19169C1[10]),  10,12},
  {&(_tg__ZTV12S19169C13_nt__A1__12S19169C12_nt__8S19169C1[6]),  6,6},
  {&(_tg__ZTV11S19169C4_nt__12S19169C12_nt__8S19169C1[5]),  5,7},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C12_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C12_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV12S19169C14_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C7_nt12S19169C14_nt__A3__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__A2__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C5_nt__12S19169C14_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV12S19169C15_nt__8S19169C1[9]),  9,11},
  {&(_tg__ZTV11S19169C8_nt12S19169C15_nt__A1__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt11S19169C8_nt12S19169C15_nt__A3__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__11S19169C8_nt12S19169C15_nt__A1__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C7_nt__12S19169C15_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV12S19169C13_nt__12S19169C15_nt__8S19169C1[6]),  6,6},
  {&(_tg__ZTV12S19169C14_nt__12S19169C15_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__A1__12S19169C15_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C4_nt__12S19169C15_nt__8S19169C1[5]),  5,7},
  {&(_tg__ZTV11S19169C7_nt11S19169C4_nt__A2__12S19169C15_nt__8S19169C1[3]),  3,3},
  {&(_tg__ZTV11S19169C8_nt11S19169C4_nt__A1__12S19169C15_nt__8S19169C1[4]),  4,4},
  {&(_tg__ZTV12S19169C13_nt__A1__8S19169C1[6]),  6,6},
  {&(_tg__ZTV12S19169C14_nt__12S19169C13_nt__A1__8S19169C1[4]),  4,4},
  {&(_tg__ZTV11S19169C5_nt12S19169C14_nt__12S19169C13_nt__A1__8S19169C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19169C1[];
extern  VTBL_ENTRY _ZTV8S19169C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19169C1[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S19169C12_ntD0Ev,_ZTv0_n40_N12S19169C12_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S19169C12_ntD0Ev,_ZThn116_N12S19169C12_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S19169C12_ntD1Ev,_ZTv0_n40_N12S19169C12_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S19169C12_ntD1Ev,_ZThn116_N12S19169C12_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C2_ntD0Ev,_ZTv0_n20_N11S19169C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S19169C2_ntD0Ev,_ZThn124_N11S19169C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C2_ntD1Ev,_ZTv0_n20_N11S19169C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S19169C2_ntD1Ev,_ZThn124_N11S19169C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C9_ntD0Ev,_ZTv0_n20_N11S19169C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S19169C9_ntD0Ev,_ZThn124_N11S19169C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S19169C9_ntD1Ev,_ZTv0_n20_N11S19169C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S19169C9_ntD1Ev,_ZThn124_N11S19169C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19169C1D0Ev,_ZTv0_n40_N8S19169C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1576_N8S19169C1D0Ev,_ZThn832_N8S19169C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19169C1D1Ev,_ZTv0_n40_N8S19169C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1576_N8S19169C1D1Ev,_ZThn832_N8S19169C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19169C1D0Ev,_ZTv0_n44_N8S19169C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N8S19169C1D0Ev,_ZThn716_N8S19169C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19169C1D1Ev,_ZTv0_n44_N8S19169C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N8S19169C1D1Ev,_ZThn716_N8S19169C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19169C1D0Ev,_ZTv0_n20_N8S19169C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1064_N8S19169C1D0Ev,_ZThn560_N8S19169C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19169C1D1Ev,_ZTv0_n20_N8S19169C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1064_N8S19169C1D1Ev,_ZThn560_N8S19169C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19169C1D0Ev,_ZTv0_n28_N8S19169C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn824_N8S19169C1D0Ev,_ZThn436_N8S19169C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19169C1D1Ev,_ZTv0_n28_N8S19169C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn824_N8S19169C1D1Ev,_ZThn436_N8S19169C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19169C1 = {  "S19169C1", // class name
  bases_S19169C1, 33,
  &(vtc_S19169C1[0]), // expected_vtbl_contents
  &(vtt_S19169C1[0]), // expected_vtt_contents
  ABISELECT(1760,932), // object size
  NSPAIRA(_ZTI8S19169C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19169C1),79, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19169C1),63, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3133C3  {
  char s3133c3f0;
  void *s3133c3f1;
  virtual void  v3(); // _ZN7S3133C32v3Ev
  virtual void  v4(); // _ZN7S3133C32v4Ev
  ~S3133C3(); // tgen
  S3133C3(); // tgen
};
//SIG(-1 S3133C3) C1{ v1 v2 Fc Fp}


void  S3133C3 ::v3(){vfunc_called(this, "_ZN7S3133C32v3Ev");}
void  S3133C3 ::v4(){vfunc_called(this, "_ZN7S3133C32v4Ev");}
S3133C3 ::~S3133C3(){ note_dtor("S3133C3", this);} // tgen
S3133C3 ::S3133C3(){ note_ctor("S3133C3", this);} // tgen

static void Test_S3133C3()
{
  extern Class_Descriptor cd_S3133C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3133C3, buf);
    S3133C3 *dp, &lv = *(dp=new (buf) S3133C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3133C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C3)");
    check_field_offset(lv, s3133c3f0, ABISELECT(8,4), "S3133C3.s3133c3f0");
    check_field_offset(lv, s3133c3f1, ABISELECT(16,8), "S3133C3.s3133c3f1");
    test_class_info(&lv, &cd_S3133C3);
    dp->~S3133C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C3(Test_S3133C3, "S3133C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3133C3C1Ev();
extern void _ZN7S3133C3D1Ev();
Name_Map name_map_S3133C3[] = {
  NSPAIR(_ZN7S3133C3C1Ev),
  NSPAIR(_ZN7S3133C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3133C3[];
extern void _ZN7S3133C32v3Ev();
extern void _ZN7S3133C32v4Ev();
static  VTBL_ENTRY vtc_S3133C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C3[0]),
  (VTBL_ENTRY)&_ZN7S3133C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3133C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S3133C3[];
extern  VTBL_ENTRY _ZTV7S3133C3[];
Class_Descriptor cd_S3133C3 = {  "S3133C3", // class name
  0,0,//no base classes
  &(vtc_S3133C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3133C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3133C3),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  S3133C5_nt  {
  virtual void  v14(); // _ZN10S3133C5_nt3v14Ev
  virtual void  v15(); // _ZN10S3133C5_nt3v15Ev
  virtual void  v16(); // _ZN10S3133C5_nt3v16Ev
  virtual void  v17(); // _ZN10S3133C5_nt3v17Ev
  virtual void  v18(); // _ZN10S3133C5_nt3v18Ev
  ~S3133C5_nt(); // tgen
  S3133C5_nt(); // tgen
};
//SIG(-1 S3133C5_nt) C1{ v1 v2 v3 v4 v5}


void  S3133C5_nt ::v14(){vfunc_called(this, "_ZN10S3133C5_nt3v14Ev");}
void  S3133C5_nt ::v15(){vfunc_called(this, "_ZN10S3133C5_nt3v15Ev");}
void  S3133C5_nt ::v16(){vfunc_called(this, "_ZN10S3133C5_nt3v16Ev");}
void  S3133C5_nt ::v17(){vfunc_called(this, "_ZN10S3133C5_nt3v17Ev");}
void  S3133C5_nt ::v18(){vfunc_called(this, "_ZN10S3133C5_nt3v18Ev");}
S3133C5_nt ::~S3133C5_nt(){ note_dtor("S3133C5_nt", this);} // tgen
S3133C5_nt ::S3133C5_nt(){ note_ctor("S3133C5_nt", this);} // tgen

//skip512 S3133C5_nt

#else // __cplusplus

extern void _ZN10S3133C5_ntC1Ev();
extern void _ZN10S3133C5_ntD1Ev();
Name_Map name_map_S3133C5_nt[] = {
  NSPAIR(_ZN10S3133C5_ntC1Ev),
  NSPAIR(_ZN10S3133C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3133C5_nt[];
extern void _ZN10S3133C5_nt3v14Ev();
extern void _ZN10S3133C5_nt3v15Ev();
extern void _ZN10S3133C5_nt3v16Ev();
extern void _ZN10S3133C5_nt3v17Ev();
extern void _ZN10S3133C5_nt3v18Ev();
static  VTBL_ENTRY vtc_S3133C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3133C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S3133C5_nt[];
VTBL_ENTRY *P__ZTI10S3133C5_nt = _ZTI10S3133C5_nt; 
extern  VTBL_ENTRY _ZTV10S3133C5_nt[];
Class_Descriptor cd_S3133C5_nt = {  "S3133C5_nt", // class name
  0,0,//no base classes
  &(vtc_S3133C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S3133C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3133C5_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  S3133C4  {
  int s3133c4f0;
  ::S3133C5_nt s3133c4f1;
  virtual void  v5(); // _ZN7S3133C42v5Ev
  ~S3133C4(); // tgen
  S3133C4(); // tgen
};
//SIG(-1 S3133C4) C1{ v1 Fi FC2{ v2 v3 v4 v5 v6}}


void  S3133C4 ::v5(){vfunc_called(this, "_ZN7S3133C42v5Ev");}
S3133C4 ::~S3133C4(){ note_dtor("S3133C4", this);} // tgen
S3133C4 ::S3133C4(){ note_ctor("S3133C4", this);} // tgen

static void Test_S3133C4()
{
  extern Class_Descriptor cd_S3133C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3133C4, buf);
    S3133C4 *dp, &lv = *(dp=new (buf) S3133C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3133C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C4)");
    check_field_offset(lv, s3133c4f0, ABISELECT(8,4), "S3133C4.s3133c4f0");
    check_field_offset(lv, s3133c4f1, ABISELECT(16,8), "S3133C4.s3133c4f1");
    test_class_info(&lv, &cd_S3133C4);
    dp->~S3133C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C4(Test_S3133C4, "S3133C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3133C4C1Ev();
extern void _ZN7S3133C4D1Ev();
Name_Map name_map_S3133C4[] = {
  NSPAIR(_ZN7S3133C4C1Ev),
  NSPAIR(_ZN7S3133C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3133C4[];
extern void _ZN7S3133C42v5Ev();
static  VTBL_ENTRY vtc_S3133C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C4[0]),
  (VTBL_ENTRY)&_ZN7S3133C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3133C4[];
extern  VTBL_ENTRY _ZTV7S3133C4[];
Class_Descriptor cd_S3133C4 = {  "S3133C4", // class name
  0,0,//no base classes
  &(vtc_S3133C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3133C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3133C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3133C2  : S3133C3 , virtual S3133C4 {
  int s3133c2f0[2];
  virtual void  v6(); // _ZN7S3133C22v6Ev
  virtual void  v7(); // _ZN7S3133C22v7Ev
  virtual void  v8(); // _ZN7S3133C22v8Ev
  virtual void  v9(); // _ZN7S3133C22v9Ev
  virtual void  v10(); // _ZN7S3133C23v10Ev
  virtual void  v11(); // _ZN7S3133C23v11Ev
  virtual void  v12(); // _ZN7S3133C23v12Ev
  virtual void  v13(); // _ZN7S3133C23v13Ev
  ~S3133C2(); // tgen
  S3133C2(); // tgen
};
//SIG(-1 S3133C2) C1{ BC2{ v9 v10 Fc Fp} VBC3{ v11 Fi FC4{ v12 v13 v14 v15 v16}} v1 v2 v3 v4 v5 v6 v7 v8 Fi[2]}


void  S3133C2 ::v6(){vfunc_called(this, "_ZN7S3133C22v6Ev");}
void  S3133C2 ::v7(){vfunc_called(this, "_ZN7S3133C22v7Ev");}
void  S3133C2 ::v8(){vfunc_called(this, "_ZN7S3133C22v8Ev");}
void  S3133C2 ::v9(){vfunc_called(this, "_ZN7S3133C22v9Ev");}
void  S3133C2 ::v10(){vfunc_called(this, "_ZN7S3133C23v10Ev");}
void  S3133C2 ::v11(){vfunc_called(this, "_ZN7S3133C23v11Ev");}
void  S3133C2 ::v12(){vfunc_called(this, "_ZN7S3133C23v12Ev");}
void  S3133C2 ::v13(){vfunc_called(this, "_ZN7S3133C23v13Ev");}
S3133C2 ::~S3133C2(){ note_dtor("S3133C2", this);} // tgen
S3133C2 ::S3133C2(){ note_ctor("S3133C2", this);} // tgen

static void Test_S3133C2()
{
  extern Class_Descriptor cd_S3133C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S3133C2, buf);
    S3133C2 *dp, &lv = *(dp=new (buf) S3133C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S3133C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C2)");
    check_base_class_offset(lv, (S3133C3*), 0, "S3133C2");
    check_base_class_offset(lv, (S3133C4*), ABISELECT(32,20), "S3133C2");
    check_field_offset(lv, s3133c2f0, ABISELECT(24,12), "S3133C2.s3133c2f0");
    test_class_info(&lv, &cd_S3133C2);
    dp->~S3133C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C2(Test_S3133C2, "S3133C2", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S3133C2C1Ev();
extern void _ZN7S3133C2D1Ev();
Name_Map name_map_S3133C2[] = {
  NSPAIR(_ZN7S3133C2C1Ev),
  NSPAIR(_ZN7S3133C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3133C3;
extern VTBL_ENTRY _ZTI7S3133C3[];
extern  VTBL_ENTRY _ZTV7S3133C3[];
extern Class_Descriptor cd_S3133C4;
extern VTBL_ENTRY _ZTI7S3133C4[];
extern  VTBL_ENTRY _ZTV7S3133C4[];
static Base_Class bases_S3133C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3133C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3133C4,    ABISELECT(32,20), //bcp->offset
    13, //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 _ZTI7S3133C2[];
extern void _ZN7S3133C32v3Ev();
extern void _ZN7S3133C32v4Ev();
extern void _ZN7S3133C22v6Ev();
extern void _ZN7S3133C22v7Ev();
extern void _ZN7S3133C22v8Ev();
extern void _ZN7S3133C22v9Ev();
extern void _ZN7S3133C23v10Ev();
extern void _ZN7S3133C23v11Ev();
extern void _ZN7S3133C23v12Ev();
extern void _ZN7S3133C23v13Ev();
extern void _ZN7S3133C42v5Ev();
static  VTBL_ENTRY vtc_S3133C2[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C2[0]),
  (VTBL_ENTRY)&_ZN7S3133C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3133C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v13Ev,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3133C2[0]),
  (VTBL_ENTRY)&_ZN7S3133C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S3133C2[];
static  VTT_ENTRY vtt_S3133C2[] = {
  {&(_ZTV7S3133C2[3]),  3,17},
  {&(_ZTV7S3133C2[16]),  16,17},
};
extern VTBL_ENTRY _ZTI7S3133C2[];
extern  VTBL_ENTRY _ZTV7S3133C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3133C2[];
Class_Descriptor cd_S3133C2 = {  "S3133C2", // class name
  bases_S3133C2, 2,
  &(vtc_S3133C2[0]), // expected_vtbl_contents
  &(vtt_S3133C2[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S3133C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3133C2),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3133C2),2, //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  S3133C9  : S3133C5_nt {
  ::S3133C5_nt s3133c9f0;
  virtual void  v19(); // _ZN7S3133C93v19Ev
  virtual void  v20(); // _ZN7S3133C93v20Ev
  virtual void  v21(); // _ZN7S3133C93v21Ev
  virtual void  v22(); // _ZN7S3133C93v22Ev
  ~S3133C9(); // tgen
  S3133C9(); // tgen
};
//SIG(-1 S3133C9) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S3133C9 ::v19(){vfunc_called(this, "_ZN7S3133C93v19Ev");}
void  S3133C9 ::v20(){vfunc_called(this, "_ZN7S3133C93v20Ev");}
void  S3133C9 ::v21(){vfunc_called(this, "_ZN7S3133C93v21Ev");}
void  S3133C9 ::v22(){vfunc_called(this, "_ZN7S3133C93v22Ev");}
S3133C9 ::~S3133C9(){ note_dtor("S3133C9", this);} // tgen
S3133C9 ::S3133C9(){ note_ctor("S3133C9", this);} // tgen

static void Test_S3133C9()
{
  extern Class_Descriptor cd_S3133C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3133C9, buf);
    S3133C9 *dp, &lv = *(dp=new (buf) S3133C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3133C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C9)");
    check_base_class_offset(lv, (S3133C5_nt*), 0, "S3133C9");
    check_field_offset(lv, s3133c9f0, ABISELECT(8,4), "S3133C9.s3133c9f0");
    test_class_info(&lv, &cd_S3133C9);
    dp->~S3133C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C9(Test_S3133C9, "S3133C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3133C9C1Ev();
extern void _ZN7S3133C9D1Ev();
Name_Map name_map_S3133C9[] = {
  NSPAIR(_ZN7S3133C9C1Ev),
  NSPAIR(_ZN7S3133C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3133C5_nt;
extern VTBL_ENTRY _ZTI10S3133C5_nt[];
extern  VTBL_ENTRY _ZTV10S3133C5_nt[];
static Base_Class bases_S3133C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3133C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3133C9[];
extern void _ZN10S3133C5_nt3v14Ev();
extern void _ZN10S3133C5_nt3v15Ev();
extern void _ZN10S3133C5_nt3v16Ev();
extern void _ZN10S3133C5_nt3v17Ev();
extern void _ZN10S3133C5_nt3v18Ev();
extern void _ZN7S3133C93v19Ev();
extern void _ZN7S3133C93v20Ev();
extern void _ZN7S3133C93v21Ev();
extern void _ZN7S3133C93v22Ev();
static  VTBL_ENTRY vtc_S3133C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C9[0]),
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v19Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v20Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v21Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v22Ev,
};
extern VTBL_ENTRY _ZTI7S3133C9[];
extern  VTBL_ENTRY _ZTV7S3133C9[];
Class_Descriptor cd_S3133C9 = {  "S3133C9", // class name
  bases_S3133C9, 1,
  &(vtc_S3133C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3133C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3133C9),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3133C8  : S3133C9 {
  virtual void  v23(); // _ZN7S3133C83v23Ev
  virtual void  v24(); // _ZN7S3133C83v24Ev
  virtual void  v25(); // _ZN7S3133C83v25Ev
  virtual void  v26(); // _ZN7S3133C83v26Ev
  virtual void  v27(); // _ZN7S3133C83v27Ev
  virtual void  v28(); // _ZN7S3133C83v28Ev
  ~S3133C8(); // tgen
  S3133C8(); // tgen
};
//SIG(-1 S3133C8) C1{ BC2{ BC3{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 v6}


void  S3133C8 ::v23(){vfunc_called(this, "_ZN7S3133C83v23Ev");}
void  S3133C8 ::v24(){vfunc_called(this, "_ZN7S3133C83v24Ev");}
void  S3133C8 ::v25(){vfunc_called(this, "_ZN7S3133C83v25Ev");}
void  S3133C8 ::v26(){vfunc_called(this, "_ZN7S3133C83v26Ev");}
void  S3133C8 ::v27(){vfunc_called(this, "_ZN7S3133C83v27Ev");}
void  S3133C8 ::v28(){vfunc_called(this, "_ZN7S3133C83v28Ev");}
S3133C8 ::~S3133C8(){ note_dtor("S3133C8", this);} // tgen
S3133C8 ::S3133C8(){ note_ctor("S3133C8", this);} // tgen

static void Test_S3133C8()
{
  extern Class_Descriptor cd_S3133C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3133C8, buf);
    S3133C8 *dp, &lv = *(dp=new (buf) S3133C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3133C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C8)");
    check_base_class_offset(lv, (S3133C5_nt*)(S3133C9*), 0, "S3133C8");
    check_base_class_offset(lv, (S3133C9*), 0, "S3133C8");
    test_class_info(&lv, &cd_S3133C8);
    dp->~S3133C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C8(Test_S3133C8, "S3133C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3133C8C1Ev();
extern void _ZN7S3133C8D1Ev();
Name_Map name_map_S3133C8[] = {
  NSPAIR(_ZN7S3133C8C1Ev),
  NSPAIR(_ZN7S3133C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3133C5_nt;
extern VTBL_ENTRY _ZTI10S3133C5_nt[];
extern  VTBL_ENTRY _ZTV10S3133C5_nt[];
extern Class_Descriptor cd_S3133C9;
extern VTBL_ENTRY _ZTI7S3133C9[];
extern  VTBL_ENTRY _ZTV7S3133C9[];
static Base_Class bases_S3133C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3133C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3133C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3133C8[];
extern void _ZN10S3133C5_nt3v14Ev();
extern void _ZN10S3133C5_nt3v15Ev();
extern void _ZN10S3133C5_nt3v16Ev();
extern void _ZN10S3133C5_nt3v17Ev();
extern void _ZN10S3133C5_nt3v18Ev();
extern void _ZN7S3133C93v19Ev();
extern void _ZN7S3133C93v20Ev();
extern void _ZN7S3133C93v21Ev();
extern void _ZN7S3133C93v22Ev();
extern void _ZN7S3133C83v23Ev();
extern void _ZN7S3133C83v24Ev();
extern void _ZN7S3133C83v25Ev();
extern void _ZN7S3133C83v26Ev();
extern void _ZN7S3133C83v27Ev();
extern void _ZN7S3133C83v28Ev();
static  VTBL_ENTRY vtc_S3133C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C8[0]),
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v19Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v20Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v21Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v22Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v23Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v24Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v25Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v26Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v27Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v28Ev,
};
extern VTBL_ENTRY _ZTI7S3133C8[];
extern  VTBL_ENTRY _ZTV7S3133C8[];
Class_Descriptor cd_S3133C8 = {  "S3133C8", // class name
  bases_S3133C8, 2,
  &(vtc_S3133C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3133C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3133C8),17, //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  S3133C7  : virtual S3133C8 {
  virtual void  v29(); // _ZN7S3133C73v29Ev
  virtual void  v30(); // _ZN7S3133C73v30Ev
  virtual void  v31(); // _ZN7S3133C73v31Ev
  ~S3133C7(); // tgen
  S3133C7(); // tgen
};
//SIG(-1 S3133C7) C1{ VBC2{ BC3{ BC4{ v4 v5 v6 v7 v8} v9 v10 v11 v12 FC4} v13 v14 v15 v16 v17 v18} v1 v2 v3}


void  S3133C7 ::v29(){vfunc_called(this, "_ZN7S3133C73v29Ev");}
void  S3133C7 ::v30(){vfunc_called(this, "_ZN7S3133C73v30Ev");}
void  S3133C7 ::v31(){vfunc_called(this, "_ZN7S3133C73v31Ev");}
S3133C7 ::~S3133C7(){ note_dtor("S3133C7", this);} // tgen
S3133C7 ::S3133C7(){ note_ctor("S3133C7", this);} // tgen

static void Test_S3133C7()
{
  extern Class_Descriptor cd_S3133C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3133C7, buf);
    S3133C7 *dp, &lv = *(dp=new (buf) S3133C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3133C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C7)");
    check_base_class_offset(lv, (S3133C5_nt*)(S3133C9*)(S3133C8*), ABISELECT(8,4), "S3133C7");
    check_base_class_offset(lv, (S3133C9*)(S3133C8*), ABISELECT(8,4), "S3133C7");
    check_base_class_offset(lv, (S3133C8*), ABISELECT(8,4), "S3133C7");
    test_class_info(&lv, &cd_S3133C7);
    dp->~S3133C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C7(Test_S3133C7, "S3133C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3133C7C1Ev();
extern void _ZN7S3133C7D1Ev();
Name_Map name_map_S3133C7[] = {
  NSPAIR(_ZN7S3133C7C1Ev),
  NSPAIR(_ZN7S3133C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3133C5_nt;
extern VTBL_ENTRY _ZTI10S3133C5_nt[];
extern  VTBL_ENTRY _ZTV10S3133C5_nt[];
extern Class_Descriptor cd_S3133C9;
extern VTBL_ENTRY _ZTI7S3133C9[];
extern  VTBL_ENTRY _ZTV7S3133C9[];
extern Class_Descriptor cd_S3133C8;
extern VTBL_ENTRY _ZTI7S3133C8[];
extern  VTBL_ENTRY _ZTV7S3133C8[];
static Base_Class bases_S3133C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3133C5_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_S3133C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3133C8,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3133C7[];
extern void _ZN7S3133C73v29Ev();
extern void _ZN7S3133C73v30Ev();
extern void _ZN7S3133C73v31Ev();
extern void _ZN10S3133C5_nt3v14Ev();
extern void _ZN10S3133C5_nt3v15Ev();
extern void _ZN10S3133C5_nt3v16Ev();
extern void _ZN10S3133C5_nt3v17Ev();
extern void _ZN10S3133C5_nt3v18Ev();
extern void _ZN7S3133C93v19Ev();
extern void _ZN7S3133C93v20Ev();
extern void _ZN7S3133C93v21Ev();
extern void _ZN7S3133C93v22Ev();
extern void _ZN7S3133C83v23Ev();
extern void _ZN7S3133C83v24Ev();
extern void _ZN7S3133C83v25Ev();
extern void _ZN7S3133C83v26Ev();
extern void _ZN7S3133C83v27Ev();
extern void _ZN7S3133C83v28Ev();
static  VTBL_ENTRY vtc_S3133C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C7[0]),
  (VTBL_ENTRY)&_ZN7S3133C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v30Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3133C7[0]),
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v19Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v20Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v21Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v22Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v23Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v24Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v25Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v26Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v27Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v28Ev,
};
extern VTBL_ENTRY _ZTV7S3133C7[];
static  VTT_ENTRY vtt_S3133C7[] = {
  {&(_ZTV7S3133C7[3]),  3,38},
  {&(_ZTV7S3133C7[23]),  23,38},
};
extern VTBL_ENTRY _ZTI7S3133C7[];
extern  VTBL_ENTRY _ZTV7S3133C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3133C7[];
Class_Descriptor cd_S3133C7 = {  "S3133C7", // class name
  bases_S3133C7, 3,
  &(vtc_S3133C7[0]), // expected_vtbl_contents
  &(vtt_S3133C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3133C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3133C7),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3133C7),2, //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  S3133C6  : S3133C7 {
  virtual  ~S3133C6(); // _ZN7S3133C6D2Ev
  virtual void  v32(); // _ZN7S3133C63v32Ev
  virtual void  v33(); // _ZN7S3133C63v33Ev
  virtual void  v34(); // _ZN7S3133C63v34Ev
  virtual void  v35(); // _ZN7S3133C63v35Ev
  virtual void  v36(); // _ZN7S3133C63v36Ev
  virtual void  v37(); // _ZN7S3133C63v37Ev
  virtual void  v38(); // _ZN7S3133C63v38Ev
  S3133C6(); // tgen
};
//SIG(-1 S3133C6) C1{ BC2{ VBC3{ BC4{ BC5{ v8 v9 v10 v11 v12} v13 v14 v15 v16 FC5} v17 v18 v19 v20 v21 v22} v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7}


 S3133C6 ::~S3133C6(){ note_dtor("S3133C6", this);}
void  S3133C6 ::v32(){vfunc_called(this, "_ZN7S3133C63v32Ev");}
void  S3133C6 ::v33(){vfunc_called(this, "_ZN7S3133C63v33Ev");}
void  S3133C6 ::v34(){vfunc_called(this, "_ZN7S3133C63v34Ev");}
void  S3133C6 ::v35(){vfunc_called(this, "_ZN7S3133C63v35Ev");}
void  S3133C6 ::v36(){vfunc_called(this, "_ZN7S3133C63v36Ev");}
void  S3133C6 ::v37(){vfunc_called(this, "_ZN7S3133C63v37Ev");}
void  S3133C6 ::v38(){vfunc_called(this, "_ZN7S3133C63v38Ev");}
S3133C6 ::S3133C6(){ note_ctor("S3133C6", this);} // tgen

static void Test_S3133C6()
{
  extern Class_Descriptor cd_S3133C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3133C6, buf);
    S3133C6 *dp, &lv = *(dp=new (buf) S3133C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3133C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C6)");
    check_base_class_offset(lv, (S3133C5_nt*)(S3133C9*)(S3133C8*), ABISELECT(8,4), "S3133C6");
    check_base_class_offset(lv, (S3133C9*)(S3133C8*), ABISELECT(8,4), "S3133C6");
    check_base_class_offset(lv, (S3133C8*)(S3133C7*), ABISELECT(8,4), "S3133C6");
    check_base_class_offset(lv, (S3133C7*), 0, "S3133C6");
    test_class_info(&lv, &cd_S3133C6);
    dp->~S3133C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C6(Test_S3133C6, "S3133C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3133C6C1Ev();
extern void _ZN7S3133C6D2Ev();
Name_Map name_map_S3133C6[] = {
  NSPAIR(_ZN7S3133C6C1Ev),
  NSPAIR(_ZN7S3133C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3133C5_nt;
extern VTBL_ENTRY _ZTI10S3133C5_nt[];
extern  VTBL_ENTRY _ZTV10S3133C5_nt[];
extern Class_Descriptor cd_S3133C9;
extern VTBL_ENTRY _ZTI7S3133C9[];
extern  VTBL_ENTRY _ZTV7S3133C9[];
extern Class_Descriptor cd_S3133C8;
extern VTBL_ENTRY _ZTI7S3133C8[];
extern  VTBL_ENTRY _ZTV7S3133C8[];
extern Class_Descriptor cd_S3133C7;
extern VTBL_ENTRY _ZTI7S3133C7[];
extern  VTBL_ENTRY _ZTV7S3133C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3133C7[];
static Base_Class bases_S3133C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3133C5_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_S3133C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3133C8,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3133C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3133C6[];
extern void _ZN7S3133C73v29Ev();
extern void _ZN7S3133C73v30Ev();
extern void _ZN7S3133C73v31Ev();
extern void _ZN7S3133C6D1Ev();
extern void _ZN7S3133C6D0Ev();
extern void _ZN7S3133C63v32Ev();
extern void _ZN7S3133C63v33Ev();
extern void _ZN7S3133C63v34Ev();
extern void _ZN7S3133C63v35Ev();
extern void _ZN7S3133C63v36Ev();
extern void _ZN7S3133C63v37Ev();
extern void _ZN7S3133C63v38Ev();
extern void _ZN10S3133C5_nt3v14Ev();
extern void _ZN10S3133C5_nt3v15Ev();
extern void _ZN10S3133C5_nt3v16Ev();
extern void _ZN10S3133C5_nt3v17Ev();
extern void _ZN10S3133C5_nt3v18Ev();
extern void _ZN7S3133C93v19Ev();
extern void _ZN7S3133C93v20Ev();
extern void _ZN7S3133C93v21Ev();
extern void _ZN7S3133C93v22Ev();
extern void _ZN7S3133C83v23Ev();
extern void _ZN7S3133C83v24Ev();
extern void _ZN7S3133C83v25Ev();
extern void _ZN7S3133C83v26Ev();
extern void _ZN7S3133C83v27Ev();
extern void _ZN7S3133C83v28Ev();
static  VTBL_ENTRY vtc_S3133C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C6[0]),
  (VTBL_ENTRY)&_ZN7S3133C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v30Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v31Ev,
  (VTBL_ENTRY)&_ZN7S3133C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3133C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v32Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v33Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v34Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v35Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v36Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v37Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v38Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3133C6[0]),
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v19Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v20Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v21Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v22Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v23Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v24Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v25Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v26Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v27Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v28Ev,
};
extern VTBL_ENTRY _ZTV7S3133C6[];
extern void _ZN7S3133C73v29Ev();
extern void _ZN7S3133C73v30Ev();
extern void _ZN7S3133C73v31Ev();
static  VTBL_ENTRY _tg__ZTV7S3133C7__7S3133C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C7[0]),
  (VTBL_ENTRY)&_ZN7S3133C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v30Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v31Ev,
};
extern void _ZN10S3133C5_nt3v14Ev();
extern void _ZN10S3133C5_nt3v15Ev();
extern void _ZN10S3133C5_nt3v16Ev();
extern void _ZN10S3133C5_nt3v17Ev();
extern void _ZN10S3133C5_nt3v18Ev();
extern void _ZN7S3133C93v19Ev();
extern void _ZN7S3133C93v20Ev();
extern void _ZN7S3133C93v21Ev();
extern void _ZN7S3133C93v22Ev();
extern void _ZN7S3133C83v23Ev();
extern void _ZN7S3133C83v24Ev();
extern void _ZN7S3133C83v25Ev();
extern void _ZN7S3133C83v26Ev();
extern void _ZN7S3133C83v27Ev();
extern void _ZN7S3133C83v28Ev();
static  VTBL_ENTRY _tg__ZTV7S3133C8__7S3133C7__7S3133C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3133C7[0]),
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v19Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v20Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v21Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v22Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v23Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v24Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v25Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v26Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v27Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v28Ev,
};
static  VTT_ENTRY vtt_S3133C6[] = {
  {&(_ZTV7S3133C6[3]),  3,47},
  {&(_tg__ZTV7S3133C7__7S3133C6[3]),  3,6},
  {&(_tg__ZTV7S3133C8__7S3133C7__7S3133C6[17]),  17,32},
  {&(_ZTV7S3133C6[32]),  32,47},
};
extern VTBL_ENTRY _ZTI7S3133C6[];
extern  VTBL_ENTRY _ZTV7S3133C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3133C6[];
Class_Descriptor cd_S3133C6 = {  "S3133C6", // class name
  bases_S3133C6, 4,
  &(vtc_S3133C6[0]), // expected_vtbl_contents
  &(vtt_S3133C6[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3133C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3133C6),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3133C6),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3133C11  {
  char s3133c11f0;
  virtual void  v41(); // _ZN8S3133C113v41Ev
  virtual void  v42(); // _ZN8S3133C113v42Ev
  virtual void  v43(); // _ZN8S3133C113v43Ev
  virtual void  v44(); // _ZN8S3133C113v44Ev
  virtual void  v45(); // _ZN8S3133C113v45Ev
  virtual void  v46(); // _ZN8S3133C113v46Ev
  ~S3133C11(); // tgen
  S3133C11(); // tgen
};
//SIG(-1 S3133C11) C1{ v1 v2 v3 v4 v5 v6 Fc}


void  S3133C11 ::v41(){vfunc_called(this, "_ZN8S3133C113v41Ev");}
void  S3133C11 ::v42(){vfunc_called(this, "_ZN8S3133C113v42Ev");}
void  S3133C11 ::v43(){vfunc_called(this, "_ZN8S3133C113v43Ev");}
void  S3133C11 ::v44(){vfunc_called(this, "_ZN8S3133C113v44Ev");}
void  S3133C11 ::v45(){vfunc_called(this, "_ZN8S3133C113v45Ev");}
void  S3133C11 ::v46(){vfunc_called(this, "_ZN8S3133C113v46Ev");}
S3133C11 ::~S3133C11(){ note_dtor("S3133C11", this);} // tgen
S3133C11 ::S3133C11(){ note_ctor("S3133C11", this);} // tgen

static void Test_S3133C11()
{
  extern Class_Descriptor cd_S3133C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3133C11, buf);
    S3133C11 *dp, &lv = *(dp=new (buf) S3133C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3133C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C11)");
    check_field_offset(lv, s3133c11f0, ABISELECT(8,4), "S3133C11.s3133c11f0");
    test_class_info(&lv, &cd_S3133C11);
    dp->~S3133C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C11(Test_S3133C11, "S3133C11", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S3133C11C1Ev();
extern void _ZN8S3133C11D1Ev();
Name_Map name_map_S3133C11[] = {
  NSPAIR(_ZN8S3133C11C1Ev),
  NSPAIR(_ZN8S3133C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3133C11[];
extern void _ZN8S3133C113v41Ev();
extern void _ZN8S3133C113v42Ev();
extern void _ZN8S3133C113v43Ev();
extern void _ZN8S3133C113v44Ev();
extern void _ZN8S3133C113v45Ev();
extern void _ZN8S3133C113v46Ev();
static  VTBL_ENTRY vtc_S3133C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3133C11[0]),
  (VTBL_ENTRY)&_ZN8S3133C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v46Ev,
};
extern VTBL_ENTRY _ZTI8S3133C11[];
extern  VTBL_ENTRY _ZTV8S3133C11[];
Class_Descriptor cd_S3133C11 = {  "S3133C11", // class name
  0,0,//no base classes
  &(vtc_S3133C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S3133C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3133C11),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3133C10  : S3133C11 {
  int s3133c10f0;
  virtual void  v39(); // _ZN8S3133C103v39Ev
  virtual void  v40(); // _ZN8S3133C103v40Ev
  ~S3133C10(); // tgen
  S3133C10(); // tgen
};
//SIG(1 S3133C10) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fc} v1 v2 Fi}


void  S3133C10 ::v39(){vfunc_called(this, "_ZN8S3133C103v39Ev");}
void  S3133C10 ::v40(){vfunc_called(this, "_ZN8S3133C103v40Ev");}
S3133C10 ::~S3133C10(){ note_dtor("S3133C10", this);} // tgen
S3133C10 ::S3133C10(){ note_ctor("S3133C10", this);} // tgen

static void Test_S3133C10()
{
  extern Class_Descriptor cd_S3133C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3133C10, buf);
    S3133C10 *dp, &lv = *(dp=new (buf) S3133C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3133C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C10)");
    check_base_class_offset(lv, (S3133C11*), 0, "S3133C10");
    check_field_offset(lv, s3133c10f0, ABISELECT(12,8), "S3133C10.s3133c10f0");
    test_class_info(&lv, &cd_S3133C10);
    dp->~S3133C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C10(Test_S3133C10, "S3133C10", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S3133C10C1Ev();
extern void _ZN8S3133C10D1Ev();
Name_Map name_map_S3133C10[] = {
  NSPAIR(_ZN8S3133C10C1Ev),
  NSPAIR(_ZN8S3133C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3133C11;
extern VTBL_ENTRY _ZTI8S3133C11[];
extern  VTBL_ENTRY _ZTV8S3133C11[];
static Base_Class bases_S3133C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3133C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3133C10[];
extern void _ZN8S3133C113v41Ev();
extern void _ZN8S3133C113v42Ev();
extern void _ZN8S3133C113v43Ev();
extern void _ZN8S3133C113v44Ev();
extern void _ZN8S3133C113v45Ev();
extern void _ZN8S3133C113v46Ev();
extern void _ZN8S3133C103v39Ev();
extern void _ZN8S3133C103v40Ev();
static  VTBL_ENTRY vtc_S3133C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3133C10[0]),
  (VTBL_ENTRY)&_ZN8S3133C113v41Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v42Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v43Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v44Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v45Ev,
  (VTBL_ENTRY)&_ZN8S3133C113v46Ev,
  (VTBL_ENTRY)&_ZN8S3133C103v39Ev,
  (VTBL_ENTRY)&_ZN8S3133C103v40Ev,
};
extern VTBL_ENTRY _ZTI8S3133C10[];
extern  VTBL_ENTRY _ZTV8S3133C10[];
Class_Descriptor cd_S3133C10 = {  "S3133C10", // class name
  bases_S3133C10, 1,
  &(vtc_S3133C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S3133C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3133C10),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  S3133C1  : S3133C2 , virtual S3133C6 {
  ::S3133C10 s3133c1f0[10];
  virtual  ~S3133C1(); // _ZN7S3133C1D2Ev
  virtual void  v1(); // _ZN7S3133C12v1Ev
  virtual void  v2(); // _ZN7S3133C12v2Ev
  S3133C1(); // tgen
};
//SIG(1 S3133C1) C1{ BC2{ BC3{ v3 v4 Fc Fp} VBC4{ v5 Fi FC5{ v14 v15 v16 v17 v18}} v6 v7 v8 v9 v10 v11 v12 v13 Fi[2]} VBC6{ BC7{ VBC8{ BC9{ BC5 v19 v20 v21 v22 FC5} v23 v24 v25 v26 v27 v28} v29 v30 v31} vd v32 v33 v34 v35 v36 v37 v38} vd v1 v2 FC10{ BC11{ v41 v42 v43 v44 v45 v46 Fc} v39 v40 Fi}[10]}


 S3133C1 ::~S3133C1(){ note_dtor("S3133C1", this);}
void  S3133C1 ::v1(){vfunc_called(this, "_ZN7S3133C12v1Ev");}
void  S3133C1 ::v2(){vfunc_called(this, "_ZN7S3133C12v2Ev");}
S3133C1 ::S3133C1(){ note_ctor("S3133C1", this);} // tgen

static void Test_S3133C1()
{
  extern Class_Descriptor cd_S3133C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,42)];
    init_test(&cd_S3133C1, buf);
    S3133C1 *dp, &lv = *(dp=new (buf) S3133C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,164), "sizeof(S3133C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3133C1)");
    check_base_class_offset(lv, (S3133C3*)(S3133C2*), 0, "S3133C1");
    check_base_class_offset(lv, (S3133C4*)(S3133C2*), ABISELECT(192,140), "S3133C1");
    check_base_class_offset(lv, (S3133C2*), 0, "S3133C1");
    check_base_class_offset(lv, (S3133C5_nt*)(S3133C9*)(S3133C8*), ABISELECT(224,156), "S3133C1");
    check_base_class_offset(lv, (S3133C9*)(S3133C8*), ABISELECT(224,156), "S3133C1");
    check_base_class_offset(lv, (S3133C8*)(S3133C7*)(S3133C6*), ABISELECT(224,156), "S3133C1");
    check_base_class_offset(lv, (S3133C7*)(S3133C6*), ABISELECT(216,152), "S3133C1");
    check_base_class_offset(lv, (S3133C6*), ABISELECT(216,152), "S3133C1");
    check_field_offset(lv, s3133c1f0, ABISELECT(32,20), "S3133C1.s3133c1f0");
    test_class_info(&lv, &cd_S3133C1);
    dp->~S3133C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3133C1(Test_S3133C1, "S3133C1", ABISELECT(240,164));

#else // __cplusplus

extern void _ZN7S3133C1C1Ev();
extern void _ZN7S3133C1D2Ev();
Name_Map name_map_S3133C1[] = {
  NSPAIR(_ZN7S3133C1C1Ev),
  NSPAIR(_ZN7S3133C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3133C3;
extern VTBL_ENTRY _ZTI7S3133C3[];
extern  VTBL_ENTRY _ZTV7S3133C3[];
extern Class_Descriptor cd_S3133C4;
extern VTBL_ENTRY _ZTI7S3133C4[];
extern  VTBL_ENTRY _ZTV7S3133C4[];
extern Class_Descriptor cd_S3133C2;
extern VTBL_ENTRY _ZTI7S3133C2[];
extern  VTBL_ENTRY _ZTV7S3133C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3133C2[];
extern Class_Descriptor cd_S3133C5_nt;
extern VTBL_ENTRY _ZTI10S3133C5_nt[];
extern  VTBL_ENTRY _ZTV10S3133C5_nt[];
extern Class_Descriptor cd_S3133C9;
extern VTBL_ENTRY _ZTI7S3133C9[];
extern  VTBL_ENTRY _ZTV7S3133C9[];
extern Class_Descriptor cd_S3133C8;
extern VTBL_ENTRY _ZTI7S3133C8[];
extern  VTBL_ENTRY _ZTV7S3133C8[];
extern Class_Descriptor cd_S3133C7;
extern VTBL_ENTRY _ZTI7S3133C7[];
extern  VTBL_ENTRY _ZTV7S3133C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3133C7[];
extern Class_Descriptor cd_S3133C6;
extern VTBL_ENTRY _ZTI7S3133C6[];
extern  VTBL_ENTRY _ZTV7S3133C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3133C6[];
static Base_Class bases_S3133C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3133C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3133C4,    ABISELECT(192,140), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3133C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3133C5_nt,    ABISELECT(224,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3133C9,    ABISELECT(224,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3133C8,    ABISELECT(224,156), //bcp->offset
    49, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3133C7,    ABISELECT(216,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3133C6,    ABISELECT(216,152), //bcp->offset
    23, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3133C1[];
extern void _ZN7S3133C32v3Ev();
extern void _ZN7S3133C32v4Ev();
extern void _ZN7S3133C22v6Ev();
extern void _ZN7S3133C22v7Ev();
extern void _ZN7S3133C22v8Ev();
extern void _ZN7S3133C22v9Ev();
extern void _ZN7S3133C23v10Ev();
extern void _ZN7S3133C23v11Ev();
extern void _ZN7S3133C23v12Ev();
extern void _ZN7S3133C23v13Ev();
extern void _ZN7S3133C1D1Ev();
extern void _ZN7S3133C1D0Ev();
extern void _ZN7S3133C12v1Ev();
extern void _ZN7S3133C12v2Ev();
extern void _ZN7S3133C42v5Ev();
extern void _ZN7S3133C73v29Ev();
extern void _ZN7S3133C73v30Ev();
extern void _ZN7S3133C73v31Ev();
extern void ABISELECT(_ZTv0_n56_N7S3133C1D1Ev,_ZTv0_n28_N7S3133C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S3133C1D1Ev,_ZThn152_N7S3133C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3133C1D0Ev,_ZTv0_n28_N7S3133C1D0Ev)();
extern void ABISELECT(_ZThn216_N7S3133C1D0Ev,_ZThn152_N7S3133C1D0Ev)() __attribute__((weak));
extern void _ZN7S3133C63v32Ev();
extern void _ZN7S3133C63v33Ev();
extern void _ZN7S3133C63v34Ev();
extern void _ZN7S3133C63v35Ev();
extern void _ZN7S3133C63v36Ev();
extern void _ZN7S3133C63v37Ev();
extern void _ZN7S3133C63v38Ev();
extern void _ZN10S3133C5_nt3v14Ev();
extern void _ZN10S3133C5_nt3v15Ev();
extern void _ZN10S3133C5_nt3v16Ev();
extern void _ZN10S3133C5_nt3v17Ev();
extern void _ZN10S3133C5_nt3v18Ev();
extern void _ZN7S3133C93v19Ev();
extern void _ZN7S3133C93v20Ev();
extern void _ZN7S3133C93v21Ev();
extern void _ZN7S3133C93v22Ev();
extern void _ZN7S3133C83v23Ev();
extern void _ZN7S3133C83v24Ev();
extern void _ZN7S3133C83v25Ev();
extern void _ZN7S3133C83v26Ev();
extern void _ZN7S3133C83v27Ev();
extern void _ZN7S3133C83v28Ev();
static  VTBL_ENTRY vtc_S3133C1[] = {
  ABISELECT(224,156),
  ABISELECT(216,152),
  ABISELECT(192,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C1[0]),
  (VTBL_ENTRY)&_ZN7S3133C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3133C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3133C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3133C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3133C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3133C12v2Ev,
  0,
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI7S3133C1[0]),
  (VTBL_ENTRY)&_ZN7S3133C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-152),
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-216,-152),
  (VTBL_ENTRY)&(_ZTI7S3133C1[0]),
  (VTBL_ENTRY)&_ZN7S3133C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v30Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v31Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3133C1D1Ev,_ZTv0_n28_N7S3133C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3133C1D0Ev,_ZTv0_n28_N7S3133C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3133C63v32Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v33Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v34Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v35Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v36Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v37Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v38Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-156),
  (VTBL_ENTRY)&(_ZTI7S3133C1[0]),
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v19Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v20Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v21Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v22Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v23Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v24Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v25Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v26Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v27Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v28Ev,
};
extern VTBL_ENTRY _ZTV7S3133C1[];
extern void _ZN7S3133C32v3Ev();
extern void _ZN7S3133C32v4Ev();
extern void _ZN7S3133C22v6Ev();
extern void _ZN7S3133C22v7Ev();
extern void _ZN7S3133C22v8Ev();
extern void _ZN7S3133C22v9Ev();
extern void _ZN7S3133C23v10Ev();
extern void _ZN7S3133C23v11Ev();
extern void _ZN7S3133C23v12Ev();
extern void _ZN7S3133C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3133C2__7S3133C1[] = {
  ABISELECT(192,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C2[0]),
  (VTBL_ENTRY)&_ZN7S3133C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3133C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3133C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3133C23v13Ev,
};
extern void _ZN7S3133C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3133C4__7S3133C2__7S3133C1[] = {
  0,
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI7S3133C2[0]),
  (VTBL_ENTRY)&_ZN7S3133C42v5Ev,
};
extern void _ZN7S3133C73v29Ev();
extern void _ZN7S3133C73v30Ev();
extern void _ZN7S3133C73v31Ev();
extern void _ZN7S3133C6D1Ev();
extern void _ZN7S3133C6D0Ev();
extern void _ZN7S3133C63v32Ev();
extern void _ZN7S3133C63v33Ev();
extern void _ZN7S3133C63v34Ev();
extern void _ZN7S3133C63v35Ev();
extern void _ZN7S3133C63v36Ev();
extern void _ZN7S3133C63v37Ev();
extern void _ZN7S3133C63v38Ev();
static  VTBL_ENTRY _tg__ZTV7S3133C6__7S3133C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C6[0]),
  (VTBL_ENTRY)&_ZN7S3133C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v30Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v31Ev,
  (VTBL_ENTRY)&_ZN7S3133C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3133C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v32Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v33Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v34Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v35Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v36Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v37Ev,
  (VTBL_ENTRY)&_ZN7S3133C63v38Ev,
};
extern void _ZN7S3133C73v29Ev();
extern void _ZN7S3133C73v30Ev();
extern void _ZN7S3133C73v31Ev();
static  VTBL_ENTRY _tg__ZTV7S3133C77S3133C6__7S3133C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3133C7[0]),
  (VTBL_ENTRY)&_ZN7S3133C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v30Ev,
  (VTBL_ENTRY)&_ZN7S3133C73v31Ev,
};
extern void _ZN10S3133C5_nt3v14Ev();
extern void _ZN10S3133C5_nt3v15Ev();
extern void _ZN10S3133C5_nt3v16Ev();
extern void _ZN10S3133C5_nt3v17Ev();
extern void _ZN10S3133C5_nt3v18Ev();
extern void _ZN7S3133C93v19Ev();
extern void _ZN7S3133C93v20Ev();
extern void _ZN7S3133C93v21Ev();
extern void _ZN7S3133C93v22Ev();
extern void _ZN7S3133C83v23Ev();
extern void _ZN7S3133C83v24Ev();
extern void _ZN7S3133C83v25Ev();
extern void _ZN7S3133C83v26Ev();
extern void _ZN7S3133C83v27Ev();
extern void _ZN7S3133C83v28Ev();
static  VTBL_ENTRY _tg__ZTV7S3133C8__7S3133C77S3133C6__7S3133C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3133C7[0]),
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v19Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v20Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v21Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v22Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v23Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v24Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v25Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v26Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v27Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v28Ev,
};
extern void _ZN10S3133C5_nt3v14Ev();
extern void _ZN10S3133C5_nt3v15Ev();
extern void _ZN10S3133C5_nt3v16Ev();
extern void _ZN10S3133C5_nt3v17Ev();
extern void _ZN10S3133C5_nt3v18Ev();
extern void _ZN7S3133C93v19Ev();
extern void _ZN7S3133C93v20Ev();
extern void _ZN7S3133C93v21Ev();
extern void _ZN7S3133C93v22Ev();
extern void _ZN7S3133C83v23Ev();
extern void _ZN7S3133C83v24Ev();
extern void _ZN7S3133C83v25Ev();
extern void _ZN7S3133C83v26Ev();
extern void _ZN7S3133C83v27Ev();
extern void _ZN7S3133C83v28Ev();
static  VTBL_ENTRY _tg__ZTV7S3133C8__7S3133C6__7S3133C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3133C6[0]),
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3133C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v19Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v20Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v21Ev,
  (VTBL_ENTRY)&_ZN7S3133C93v22Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v23Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v24Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v25Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v26Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v27Ev,
  (VTBL_ENTRY)&_ZN7S3133C83v28Ev,
};
static  VTT_ENTRY vtt_S3133C1[] = {
  {&(_ZTV7S3133C1[5]),  5,81},
  {&(_tg__ZTV7S3133C2__7S3133C1[3]),  3,13},
  {&(_tg__ZTV7S3133C4__7S3133C2__7S3133C1[3]),  3,4},
  {&(_ZTV7S3133C1[22]),  22,81},
  {&(_ZTV7S3133C1[37]),  37,81},
  {&(_ZTV7S3133C1[66]),  66,81},
  {&(_tg__ZTV7S3133C6__7S3133C1[3]),  3,15},
  {&(_tg__ZTV7S3133C77S3133C6__7S3133C1[3]),  3,6},
  {&(_tg__ZTV7S3133C8__7S3133C77S3133C6__7S3133C1[17]),  17,32},
  {&(_tg__ZTV7S3133C8__7S3133C6__7S3133C1[17]),  17,32},
};
extern VTBL_ENTRY _ZTI7S3133C1[];
extern  VTBL_ENTRY _ZTV7S3133C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3133C1[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3133C1D0Ev,_ZTv0_n28_N7S3133C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S3133C1D0Ev,_ZThn152_N7S3133C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3133C1D1Ev,_ZTv0_n28_N7S3133C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S3133C1D1Ev,_ZThn152_N7S3133C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3133C1 = {  "S3133C1", // class name
  bases_S3133C1, 8,
  &(vtc_S3133C1[0]), // expected_vtbl_contents
  &(vtt_S3133C1[0]), // expected_vtt_contents
  ABISELECT(240,164), // object size
  NSPAIRA(_ZTI7S3133C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3133C1),81, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3133C1),10, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3639C3_nt  {
  ::S2014C26 s3639c3f0;
  ::S2014C22 s3639c3f1;
  char s3639c3f2;
  void  mf3639c3(); // _ZN10S3639C3_nt8mf3639c3Ev
  virtual  ~S3639C3_nt(); // _ZN10S3639C3_ntD1Ev
  S3639C3_nt(); // tgen
};
//SIG(-1 S3639C3_nt) C1{ vd m FC2{ m Fp Fi FC3{ m} FC4{ m}} FC5{ m Fp Fi FC6{ m} FC3} Fc}


void  S3639C3_nt ::mf3639c3(){}
 S3639C3_nt ::~S3639C3_nt(){ note_dtor("S3639C3_nt", this);}
S3639C3_nt ::S3639C3_nt(){ note_ctor("S3639C3_nt", this);} // tgen

//skip512 S3639C3_nt

#else // __cplusplus

extern void _ZN10S3639C3_ntC1Ev();
extern void _ZN10S3639C3_ntD1Ev();
Name_Map name_map_S3639C3_nt[] = {
  NSPAIR(_ZN10S3639C3_ntC1Ev),
  NSPAIR(_ZN10S3639C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3639C3_nt[];
extern void _ZN10S3639C3_ntD1Ev();
extern void _ZN10S3639C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3639C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3639C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3639C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3639C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3639C3_nt[];
VTBL_ENTRY *P__ZTI10S3639C3_nt = _ZTI10S3639C3_nt; 
extern  VTBL_ENTRY _ZTV10S3639C3_nt[];
Class_Descriptor cd_S3639C3_nt = {  "S3639C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3639C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S3639C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3639C3_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3639C2_nt  : S3639C3_nt {
  char s3639c2f0;
  int s3639c2f1;
  ::S2014C6_nt s3639c2f2;
  virtual  ~S3639C2_nt(); // _ZN10S3639C2_ntD1Ev
  virtual void  v4(); // _ZN10S3639C2_nt2v4Ev
  virtual void  v5(); // _ZN10S3639C2_nt2v5Ev
  S3639C2_nt(); // tgen
};
//SIG(-1 S3639C2_nt) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC5{ m}} FC6{ m Fp Fi FC7{ m} FC4} Fc} vd v1 v2 Fc Fi FC8{ m Fp Fi FC9{ m} FC9}}


 S3639C2_nt ::~S3639C2_nt(){ note_dtor("S3639C2_nt", this);}
void  S3639C2_nt ::v4(){vfunc_called(this, "_ZN10S3639C2_nt2v4Ev");}
void  S3639C2_nt ::v5(){vfunc_called(this, "_ZN10S3639C2_nt2v5Ev");}
S3639C2_nt ::S3639C2_nt(){ note_ctor("S3639C2_nt", this);} // tgen

//skip512 S3639C2_nt

#else // __cplusplus

extern void _ZN10S3639C2_ntC1Ev();
extern void _ZN10S3639C2_ntD1Ev();
Name_Map name_map_S3639C2_nt[] = {
  NSPAIR(_ZN10S3639C2_ntC1Ev),
  NSPAIR(_ZN10S3639C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3639C3_nt;
extern VTBL_ENTRY _ZTI10S3639C3_nt[];
extern  VTBL_ENTRY _ZTV10S3639C3_nt[];
static Base_Class bases_S3639C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3639C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3639C2_nt[];
extern void _ZN10S3639C2_ntD1Ev();
extern void _ZN10S3639C2_ntD0Ev();
extern void _ZN10S3639C2_nt2v4Ev();
extern void _ZN10S3639C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S3639C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3639C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3639C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3639C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3639C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3639C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S3639C2_nt[];
VTBL_ENTRY *P__ZTI10S3639C2_nt = _ZTI10S3639C2_nt; 
extern  VTBL_ENTRY _ZTV10S3639C2_nt[];
Class_Descriptor cd_S3639C2_nt = {  "S3639C2_nt", // class name
  bases_S3639C2_nt, 1,
  &(vtc_S3639C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI10S3639C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3639C2_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3639C13_nt  {
  virtual  ~S3639C13_nt(); // _ZN11S3639C13_ntD1Ev
  virtual void  v6(); // _ZN11S3639C13_nt2v6Ev
  S3639C13_nt(); // tgen
};
//SIG(-1 S3639C13_nt) C1{ vd v1}


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

//skip512 S3639C13_nt

#else // __cplusplus

extern void _ZN11S3639C13_ntC1Ev();
extern void _ZN11S3639C13_ntD1Ev();
Name_Map name_map_S3639C13_nt[] = {
  NSPAIR(_ZN11S3639C13_ntC1Ev),
  NSPAIR(_ZN11S3639C13_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3639C13_nt[];
extern void _ZN11S3639C13_ntD1Ev();
extern void _ZN11S3639C13_ntD0Ev();
extern void _ZN11S3639C13_nt2v6Ev();
static  VTBL_ENTRY vtc_S3639C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3639C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S3639C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3639C13_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3639C13_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI11S3639C13_nt[];
VTBL_ENTRY *P__ZTI11S3639C13_nt = _ZTI11S3639C13_nt; 
extern  VTBL_ENTRY _ZTV11S3639C13_nt[];
Class_Descriptor cd_S3639C13_nt = {  "S3639C13_nt", // class name
  0,0,//no base classes
  &(vtc_S3639C13_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3639C13_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3639C13_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  S3639C14_nt  {
  void *s3639c14f0[2];
  void  mf3639c14(); // _ZN11S3639C14_nt9mf3639c14Ev
};
//SIG(-1 S3639C14_nt) C1{ m Fp[2]}


void  S3639C14_nt ::mf3639c14(){}

//skip512 S3639C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3639C15  {
  ::S2014C37 s3639c15f0;
  ::S2014C40_nt s3639c15f1;
  ::S2014C40_nt s3639c15f2;
  int s3639c15f3;
  void *s3639c15f4;
  int s3639c15f5;
  ::S2014C39 s3639c15f6;
  __tsi64 s3639c15f7;
  char s3639c15f8;
  int s3639c15f9[2];
  void  mf3639c15(); // _ZN8S3639C159mf3639c15Ev
};
//SIG(-1 S3639C15) C1{ m FC2{ m Fp Fi[2] FC3{ m}} FC4{ m FC5{ m FL}} FC4 Fi Fp Fi FC6{ m Fi[6]} FL Fc Fi[2]}


void  S3639C15 ::mf3639c15(){}

static void Test_S3639C15()
{
  {
    init_simple_test("S3639C15");
    S3639C15 lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S3639C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3639C15)");
    check_field_offset(lv, s3639c15f0, 0, "S3639C15.s3639c15f0");
    check_field_offset(lv, s3639c15f1, ABISELECT(24,16), "S3639C15.s3639c15f1");
    check_field_offset(lv, s3639c15f2, ABISELECT(32,24), "S3639C15.s3639c15f2");
    check_field_offset(lv, s3639c15f3, ABISELECT(40,32), "S3639C15.s3639c15f3");
    check_field_offset(lv, s3639c15f4, ABISELECT(48,36), "S3639C15.s3639c15f4");
    check_field_offset(lv, s3639c15f5, ABISELECT(56,40), "S3639C15.s3639c15f5");
    check_field_offset(lv, s3639c15f6, ABISELECT(60,44), "S3639C15.s3639c15f6");
    check_field_offset(lv, s3639c15f7, ABISELECT(88,68), "S3639C15.s3639c15f7");
    check_field_offset(lv, s3639c15f8, ABISELECT(96,76), "S3639C15.s3639c15f8");
    check_field_offset(lv, s3639c15f9, ABISELECT(100,80), "S3639C15.s3639c15f9");
  }
}
static Arrange_To_Call_Me vS3639C15(Test_S3639C15, "S3639C15", ABISELECT(112,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3639C1  : S3639C2_nt , S3639C13_nt {
  void *s3639c1f0[2];
  int s3639c1f1[4];
  void *s3639c1f2;
  ::S3639C14_nt s3639c1f3;
  void *s3639c1f4;
  ::S3639C15 s3639c1f5;
  int s3639c1f6;
  virtual  ~S3639C1(); // _ZN7S3639C1D1Ev
  virtual void  v1(); // _ZN7S3639C12v1Ev
  virtual void  v2(); // _ZN7S3639C12v2Ev
  virtual void  v3(); // _ZN7S3639C12v3Ev
  S3639C1(); // tgen
};
//SIG(1 S3639C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC6{ m}} FC7{ m Fp Fi FC8{ m} FC5} Fc} vd v4 v5 Fc Fi FC9{ m Fp Fi FC10{ m} FC10}} BC11{ vd v6} vd v1 v2 v3 Fp[2] Fi[4] Fp FC12{ m Fp[2]} Fp FC13{ m FC14{ m Fp Fi[2] FC15{ m}} FC16{ m FC17{ m FL}} FC16 Fi Fp Fi FC18{ m Fi[6]} FL Fc Fi[2]} Fi}


 S3639C1 ::~S3639C1(){ note_dtor("S3639C1", this);}
void  S3639C1 ::v1(){vfunc_called(this, "_ZN7S3639C12v1Ev");}
void  S3639C1 ::v2(){vfunc_called(this, "_ZN7S3639C12v2Ev");}
void  S3639C1 ::v3(){vfunc_called(this, "_ZN7S3639C12v3Ev");}
S3639C1 ::S3639C1(){ note_ctor("S3639C1", this);} // tgen

static void Test_S3639C1()
{
  extern Class_Descriptor cd_S3639C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,47)];
    init_test(&cd_S3639C1, buf);
    S3639C1 *dp, &lv = *(dp=new (buf) S3639C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,184), "sizeof(S3639C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3639C1)");
    check_base_class_offset(lv, (S3639C3_nt*)(S3639C2_nt*), 0, "S3639C1");
    check_base_class_offset(lv, (S3639C2_nt*), 0, "S3639C1");
    check_base_class_offset(lv, (S3639C13_nt*), ABISELECT(64,48), "S3639C1");
    check_field_offset(lv, s3639c1f0, ABISELECT(72,52), "S3639C1.s3639c1f0");
    check_field_offset(lv, s3639c1f1, ABISELECT(88,60), "S3639C1.s3639c1f1");
    check_field_offset(lv, s3639c1f2, ABISELECT(104,76), "S3639C1.s3639c1f2");
    check_field_offset(lv, s3639c1f3, ABISELECT(112,80), "S3639C1.s3639c1f3");
    check_field_offset(lv, s3639c1f4, ABISELECT(128,88), "S3639C1.s3639c1f4");
    check_field_offset(lv, s3639c1f5, ABISELECT(136,92), "S3639C1.s3639c1f5");
    check_field_offset(lv, s3639c1f6, ABISELECT(248,180), "S3639C1.s3639c1f6");
    test_class_info(&lv, &cd_S3639C1);
    dp->~S3639C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3639C1(Test_S3639C1, "S3639C1", ABISELECT(256,184));

#else // __cplusplus

extern void _ZN7S3639C1C1Ev();
extern void _ZN7S3639C1D1Ev();
Name_Map name_map_S3639C1[] = {
  NSPAIR(_ZN7S3639C1C1Ev),
  NSPAIR(_ZN7S3639C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3639C3_nt;
extern VTBL_ENTRY _ZTI10S3639C3_nt[];
extern  VTBL_ENTRY _ZTV10S3639C3_nt[];
extern Class_Descriptor cd_S3639C2_nt;
extern VTBL_ENTRY _ZTI10S3639C2_nt[];
extern  VTBL_ENTRY _ZTV10S3639C2_nt[];
extern Class_Descriptor cd_S3639C13_nt;
extern VTBL_ENTRY _ZTI11S3639C13_nt[];
extern  VTBL_ENTRY _ZTV11S3639C13_nt[];
static Base_Class bases_S3639C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3639C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3639C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3639C13_nt,    ABISELECT(64,48), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3639C1[];
extern void _ZN7S3639C1D1Ev();
extern void _ZN7S3639C1D0Ev();
extern void _ZN10S3639C2_nt2v4Ev();
extern void _ZN10S3639C2_nt2v5Ev();
extern void _ZN7S3639C12v1Ev();
extern void _ZN7S3639C12v2Ev();
extern void _ZN7S3639C12v3Ev();
extern void ABISELECT(_ZThn64_N7S3639C1D1Ev,_ZThn48_N7S3639C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S3639C1D0Ev,_ZThn48_N7S3639C1D0Ev)();
extern void _ZN11S3639C13_nt2v6Ev();
static  VTBL_ENTRY vtc_S3639C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3639C1[0]),
  (VTBL_ENTRY)&_ZN7S3639C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3639C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3639C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3639C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S3639C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3639C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3639C12v3Ev,
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S3639C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3639C1D1Ev,_ZThn48_N7S3639C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3639C1D0Ev,_ZThn48_N7S3639C1D0Ev),
  (VTBL_ENTRY)&_ZN11S3639C13_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI7S3639C1[];
extern  VTBL_ENTRY _ZTV7S3639C1[];
Class_Descriptor cd_S3639C1 = {  "S3639C1", // class name
  bases_S3639C1, 3,
  &(vtc_S3639C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,184), // object size
  NSPAIRA(_ZTI7S3639C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3639C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20487C5  : S2014C38 {
  ::S2014C38 s20487c5f0;
  virtual  ~S20487C5(); // _ZN8S20487C5D1Ev
  S20487C5(); // tgen
};
//SIG(-1 S20487C5) C1{ BC2{ m} vd FC2}


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

static void Test_S20487C5()
{
  extern Class_Descriptor cd_S20487C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20487C5, buf);
    S20487C5 *dp, &lv = *(dp=new (buf) S20487C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20487C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C5)");
    check_base_class_offset(lv, (S2014C38*), 0, "S20487C5");
    check_field_offset(lv, s20487c5f0, ABISELECT(8,4), "S20487C5.s20487c5f0");
    test_class_info(&lv, &cd_S20487C5);
    dp->~S20487C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C5(Test_S20487C5, "S20487C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20487C5C1Ev();
extern void _ZN8S20487C5D1Ev();
Name_Map name_map_S20487C5[] = {
  NSPAIR(_ZN8S20487C5C1Ev),
  NSPAIR(_ZN8S20487C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S20487C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20487C5[];
extern void _ZN8S20487C5D1Ev();
extern void _ZN8S20487C5D0Ev();
static  VTBL_ENTRY vtc_S20487C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C5[0]),
  (VTBL_ENTRY)&_ZN8S20487C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
Class_Descriptor cd_S20487C5 = {  "S20487C5", // class name
  bases_S20487C5, 1,
  &(vtc_S20487C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20487C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20487C5),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  S20487C7  : virtual S2014C28 , virtual S20487C5 , virtual S3222C8_nt {
  void *s20487c7f0;
  ::S19762C18_nt s20487c7f1;
  virtual  ~S20487C7(); // _ZN8S20487C7D2Ev
  S20487C7(); // tgen
};
//SIG(-1 S20487C7) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S20487C7()
{
  extern Class_Descriptor cd_S20487C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S20487C7, buf);
    S20487C7 *dp, &lv = *(dp=new (buf) S20487C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S20487C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C7)");
    check_base_class_offset(lv, (S2014C28*), 0, "S20487C7");
    check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(24,12), "S20487C7");
    check_base_class_offset(lv, (S20487C5*), ABISELECT(24,12), "S20487C7");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S20487C7");
    check_field_offset(lv, s20487c7f0, ABISELECT(8,4), "S20487C7.s20487c7f0");
    check_field_offset(lv, s20487c7f1, ABISELECT(16,8), "S20487C7.s20487c7f1");
    test_class_info(&lv, &cd_S20487C7);
    dp->~S20487C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C7(Test_S20487C7, "S20487C7", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S20487C7C1Ev();
extern void _ZN8S20487C7D2Ev();
Name_Map name_map_S20487C7[] = {
  NSPAIR(_ZN8S20487C7C1Ev),
  NSPAIR(_ZN8S20487C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S20487C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20487C7[];
extern void _ZN8S20487C7D1Ev();
extern void _ZN8S20487C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20487C7[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&_ZN8S20487C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C7D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S20487C7[];
static  VTT_ENTRY vtt_S20487C7[] = {
  {&(_ZTV8S20487C7[5]),  5,12},
  {&(_ZTV8S20487C7[10]),  10,12},
};
extern VTBL_ENTRY _ZTI8S20487C7[];
extern  VTBL_ENTRY _ZTV8S20487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C7[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20487C7 = {  "S20487C7", // class name
  bases_S20487C7, 4,
  &(vtc_S20487C7[0]), // expected_vtbl_contents
  &(vtt_S20487C7[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S20487C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20487C7),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20487C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20487C3  : S2014C38 , S20487C5 , virtual S2014C28 , virtual S20487C7 {
  virtual  ~S20487C3(); // _ZN8S20487C3D2Ev
  S20487C3(); // tgen
};
//SIG(-1 S20487C3) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S20487C3()
{
  extern Class_Descriptor cd_S20487C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S20487C3, buf);
    S20487C3 *dp, &lv = *(dp=new (buf) S20487C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S20487C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C3)");
    /*is_ambiguous_... S20487C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S20487C3");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*), 0, "S20487C3");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*), 0, "S20487C3");
    check_base_class_offset(lv, (S2014C28*), 0, "S20487C3");
    check_base_class_offset(lv, (S2014C28*)(S20487C7*), 0, "S20487C3");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(40,20), "S20487C3");
    check_base_class_offset(lv, (S20487C5*)(S20487C7*), ABISELECT(40,20), "S20487C3");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C7*), ABISELECT(52,28), "S20487C3");
    check_base_class_offset(lv, (S20487C7*), ABISELECT(16,8), "S20487C3");
    test_class_info(&lv, &cd_S20487C3);
    dp->~S20487C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C3(Test_S20487C3, "S20487C3", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S20487C3C1Ev();
extern void _ZN8S20487C3D2Ev();
Name_Map name_map_S20487C3[] = {
  NSPAIR(_ZN8S20487C3C1Ev),
  NSPAIR(_ZN8S20487C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C7;
extern VTBL_ENTRY _ZTI8S20487C7[];
extern  VTBL_ENTRY _ZTV8S20487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C7[];
static Base_Class bases_S20487C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20487C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20487C7,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20487C3[];
extern void _ZN8S20487C3D1Ev();
extern void _ZN8S20487C3D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20487C3D1Ev,_ZThn8_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20487C3D0Ev,_ZThn8_N8S20487C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn20_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn20_N8S20487C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20487C3[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&_ZN8S20487C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C3D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S20487C3[];
extern void _ZN8S20487C7D1Ev();
extern void _ZN8S20487C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C7__8S20487C3[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&_ZN8S20487C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__8S20487C7__8S20487C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev),
};
static  VTT_ENTRY vtt_S20487C3[] = {
  {&(_ZTV8S20487C3[6]),  6,21},
  {&(_ZTV8S20487C3[14]),  14,21},
  {&(_ZTV8S20487C3[19]),  19,21},
  {&(_tg__ZTV8S20487C7__8S20487C3[5]),  5,7},
  {&(_tg__ZTV8S20487C5__8S20487C7__8S20487C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20487C3[];
extern  VTBL_ENTRY _ZTV8S20487C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C3[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn20_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn20_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20487C3D0Ev,_ZThn8_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20487C3D1Ev,_ZThn8_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20487C3 = {  "S20487C3", // class name
  bases_S20487C3, 8,
  &(vtc_S20487C3[0]), // expected_vtbl_contents
  &(vtt_S20487C3[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S20487C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20487C3),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20487C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20487C2  : virtual S20487C3 {
  virtual  ~S20487C2(); // _ZN8S20487C2D2Ev
  S20487C2(); // tgen
};
//SIG(-1 S20487C2) C1{ VBC2{ BC3{ m} BC4{ BC3 vd FC3} VBC5{ m} VBC6{ VBC5 VBC4 VBC7{ m Fi} vd Fp FC8{}} vd} vd}


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

static void Test_S20487C2()
{
  extern Class_Descriptor cd_S20487C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S20487C2, buf);
    S20487C2 *dp, &lv = *(dp=new (buf) S20487C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S20487C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C2)");
    /*is_ambiguous_... S20487C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C3*), ABISELECT(17,9), "S20487C2");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C3*), ABISELECT(8,4), "S20487C2");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C3*), ABISELECT(8,4), "S20487C2");
    check_base_class_offset(lv, (S2014C28*)(S20487C3*), 0, "S20487C2");
    check_base_class_offset(lv, (S2014C28*)(S20487C7*), 0, "S20487C2");
    /*is_ambiguous_... S20487C2::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(48,24), "S20487C2");
    check_base_class_offset(lv, (S20487C5*)(S20487C7*), ABISELECT(48,24), "S20487C2");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C7*), ABISELECT(60,32), "S20487C2");
    check_base_class_offset(lv, (S20487C7*)(S20487C3*), ABISELECT(24,12), "S20487C2");
    check_base_class_offset(lv, (S20487C3*), ABISELECT(8,4), "S20487C2");
    test_class_info(&lv, &cd_S20487C2);
    dp->~S20487C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C2(Test_S20487C2, "S20487C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S20487C2C1Ev();
extern void _ZN8S20487C2D2Ev();
Name_Map name_map_S20487C2[] = {
  NSPAIR(_ZN8S20487C2C1Ev),
  NSPAIR(_ZN8S20487C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C7;
extern VTBL_ENTRY _ZTI8S20487C7[];
extern  VTBL_ENTRY _ZTV8S20487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C7[];
extern Class_Descriptor cd_S20487C3;
extern VTBL_ENTRY _ZTI8S20487C3[];
extern  VTBL_ENTRY _ZTV8S20487C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C3[];
static Base_Class bases_S20487C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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_S20487C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(48,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20487C7,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //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
    8, //immediately_derived
  0, 1},
  {&cd_S20487C3,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20487C2[];
extern void _ZN8S20487C2D1Ev();
extern void _ZN8S20487C2D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S20487C2D1Ev,_ZTv0_n28_N8S20487C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20487C2D1Ev,_ZThn4_N8S20487C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20487C2D0Ev,_ZTv0_n28_N8S20487C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20487C2D0Ev,_ZThn4_N8S20487C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C2D1Ev,_ZTv0_n24_N8S20487C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20487C2D1Ev,_ZThn12_N8S20487C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C2D0Ev,_ZTv0_n24_N8S20487C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20487C2D0Ev,_ZThn12_N8S20487C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C2D1Ev,_ZTv0_n12_N8S20487C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20487C2D1Ev,_ZThn24_N8S20487C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C2D0Ev,_ZTv0_n12_N8S20487C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20487C2D0Ev,_ZThn24_N8S20487C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20487C2[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C2[0]),
  (VTBL_ENTRY)&_ZN8S20487C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20487C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20487C2D1Ev,_ZTv0_n28_N8S20487C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20487C2D0Ev,_ZTv0_n28_N8S20487C2D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20487C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C2D1Ev,_ZTv0_n24_N8S20487C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C2D0Ev,_ZTv0_n24_N8S20487C2D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20487C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C2D1Ev,_ZTv0_n12_N8S20487C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C2D0Ev,_ZTv0_n12_N8S20487C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20487C2[];
extern void _ZN8S20487C3D1Ev();
extern void _ZN8S20487C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C3__8S20487C2[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&_ZN8S20487C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20487C3D1Ev,_ZThn8_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20487C3D0Ev,_ZThn8_N8S20487C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C7__8S20487C3__8S20487C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn20_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn20_N8S20487C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__A1__8S20487C3__8S20487C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev),
};
extern void _ZN8S20487C7D1Ev();
extern void _ZN8S20487C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C7__8S20487C2[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&_ZN8S20487C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__8S20487C7__8S20487C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev),
};
static  VTT_ENTRY vtt_S20487C2[] = {
  {&(_ZTV8S20487C2[7]),  7,31},
  {&(_ZTV8S20487C2[16]),  16,31},
  {&(_ZTV8S20487C2[24]),  24,31},
  {&(_ZTV8S20487C2[29]),  29,31},
  {&(_tg__ZTV8S20487C3__8S20487C2[6]),  6,8},
  {&(_tg__ZTV8S20487C7__8S20487C3__8S20487C2[6]),  6,8},
  {&(_tg__ZTV8S20487C5__A1__8S20487C3__8S20487C2[3]),  3,5},
  {&(_tg__ZTV8S20487C7__8S20487C2[5]),  5,7},
  {&(_tg__ZTV8S20487C5__8S20487C7__8S20487C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20487C2[];
extern  VTBL_ENTRY _ZTV8S20487C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C2[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn20_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn20_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20487C3D0Ev,_ZThn8_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20487C3D1Ev,_ZThn8_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C2D0Ev,_ZTv0_n12_N8S20487C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20487C2D0Ev,_ZThn24_N8S20487C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C2D1Ev,_ZTv0_n12_N8S20487C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20487C2D1Ev,_ZThn24_N8S20487C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C2D0Ev,_ZTv0_n24_N8S20487C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C2D0Ev,_ZThn12_N8S20487C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C2D1Ev,_ZTv0_n24_N8S20487C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C2D1Ev,_ZThn12_N8S20487C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20487C2D0Ev,_ZTv0_n28_N8S20487C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20487C2D0Ev,_ZThn4_N8S20487C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20487C2D1Ev,_ZTv0_n28_N8S20487C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20487C2D1Ev,_ZThn4_N8S20487C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20487C2 = {  "S20487C2", // class name
  bases_S20487C2, 9,
  &(vtc_S20487C2[0]), // expected_vtbl_contents
  &(vtt_S20487C2[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S20487C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20487C2),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20487C2),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20487C12  : S20487C5 {
  virtual  ~S20487C12(); // _ZN9S20487C12D1Ev
  S20487C12(); // tgen
};
//SIG(-1 S20487C12) C1{ BC2{ BC3{ m} vd FC3} vd}


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

static void Test_S20487C12()
{
  extern Class_Descriptor cd_S20487C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20487C12, buf);
    S20487C12 *dp, &lv = *(dp=new (buf) S20487C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20487C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C12)");
    check_base_class_offset(lv, (S2014C38*)(S20487C5*), 0, "S20487C12");
    check_base_class_offset(lv, (S20487C5*), 0, "S20487C12");
    test_class_info(&lv, &cd_S20487C12);
    dp->~S20487C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C12(Test_S20487C12, "S20487C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S20487C12C1Ev();
extern void _ZN9S20487C12D1Ev();
Name_Map name_map_S20487C12[] = {
  NSPAIR(_ZN9S20487C12C1Ev),
  NSPAIR(_ZN9S20487C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
static Base_Class bases_S20487C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20487C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20487C12[];
extern void _ZN9S20487C12D1Ev();
extern void _ZN9S20487C12D0Ev();
static  VTBL_ENTRY vtc_S20487C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C12[0]),
  (VTBL_ENTRY)&_ZN9S20487C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C12D0Ev,
};
extern VTBL_ENTRY _ZTI9S20487C12[];
extern  VTBL_ENTRY _ZTV9S20487C12[];
Class_Descriptor cd_S20487C12 = {  "S20487C12", // class name
  bases_S20487C12, 2,
  &(vtc_S20487C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20487C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20487C12),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  S20487C15  : virtual S20487C5 {
  __tsi64 s20487c15f0;
  ~S20487C15(); // tgen
  S20487C15(); // tgen
};
//SIG(-1 S20487C15) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S20487C15()
{
  extern Class_Descriptor cd_S20487C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20487C15, buf);
    S20487C15 *dp, &lv = *(dp=new (buf) S20487C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20487C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C15)");
    check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(16,12), "S20487C15");
    check_base_class_offset(lv, (S20487C5*), ABISELECT(16,12), "S20487C15");
    check_field_offset(lv, s20487c15f0, ABISELECT(8,4), "S20487C15.s20487c15f0");
    test_class_info(&lv, &cd_S20487C15);
    dp->~S20487C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C15(Test_S20487C15, "S20487C15", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S20487C15C1Ev();
extern void _ZN9S20487C15D1Ev();
Name_Map name_map_S20487C15[] = {
  NSPAIR(_ZN9S20487C15C1Ev),
  NSPAIR(_ZN9S20487C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
static Base_Class bases_S20487C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20487C15[];
extern void _ZN9S20487C15D1Ev();
extern void _ZN9S20487C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20487C15D1Ev,_ZThn12_N9S20487C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20487C15D0Ev,_ZThn12_N9S20487C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20487C15[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C15[0]),
  (VTBL_ENTRY)&_ZN9S20487C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C15D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S20487C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20487C15[];
static  VTT_ENTRY vtt_S20487C15[] = {
  {&(_ZTV9S20487C15[3]),  3,10},
  {&(_ZTV9S20487C15[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S20487C15[];
extern  VTBL_ENTRY _ZTV9S20487C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C15[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20487C15D0Ev,_ZThn12_N9S20487C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20487C15D1Ev,_ZThn12_N9S20487C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20487C15 = {  "S20487C15", // class name
  bases_S20487C15, 2,
  &(vtc_S20487C15[0]), // expected_vtbl_contents
  &(vtt_S20487C15[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S20487C15),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20487C15),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20487C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20487C17  : S2014C28 , S20487C5 , S2014C38 , S3222C8_nt {
  short s20487c17f0:16;
  __tsi64 s20487c17f1;
  ~S20487C17(); // tgen
  S20487C17(); // tgen
};
//SIG(-1 S20487C17) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 FL}


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

static void Test_S20487C17()
{
  extern Class_Descriptor cd_S20487C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20487C17, buf);
    S20487C17 *dp, &lv = *(dp=new (buf) S20487C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20487C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C17)");
    check_base_class_offset(lv, (S2014C28*), 0, "S20487C17");
    check_base_class_offset(lv, (S2014C38*)(S20487C5*), 0, "S20487C17");
    check_base_class_offset(lv, (S20487C5*), 0, "S20487C17");
    /*is_ambiguous_... S20487C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S20487C17");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S20487C17");
    set_bf_and_test(lv, s20487c17f0, ABISELECT(16,12), 0, 16, 1, "S20487C17");
    set_bf_and_test(lv, s20487c17f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S20487C17");
    check_field_offset(lv, s20487c17f1, ABISELECT(24,16), "S20487C17.s20487c17f1");
    test_class_info(&lv, &cd_S20487C17);
    dp->~S20487C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C17(Test_S20487C17, "S20487C17", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN9S20487C17C1Ev();
extern void _ZN9S20487C17D1Ev();
Name_Map name_map_S20487C17[] = {
  NSPAIR(_ZN9S20487C17C1Ev),
  NSPAIR(_ZN9S20487C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S20487C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20487C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20487C17[];
extern void _ZN9S20487C17D1Ev();
extern void _ZN9S20487C17D0Ev();
static  VTBL_ENTRY vtc_S20487C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C17[0]),
  (VTBL_ENTRY)&_ZN9S20487C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C17D0Ev,
};
extern VTBL_ENTRY _ZTI9S20487C17[];
extern  VTBL_ENTRY _ZTV9S20487C17[];
Class_Descriptor cd_S20487C17 = {  "S20487C17", // class name
  bases_S20487C17, 5,
  &(vtc_S20487C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI9S20487C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20487C17),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  S20487C16  : S20487C17 , S20487C5 {
  int s20487c16f0;
  ~S20487C16(); // tgen
  S20487C16(); // tgen
};
//SIG(-1 S20487C16) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 FL} BC4 Fi}


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

static void Test_S20487C16()
{
  extern Class_Descriptor cd_S20487C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S20487C16, buf);
    S20487C16 *dp, &lv = *(dp=new (buf) S20487C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S20487C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C16)");
    check_base_class_offset(lv, (S2014C28*)(S20487C17*), 0, "S20487C16");
    check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C17*), 0, "S20487C16");
    check_base_class_offset(lv, (S20487C5*)(S20487C17*), 0, "S20487C16");
    /*is_ambiguous_... S20487C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C17*), ABISELECT(9,5), "S20487C16");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C17*), ABISELECT(12,8), "S20487C16");
    check_base_class_offset(lv, (S20487C17*), 0, "S20487C16");
    /*is_ambiguous_... S20487C16::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(32,24), "S20487C16");
    /*is_ambiguous_... S20487C16::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*), ABISELECT(32,24), "S20487C16");
    check_field_offset(lv, s20487c16f0, ABISELECT(44,32), "S20487C16.s20487c16f0");
    test_class_info(&lv, &cd_S20487C16);
    dp->~S20487C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C16(Test_S20487C16, "S20487C16", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN9S20487C16C1Ev();
extern void _ZN9S20487C16D1Ev();
Name_Map name_map_S20487C16[] = {
  NSPAIR(_ZN9S20487C16C1Ev),
  NSPAIR(_ZN9S20487C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C17;
extern VTBL_ENTRY _ZTI9S20487C17[];
extern  VTBL_ENTRY _ZTV9S20487C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
static Base_Class bases_S20487C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20487C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S20487C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(32,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20487C16[];
extern void _ZN9S20487C16D1Ev();
extern void _ZN9S20487C16D0Ev();
extern void ABISELECT(_ZThn32_N9S20487C16D1Ev,_ZThn24_N9S20487C16D1Ev)();
extern void ABISELECT(_ZThn32_N9S20487C16D0Ev,_ZThn24_N9S20487C16D0Ev)();
static  VTBL_ENTRY vtc_S20487C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C16[0]),
  (VTBL_ENTRY)&_ZN9S20487C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C16D0Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20487C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S20487C16D1Ev,_ZThn24_N9S20487C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S20487C16D0Ev,_ZThn24_N9S20487C16D0Ev),
};
extern VTBL_ENTRY _ZTI9S20487C16[];
extern  VTBL_ENTRY _ZTV9S20487C16[];
Class_Descriptor cd_S20487C16 = {  "S20487C16", // class name
  bases_S20487C16, 8,
  &(vtc_S20487C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI9S20487C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20487C16),8, //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  S20487C14  : S20487C15 , virtual S2014C28 , virtual S3222C8_nt , virtual S20487C7 , virtual S20487C16 {
  long s20487c14f0;
  ::S20487C15 s20487c14f1;
  virtual  ~S20487C14(); // _ZN9S20487C14D2Ev
  S20487C14(); // tgen
};
//SIG(-1 S20487C14) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 FL} BC3 Fi} vd Fl FC2}


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

static void Test_S20487C14()
{
  extern Class_Descriptor cd_S20487C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S20487C14, buf);
    S20487C14 *dp, &lv = *(dp=new (buf) S20487C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S20487C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C14)");
    /*is_ambiguous_... S20487C14::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(56,36), "S20487C14");
    check_base_class_offset(lv, (S20487C5*)(S20487C15*), ABISELECT(56,36), "S20487C14");
    check_base_class_offset(lv, (S20487C5*)(S20487C7*), ABISELECT(56,36), "S20487C14");
    check_base_class_offset(lv, (S20487C15*), 0, "S20487C14");
    /*is_ambiguous_... S20487C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), 0, "S20487C14");
    check_base_class_offset(lv, (S2014C28*)(S20487C7*), 0, "S20487C14");
    /*is_ambiguous_... S20487C14::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S20487C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C7*), ABISELECT(68,44), "S20487C14");
    check_base_class_offset(lv, (S20487C7*), ABISELECT(72,48), "S20487C14");
    check_base_class_offset(lv, (S2014C28*)(S20487C17*)(S20487C16*), ABISELECT(96,60), "S20487C14");
    check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C17*)(S20487C16*), ABISELECT(96,60), "S20487C14");
    check_base_class_offset(lv, (S20487C5*)(S20487C17*)(S20487C16*), ABISELECT(96,60), "S20487C14");
    /*is_ambiguous_... S20487C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C17*)(S20487C16*), ABISELECT(105,65), "S20487C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C17*)(S20487C16*), ABISELECT(108,68), "S20487C14");
    check_base_class_offset(lv, (S20487C17*)(S20487C16*), ABISELECT(96,60), "S20487C14");
    /*is_ambiguous_... S20487C16::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C16*), ABISELECT(128,84), "S20487C14");
    /*is_ambiguous_... S20487C16::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C16*), ABISELECT(128,84), "S20487C14");
    check_base_class_offset(lv, (S20487C16*), ABISELECT(96,60), "S20487C14");
    check_field_offset(lv, s20487c14f0, ABISELECT(16,12), "S20487C14.s20487c14f0");
    check_field_offset(lv, s20487c14f1, ABISELECT(24,16), "S20487C14.s20487c14f1");
    test_class_info(&lv, &cd_S20487C14);
    dp->~S20487C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C14(Test_S20487C14, "S20487C14", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN9S20487C14C1Ev();
extern void _ZN9S20487C14D2Ev();
Name_Map name_map_S20487C14[] = {
  NSPAIR(_ZN9S20487C14C1Ev),
  NSPAIR(_ZN9S20487C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S20487C15;
extern VTBL_ENTRY _ZTI9S20487C15[];
extern  VTBL_ENTRY _ZTV9S20487C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C7;
extern VTBL_ENTRY _ZTI8S20487C7[];
extern  VTBL_ENTRY _ZTV8S20487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C17;
extern VTBL_ENTRY _ZTI9S20487C17[];
extern  VTBL_ENTRY _ZTV9S20487C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S20487C16;
extern VTBL_ENTRY _ZTI9S20487C16[];
extern  VTBL_ENTRY _ZTV9S20487C16[];
static Base_Class bases_S20487C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20487C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20487C7,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20487C17,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(128,84), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20487C16,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20487C14[];
extern void _ZN9S20487C14D1Ev();
extern void _ZN9S20487C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev)();
extern void ABISELECT(_ZThn56_N9S20487C14D1Ev,_ZThn36_N9S20487C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev)();
extern void ABISELECT(_ZThn56_N9S20487C14D0Ev,_ZThn36_N9S20487C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20487C14D1Ev,_ZTv0_n24_N9S20487C14D1Ev)();
extern void ABISELECT(_ZThn72_N9S20487C14D1Ev,_ZThn48_N9S20487C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20487C14D0Ev,_ZTv0_n24_N9S20487C14D0Ev)();
extern void ABISELECT(_ZThn72_N9S20487C14D0Ev,_ZThn48_N9S20487C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev)();
extern void ABISELECT(_ZThn96_N9S20487C14D1Ev,_ZThn60_N9S20487C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev)();
extern void ABISELECT(_ZThn96_N9S20487C14D0Ev,_ZThn60_N9S20487C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S20487C14D1Ev,_ZTvn24_n12_N9S20487C14D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20487C14D0Ev,_ZTvn24_n12_N9S20487C14D0Ev)();
static  VTBL_ENTRY vtc_S20487C14[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&_ZN9S20487C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C14D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C14D1Ev,_ZTv0_n24_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C14D0Ev,_ZTv0_n24_N9S20487C14D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C14D1Ev,_ZTvn24_n12_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C14D0Ev,_ZTvn24_n12_N9S20487C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20487C14[];
extern void _ZN9S20487C15D1Ev();
extern void _ZN9S20487C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20487C15__9S20487C14[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C15[0]),
  (VTBL_ENTRY)&_ZN9S20487C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev)();
extern void ABISELECT(_ZThn56_N9S20487C15D1Ev,_ZThn36_N9S20487C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev)();
extern void ABISELECT(_ZThn56_N9S20487C15D0Ev,_ZThn36_N9S20487C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__9S20487C15__9S20487C14[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20487C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev),
};
extern void _ZN8S20487C7D1Ev();
extern void _ZN8S20487C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C7__9S20487C14[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&_ZN8S20487C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C5__8S20487C7__9S20487C14[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev),
};
static  VTT_ENTRY vtt_S20487C14[] = {
  {&(_ZTV9S20487C14[7]),  7,31},
  {&(_tg__ZTV9S20487C15__9S20487C14[3]),  3,5},
  {&(_tg__ZTV8S20487C5__9S20487C15__9S20487C14[3]),  3,5},
  {&(_ZTV9S20487C14[12]),  12,31},
  {&(_ZTV9S20487C14[20]),  20,31},
  {&(_ZTV9S20487C14[25]),  25,31},
  {&(_ZTV9S20487C14[29]),  29,31},
  {&(_tg__ZTV8S20487C7__9S20487C14[5]),  5,7},
  {&(_tg__ZTV8S20487C5__8S20487C7__9S20487C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20487C14[];
extern  VTBL_ENTRY _ZTV9S20487C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C14[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20487C15D0Ev,_ZThn36_N9S20487C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20487C15D1Ev,_ZThn36_N9S20487C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C14D0Ev,_ZTv0_n24_N9S20487C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20487C14D0Ev,_ZThn48_N9S20487C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C14D1Ev,_ZTv0_n24_N9S20487C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20487C14D1Ev,_ZThn48_N9S20487C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20487C14D0Ev,_ZThn60_N9S20487C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20487C14D0Ev,_ZThn36_N9S20487C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20487C14D1Ev,_ZThn60_N9S20487C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20487C14D1Ev,_ZThn36_N9S20487C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20487C14 = {  "S20487C14", // class name
  bases_S20487C14, 15,
  &(vtc_S20487C14[0]), // expected_vtbl_contents
  &(vtt_S20487C14[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI9S20487C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20487C14),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20487C14),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20487C18  : virtual S20487C7 , S20487C3 , virtual S2014C38 {
  ::S3222C8_nt s20487c18f0[6];
  virtual  ~S20487C18(); // _ZN9S20487C18D2Ev
  S20487C18(); // tgen
};
//SIG(-1 S20487C18) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S20487C18()
{
  extern Class_Descriptor cd_S20487C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S20487C18, buf);
    S20487C18 *dp, &lv = *(dp=new (buf) S20487C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S20487C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C18)");
    check_base_class_offset(lv, (S2014C28*)(S20487C7*), 0, "S20487C18");
    check_base_class_offset(lv, (S2014C28*)(S20487C3*), 0, "S20487C18");
    /*is_ambiguous_... S20487C18::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(64,44), "S20487C18");
    check_base_class_offset(lv, (S20487C5*)(S20487C7*), ABISELECT(64,44), "S20487C18");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C7*), ABISELECT(76,52), "S20487C18");
    check_base_class_offset(lv, (S20487C7*), ABISELECT(40,32), "S20487C18");
    check_base_class_offset(lv, (S20487C7*)(S20487C3*), ABISELECT(40,32), "S20487C18");
    /*is_ambiguous_... S20487C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C3*), ABISELECT(9,5), "S20487C18");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C3*), 0, "S20487C18");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C3*), 0, "S20487C18");
    check_base_class_offset(lv, (S20487C3*), 0, "S20487C18");
    /*is_ambiguous_... S20487C18::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(80,56), "S20487C18");
    check_field_offset(lv, s20487c18f0, ABISELECT(12,8), "S20487C18.s20487c18f0");
    test_class_info(&lv, &cd_S20487C18);
    dp->~S20487C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C18(Test_S20487C18, "S20487C18", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN9S20487C18C1Ev();
extern void _ZN9S20487C18D2Ev();
Name_Map name_map_S20487C18[] = {
  NSPAIR(_ZN9S20487C18C1Ev),
  NSPAIR(_ZN9S20487C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C7;
extern VTBL_ENTRY _ZTI8S20487C7[];
extern  VTBL_ENTRY _ZTV8S20487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C7[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S20487C3;
extern VTBL_ENTRY _ZTI8S20487C3[];
extern  VTBL_ENTRY _ZTV8S20487C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S20487C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20487C7,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20487C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20487C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20487C18[];
extern void _ZN9S20487C18D1Ev();
extern void _ZN9S20487C18D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20487C18D1Ev,_ZTv0_n24_N9S20487C18D1Ev)();
extern void ABISELECT(_ZThn40_N9S20487C18D1Ev,_ZThn32_N9S20487C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20487C18D0Ev,_ZTv0_n24_N9S20487C18D0Ev)();
extern void ABISELECT(_ZThn40_N9S20487C18D0Ev,_ZThn32_N9S20487C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C18D1Ev,_ZTv0_n12_N9S20487C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S20487C18D1Ev,_ZThn44_N9S20487C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C18D0Ev,_ZTv0_n12_N9S20487C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S20487C18D0Ev,_ZThn44_N9S20487C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20487C18[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C18[0]),
  (VTBL_ENTRY)&_ZN9S20487C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C18D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S20487C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C18D1Ev,_ZTv0_n24_N9S20487C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C18D0Ev,_ZTv0_n24_N9S20487C18D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S20487C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C18D1Ev,_ZTv0_n12_N9S20487C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C18D0Ev,_ZTv0_n12_N9S20487C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S20487C18[];
extern void _ZN8S20487C3D1Ev();
extern void _ZN8S20487C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C3__9S20487C18[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&_ZN8S20487C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn32_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn32_N8S20487C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C7__8S20487C3__9S20487C18[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S20487C3D1Ev,_ZThn44_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S20487C3D0Ev,_ZThn44_N8S20487C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__A1__8S20487C3__9S20487C18[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev),
};
extern void _ZN8S20487C7D1Ev();
extern void _ZN8S20487C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C7__9S20487C18[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&_ZN8S20487C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__8S20487C7__9S20487C18[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev),
};
static  VTT_ENTRY vtt_S20487C18[] = {
  {&(_ZTV9S20487C18[7]),  7,22},
  {&(_tg__ZTV8S20487C3__9S20487C18[6]),  6,8},
  {&(_tg__ZTV8S20487C7__8S20487C3__9S20487C18[6]),  6,8},
  {&(_tg__ZTV8S20487C5__A1__8S20487C3__9S20487C18[3]),  3,5},
  {&(_ZTV9S20487C18[15]),  15,22},
  {&(_ZTV9S20487C18[20]),  20,22},
  {&(_tg__ZTV8S20487C7__9S20487C18[5]),  5,7},
  {&(_tg__ZTV8S20487C5__8S20487C7__9S20487C18[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20487C18[];
extern  VTBL_ENTRY _ZTV9S20487C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C18[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20487C3D0Ev,_ZThn44_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20487C3D1Ev,_ZThn44_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn32_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn32_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C18D0Ev,_ZTv0_n12_N9S20487C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20487C18D0Ev,_ZThn44_N9S20487C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C18D1Ev,_ZTv0_n12_N9S20487C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20487C18D1Ev,_ZThn44_N9S20487C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C18D0Ev,_ZTv0_n24_N9S20487C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20487C18D0Ev,_ZThn32_N9S20487C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C18D1Ev,_ZTv0_n24_N9S20487C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20487C18D1Ev,_ZThn32_N9S20487C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20487C18 = {  "S20487C18", // class name
  bases_S20487C18, 10,
  &(vtc_S20487C18[0]), // expected_vtbl_contents
  &(vtt_S20487C18[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI9S20487C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20487C18),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20487C18),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20487C13  : S20487C14 , S20487C5 , virtual S20487C17 , S20487C18 {
  virtual  ~S20487C13(); // _ZN9S20487C13D2Ev
  S20487C13(); // tgen
};
//SIG(-1 S20487C13) C1{ BC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 FL} BC4 Fi} vd Fl FC3} BC4 VBC11 BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} vd}


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

static void Test_S20487C13()
{
  extern Class_Descriptor cd_S20487C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,41)];
    init_test(&cd_S20487C13, buf);
    S20487C13 *dp, &lv = *(dp=new (buf) S20487C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,160), "sizeof(S20487C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C13)");
    /*is_ambiguous_... S20487C13::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(112,76), "S20487C13");
    check_base_class_offset(lv, (S20487C5*)(S20487C15*)(S20487C14*), ABISELECT(112,76), "S20487C13");
    check_base_class_offset(lv, (S20487C5*)(S20487C7*), ABISELECT(112,76), "S20487C13");
    check_base_class_offset(lv, (S20487C15*)(S20487C14*), 0, "S20487C13");
    /*is_ambiguous_... S20487C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20487C14*), 0, "S20487C13");
    check_base_class_offset(lv, (S2014C28*)(S20487C7*), 0, "S20487C13");
    check_base_class_offset(lv, (S2014C28*)(S20487C3*)(S20487C18*), 0, "S20487C13");
    /*is_ambiguous_... S20487C14::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S20487C14*), ABISELECT(124,84), "S20487C13");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C7*), ABISELECT(124,84), "S20487C13");
    check_base_class_offset(lv, (S20487C7*)(S20487C14*), ABISELECT(128,88), "S20487C13");
    check_base_class_offset(lv, (S20487C7*)(S20487C18*), ABISELECT(128,88), "S20487C13");
    check_base_class_offset(lv, (S20487C7*)(S20487C3*)(S20487C18*), ABISELECT(128,88), "S20487C13");
    check_base_class_offset(lv, (S2014C28*)(S20487C17*)(S20487C16*), ABISELECT(152,100), "S20487C13");
    check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C17*)(S20487C16*), ABISELECT(152,100), "S20487C13");
    check_base_class_offset(lv, (S20487C5*)(S20487C17*)(S20487C16*), ABISELECT(152,100), "S20487C13");
    /*is_ambiguous_... S20487C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C17*)(S20487C16*), ABISELECT(161,105), "S20487C13");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C17*)(S20487C16*), ABISELECT(164,108), "S20487C13");
    check_base_class_offset(lv, (S20487C17*)(S20487C16*), ABISELECT(152,100), "S20487C13");
    /*is_ambiguous_... S20487C16::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C16*), ABISELECT(184,124), "S20487C13");
    /*is_ambiguous_... S20487C16::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C16*), ABISELECT(184,124), "S20487C13");
    check_base_class_offset(lv, (S20487C16*)(S20487C14*), ABISELECT(152,100), "S20487C13");
    check_base_class_offset(lv, (S20487C14*), 0, "S20487C13");
    /*is_ambiguous_... S20487C13::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(56,36), "S20487C13");
    /*is_ambiguous_... S20487C13::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*), ABISELECT(56,36), "S20487C13");
    /*is_ambiguous_... S20487C13::S20487C17 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20487C17*), ABISELECT(200,136), "S20487C13");
    /*is_ambiguous_... S20487C13::S20487C17 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C17*), ABISELECT(200,136), "S20487C13");
    /*is_ambiguous_... S20487C13::S20487C17 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C17*), ABISELECT(200,136), "S20487C13");
    /*is_ambiguous_... S20487C13::S20487C17 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C17*), ABISELECT(209,141), "S20487C13");
    /*is_ambiguous_... S20487C13::S20487C17 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S20487C17*), ABISELECT(212,144), "S20487C13");
    /*is_ambiguous_... S20487C13::S20487C17 */ AMB_check_base_class_offset(lv, (S20487C17*), ABISELECT(200,136), "S20487C13");
    /*is_ambiguous_... S20487C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C3*)(S20487C18*), ABISELECT(81,49), "S20487C13");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C3*)(S20487C18*), ABISELECT(72,44), "S20487C13");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C3*)(S20487C18*), ABISELECT(72,44), "S20487C13");
    check_base_class_offset(lv, (S20487C3*)(S20487C18*), ABISELECT(72,44), "S20487C13");
    /*is_ambiguous_... S20487C18::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C18*), 0, "S20487C13");
    check_base_class_offset(lv, (S20487C18*), ABISELECT(72,44), "S20487C13");
    test_class_info(&lv, &cd_S20487C13);
    dp->~S20487C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C13(Test_S20487C13, "S20487C13", ABISELECT(232,160));

#else // __cplusplus

extern void _ZN9S20487C13C1Ev();
extern void _ZN9S20487C13D2Ev();
Name_Map name_map_S20487C13[] = {
  NSPAIR(_ZN9S20487C13C1Ev),
  NSPAIR(_ZN9S20487C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S20487C15;
extern VTBL_ENTRY _ZTI9S20487C15[];
extern  VTBL_ENTRY _ZTV9S20487C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C7;
extern VTBL_ENTRY _ZTI8S20487C7[];
extern  VTBL_ENTRY _ZTV8S20487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C17;
extern VTBL_ENTRY _ZTI9S20487C17[];
extern  VTBL_ENTRY _ZTV9S20487C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S20487C16;
extern VTBL_ENTRY _ZTI9S20487C16[];
extern  VTBL_ENTRY _ZTV9S20487C16[];
extern Class_Descriptor cd_S20487C14;
extern VTBL_ENTRY _ZTI9S20487C14[];
extern  VTBL_ENTRY _ZTV9S20487C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C17;
extern VTBL_ENTRY _ZTI9S20487C17[];
extern  VTBL_ENTRY _ZTV9S20487C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S20487C3;
extern VTBL_ENTRY _ZTI8S20487C3[];
extern  VTBL_ENTRY _ZTV8S20487C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C18;
extern VTBL_ENTRY _ZTI9S20487C18[];
extern  VTBL_ENTRY _ZTV9S20487C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C18[];
static Base_Class bases_S20487C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(112,76), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20487C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20487C7,    ABISELECT(128,88), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(161,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(164,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20487C17,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(184,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(184,124), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20487C16,    ABISELECT(152,100), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20487C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(56,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    ABISELECT(200,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(200,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(200,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(209,141), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(212,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20487C17,    ABISELECT(200,136), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(81,49), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20487C3,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S20487C18,    ABISELECT(72,44), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20487C13[];
extern void _ZN9S20487C13D1Ev();
extern void _ZN9S20487C13D0Ev();
extern void ABISELECT(_ZThn56_N9S20487C13D1Ev,_ZThn36_N9S20487C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S20487C13D0Ev,_ZThn36_N9S20487C13D0Ev)();
extern void ABISELECT(_ZThn72_N9S20487C13D1Ev,_ZThn44_N9S20487C13D1Ev)();
extern void ABISELECT(_ZThn72_N9S20487C13D0Ev,_ZThn44_N9S20487C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev)();
extern void ABISELECT(_ZThn112_N9S20487C13D1Ev,_ZThn76_N9S20487C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev)();
extern void ABISELECT(_ZThn112_N9S20487C13D0Ev,_ZThn76_N9S20487C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20487C13D1Ev,_ZTv0_n24_N9S20487C13D1Ev)();
extern void ABISELECT(_ZThn128_N9S20487C13D1Ev,_ZThn88_N9S20487C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20487C13D0Ev,_ZTv0_n24_N9S20487C13D0Ev)();
extern void ABISELECT(_ZThn128_N9S20487C13D0Ev,_ZThn88_N9S20487C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev)();
extern void ABISELECT(_ZThn152_N9S20487C13D1Ev,_ZThn100_N9S20487C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev)();
extern void ABISELECT(_ZThn152_N9S20487C13D0Ev,_ZThn100_N9S20487C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S20487C13D1Ev,_ZTvn24_n12_N9S20487C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20487C13D0Ev,_ZTvn24_n12_N9S20487C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev)();
extern void ABISELECT(_ZThn200_N9S20487C13D1Ev,_ZThn136_N9S20487C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev)();
extern void ABISELECT(_ZThn200_N9S20487C13D0Ev,_ZThn136_N9S20487C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20487C13[] = {
  0,
  ABISELECT(200,136),
  ABISELECT(152,100),
  ABISELECT(128,88),
  ABISELECT(124,84),
  0,
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&_ZN9S20487C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C13D0Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S20487C13D1Ev,_ZThn36_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S20487C13D0Ev,_ZThn36_N9S20487C13D0Ev),
  ABISELECT(-72,-44),
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S20487C13D1Ev,_ZThn44_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S20487C13D0Ev,_ZThn44_N9S20487C13D0Ev),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev),
  ABISELECT(-128,-88),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C13D1Ev,_ZTv0_n24_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C13D0Ev,_ZTv0_n24_N9S20487C13D0Ev),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev),
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C13D1Ev,_ZTvn24_n12_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C13D0Ev,_ZTvn24_n12_N9S20487C13D0Ev),
  ABISELECT(-200,-136),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20487C13[];
extern void _ZN9S20487C14D1Ev();
extern void _ZN9S20487C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20487C14__9S20487C13[] = {
  ABISELECT(152,100),
  ABISELECT(128,88),
  ABISELECT(124,84),
  0,
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&_ZN9S20487C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C14D0Ev,
};
extern void _ZN9S20487C15D1Ev();
extern void _ZN9S20487C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20487C159S20487C14__9S20487C13[] = {
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C15[0]),
  (VTBL_ENTRY)&_ZN9S20487C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S20487C15D1Ev,_ZThn76_N9S20487C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S20487C15D0Ev,_ZThn76_N9S20487C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__9S20487C159S20487C14__9S20487C13[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20487C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev)();
extern void ABISELECT(_ZThn112_N9S20487C14D1Ev,_ZThn76_N9S20487C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev)();
extern void ABISELECT(_ZThn112_N9S20487C14D0Ev,_ZThn76_N9S20487C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__9S20487C14__9S20487C13[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20487C14D1Ev,_ZTv0_n24_N9S20487C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S20487C14D1Ev,_ZThn88_N9S20487C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20487C14D0Ev,_ZTv0_n24_N9S20487C14D0Ev)();
extern void ABISELECT(_ZThn128_N9S20487C14D0Ev,_ZThn88_N9S20487C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C7__9S20487C14__9S20487C13[] = {
  ABISELECT(-128,-88),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C14D1Ev,_ZTv0_n24_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C14D0Ev,_ZTv0_n24_N9S20487C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev)();
extern void ABISELECT(_ZThn152_N9S20487C14D1Ev,_ZThn100_N9S20487C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev)();
extern void ABISELECT(_ZThn152_N9S20487C14D0Ev,_ZThn100_N9S20487C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20487C16__9S20487C14__9S20487C13[] = {
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S20487C14D1Ev,_ZTvn24_n12_N9S20487C14D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20487C14D0Ev,_ZTvn24_n12_N9S20487C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C59S20487C16__A2__9S20487C14__9S20487C13[] = {
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C14D1Ev,_ZTvn24_n12_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C14D0Ev,_ZTvn24_n12_N9S20487C14D0Ev),
};
extern void _ZN9S20487C18D1Ev();
extern void _ZN9S20487C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20487C18__9S20487C13[] = {
  ABISELECT(-72,-44),
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C18[0]),
  (VTBL_ENTRY)&_ZN9S20487C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C18D0Ev,
};
extern void _ZN8S20487C3D1Ev();
extern void _ZN8S20487C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C39S20487C18__9S20487C13[] = {
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&_ZN8S20487C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S20487C3D1Ev,_ZThn44_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S20487C3D0Ev,_ZThn44_N8S20487C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C7__8S20487C39S20487C18__9S20487C13[] = {
  ABISELECT(-56,-44),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn32_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn32_N8S20487C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__A1__8S20487C39S20487C18__9S20487C13[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20487C18D1Ev,_ZTv0_n24_N9S20487C18D1Ev)();
extern void ABISELECT(_ZThn56_N9S20487C18D1Ev,_ZThn44_N9S20487C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20487C18D0Ev,_ZTv0_n24_N9S20487C18D0Ev)();
extern void ABISELECT(_ZThn56_N9S20487C18D0Ev,_ZThn44_N9S20487C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C7__9S20487C18__9S20487C13[] = {
  ABISELECT(-56,-44),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI9S20487C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C18D1Ev,_ZTv0_n24_N9S20487C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C18D0Ev,_ZTv0_n24_N9S20487C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20487C18D1Ev,_ZTv0_n12_N9S20487C18D1Ev)();
extern void ABISELECT(_ZThn40_N9S20487C18D1Ev,_ZThn32_N9S20487C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C18D0Ev,_ZTv0_n12_N9S20487C18D0Ev)();
extern void ABISELECT(_ZThn40_N9S20487C18D0Ev,_ZThn32_N9S20487C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__9S20487C18__9S20487C13[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S20487C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C18D1Ev,_ZTv0_n12_N9S20487C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C18D0Ev,_ZTv0_n12_N9S20487C18D0Ev),
};
extern void _ZN8S20487C7D1Ev();
extern void _ZN8S20487C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C7__9S20487C13[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&_ZN8S20487C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C5__8S20487C7__9S20487C13[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev),
};
static  VTT_ENTRY vtt_S20487C13[] = {
  {&(_ZTV9S20487C13[9]),  9,51},
  {&(_tg__ZTV9S20487C14__9S20487C13[7]),  7,9},
  {&(_tg__ZTV9S20487C159S20487C14__9S20487C13[3]),  3,5},
  {&(_tg__ZTV8S20487C5__9S20487C159S20487C14__9S20487C13[3]),  3,5},
  {&(_tg__ZTV8S20487C5__9S20487C14__9S20487C13[3]),  3,5},
  {&(_tg__ZTV8S20487C7__9S20487C14__9S20487C13[6]),  6,8},
  {&(_tg__ZTV9S20487C16__9S20487C14__9S20487C13[3]),  3,5},
  {&(_tg__ZTV8S20487C59S20487C16__A2__9S20487C14__9S20487C13[2]),  2,4},
  {&(_tg__ZTV9S20487C18__9S20487C13[7]),  7,9},
  {&(_tg__ZTV8S20487C39S20487C18__9S20487C13[6]),  6,8},
  {&(_tg__ZTV8S20487C7__8S20487C39S20487C18__9S20487C13[6]),  6,8},
  {&(_tg__ZTV8S20487C5__A1__8S20487C39S20487C18__9S20487C13[3]),  3,5},
  {&(_tg__ZTV8S20487C7__9S20487C18__9S20487C13[6]),  6,8},
  {&(_tg__ZTV8S20487C5__9S20487C18__9S20487C13[3]),  3,5},
  {&(_ZTV9S20487C13[27]),  27,51},
  {&(_ZTV9S20487C13[35]),  35,51},
  {&(_ZTV9S20487C13[40]),  40,51},
  {&(_ZTV9S20487C13[44]),  44,51},
  {&(_ZTV9S20487C13[49]),  49,51},
  {&(_ZTV9S20487C13[22]),  22,51},
  {&(_tg__ZTV8S20487C7__9S20487C13[5]),  5,7},
  {&(_tg__ZTV8S20487C5__8S20487C7__9S20487C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20487C13[];
extern  VTBL_ENTRY _ZTV9S20487C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C13[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C18D0Ev,_ZTv0_n12_N9S20487C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20487C18D0Ev,_ZThn32_N9S20487C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C18D1Ev,_ZTv0_n12_N9S20487C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20487C18D1Ev,_ZThn32_N9S20487C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C18D0Ev,_ZTv0_n24_N9S20487C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20487C18D0Ev,_ZThn44_N9S20487C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C18D1Ev,_ZTv0_n24_N9S20487C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20487C18D1Ev,_ZThn44_N9S20487C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn32_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn32_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20487C3D0Ev,_ZThn44_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20487C3D1Ev,_ZThn44_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C14D0Ev,_ZTv0_n24_N9S20487C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20487C14D0Ev,_ZThn88_N9S20487C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C14D1Ev,_ZTv0_n24_N9S20487C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20487C14D1Ev,_ZThn88_N9S20487C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20487C14D0Ev,_ZThn100_N9S20487C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C14D0Ev,_ZThn76_N9S20487C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20487C14D1Ev,_ZThn100_N9S20487C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C14D1Ev,_ZThn76_N9S20487C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C15D0Ev,_ZThn76_N9S20487C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C15D1Ev,_ZThn76_N9S20487C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C13D0Ev,_ZTv0_n24_N9S20487C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20487C13D0Ev,_ZThn88_N9S20487C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20487C13D1Ev,_ZTv0_n24_N9S20487C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20487C13D1Ev,_ZThn88_N9S20487C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20487C13D0Ev,_ZThn136_N9S20487C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20487C13D0Ev,_ZThn100_N9S20487C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C13D0Ev,_ZThn76_N9S20487C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20487C13D1Ev,_ZThn136_N9S20487C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20487C13D1Ev,_ZThn100_N9S20487C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C13D1Ev,_ZThn76_N9S20487C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20487C13 = {  "S20487C13", // class name
  bases_S20487C13, 30,
  &(vtc_S20487C13[0]), // expected_vtbl_contents
  &(vtt_S20487C13[0]), // expected_vtt_contents
  ABISELECT(232,160), // object size
  NSPAIRA(_ZTI9S20487C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20487C13),51, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20487C13),22, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20487C1  : virtual S20487C2 , S19169C11_nt , S2014C24 , virtual S20487C12 , virtual S20487C13 {
  ::S20487C3 s20487c1f0;
  virtual  ~S20487C1(); // _ZN8S20487C1D2Ev
  S20487C1(); // tgen
};
//SIG(1 S20487C1) C1{ VBC2{ VBC3{ BC4{ m} BC5{ BC4 vd FC4} VBC6{ m} VBC7{ VBC6 VBC5 VBC8{ m Fi} vd Fp FC9{}} vd} vd} BC10{ vd m} BC11{ m} VBC12{ BC5 vd} VBC13{ BC14{ BC15{ VBC5 FL} VBC6 VBC8 VBC7 VBC16{ BC17{ BC6 BC5 BC4 BC8 Fs:16 FL} BC5 Fi} vd Fl FC15} BC5 VBC17 BC18{ VBC7 BC3 VBC4 vd FC8[6]} vd} vd FC3}


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

static void Test_S20487C1()
{
  extern Class_Descriptor cd_S20487C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,55)];
    init_test(&cd_S20487C1, buf);
    S20487C1 *dp, &lv = *(dp=new (buf) S20487C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,216), "sizeof(S20487C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20487C1)");
    /*is_ambiguous_... S20487C1::S20487C3 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C3*), ABISELECT(81,45), "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C3 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C3*), ABISELECT(72,40), "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C3 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C3*), ABISELECT(72,40), "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C3 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20487C3*), 0, "S20487C1");
    check_base_class_offset(lv, (S2014C28*)(S20487C7*), 0, "S20487C1");
    /*is_ambiguous_... S20487C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20487C14*)(S20487C13*), 0, "S20487C1");
    check_base_class_offset(lv, (S2014C28*)(S20487C3*)(S20487C18*)(S20487C13*), 0, "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*), ABISELECT(112,60), "S20487C1");
    check_base_class_offset(lv, (S20487C5*)(S20487C7*), ABISELECT(112,60), "S20487C1");
    check_base_class_offset(lv, (S20487C5*)(S20487C15*)(S20487C14*)(S20487C13*), ABISELECT(112,60), "S20487C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C7*), ABISELECT(124,68), "S20487C1");
    /*is_ambiguous_... S20487C14::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S20487C14*)(S20487C13*), ABISELECT(124,68), "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C3 */ AMB_check_base_class_offset(lv, (S20487C7*)(S20487C3*), ABISELECT(88,48), "S20487C1");
    check_base_class_offset(lv, (S20487C7*)(S20487C14*)(S20487C13*), ABISELECT(88,48), "S20487C1");
    check_base_class_offset(lv, (S20487C7*)(S20487C18*)(S20487C13*), ABISELECT(88,48), "S20487C1");
    check_base_class_offset(lv, (S20487C7*)(S20487C3*)(S20487C18*)(S20487C13*), ABISELECT(88,48), "S20487C1");
    check_base_class_offset(lv, (S20487C3*)(S20487C2*), ABISELECT(72,40), "S20487C1");
    check_base_class_offset(lv, (S20487C2*), ABISELECT(64,36), "S20487C1");
    check_base_class_offset(lv, (S19169C11_nt*), 0, "S20487C1");
    check_base_class_offset(lv, (S2014C24*), 0, "S20487C1");
    check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C12*), ABISELECT(128,72), "S20487C1");
    check_base_class_offset(lv, (S20487C5*)(S20487C12*), ABISELECT(128,72), "S20487C1");
    check_base_class_offset(lv, (S20487C12*), ABISELECT(128,72), "S20487C1");
    check_base_class_offset(lv, (S20487C15*)(S20487C14*)(S20487C13*), ABISELECT(144,80), "S20487C1");
    check_base_class_offset(lv, (S2014C28*)(S20487C17*)(S20487C16*), ABISELECT(256,156), "S20487C1");
    check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C17*)(S20487C16*), ABISELECT(256,156), "S20487C1");
    check_base_class_offset(lv, (S20487C5*)(S20487C17*)(S20487C16*), ABISELECT(256,156), "S20487C1");
    /*is_ambiguous_... S20487C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C17*)(S20487C16*), ABISELECT(265,161), "S20487C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S20487C17*)(S20487C16*), ABISELECT(268,164), "S20487C1");
    check_base_class_offset(lv, (S20487C17*)(S20487C16*), ABISELECT(256,156), "S20487C1");
    /*is_ambiguous_... S20487C16::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C16*), ABISELECT(288,180), "S20487C1");
    /*is_ambiguous_... S20487C16::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C16*), ABISELECT(288,180), "S20487C1");
    check_base_class_offset(lv, (S20487C16*)(S20487C14*)(S20487C13*), ABISELECT(256,156), "S20487C1");
    check_base_class_offset(lv, (S20487C14*)(S20487C13*), ABISELECT(144,80), "S20487C1");
    /*is_ambiguous_... S20487C13::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C13*), ABISELECT(200,116), "S20487C1");
    /*is_ambiguous_... S20487C13::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C13*), ABISELECT(200,116), "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C17 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20487C17*), ABISELECT(304,192), "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C17 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C17*), ABISELECT(304,192), "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C17 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C17*), ABISELECT(304,192), "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C17 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C17*), ABISELECT(313,197), "S20487C1");
    /*is_ambiguous_... S20487C1::S20487C17 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S20487C17*), ABISELECT(316,200), "S20487C1");
    /*is_ambiguous_... S20487C13::S20487C17 */ AMB_check_base_class_offset(lv, (S20487C17*)(S20487C13*), ABISELECT(304,192), "S20487C1");
    /*is_ambiguous_... S20487C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C3*)(S20487C18*)(S20487C13*), ABISELECT(225,129), "S20487C1");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C5*)(S20487C3*)(S20487C18*)(S20487C13*), ABISELECT(216,124), "S20487C1");
    /*is_ambiguous_... S20487C3::S20487C5 */ AMB_check_base_class_offset(lv, (S20487C5*)(S20487C3*)(S20487C18*)(S20487C13*), ABISELECT(216,124), "S20487C1");
    check_base_class_offset(lv, (S20487C3*)(S20487C18*)(S20487C13*), ABISELECT(216,124), "S20487C1");
    /*is_ambiguous_... S20487C18::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20487C18*)(S20487C13*), 0, "S20487C1");
    check_base_class_offset(lv, (S20487C18*)(S20487C13*), ABISELECT(216,124), "S20487C1");
    check_base_class_offset(lv, (S20487C13*), ABISELECT(144,80), "S20487C1");
    check_field_offset(lv, s20487c1f0, ABISELECT(8,4), "S20487C1.s20487c1f0");
    test_class_info(&lv, &cd_S20487C1);
    dp->~S20487C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20487C1(Test_S20487C1, "S20487C1", ABISELECT(336,216));

#else // __cplusplus

extern void _ZN8S20487C1C1Ev();
extern void _ZN8S20487C1D2Ev();
Name_Map name_map_S20487C1[] = {
  NSPAIR(_ZN8S20487C1C1Ev),
  NSPAIR(_ZN8S20487C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C7;
extern VTBL_ENTRY _ZTI8S20487C7[];
extern  VTBL_ENTRY _ZTV8S20487C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C7[];
extern Class_Descriptor cd_S20487C3;
extern VTBL_ENTRY _ZTI8S20487C3[];
extern  VTBL_ENTRY _ZTV8S20487C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C3[];
extern Class_Descriptor cd_S20487C2;
extern VTBL_ENTRY _ZTI8S20487C2[];
extern  VTBL_ENTRY _ZTV8S20487C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C2[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S20487C12;
extern VTBL_ENTRY _ZTI9S20487C12[];
extern  VTBL_ENTRY _ZTV9S20487C12[];
extern Class_Descriptor cd_S20487C15;
extern VTBL_ENTRY _ZTI9S20487C15[];
extern  VTBL_ENTRY _ZTV9S20487C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C17;
extern VTBL_ENTRY _ZTI9S20487C17[];
extern  VTBL_ENTRY _ZTV9S20487C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S20487C16;
extern VTBL_ENTRY _ZTI9S20487C16[];
extern  VTBL_ENTRY _ZTV9S20487C16[];
extern Class_Descriptor cd_S20487C14;
extern VTBL_ENTRY _ZTI9S20487C14[];
extern  VTBL_ENTRY _ZTV9S20487C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20487C17;
extern VTBL_ENTRY _ZTI9S20487C17[];
extern  VTBL_ENTRY _ZTV9S20487C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C5;
extern VTBL_ENTRY _ZTI8S20487C5[];
extern  VTBL_ENTRY _ZTV8S20487C5[];
extern Class_Descriptor cd_S20487C3;
extern VTBL_ENTRY _ZTI8S20487C3[];
extern  VTBL_ENTRY _ZTV8S20487C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20487C18;
extern VTBL_ENTRY _ZTI9S20487C18[];
extern  VTBL_ENTRY _ZTV9S20487C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C18[];
extern Class_Descriptor cd_S20487C13;
extern VTBL_ENTRY _ZTI9S20487C13[];
extern  VTBL_ENTRY _ZTV9S20487C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20487C13[];
static Base_Class bases_S20487C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(81,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(112,60), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(124,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20487C7,    ABISELECT(88,48), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20487C3,    ABISELECT(72,40), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20487C2,    ABISELECT(64,36), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20487C12,    ABISELECT(128,72), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20487C15,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(256,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(256,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(256,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(265,161), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(268,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20487C17,    ABISELECT(256,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(288,180), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20487C16,    ABISELECT(256,156), //bcp->offset
    77, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20487C14,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(200,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(200,116), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(313,197), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(316,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20487C17,    ABISELECT(304,192), //bcp->offset
    86, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(225,129), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20487C5,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20487C3,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S20487C18,    ABISELECT(216,124), //bcp->offset
    68, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20487C13,    ABISELECT(144,80), //bcp->offset
    52, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20487C1[];
extern void _ZN8S20487C1D1Ev();
extern void _ZN8S20487C1D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S20487C1D1Ev,_ZTv0_n32_N8S20487C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20487C1D1Ev,_ZThn36_N8S20487C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20487C1D0Ev,_ZTv0_n32_N8S20487C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S20487C1D0Ev,_ZThn36_N8S20487C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20487C1D1Ev,_ZTv0_n28_N8S20487C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S20487C1D1Ev,_ZThn40_N8S20487C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20487C1D0Ev,_ZTv0_n28_N8S20487C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S20487C1D0Ev,_ZThn40_N8S20487C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C1D1Ev,_ZTv0_n24_N8S20487C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S20487C1D1Ev,_ZThn48_N8S20487C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C1D0Ev,_ZTv0_n24_N8S20487C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S20487C1D0Ev,_ZThn48_N8S20487C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C1D1Ev,_ZTv0_n12_N8S20487C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S20487C1D1Ev,_ZThn60_N8S20487C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C1D0Ev,_ZTv0_n12_N8S20487C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S20487C1D0Ev,_ZThn60_N8S20487C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C1D1Ev,_ZTv0_n12_N8S20487C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20487C1D1Ev,_ZThn72_N8S20487C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C1D0Ev,_ZTv0_n12_N8S20487C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20487C1D0Ev,_ZThn72_N8S20487C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20487C1D1Ev,_ZTv0_n40_N8S20487C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20487C1D1Ev,_ZThn80_N8S20487C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20487C1D0Ev,_ZTv0_n40_N8S20487C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20487C1D0Ev,_ZThn80_N8S20487C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn56_n80_N8S20487C1D1Ev,_ZTvn36_n40_N8S20487C1D1Ev)();
extern void ABISELECT(_ZTvn56_n80_N8S20487C1D0Ev,_ZTvn36_n40_N8S20487C1D0Ev)();
extern void ABISELECT(_ZTvn72_n80_N8S20487C1D1Ev,_ZTvn44_n40_N8S20487C1D1Ev)();
extern void ABISELECT(_ZTvn72_n80_N8S20487C1D0Ev,_ZTvn44_n40_N8S20487C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20487C1D1Ev,_ZTv0_n12_N8S20487C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S20487C1D1Ev,_ZThn156_N8S20487C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C1D0Ev,_ZTv0_n12_N8S20487C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S20487C1D0Ev,_ZThn156_N8S20487C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S20487C1D1Ev,_ZTvn24_n12_N8S20487C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S20487C1D0Ev,_ZTvn24_n12_N8S20487C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20487C1D1Ev,_ZTv0_n12_N8S20487C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S20487C1D1Ev,_ZThn192_N8S20487C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C1D0Ev,_ZTv0_n12_N8S20487C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S20487C1D0Ev,_ZThn192_N8S20487C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20487C1[] = {
  0,
  ABISELECT(304,192),
  ABISELECT(256,156),
  ABISELECT(144,80),
  ABISELECT(128,72),
  ABISELECT(124,68),
  ABISELECT(112,60),
  ABISELECT(88,48),
  0,
  ABISELECT(72,40),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&_ZN8S20487C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C1D0Ev,
  ABISELECT(-64,-36),
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-64,-36),
  ABISELECT(8,4),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20487C1D1Ev,_ZTv0_n32_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20487C1D0Ev,_ZTv0_n32_N8S20487C1D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20487C1D1Ev,_ZTv0_n28_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20487C1D0Ev,_ZTv0_n28_N8S20487C1D0Ev),
  ABISELECT(-88,-48),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C1D1Ev,_ZTv0_n24_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C1D0Ev,_ZTv0_n24_N8S20487C1D0Ev),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C1D1Ev,_ZTv0_n12_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C1D0Ev,_ZTv0_n12_N8S20487C1D0Ev),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C1D1Ev,_ZTv0_n12_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C1D0Ev,_ZTv0_n12_N8S20487C1D0Ev),
  ABISELECT(-144,-80),
  ABISELECT(-144,-80),
  ABISELECT(160,112),
  ABISELECT(112,76),
  ABISELECT(-56,-32),
  ABISELECT(-20,-12),
  ABISELECT(-144,-80),
  ABISELECT(-32,-20),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20487C1D1Ev,_ZTv0_n40_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20487C1D0Ev,_ZTv0_n40_N8S20487C1D0Ev),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n80_N8S20487C1D1Ev,_ZTvn36_n40_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n80_N8S20487C1D0Ev,_ZTvn36_n40_N8S20487C1D0Ev),
  ABISELECT(-216,-124),
  ABISELECT(-92,-56),
  ABISELECT(-104,-64),
  ABISELECT(-128,-76),
  ABISELECT(-216,-124),
  ABISELECT(-216,-124),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n80_N8S20487C1D1Ev,_ZTvn44_n40_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n80_N8S20487C1D0Ev,_ZTvn44_n40_N8S20487C1D0Ev),
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C1D1Ev,_ZTv0_n12_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C1D0Ev,_ZTv0_n12_N8S20487C1D0Ev),
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S20487C1D1Ev,_ZTvn24_n12_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S20487C1D0Ev,_ZTvn24_n12_N8S20487C1D0Ev),
  ABISELECT(-304,-192),
  ABISELECT(-304,-192),
  (VTBL_ENTRY)&(_ZTI8S20487C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C1D1Ev,_ZTv0_n12_N8S20487C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C1D0Ev,_ZTv0_n12_N8S20487C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20487C1[];
extern void _ZN8S20487C2D1Ev();
extern void _ZN8S20487C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C2__8S20487C1[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-64,-36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C2[0]),
  (VTBL_ENTRY)&_ZN8S20487C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C2D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S20487C2D1Ev,_ZTv0_n28_N8S20487C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20487C2D1Ev,_ZThn4_N8S20487C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20487C2D0Ev,_ZTv0_n28_N8S20487C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20487C2D0Ev,_ZThn4_N8S20487C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C3__8S20487C2__8S20487C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-72,-40),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20487C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20487C2D1Ev,_ZTv0_n28_N8S20487C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20487C2D0Ev,_ZTv0_n28_N8S20487C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20487C2D1Ev,_ZTv0_n24_N8S20487C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20487C2D1Ev,_ZThn12_N8S20487C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C2D0Ev,_ZTv0_n24_N8S20487C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20487C2D0Ev,_ZThn12_N8S20487C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C7__8S20487C2__8S20487C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20487C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C2D1Ev,_ZTv0_n24_N8S20487C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C2D0Ev,_ZTv0_n24_N8S20487C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20487C2D1Ev,_ZTv0_n12_N8S20487C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20487C2D1Ev,_ZThn24_N8S20487C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C2D0Ev,_ZTv0_n12_N8S20487C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20487C2D0Ev,_ZThn24_N8S20487C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__A1__8S20487C2__8S20487C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20487C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C2D1Ev,_ZTv0_n12_N8S20487C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C2D0Ev,_ZTv0_n12_N8S20487C2D0Ev),
};
extern void _ZN8S20487C3D1Ev();
extern void _ZN8S20487C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C3__8S20487C1[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&_ZN8S20487C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20487C3D1Ev,_ZThn8_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20487C3D0Ev,_ZThn8_N8S20487C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C7__8S20487C3__8S20487C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn20_N8S20487C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn20_N8S20487C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__A1__8S20487C3__8S20487C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev),
};
extern void _ZN8S20487C7D1Ev();
extern void _ZN8S20487C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C7__8S20487C1[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&_ZN8S20487C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20487C5__8S20487C7__8S20487C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20487C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev),
};
extern void _ZN9S20487C13D1Ev();
extern void _ZN9S20487C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20487C13__8S20487C1[] = {
  ABISELECT(-144,-80),
  ABISELECT(160,112),
  ABISELECT(112,76),
  ABISELECT(-56,-32),
  ABISELECT(-20,-12),
  ABISELECT(-144,-80),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&_ZN9S20487C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C13D0Ev,
};
extern void _ZN9S20487C14D1Ev();
extern void _ZN9S20487C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20487C149S20487C13__8S20487C1[] = {
  ABISELECT(112,76),
  ABISELECT(-56,-32),
  ABISELECT(-20,-12),
  ABISELECT(-144,-80),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&_ZN9S20487C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C14D0Ev,
};
extern void _ZN9S20487C15D1Ev();
extern void _ZN9S20487C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20487C159S20487C149S20487C13__8S20487C1[] = {
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C15[0]),
  (VTBL_ENTRY)&_ZN9S20487C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C5__9S20487C159S20487C149S20487C13__8S20487C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S20487C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C15D1Ev,_ZTv0_n12_N9S20487C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C15D0Ev,_ZTv0_n12_N9S20487C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C5__9S20487C149S20487C13__8S20487C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20487C14D1Ev,_ZTv0_n24_N9S20487C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20487C14D0Ev,_ZTv0_n24_N9S20487C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C7__9S20487C149S20487C13__8S20487C1[] = {
  ABISELECT(56,32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C14D1Ev,_ZTv0_n24_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C14D0Ev,_ZTv0_n24_N9S20487C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev)();
extern void ABISELECT(_ZThn112_N9S20487C14D1Ev,_ZThn76_N9S20487C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev)();
extern void ABISELECT(_ZThn112_N9S20487C14D0Ev,_ZThn76_N9S20487C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20487C16__9S20487C149S20487C13__8S20487C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S20487C14D1Ev,_ZTvn24_n12_N9S20487C14D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20487C14D0Ev,_ZTvn24_n12_N9S20487C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C59S20487C16__A2__9S20487C149S20487C13__8S20487C1[] = {
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI9S20487C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C14D1Ev,_ZTvn24_n12_N9S20487C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C14D0Ev,_ZTvn24_n12_N9S20487C14D0Ev),
};
extern void _ZN9S20487C18D1Ev();
extern void _ZN9S20487C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20487C189S20487C13__8S20487C1[] = {
  ABISELECT(-216,-124),
  ABISELECT(-92,-56),
  ABISELECT(-104,-64),
  ABISELECT(-128,-76),
  ABISELECT(-216,-124),
  0,
  (VTBL_ENTRY)&(_ZTI9S20487C18[0]),
  (VTBL_ENTRY)&_ZN9S20487C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20487C18D0Ev,
};
extern void _ZN8S20487C3D1Ev();
extern void _ZN8S20487C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20487C39S20487C189S20487C13__A1__8S20487C1[] = {
  ABISELECT(-92,-56),
  ABISELECT(-104,-64),
  ABISELECT(-128,-76),
  ABISELECT(-216,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&_ZN8S20487C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20487C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C7__8S20487C39S20487C189S20487C13__A1__8S20487C1[] = {
  ABISELECT(128,76),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C5__A1__8S20487C39S20487C189S20487C13__A1__8S20487C1[] = {
  ABISELECT(104,64),
  ABISELECT(104,64),
  (VTBL_ENTRY)&(_ZTI8S20487C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20487C18D1Ev,_ZTv0_n24_N9S20487C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20487C18D0Ev,_ZTv0_n24_N9S20487C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C7__9S20487C189S20487C13__8S20487C1[] = {
  ABISELECT(128,76),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI9S20487C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C18D1Ev,_ZTv0_n24_N9S20487C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C18D0Ev,_ZTv0_n24_N9S20487C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20487C18D1Ev,_ZTv0_n12_N9S20487C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20487C18D0Ev,_ZTv0_n12_N9S20487C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C5__9S20487C189S20487C13__8S20487C1[] = {
  ABISELECT(104,64),
  ABISELECT(104,64),
  (VTBL_ENTRY)&(_ZTI9S20487C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C18D1Ev,_ZTv0_n12_N9S20487C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C18D0Ev,_ZTv0_n12_N9S20487C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C5__9S20487C13__8S20487C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20487C13D1Ev,_ZTv0_n24_N9S20487C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20487C13D0Ev,_ZTv0_n24_N9S20487C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C7__9S20487C13__8S20487C1[] = {
  ABISELECT(56,32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C13D1Ev,_ZTv0_n24_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20487C13D0Ev,_ZTv0_n24_N9S20487C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev)();
extern void ABISELECT(_ZThn112_N9S20487C13D1Ev,_ZThn76_N9S20487C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev)();
extern void ABISELECT(_ZThn112_N9S20487C13D0Ev,_ZThn76_N9S20487C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20487C16__9S20487C13__8S20487C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S20487C13D1Ev,_ZTvn24_n12_N9S20487C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20487C13D0Ev,_ZTvn24_n12_N9S20487C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20487C59S20487C16__A2__9S20487C13__8S20487C1[] = {
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C13D1Ev,_ZTvn24_n12_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20487C13D0Ev,_ZTvn24_n12_N9S20487C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev)();
extern void ABISELECT(_ZThn160_N9S20487C13D1Ev,_ZThn112_N9S20487C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev)();
extern void ABISELECT(_ZThn160_N9S20487C13D0Ev,_ZThn112_N9S20487C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20487C17__A1__9S20487C13__8S20487C1[] = {
  ABISELECT(-160,-112),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev),
};
extern void ABISELECT(_ZThn72_N9S20487C13D1Ev,_ZThn44_N9S20487C13D1Ev)();
extern void ABISELECT(_ZThn72_N9S20487C13D0Ev,_ZThn44_N9S20487C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20487C18__9S20487C13__8S20487C1[] = {
  ABISELECT(-216,-124),
  ABISELECT(-92,-56),
  ABISELECT(-104,-64),
  ABISELECT(-128,-76),
  ABISELECT(-216,-124),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S20487C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S20487C13D1Ev,_ZThn44_N9S20487C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S20487C13D0Ev,_ZThn44_N9S20487C13D0Ev),
};
static  VTT_ENTRY vtt_S20487C1[] = {
  {&(_ZTV8S20487C1[13]),  13,91},
  {&(_ZTV8S20487C1[23]),  23,91},
  {&(_ZTV8S20487C1[32]),  32,91},
  {&(_ZTV8S20487C1[40]),  40,91},
  {&(_ZTV8S20487C1[45]),  45,91},
  {&(_ZTV8S20487C1[50]),  50,91},
  {&(_ZTV8S20487C1[62]),  62,91},
  {&(_ZTV8S20487C1[80]),  80,91},
  {&(_ZTV8S20487C1[84]),  84,91},
  {&(_ZTV8S20487C1[66]),  66,91},
  {&(_ZTV8S20487C1[89]),  89,91},
  {&(_ZTV8S20487C1[75]),  75,91},
  {&(_tg__ZTV8S20487C2__8S20487C1[7]),  7,9},
  {&(_tg__ZTV8S20487C3__8S20487C2__8S20487C1[7]),  7,9},
  {&(_tg__ZTV8S20487C7__8S20487C2__8S20487C1[6]),  6,8},
  {&(_tg__ZTV8S20487C5__A1__8S20487C2__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C3__8S20487C1[6]),  6,8},
  {&(_tg__ZTV8S20487C7__8S20487C3__8S20487C1[6]),  6,8},
  {&(_tg__ZTV8S20487C5__A1__8S20487C3__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C7__8S20487C1[5]),  5,7},
  {&(_tg__ZTV8S20487C5__8S20487C7__8S20487C1[3]),  3,5},
  {&(_tg__ZTV9S20487C13__8S20487C1[9]),  9,11},
  {&(_tg__ZTV9S20487C149S20487C13__8S20487C1[7]),  7,9},
  {&(_tg__ZTV9S20487C159S20487C149S20487C13__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C5__9S20487C159S20487C149S20487C13__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C5__9S20487C149S20487C13__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C7__9S20487C149S20487C13__8S20487C1[6]),  6,8},
  {&(_tg__ZTV9S20487C16__9S20487C149S20487C13__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C59S20487C16__A2__9S20487C149S20487C13__8S20487C1[2]),  2,4},
  {&(_tg__ZTV9S20487C189S20487C13__8S20487C1[7]),  7,9},
  {&(_tg__ZTV8S20487C39S20487C189S20487C13__A1__8S20487C1[6]),  6,8},
  {&(_tg__ZTV8S20487C7__8S20487C39S20487C189S20487C13__A1__8S20487C1[6]),  6,8},
  {&(_tg__ZTV8S20487C5__A1__8S20487C39S20487C189S20487C13__A1__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C7__9S20487C189S20487C13__8S20487C1[6]),  6,8},
  {&(_tg__ZTV8S20487C5__9S20487C189S20487C13__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C5__9S20487C13__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C7__9S20487C13__8S20487C1[6]),  6,8},
  {&(_tg__ZTV9S20487C16__9S20487C13__8S20487C1[3]),  3,5},
  {&(_tg__ZTV8S20487C59S20487C16__A2__9S20487C13__8S20487C1[2]),  2,4},
  {&(_tg__ZTV9S20487C17__A1__9S20487C13__8S20487C1[3]),  3,5},
  {&(_tg__ZTV9S20487C18__9S20487C13__8S20487C1[7]),  7,9},
};
extern VTBL_ENTRY _ZTI8S20487C1[];
extern  VTBL_ENTRY _ZTV8S20487C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20487C1[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C13D0Ev,_ZTv0_n12_N9S20487C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20487C13D0Ev,_ZThn112_N9S20487C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C13D0Ev,_ZThn76_N9S20487C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C13D1Ev,_ZTv0_n12_N9S20487C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20487C13D1Ev,_ZThn112_N9S20487C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C13D1Ev,_ZThn76_N9S20487C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C14D0Ev,_ZTv0_n12_N9S20487C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C14D0Ev,_ZThn76_N9S20487C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20487C14D1Ev,_ZTv0_n12_N9S20487C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20487C14D1Ev,_ZThn76_N9S20487C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D0Ev,_ZTv0_n12_N8S20487C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D0Ev,_ZThn12_N8S20487C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C7D1Ev,_ZTv0_n12_N8S20487C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C7D1Ev,_ZThn12_N8S20487C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D0Ev,_ZTv0_n12_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D0Ev,_ZThn20_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C3D1Ev,_ZTv0_n12_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20487C3D1Ev,_ZThn20_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D0Ev,_ZTv0_n24_N8S20487C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20487C3D0Ev,_ZThn8_N8S20487C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C3D1Ev,_ZTv0_n24_N8S20487C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20487C3D1Ev,_ZThn8_N8S20487C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C2D0Ev,_ZTv0_n12_N8S20487C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20487C2D0Ev,_ZThn24_N8S20487C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C2D1Ev,_ZTv0_n12_N8S20487C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20487C2D1Ev,_ZThn24_N8S20487C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C2D0Ev,_ZTv0_n24_N8S20487C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C2D0Ev,_ZThn12_N8S20487C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C2D1Ev,_ZTv0_n24_N8S20487C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20487C2D1Ev,_ZThn12_N8S20487C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20487C2D0Ev,_ZTv0_n28_N8S20487C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20487C2D0Ev,_ZThn4_N8S20487C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20487C2D1Ev,_ZTv0_n28_N8S20487C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20487C2D1Ev,_ZThn4_N8S20487C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20487C1D0Ev,_ZTv0_n40_N8S20487C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20487C1D0Ev,_ZThn80_N8S20487C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20487C1D1Ev,_ZTv0_n40_N8S20487C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20487C1D1Ev,_ZThn80_N8S20487C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C1D0Ev,_ZTv0_n12_N8S20487C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20487C1D0Ev,_ZThn192_N8S20487C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20487C1D0Ev,_ZThn156_N8S20487C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20487C1D0Ev,_ZThn72_N8S20487C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20487C1D0Ev,_ZThn60_N8S20487C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20487C1D1Ev,_ZTv0_n12_N8S20487C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20487C1D1Ev,_ZThn192_N8S20487C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20487C1D1Ev,_ZThn156_N8S20487C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20487C1D1Ev,_ZThn72_N8S20487C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20487C1D1Ev,_ZThn60_N8S20487C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C1D0Ev,_ZTv0_n24_N8S20487C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20487C1D0Ev,_ZThn48_N8S20487C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20487C1D1Ev,_ZTv0_n24_N8S20487C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20487C1D1Ev,_ZThn48_N8S20487C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20487C1D0Ev,_ZTv0_n28_N8S20487C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20487C1D0Ev,_ZThn40_N8S20487C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20487C1D1Ev,_ZTv0_n28_N8S20487C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20487C1D1Ev,_ZThn40_N8S20487C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20487C1D0Ev,_ZTv0_n32_N8S20487C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20487C1D0Ev,_ZThn36_N8S20487C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20487C1D1Ev,_ZTv0_n32_N8S20487C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20487C1D1Ev,_ZThn36_N8S20487C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20487C1 = {  "S20487C1", // class name
  bases_S20487C1, 41,
  &(vtc_S20487C1[0]), // expected_vtbl_contents
  &(vtt_S20487C1[0]), // expected_vtt_contents
  ABISELECT(336,216), // object size
  NSPAIRA(_ZTI8S20487C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20487C1),91, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20487C1),41, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20486C5  : S2014C38 {
  ::S2014C38 s20486c5f0;
  virtual  ~S20486C5(); // _ZN8S20486C5D1Ev
  S20486C5(); // tgen
};
//SIG(-1 S20486C5) C1{ BC2{ m} vd FC2}


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

static void Test_S20486C5()
{
  extern Class_Descriptor cd_S20486C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20486C5, buf);
    S20486C5 *dp, &lv = *(dp=new (buf) S20486C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20486C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C5)");
    check_base_class_offset(lv, (S2014C38*), 0, "S20486C5");
    check_field_offset(lv, s20486c5f0, ABISELECT(8,4), "S20486C5.s20486c5f0");
    test_class_info(&lv, &cd_S20486C5);
    dp->~S20486C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C5(Test_S20486C5, "S20486C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20486C5C1Ev();
extern void _ZN8S20486C5D1Ev();
Name_Map name_map_S20486C5[] = {
  NSPAIR(_ZN8S20486C5C1Ev),
  NSPAIR(_ZN8S20486C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S20486C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20486C5[];
extern void _ZN8S20486C5D1Ev();
extern void _ZN8S20486C5D0Ev();
static  VTBL_ENTRY vtc_S20486C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C5[0]),
  (VTBL_ENTRY)&_ZN8S20486C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
Class_Descriptor cd_S20486C5 = {  "S20486C5", // class name
  bases_S20486C5, 1,
  &(vtc_S20486C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20486C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20486C5),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  S20486C7  : virtual S2014C28 , virtual S20486C5 , virtual S3222C8_nt {
  void *s20486c7f0;
  ::S19762C18_nt s20486c7f1;
  virtual  ~S20486C7(); // _ZN8S20486C7D2Ev
  S20486C7(); // tgen
};
//SIG(-1 S20486C7) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S20486C7()
{
  extern Class_Descriptor cd_S20486C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S20486C7, buf);
    S20486C7 *dp, &lv = *(dp=new (buf) S20486C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S20486C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C7)");
    check_base_class_offset(lv, (S2014C28*), 0, "S20486C7");
    check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(24,12), "S20486C7");
    check_base_class_offset(lv, (S20486C5*), ABISELECT(24,12), "S20486C7");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S20486C7");
    check_field_offset(lv, s20486c7f0, ABISELECT(8,4), "S20486C7.s20486c7f0");
    check_field_offset(lv, s20486c7f1, ABISELECT(16,8), "S20486C7.s20486c7f1");
    test_class_info(&lv, &cd_S20486C7);
    dp->~S20486C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C7(Test_S20486C7, "S20486C7", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S20486C7C1Ev();
extern void _ZN8S20486C7D2Ev();
Name_Map name_map_S20486C7[] = {
  NSPAIR(_ZN8S20486C7C1Ev),
  NSPAIR(_ZN8S20486C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S20486C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20486C7[];
extern void _ZN8S20486C7D1Ev();
extern void _ZN8S20486C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20486C7[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&_ZN8S20486C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C7D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S20486C7[];
static  VTT_ENTRY vtt_S20486C7[] = {
  {&(_ZTV8S20486C7[5]),  5,12},
  {&(_ZTV8S20486C7[10]),  10,12},
};
extern VTBL_ENTRY _ZTI8S20486C7[];
extern  VTBL_ENTRY _ZTV8S20486C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C7[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20486C7 = {  "S20486C7", // class name
  bases_S20486C7, 4,
  &(vtc_S20486C7[0]), // expected_vtbl_contents
  &(vtt_S20486C7[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S20486C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20486C7),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20486C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20486C3  : S2014C38 , S20486C5 , virtual S2014C28 , virtual S20486C7 {
  virtual  ~S20486C3(); // _ZN8S20486C3D2Ev
  S20486C3(); // tgen
};
//SIG(-1 S20486C3) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S20486C3()
{
  extern Class_Descriptor cd_S20486C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S20486C3, buf);
    S20486C3 *dp, &lv = *(dp=new (buf) S20486C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S20486C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C3)");
    /*is_ambiguous_... S20486C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S20486C3");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*), 0, "S20486C3");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*), 0, "S20486C3");
    check_base_class_offset(lv, (S2014C28*), 0, "S20486C3");
    check_base_class_offset(lv, (S2014C28*)(S20486C7*), 0, "S20486C3");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(40,20), "S20486C3");
    check_base_class_offset(lv, (S20486C5*)(S20486C7*), ABISELECT(40,20), "S20486C3");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C7*), ABISELECT(52,28), "S20486C3");
    check_base_class_offset(lv, (S20486C7*), ABISELECT(16,8), "S20486C3");
    test_class_info(&lv, &cd_S20486C3);
    dp->~S20486C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C3(Test_S20486C3, "S20486C3", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S20486C3C1Ev();
extern void _ZN8S20486C3D2Ev();
Name_Map name_map_S20486C3[] = {
  NSPAIR(_ZN8S20486C3C1Ev),
  NSPAIR(_ZN8S20486C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C7;
extern VTBL_ENTRY _ZTI8S20486C7[];
extern  VTBL_ENTRY _ZTV8S20486C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C7[];
static Base_Class bases_S20486C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20486C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20486C7,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20486C3[];
extern void _ZN8S20486C3D1Ev();
extern void _ZN8S20486C3D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20486C3D1Ev,_ZThn8_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20486C3D0Ev,_ZThn8_N8S20486C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn20_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn20_N8S20486C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20486C3[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&_ZN8S20486C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C3D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S20486C3[];
extern void _ZN8S20486C7D1Ev();
extern void _ZN8S20486C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C7__8S20486C3[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&_ZN8S20486C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__8S20486C7__8S20486C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev),
};
static  VTT_ENTRY vtt_S20486C3[] = {
  {&(_ZTV8S20486C3[6]),  6,21},
  {&(_ZTV8S20486C3[14]),  14,21},
  {&(_ZTV8S20486C3[19]),  19,21},
  {&(_tg__ZTV8S20486C7__8S20486C3[5]),  5,7},
  {&(_tg__ZTV8S20486C5__8S20486C7__8S20486C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20486C3[];
extern  VTBL_ENTRY _ZTV8S20486C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C3[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn20_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn20_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20486C3D0Ev,_ZThn8_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20486C3D1Ev,_ZThn8_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20486C3 = {  "S20486C3", // class name
  bases_S20486C3, 8,
  &(vtc_S20486C3[0]), // expected_vtbl_contents
  &(vtt_S20486C3[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S20486C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20486C3),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20486C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20486C2  : virtual S20486C3 {
  virtual  ~S20486C2(); // _ZN8S20486C2D2Ev
  S20486C2(); // tgen
};
//SIG(-1 S20486C2) C1{ VBC2{ BC3{ m} BC4{ BC3 vd FC3} VBC5{ m} VBC6{ VBC5 VBC4 VBC7{ m Fi} vd Fp FC8{}} vd} vd}


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

static void Test_S20486C2()
{
  extern Class_Descriptor cd_S20486C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S20486C2, buf);
    S20486C2 *dp, &lv = *(dp=new (buf) S20486C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S20486C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C2)");
    /*is_ambiguous_... S20486C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C3*), ABISELECT(17,9), "S20486C2");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C3*), ABISELECT(8,4), "S20486C2");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C3*), ABISELECT(8,4), "S20486C2");
    check_base_class_offset(lv, (S2014C28*)(S20486C3*), 0, "S20486C2");
    check_base_class_offset(lv, (S2014C28*)(S20486C7*), 0, "S20486C2");
    /*is_ambiguous_... S20486C2::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(48,24), "S20486C2");
    check_base_class_offset(lv, (S20486C5*)(S20486C7*), ABISELECT(48,24), "S20486C2");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C7*), ABISELECT(60,32), "S20486C2");
    check_base_class_offset(lv, (S20486C7*)(S20486C3*), ABISELECT(24,12), "S20486C2");
    check_base_class_offset(lv, (S20486C3*), ABISELECT(8,4), "S20486C2");
    test_class_info(&lv, &cd_S20486C2);
    dp->~S20486C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C2(Test_S20486C2, "S20486C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S20486C2C1Ev();
extern void _ZN8S20486C2D2Ev();
Name_Map name_map_S20486C2[] = {
  NSPAIR(_ZN8S20486C2C1Ev),
  NSPAIR(_ZN8S20486C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C7;
extern VTBL_ENTRY _ZTI8S20486C7[];
extern  VTBL_ENTRY _ZTV8S20486C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C7[];
extern Class_Descriptor cd_S20486C3;
extern VTBL_ENTRY _ZTI8S20486C3[];
extern  VTBL_ENTRY _ZTV8S20486C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C3[];
static Base_Class bases_S20486C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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_S20486C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(48,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20486C7,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //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
    8, //immediately_derived
  0, 1},
  {&cd_S20486C3,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20486C2[];
extern void _ZN8S20486C2D1Ev();
extern void _ZN8S20486C2D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S20486C2D1Ev,_ZTv0_n28_N8S20486C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20486C2D1Ev,_ZThn4_N8S20486C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20486C2D0Ev,_ZTv0_n28_N8S20486C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20486C2D0Ev,_ZThn4_N8S20486C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C2D1Ev,_ZTv0_n24_N8S20486C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20486C2D1Ev,_ZThn12_N8S20486C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C2D0Ev,_ZTv0_n24_N8S20486C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20486C2D0Ev,_ZThn12_N8S20486C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C2D1Ev,_ZTv0_n12_N8S20486C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20486C2D1Ev,_ZThn24_N8S20486C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C2D0Ev,_ZTv0_n12_N8S20486C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20486C2D0Ev,_ZThn24_N8S20486C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20486C2[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C2[0]),
  (VTBL_ENTRY)&_ZN8S20486C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20486C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20486C2D1Ev,_ZTv0_n28_N8S20486C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20486C2D0Ev,_ZTv0_n28_N8S20486C2D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20486C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C2D1Ev,_ZTv0_n24_N8S20486C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C2D0Ev,_ZTv0_n24_N8S20486C2D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20486C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C2D1Ev,_ZTv0_n12_N8S20486C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C2D0Ev,_ZTv0_n12_N8S20486C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20486C2[];
extern void _ZN8S20486C3D1Ev();
extern void _ZN8S20486C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C3__8S20486C2[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&_ZN8S20486C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20486C3D1Ev,_ZThn8_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20486C3D0Ev,_ZThn8_N8S20486C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C7__8S20486C3__8S20486C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn20_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn20_N8S20486C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__A1__8S20486C3__8S20486C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev),
};
extern void _ZN8S20486C7D1Ev();
extern void _ZN8S20486C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C7__8S20486C2[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&_ZN8S20486C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__8S20486C7__8S20486C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev),
};
static  VTT_ENTRY vtt_S20486C2[] = {
  {&(_ZTV8S20486C2[7]),  7,31},
  {&(_ZTV8S20486C2[16]),  16,31},
  {&(_ZTV8S20486C2[24]),  24,31},
  {&(_ZTV8S20486C2[29]),  29,31},
  {&(_tg__ZTV8S20486C3__8S20486C2[6]),  6,8},
  {&(_tg__ZTV8S20486C7__8S20486C3__8S20486C2[6]),  6,8},
  {&(_tg__ZTV8S20486C5__A1__8S20486C3__8S20486C2[3]),  3,5},
  {&(_tg__ZTV8S20486C7__8S20486C2[5]),  5,7},
  {&(_tg__ZTV8S20486C5__8S20486C7__8S20486C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20486C2[];
extern  VTBL_ENTRY _ZTV8S20486C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C2[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn20_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn20_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20486C3D0Ev,_ZThn8_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20486C3D1Ev,_ZThn8_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C2D0Ev,_ZTv0_n12_N8S20486C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20486C2D0Ev,_ZThn24_N8S20486C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C2D1Ev,_ZTv0_n12_N8S20486C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20486C2D1Ev,_ZThn24_N8S20486C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C2D0Ev,_ZTv0_n24_N8S20486C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C2D0Ev,_ZThn12_N8S20486C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C2D1Ev,_ZTv0_n24_N8S20486C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C2D1Ev,_ZThn12_N8S20486C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20486C2D0Ev,_ZTv0_n28_N8S20486C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20486C2D0Ev,_ZThn4_N8S20486C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20486C2D1Ev,_ZTv0_n28_N8S20486C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20486C2D1Ev,_ZThn4_N8S20486C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20486C2 = {  "S20486C2", // class name
  bases_S20486C2, 9,
  &(vtc_S20486C2[0]), // expected_vtbl_contents
  &(vtt_S20486C2[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S20486C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20486C2),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20486C2),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20486C12  : S20486C5 {
  virtual  ~S20486C12(); // _ZN9S20486C12D1Ev
  S20486C12(); // tgen
};
//SIG(-1 S20486C12) C1{ BC2{ BC3{ m} vd FC3} vd}


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

static void Test_S20486C12()
{
  extern Class_Descriptor cd_S20486C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20486C12, buf);
    S20486C12 *dp, &lv = *(dp=new (buf) S20486C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20486C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C12)");
    check_base_class_offset(lv, (S2014C38*)(S20486C5*), 0, "S20486C12");
    check_base_class_offset(lv, (S20486C5*), 0, "S20486C12");
    test_class_info(&lv, &cd_S20486C12);
    dp->~S20486C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C12(Test_S20486C12, "S20486C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S20486C12C1Ev();
extern void _ZN9S20486C12D1Ev();
Name_Map name_map_S20486C12[] = {
  NSPAIR(_ZN9S20486C12C1Ev),
  NSPAIR(_ZN9S20486C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
static Base_Class bases_S20486C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20486C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20486C12[];
extern void _ZN9S20486C12D1Ev();
extern void _ZN9S20486C12D0Ev();
static  VTBL_ENTRY vtc_S20486C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C12[0]),
  (VTBL_ENTRY)&_ZN9S20486C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C12D0Ev,
};
extern VTBL_ENTRY _ZTI9S20486C12[];
extern  VTBL_ENTRY _ZTV9S20486C12[];
Class_Descriptor cd_S20486C12 = {  "S20486C12", // class name
  bases_S20486C12, 2,
  &(vtc_S20486C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20486C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20486C12),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  S20486C15  : virtual S20486C5 {
  __tsi64 s20486c15f0;
  ~S20486C15(); // tgen
  S20486C15(); // tgen
};
//SIG(-1 S20486C15) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S20486C15()
{
  extern Class_Descriptor cd_S20486C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20486C15, buf);
    S20486C15 *dp, &lv = *(dp=new (buf) S20486C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20486C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C15)");
    check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(16,12), "S20486C15");
    check_base_class_offset(lv, (S20486C5*), ABISELECT(16,12), "S20486C15");
    check_field_offset(lv, s20486c15f0, ABISELECT(8,4), "S20486C15.s20486c15f0");
    test_class_info(&lv, &cd_S20486C15);
    dp->~S20486C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C15(Test_S20486C15, "S20486C15", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S20486C15C1Ev();
extern void _ZN9S20486C15D1Ev();
Name_Map name_map_S20486C15[] = {
  NSPAIR(_ZN9S20486C15C1Ev),
  NSPAIR(_ZN9S20486C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
static Base_Class bases_S20486C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20486C15[];
extern void _ZN9S20486C15D1Ev();
extern void _ZN9S20486C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20486C15D1Ev,_ZThn12_N9S20486C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20486C15D0Ev,_ZThn12_N9S20486C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20486C15[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C15[0]),
  (VTBL_ENTRY)&_ZN9S20486C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C15D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S20486C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20486C15[];
static  VTT_ENTRY vtt_S20486C15[] = {
  {&(_ZTV9S20486C15[3]),  3,10},
  {&(_ZTV9S20486C15[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S20486C15[];
extern  VTBL_ENTRY _ZTV9S20486C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C15[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20486C15D0Ev,_ZThn12_N9S20486C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20486C15D1Ev,_ZThn12_N9S20486C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20486C15 = {  "S20486C15", // class name
  bases_S20486C15, 2,
  &(vtc_S20486C15[0]), // expected_vtbl_contents
  &(vtt_S20486C15[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S20486C15),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20486C15),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20486C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20486C17  : S2014C28 , S20486C5 , S2014C38 , S3222C8_nt {
  short s20486c17f0:16;
  long s20486c17f1;
  ~S20486C17(); // tgen
  S20486C17(); // tgen
};
//SIG(-1 S20486C17) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 Fl}


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

static void Test_S20486C17()
{
  extern Class_Descriptor cd_S20486C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20486C17, buf);
    S20486C17 *dp, &lv = *(dp=new (buf) S20486C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20486C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C17)");
    check_base_class_offset(lv, (S2014C28*), 0, "S20486C17");
    check_base_class_offset(lv, (S2014C38*)(S20486C5*), 0, "S20486C17");
    check_base_class_offset(lv, (S20486C5*), 0, "S20486C17");
    /*is_ambiguous_... S20486C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S20486C17");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S20486C17");
    set_bf_and_test(lv, s20486c17f0, ABISELECT(16,12), 0, 16, 1, "S20486C17");
    set_bf_and_test(lv, s20486c17f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S20486C17");
    check_field_offset(lv, s20486c17f1, ABISELECT(24,16), "S20486C17.s20486c17f1");
    test_class_info(&lv, &cd_S20486C17);
    dp->~S20486C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C17(Test_S20486C17, "S20486C17", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S20486C17C1Ev();
extern void _ZN9S20486C17D1Ev();
Name_Map name_map_S20486C17[] = {
  NSPAIR(_ZN9S20486C17C1Ev),
  NSPAIR(_ZN9S20486C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S20486C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20486C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20486C17[];
extern void _ZN9S20486C17D1Ev();
extern void _ZN9S20486C17D0Ev();
static  VTBL_ENTRY vtc_S20486C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C17[0]),
  (VTBL_ENTRY)&_ZN9S20486C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C17D0Ev,
};
extern VTBL_ENTRY _ZTI9S20486C17[];
extern  VTBL_ENTRY _ZTV9S20486C17[];
Class_Descriptor cd_S20486C17 = {  "S20486C17", // class name
  bases_S20486C17, 5,
  &(vtc_S20486C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S20486C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20486C17),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  S20486C16  : S20486C17 , S20486C5 {
  int s20486c16f0;
  ~S20486C16(); // tgen
  S20486C16(); // tgen
};
//SIG(-1 S20486C16) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 Fl} BC4 Fi}


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

static void Test_S20486C16()
{
  extern Class_Descriptor cd_S20486C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S20486C16, buf);
    S20486C16 *dp, &lv = *(dp=new (buf) S20486C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S20486C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C16)");
    check_base_class_offset(lv, (S2014C28*)(S20486C17*), 0, "S20486C16");
    check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C17*), 0, "S20486C16");
    check_base_class_offset(lv, (S20486C5*)(S20486C17*), 0, "S20486C16");
    /*is_ambiguous_... S20486C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C17*), ABISELECT(9,5), "S20486C16");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C17*), ABISELECT(12,8), "S20486C16");
    check_base_class_offset(lv, (S20486C17*), 0, "S20486C16");
    /*is_ambiguous_... S20486C16::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(32,20), "S20486C16");
    /*is_ambiguous_... S20486C16::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*), ABISELECT(32,20), "S20486C16");
    check_field_offset(lv, s20486c16f0, ABISELECT(44,28), "S20486C16.s20486c16f0");
    test_class_info(&lv, &cd_S20486C16);
    dp->~S20486C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C16(Test_S20486C16, "S20486C16", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN9S20486C16C1Ev();
extern void _ZN9S20486C16D1Ev();
Name_Map name_map_S20486C16[] = {
  NSPAIR(_ZN9S20486C16C1Ev),
  NSPAIR(_ZN9S20486C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C17;
extern VTBL_ENTRY _ZTI9S20486C17[];
extern  VTBL_ENTRY _ZTV9S20486C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
static Base_Class bases_S20486C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20486C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S20486C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(32,20), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20486C16[];
extern void _ZN9S20486C16D1Ev();
extern void _ZN9S20486C16D0Ev();
extern void ABISELECT(_ZThn32_N9S20486C16D1Ev,_ZThn20_N9S20486C16D1Ev)();
extern void ABISELECT(_ZThn32_N9S20486C16D0Ev,_ZThn20_N9S20486C16D0Ev)();
static  VTBL_ENTRY vtc_S20486C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C16[0]),
  (VTBL_ENTRY)&_ZN9S20486C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C16D0Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S20486C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S20486C16D1Ev,_ZThn20_N9S20486C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S20486C16D0Ev,_ZThn20_N9S20486C16D0Ev),
};
extern VTBL_ENTRY _ZTI9S20486C16[];
extern  VTBL_ENTRY _ZTV9S20486C16[];
Class_Descriptor cd_S20486C16 = {  "S20486C16", // class name
  bases_S20486C16, 8,
  &(vtc_S20486C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI9S20486C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20486C16),8, //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  S20486C14  : S20486C15 , virtual S2014C28 , virtual S3222C8_nt , virtual S20486C7 , virtual S20486C16 {
  long s20486c14f0;
  ::S20486C15 s20486c14f1;
  virtual  ~S20486C14(); // _ZN9S20486C14D2Ev
  S20486C14(); // tgen
};
//SIG(-1 S20486C14) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 Fl} BC3 Fi} vd Fl FC2}


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

static void Test_S20486C14()
{
  extern Class_Descriptor cd_S20486C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S20486C14, buf);
    S20486C14 *dp, &lv = *(dp=new (buf) S20486C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S20486C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C14)");
    /*is_ambiguous_... S20486C14::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(56,36), "S20486C14");
    check_base_class_offset(lv, (S20486C5*)(S20486C15*), ABISELECT(56,36), "S20486C14");
    check_base_class_offset(lv, (S20486C5*)(S20486C7*), ABISELECT(56,36), "S20486C14");
    check_base_class_offset(lv, (S20486C15*), 0, "S20486C14");
    /*is_ambiguous_... S20486C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), 0, "S20486C14");
    check_base_class_offset(lv, (S2014C28*)(S20486C7*), 0, "S20486C14");
    /*is_ambiguous_... S20486C14::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S20486C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C7*), ABISELECT(68,44), "S20486C14");
    check_base_class_offset(lv, (S20486C7*), ABISELECT(72,48), "S20486C14");
    check_base_class_offset(lv, (S2014C28*)(S20486C17*)(S20486C16*), ABISELECT(96,60), "S20486C14");
    check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C17*)(S20486C16*), ABISELECT(96,60), "S20486C14");
    check_base_class_offset(lv, (S20486C5*)(S20486C17*)(S20486C16*), ABISELECT(96,60), "S20486C14");
    /*is_ambiguous_... S20486C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C17*)(S20486C16*), ABISELECT(105,65), "S20486C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C17*)(S20486C16*), ABISELECT(108,68), "S20486C14");
    check_base_class_offset(lv, (S20486C17*)(S20486C16*), ABISELECT(96,60), "S20486C14");
    /*is_ambiguous_... S20486C16::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C16*), ABISELECT(128,80), "S20486C14");
    /*is_ambiguous_... S20486C16::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C16*), ABISELECT(128,80), "S20486C14");
    check_base_class_offset(lv, (S20486C16*), ABISELECT(96,60), "S20486C14");
    check_field_offset(lv, s20486c14f0, ABISELECT(16,12), "S20486C14.s20486c14f0");
    check_field_offset(lv, s20486c14f1, ABISELECT(24,16), "S20486C14.s20486c14f1");
    test_class_info(&lv, &cd_S20486C14);
    dp->~S20486C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C14(Test_S20486C14, "S20486C14", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN9S20486C14C1Ev();
extern void _ZN9S20486C14D2Ev();
Name_Map name_map_S20486C14[] = {
  NSPAIR(_ZN9S20486C14C1Ev),
  NSPAIR(_ZN9S20486C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S20486C15;
extern VTBL_ENTRY _ZTI9S20486C15[];
extern  VTBL_ENTRY _ZTV9S20486C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C7;
extern VTBL_ENTRY _ZTI8S20486C7[];
extern  VTBL_ENTRY _ZTV8S20486C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C17;
extern VTBL_ENTRY _ZTI9S20486C17[];
extern  VTBL_ENTRY _ZTV9S20486C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S20486C16;
extern VTBL_ENTRY _ZTI9S20486C16[];
extern  VTBL_ENTRY _ZTV9S20486C16[];
static Base_Class bases_S20486C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20486C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20486C7,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20486C17,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(128,80), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20486C16,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20486C14[];
extern void _ZN9S20486C14D1Ev();
extern void _ZN9S20486C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev)();
extern void ABISELECT(_ZThn56_N9S20486C14D1Ev,_ZThn36_N9S20486C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev)();
extern void ABISELECT(_ZThn56_N9S20486C14D0Ev,_ZThn36_N9S20486C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20486C14D1Ev,_ZTv0_n24_N9S20486C14D1Ev)();
extern void ABISELECT(_ZThn72_N9S20486C14D1Ev,_ZThn48_N9S20486C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20486C14D0Ev,_ZTv0_n24_N9S20486C14D0Ev)();
extern void ABISELECT(_ZThn72_N9S20486C14D0Ev,_ZThn48_N9S20486C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev)();
extern void ABISELECT(_ZThn96_N9S20486C14D1Ev,_ZThn60_N9S20486C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev)();
extern void ABISELECT(_ZThn96_N9S20486C14D0Ev,_ZThn60_N9S20486C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S20486C14D1Ev,_ZTvn20_n12_N9S20486C14D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20486C14D0Ev,_ZTvn20_n12_N9S20486C14D0Ev)();
static  VTBL_ENTRY vtc_S20486C14[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&_ZN9S20486C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C14D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C14D1Ev,_ZTv0_n24_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C14D0Ev,_ZTv0_n24_N9S20486C14D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C14D1Ev,_ZTvn20_n12_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C14D0Ev,_ZTvn20_n12_N9S20486C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20486C14[];
extern void _ZN9S20486C15D1Ev();
extern void _ZN9S20486C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20486C15__9S20486C14[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C15[0]),
  (VTBL_ENTRY)&_ZN9S20486C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev)();
extern void ABISELECT(_ZThn56_N9S20486C15D1Ev,_ZThn36_N9S20486C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev)();
extern void ABISELECT(_ZThn56_N9S20486C15D0Ev,_ZThn36_N9S20486C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__9S20486C15__9S20486C14[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20486C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev),
};
extern void _ZN8S20486C7D1Ev();
extern void _ZN8S20486C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C7__9S20486C14[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&_ZN8S20486C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C5__8S20486C7__9S20486C14[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev),
};
static  VTT_ENTRY vtt_S20486C14[] = {
  {&(_ZTV9S20486C14[7]),  7,31},
  {&(_tg__ZTV9S20486C15__9S20486C14[3]),  3,5},
  {&(_tg__ZTV8S20486C5__9S20486C15__9S20486C14[3]),  3,5},
  {&(_ZTV9S20486C14[12]),  12,31},
  {&(_ZTV9S20486C14[20]),  20,31},
  {&(_ZTV9S20486C14[25]),  25,31},
  {&(_ZTV9S20486C14[29]),  29,31},
  {&(_tg__ZTV8S20486C7__9S20486C14[5]),  5,7},
  {&(_tg__ZTV8S20486C5__8S20486C7__9S20486C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20486C14[];
extern  VTBL_ENTRY _ZTV9S20486C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C14[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20486C15D0Ev,_ZThn36_N9S20486C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20486C15D1Ev,_ZThn36_N9S20486C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C14D0Ev,_ZTv0_n24_N9S20486C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20486C14D0Ev,_ZThn48_N9S20486C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C14D1Ev,_ZTv0_n24_N9S20486C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20486C14D1Ev,_ZThn48_N9S20486C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20486C14D0Ev,_ZThn60_N9S20486C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20486C14D0Ev,_ZThn36_N9S20486C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20486C14D1Ev,_ZThn60_N9S20486C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20486C14D1Ev,_ZThn36_N9S20486C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20486C14 = {  "S20486C14", // class name
  bases_S20486C14, 15,
  &(vtc_S20486C14[0]), // expected_vtbl_contents
  &(vtt_S20486C14[0]), // expected_vtt_contents
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI9S20486C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20486C14),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20486C14),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20486C18  : virtual S20486C7 , S20486C3 , virtual S2014C38 {
  ::S3222C8_nt s20486c18f0[6];
  virtual  ~S20486C18(); // _ZN9S20486C18D2Ev
  S20486C18(); // tgen
};
//SIG(-1 S20486C18) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S20486C18()
{
  extern Class_Descriptor cd_S20486C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S20486C18, buf);
    S20486C18 *dp, &lv = *(dp=new (buf) S20486C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S20486C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C18)");
    check_base_class_offset(lv, (S2014C28*)(S20486C7*), 0, "S20486C18");
    check_base_class_offset(lv, (S2014C28*)(S20486C3*), 0, "S20486C18");
    /*is_ambiguous_... S20486C18::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(64,44), "S20486C18");
    check_base_class_offset(lv, (S20486C5*)(S20486C7*), ABISELECT(64,44), "S20486C18");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C7*), ABISELECT(76,52), "S20486C18");
    check_base_class_offset(lv, (S20486C7*), ABISELECT(40,32), "S20486C18");
    check_base_class_offset(lv, (S20486C7*)(S20486C3*), ABISELECT(40,32), "S20486C18");
    /*is_ambiguous_... S20486C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C3*), ABISELECT(9,5), "S20486C18");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C3*), 0, "S20486C18");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C3*), 0, "S20486C18");
    check_base_class_offset(lv, (S20486C3*), 0, "S20486C18");
    /*is_ambiguous_... S20486C18::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(80,56), "S20486C18");
    check_field_offset(lv, s20486c18f0, ABISELECT(12,8), "S20486C18.s20486c18f0");
    test_class_info(&lv, &cd_S20486C18);
    dp->~S20486C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C18(Test_S20486C18, "S20486C18", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN9S20486C18C1Ev();
extern void _ZN9S20486C18D2Ev();
Name_Map name_map_S20486C18[] = {
  NSPAIR(_ZN9S20486C18C1Ev),
  NSPAIR(_ZN9S20486C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C7;
extern VTBL_ENTRY _ZTI8S20486C7[];
extern  VTBL_ENTRY _ZTV8S20486C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C7[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S20486C3;
extern VTBL_ENTRY _ZTI8S20486C3[];
extern  VTBL_ENTRY _ZTV8S20486C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S20486C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20486C7,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20486C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20486C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20486C18[];
extern void _ZN9S20486C18D1Ev();
extern void _ZN9S20486C18D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20486C18D1Ev,_ZTv0_n24_N9S20486C18D1Ev)();
extern void ABISELECT(_ZThn40_N9S20486C18D1Ev,_ZThn32_N9S20486C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20486C18D0Ev,_ZTv0_n24_N9S20486C18D0Ev)();
extern void ABISELECT(_ZThn40_N9S20486C18D0Ev,_ZThn32_N9S20486C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C18D1Ev,_ZTv0_n12_N9S20486C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S20486C18D1Ev,_ZThn44_N9S20486C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C18D0Ev,_ZTv0_n12_N9S20486C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S20486C18D0Ev,_ZThn44_N9S20486C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20486C18[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C18[0]),
  (VTBL_ENTRY)&_ZN9S20486C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C18D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S20486C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C18D1Ev,_ZTv0_n24_N9S20486C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C18D0Ev,_ZTv0_n24_N9S20486C18D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S20486C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C18D1Ev,_ZTv0_n12_N9S20486C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C18D0Ev,_ZTv0_n12_N9S20486C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S20486C18[];
extern void _ZN8S20486C3D1Ev();
extern void _ZN8S20486C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C3__9S20486C18[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&_ZN8S20486C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn32_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn32_N8S20486C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C7__8S20486C3__9S20486C18[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S20486C3D1Ev,_ZThn44_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S20486C3D0Ev,_ZThn44_N8S20486C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__A1__8S20486C3__9S20486C18[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev),
};
extern void _ZN8S20486C7D1Ev();
extern void _ZN8S20486C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C7__9S20486C18[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&_ZN8S20486C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__8S20486C7__9S20486C18[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev),
};
static  VTT_ENTRY vtt_S20486C18[] = {
  {&(_ZTV9S20486C18[7]),  7,22},
  {&(_tg__ZTV8S20486C3__9S20486C18[6]),  6,8},
  {&(_tg__ZTV8S20486C7__8S20486C3__9S20486C18[6]),  6,8},
  {&(_tg__ZTV8S20486C5__A1__8S20486C3__9S20486C18[3]),  3,5},
  {&(_ZTV9S20486C18[15]),  15,22},
  {&(_ZTV9S20486C18[20]),  20,22},
  {&(_tg__ZTV8S20486C7__9S20486C18[5]),  5,7},
  {&(_tg__ZTV8S20486C5__8S20486C7__9S20486C18[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20486C18[];
extern  VTBL_ENTRY _ZTV9S20486C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C18[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20486C3D0Ev,_ZThn44_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20486C3D1Ev,_ZThn44_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn32_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn32_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C18D0Ev,_ZTv0_n12_N9S20486C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20486C18D0Ev,_ZThn44_N9S20486C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C18D1Ev,_ZTv0_n12_N9S20486C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20486C18D1Ev,_ZThn44_N9S20486C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C18D0Ev,_ZTv0_n24_N9S20486C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20486C18D0Ev,_ZThn32_N9S20486C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C18D1Ev,_ZTv0_n24_N9S20486C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20486C18D1Ev,_ZThn32_N9S20486C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20486C18 = {  "S20486C18", // class name
  bases_S20486C18, 10,
  &(vtc_S20486C18[0]), // expected_vtbl_contents
  &(vtt_S20486C18[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI9S20486C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20486C18),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20486C18),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20486C13  : S20486C14 , S20486C5 , virtual S20486C17 , S20486C18 {
  virtual  ~S20486C13(); // _ZN9S20486C13D2Ev
  S20486C13(); // tgen
};
//SIG(-1 S20486C13) C1{ BC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 Fl} BC4 Fi} vd Fl FC3} BC4 VBC11 BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} vd}


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

static void Test_S20486C13()
{
  extern Class_Descriptor cd_S20486C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,39)];
    init_test(&cd_S20486C13, buf);
    S20486C13 *dp, &lv = *(dp=new (buf) S20486C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,152), "sizeof(S20486C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C13)");
    /*is_ambiguous_... S20486C13::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(112,76), "S20486C13");
    check_base_class_offset(lv, (S20486C5*)(S20486C15*)(S20486C14*), ABISELECT(112,76), "S20486C13");
    check_base_class_offset(lv, (S20486C5*)(S20486C7*), ABISELECT(112,76), "S20486C13");
    check_base_class_offset(lv, (S20486C15*)(S20486C14*), 0, "S20486C13");
    /*is_ambiguous_... S20486C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20486C14*), 0, "S20486C13");
    check_base_class_offset(lv, (S2014C28*)(S20486C7*), 0, "S20486C13");
    check_base_class_offset(lv, (S2014C28*)(S20486C3*)(S20486C18*), 0, "S20486C13");
    /*is_ambiguous_... S20486C14::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S20486C14*), ABISELECT(124,84), "S20486C13");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C7*), ABISELECT(124,84), "S20486C13");
    check_base_class_offset(lv, (S20486C7*)(S20486C14*), ABISELECT(128,88), "S20486C13");
    check_base_class_offset(lv, (S20486C7*)(S20486C18*), ABISELECT(128,88), "S20486C13");
    check_base_class_offset(lv, (S20486C7*)(S20486C3*)(S20486C18*), ABISELECT(128,88), "S20486C13");
    check_base_class_offset(lv, (S2014C28*)(S20486C17*)(S20486C16*), ABISELECT(152,100), "S20486C13");
    check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C17*)(S20486C16*), ABISELECT(152,100), "S20486C13");
    check_base_class_offset(lv, (S20486C5*)(S20486C17*)(S20486C16*), ABISELECT(152,100), "S20486C13");
    /*is_ambiguous_... S20486C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C17*)(S20486C16*), ABISELECT(161,105), "S20486C13");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C17*)(S20486C16*), ABISELECT(164,108), "S20486C13");
    check_base_class_offset(lv, (S20486C17*)(S20486C16*), ABISELECT(152,100), "S20486C13");
    /*is_ambiguous_... S20486C16::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C16*), ABISELECT(184,120), "S20486C13");
    /*is_ambiguous_... S20486C16::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C16*), ABISELECT(184,120), "S20486C13");
    check_base_class_offset(lv, (S20486C16*)(S20486C14*), ABISELECT(152,100), "S20486C13");
    check_base_class_offset(lv, (S20486C14*), 0, "S20486C13");
    /*is_ambiguous_... S20486C13::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(56,36), "S20486C13");
    /*is_ambiguous_... S20486C13::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*), ABISELECT(56,36), "S20486C13");
    /*is_ambiguous_... S20486C13::S20486C17 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20486C17*), ABISELECT(200,132), "S20486C13");
    /*is_ambiguous_... S20486C13::S20486C17 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C17*), ABISELECT(200,132), "S20486C13");
    /*is_ambiguous_... S20486C13::S20486C17 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C17*), ABISELECT(200,132), "S20486C13");
    /*is_ambiguous_... S20486C13::S20486C17 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C17*), ABISELECT(209,137), "S20486C13");
    /*is_ambiguous_... S20486C13::S20486C17 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S20486C17*), ABISELECT(212,140), "S20486C13");
    /*is_ambiguous_... S20486C13::S20486C17 */ AMB_check_base_class_offset(lv, (S20486C17*), ABISELECT(200,132), "S20486C13");
    /*is_ambiguous_... S20486C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C3*)(S20486C18*), ABISELECT(81,49), "S20486C13");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C3*)(S20486C18*), ABISELECT(72,44), "S20486C13");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C3*)(S20486C18*), ABISELECT(72,44), "S20486C13");
    check_base_class_offset(lv, (S20486C3*)(S20486C18*), ABISELECT(72,44), "S20486C13");
    /*is_ambiguous_... S20486C18::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C18*), 0, "S20486C13");
    check_base_class_offset(lv, (S20486C18*), ABISELECT(72,44), "S20486C13");
    test_class_info(&lv, &cd_S20486C13);
    dp->~S20486C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C13(Test_S20486C13, "S20486C13", ABISELECT(232,152));

#else // __cplusplus

extern void _ZN9S20486C13C1Ev();
extern void _ZN9S20486C13D2Ev();
Name_Map name_map_S20486C13[] = {
  NSPAIR(_ZN9S20486C13C1Ev),
  NSPAIR(_ZN9S20486C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S20486C15;
extern VTBL_ENTRY _ZTI9S20486C15[];
extern  VTBL_ENTRY _ZTV9S20486C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C7;
extern VTBL_ENTRY _ZTI8S20486C7[];
extern  VTBL_ENTRY _ZTV8S20486C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C7[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C17;
extern VTBL_ENTRY _ZTI9S20486C17[];
extern  VTBL_ENTRY _ZTV9S20486C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S20486C16;
extern VTBL_ENTRY _ZTI9S20486C16[];
extern  VTBL_ENTRY _ZTV9S20486C16[];
extern Class_Descriptor cd_S20486C14;
extern VTBL_ENTRY _ZTI9S20486C14[];
extern  VTBL_ENTRY _ZTV9S20486C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C17;
extern VTBL_ENTRY _ZTI9S20486C17[];
extern  VTBL_ENTRY _ZTV9S20486C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S20486C3;
extern VTBL_ENTRY _ZTI8S20486C3[];
extern  VTBL_ENTRY _ZTV8S20486C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C18;
extern VTBL_ENTRY _ZTI9S20486C18[];
extern  VTBL_ENTRY _ZTV9S20486C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C18[];
static Base_Class bases_S20486C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(112,76), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20486C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20486C7,    ABISELECT(128,88), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(161,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(164,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20486C17,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(184,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(184,120), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20486C16,    ABISELECT(152,100), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20486C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(56,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    ABISELECT(200,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(200,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(200,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(209,137), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(212,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20486C17,    ABISELECT(200,132), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(81,49), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20486C3,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S20486C18,    ABISELECT(72,44), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20486C13[];
extern void _ZN9S20486C13D1Ev();
extern void _ZN9S20486C13D0Ev();
extern void ABISELECT(_ZThn56_N9S20486C13D1Ev,_ZThn36_N9S20486C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S20486C13D0Ev,_ZThn36_N9S20486C13D0Ev)();
extern void ABISELECT(_ZThn72_N9S20486C13D1Ev,_ZThn44_N9S20486C13D1Ev)();
extern void ABISELECT(_ZThn72_N9S20486C13D0Ev,_ZThn44_N9S20486C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev)();
extern void ABISELECT(_ZThn112_N9S20486C13D1Ev,_ZThn76_N9S20486C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev)();
extern void ABISELECT(_ZThn112_N9S20486C13D0Ev,_ZThn76_N9S20486C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20486C13D1Ev,_ZTv0_n24_N9S20486C13D1Ev)();
extern void ABISELECT(_ZThn128_N9S20486C13D1Ev,_ZThn88_N9S20486C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20486C13D0Ev,_ZTv0_n24_N9S20486C13D0Ev)();
extern void ABISELECT(_ZThn128_N9S20486C13D0Ev,_ZThn88_N9S20486C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev)();
extern void ABISELECT(_ZThn152_N9S20486C13D1Ev,_ZThn100_N9S20486C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev)();
extern void ABISELECT(_ZThn152_N9S20486C13D0Ev,_ZThn100_N9S20486C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S20486C13D1Ev,_ZTvn20_n12_N9S20486C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20486C13D0Ev,_ZTvn20_n12_N9S20486C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev)();
extern void ABISELECT(_ZThn200_N9S20486C13D1Ev,_ZThn132_N9S20486C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev)();
extern void ABISELECT(_ZThn200_N9S20486C13D0Ev,_ZThn132_N9S20486C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20486C13[] = {
  0,
  ABISELECT(200,132),
  ABISELECT(152,100),
  ABISELECT(128,88),
  ABISELECT(124,84),
  0,
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&_ZN9S20486C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C13D0Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S20486C13D1Ev,_ZThn36_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S20486C13D0Ev,_ZThn36_N9S20486C13D0Ev),
  ABISELECT(-72,-44),
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S20486C13D1Ev,_ZThn44_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S20486C13D0Ev,_ZThn44_N9S20486C13D0Ev),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev),
  ABISELECT(-128,-88),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C13D1Ev,_ZTv0_n24_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C13D0Ev,_ZTv0_n24_N9S20486C13D0Ev),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C13D1Ev,_ZTvn20_n12_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C13D0Ev,_ZTvn20_n12_N9S20486C13D0Ev),
  ABISELECT(-200,-132),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20486C13[];
extern void _ZN9S20486C14D1Ev();
extern void _ZN9S20486C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20486C14__9S20486C13[] = {
  ABISELECT(152,100),
  ABISELECT(128,88),
  ABISELECT(124,84),
  0,
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&_ZN9S20486C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C14D0Ev,
};
extern void _ZN9S20486C15D1Ev();
extern void _ZN9S20486C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20486C159S20486C14__9S20486C13[] = {
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C15[0]),
  (VTBL_ENTRY)&_ZN9S20486C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S20486C15D1Ev,_ZThn76_N9S20486C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S20486C15D0Ev,_ZThn76_N9S20486C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__9S20486C159S20486C14__9S20486C13[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20486C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev)();
extern void ABISELECT(_ZThn112_N9S20486C14D1Ev,_ZThn76_N9S20486C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev)();
extern void ABISELECT(_ZThn112_N9S20486C14D0Ev,_ZThn76_N9S20486C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__9S20486C14__9S20486C13[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20486C14D1Ev,_ZTv0_n24_N9S20486C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S20486C14D1Ev,_ZThn88_N9S20486C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20486C14D0Ev,_ZTv0_n24_N9S20486C14D0Ev)();
extern void ABISELECT(_ZThn128_N9S20486C14D0Ev,_ZThn88_N9S20486C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C7__9S20486C14__9S20486C13[] = {
  ABISELECT(-128,-88),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C14D1Ev,_ZTv0_n24_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C14D0Ev,_ZTv0_n24_N9S20486C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev)();
extern void ABISELECT(_ZThn152_N9S20486C14D1Ev,_ZThn100_N9S20486C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev)();
extern void ABISELECT(_ZThn152_N9S20486C14D0Ev,_ZThn100_N9S20486C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20486C16__9S20486C14__9S20486C13[] = {
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S20486C14D1Ev,_ZTvn20_n12_N9S20486C14D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20486C14D0Ev,_ZTvn20_n12_N9S20486C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C59S20486C16__A2__9S20486C14__9S20486C13[] = {
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C14D1Ev,_ZTvn20_n12_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C14D0Ev,_ZTvn20_n12_N9S20486C14D0Ev),
};
extern void _ZN9S20486C18D1Ev();
extern void _ZN9S20486C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20486C18__9S20486C13[] = {
  ABISELECT(-72,-44),
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C18[0]),
  (VTBL_ENTRY)&_ZN9S20486C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C18D0Ev,
};
extern void _ZN8S20486C3D1Ev();
extern void _ZN8S20486C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C39S20486C18__9S20486C13[] = {
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&_ZN8S20486C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S20486C3D1Ev,_ZThn44_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S20486C3D0Ev,_ZThn44_N8S20486C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C7__8S20486C39S20486C18__9S20486C13[] = {
  ABISELECT(-56,-44),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn32_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn32_N8S20486C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__A1__8S20486C39S20486C18__9S20486C13[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20486C18D1Ev,_ZTv0_n24_N9S20486C18D1Ev)();
extern void ABISELECT(_ZThn56_N9S20486C18D1Ev,_ZThn44_N9S20486C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20486C18D0Ev,_ZTv0_n24_N9S20486C18D0Ev)();
extern void ABISELECT(_ZThn56_N9S20486C18D0Ev,_ZThn44_N9S20486C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C7__9S20486C18__9S20486C13[] = {
  ABISELECT(-56,-44),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI9S20486C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C18D1Ev,_ZTv0_n24_N9S20486C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C18D0Ev,_ZTv0_n24_N9S20486C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20486C18D1Ev,_ZTv0_n12_N9S20486C18D1Ev)();
extern void ABISELECT(_ZThn40_N9S20486C18D1Ev,_ZThn32_N9S20486C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C18D0Ev,_ZTv0_n12_N9S20486C18D0Ev)();
extern void ABISELECT(_ZThn40_N9S20486C18D0Ev,_ZThn32_N9S20486C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__9S20486C18__9S20486C13[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S20486C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C18D1Ev,_ZTv0_n12_N9S20486C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C18D0Ev,_ZTv0_n12_N9S20486C18D0Ev),
};
extern void _ZN8S20486C7D1Ev();
extern void _ZN8S20486C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C7__9S20486C13[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&_ZN8S20486C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C5__8S20486C7__9S20486C13[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev),
};
static  VTT_ENTRY vtt_S20486C13[] = {
  {&(_ZTV9S20486C13[9]),  9,51},
  {&(_tg__ZTV9S20486C14__9S20486C13[7]),  7,9},
  {&(_tg__ZTV9S20486C159S20486C14__9S20486C13[3]),  3,5},
  {&(_tg__ZTV8S20486C5__9S20486C159S20486C14__9S20486C13[3]),  3,5},
  {&(_tg__ZTV8S20486C5__9S20486C14__9S20486C13[3]),  3,5},
  {&(_tg__ZTV8S20486C7__9S20486C14__9S20486C13[6]),  6,8},
  {&(_tg__ZTV9S20486C16__9S20486C14__9S20486C13[3]),  3,5},
  {&(_tg__ZTV8S20486C59S20486C16__A2__9S20486C14__9S20486C13[2]),  2,4},
  {&(_tg__ZTV9S20486C18__9S20486C13[7]),  7,9},
  {&(_tg__ZTV8S20486C39S20486C18__9S20486C13[6]),  6,8},
  {&(_tg__ZTV8S20486C7__8S20486C39S20486C18__9S20486C13[6]),  6,8},
  {&(_tg__ZTV8S20486C5__A1__8S20486C39S20486C18__9S20486C13[3]),  3,5},
  {&(_tg__ZTV8S20486C7__9S20486C18__9S20486C13[6]),  6,8},
  {&(_tg__ZTV8S20486C5__9S20486C18__9S20486C13[3]),  3,5},
  {&(_ZTV9S20486C13[27]),  27,51},
  {&(_ZTV9S20486C13[35]),  35,51},
  {&(_ZTV9S20486C13[40]),  40,51},
  {&(_ZTV9S20486C13[44]),  44,51},
  {&(_ZTV9S20486C13[49]),  49,51},
  {&(_ZTV9S20486C13[22]),  22,51},
  {&(_tg__ZTV8S20486C7__9S20486C13[5]),  5,7},
  {&(_tg__ZTV8S20486C5__8S20486C7__9S20486C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20486C13[];
extern  VTBL_ENTRY _ZTV9S20486C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C13[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C18D0Ev,_ZTv0_n12_N9S20486C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20486C18D0Ev,_ZThn32_N9S20486C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C18D1Ev,_ZTv0_n12_N9S20486C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20486C18D1Ev,_ZThn32_N9S20486C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C18D0Ev,_ZTv0_n24_N9S20486C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20486C18D0Ev,_ZThn44_N9S20486C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C18D1Ev,_ZTv0_n24_N9S20486C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20486C18D1Ev,_ZThn44_N9S20486C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn32_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn32_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20486C3D0Ev,_ZThn44_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20486C3D1Ev,_ZThn44_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C14D0Ev,_ZTv0_n24_N9S20486C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20486C14D0Ev,_ZThn88_N9S20486C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C14D1Ev,_ZTv0_n24_N9S20486C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20486C14D1Ev,_ZThn88_N9S20486C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20486C14D0Ev,_ZThn100_N9S20486C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C14D0Ev,_ZThn76_N9S20486C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20486C14D1Ev,_ZThn100_N9S20486C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C14D1Ev,_ZThn76_N9S20486C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C15D0Ev,_ZThn76_N9S20486C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C15D1Ev,_ZThn76_N9S20486C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C13D0Ev,_ZTv0_n24_N9S20486C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20486C13D0Ev,_ZThn88_N9S20486C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20486C13D1Ev,_ZTv0_n24_N9S20486C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20486C13D1Ev,_ZThn88_N9S20486C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20486C13D0Ev,_ZThn132_N9S20486C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20486C13D0Ev,_ZThn100_N9S20486C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C13D0Ev,_ZThn76_N9S20486C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20486C13D1Ev,_ZThn132_N9S20486C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20486C13D1Ev,_ZThn100_N9S20486C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C13D1Ev,_ZThn76_N9S20486C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20486C13 = {  "S20486C13", // class name
  bases_S20486C13, 30,
  &(vtc_S20486C13[0]), // expected_vtbl_contents
  &(vtt_S20486C13[0]), // expected_vtt_contents
  ABISELECT(232,152), // object size
  NSPAIRA(_ZTI9S20486C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20486C13),51, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20486C13),22, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20486C1  : virtual S20486C2 , S19169C11_nt , S2014C24 , virtual S20486C12 , virtual S20486C13 {
  ::S20486C3 s20486c1f0;
  virtual  ~S20486C1(); // _ZN8S20486C1D2Ev
  S20486C1(); // tgen
};
//SIG(1 S20486C1) C1{ VBC2{ VBC3{ BC4{ m} BC5{ BC4 vd FC4} VBC6{ m} VBC7{ VBC6 VBC5 VBC8{ m Fi} vd Fp FC9{}} vd} vd} BC10{ vd m} BC11{ m} VBC12{ BC5 vd} VBC13{ BC14{ BC15{ VBC5 FL} VBC6 VBC8 VBC7 VBC16{ BC17{ BC6 BC5 BC4 BC8 Fs:16 Fl} BC5 Fi} vd Fl FC15} BC5 VBC17 BC18{ VBC7 BC3 VBC4 vd FC8[6]} vd} vd FC3}


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

static void Test_S20486C1()
{
  extern Class_Descriptor cd_S20486C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,53)];
    init_test(&cd_S20486C1, buf);
    S20486C1 *dp, &lv = *(dp=new (buf) S20486C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,208), "sizeof(S20486C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20486C1)");
    /*is_ambiguous_... S20486C1::S20486C3 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C3*), ABISELECT(81,45), "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C3 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C3*), ABISELECT(72,40), "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C3 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C3*), ABISELECT(72,40), "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C3 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20486C3*), 0, "S20486C1");
    check_base_class_offset(lv, (S2014C28*)(S20486C7*), 0, "S20486C1");
    /*is_ambiguous_... S20486C14::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20486C14*)(S20486C13*), 0, "S20486C1");
    check_base_class_offset(lv, (S2014C28*)(S20486C3*)(S20486C18*)(S20486C13*), 0, "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*), ABISELECT(112,60), "S20486C1");
    check_base_class_offset(lv, (S20486C5*)(S20486C7*), ABISELECT(112,60), "S20486C1");
    check_base_class_offset(lv, (S20486C5*)(S20486C15*)(S20486C14*)(S20486C13*), ABISELECT(112,60), "S20486C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C7*), ABISELECT(124,68), "S20486C1");
    /*is_ambiguous_... S20486C14::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S20486C14*)(S20486C13*), ABISELECT(124,68), "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C3 */ AMB_check_base_class_offset(lv, (S20486C7*)(S20486C3*), ABISELECT(88,48), "S20486C1");
    check_base_class_offset(lv, (S20486C7*)(S20486C14*)(S20486C13*), ABISELECT(88,48), "S20486C1");
    check_base_class_offset(lv, (S20486C7*)(S20486C18*)(S20486C13*), ABISELECT(88,48), "S20486C1");
    check_base_class_offset(lv, (S20486C7*)(S20486C3*)(S20486C18*)(S20486C13*), ABISELECT(88,48), "S20486C1");
    check_base_class_offset(lv, (S20486C3*)(S20486C2*), ABISELECT(72,40), "S20486C1");
    check_base_class_offset(lv, (S20486C2*), ABISELECT(64,36), "S20486C1");
    check_base_class_offset(lv, (S19169C11_nt*), 0, "S20486C1");
    check_base_class_offset(lv, (S2014C24*), 0, "S20486C1");
    check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C12*), ABISELECT(128,72), "S20486C1");
    check_base_class_offset(lv, (S20486C5*)(S20486C12*), ABISELECT(128,72), "S20486C1");
    check_base_class_offset(lv, (S20486C12*), ABISELECT(128,72), "S20486C1");
    check_base_class_offset(lv, (S20486C15*)(S20486C14*)(S20486C13*), ABISELECT(144,80), "S20486C1");
    check_base_class_offset(lv, (S2014C28*)(S20486C17*)(S20486C16*), ABISELECT(256,156), "S20486C1");
    check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C17*)(S20486C16*), ABISELECT(256,156), "S20486C1");
    check_base_class_offset(lv, (S20486C5*)(S20486C17*)(S20486C16*), ABISELECT(256,156), "S20486C1");
    /*is_ambiguous_... S20486C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C17*)(S20486C16*), ABISELECT(265,161), "S20486C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S20486C17*)(S20486C16*), ABISELECT(268,164), "S20486C1");
    check_base_class_offset(lv, (S20486C17*)(S20486C16*), ABISELECT(256,156), "S20486C1");
    /*is_ambiguous_... S20486C16::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C16*), ABISELECT(288,176), "S20486C1");
    /*is_ambiguous_... S20486C16::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C16*), ABISELECT(288,176), "S20486C1");
    check_base_class_offset(lv, (S20486C16*)(S20486C14*)(S20486C13*), ABISELECT(256,156), "S20486C1");
    check_base_class_offset(lv, (S20486C14*)(S20486C13*), ABISELECT(144,80), "S20486C1");
    /*is_ambiguous_... S20486C13::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C13*), ABISELECT(200,116), "S20486C1");
    /*is_ambiguous_... S20486C13::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C13*), ABISELECT(200,116), "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C17 */ AMB_check_base_class_offset(lv, (S2014C28*)(S20486C17*), ABISELECT(304,188), "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C17 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C17*), ABISELECT(304,188), "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C17 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C17*), ABISELECT(304,188), "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C17 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C17*), ABISELECT(313,193), "S20486C1");
    /*is_ambiguous_... S20486C1::S20486C17 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S20486C17*), ABISELECT(316,196), "S20486C1");
    /*is_ambiguous_... S20486C13::S20486C17 */ AMB_check_base_class_offset(lv, (S20486C17*)(S20486C13*), ABISELECT(304,188), "S20486C1");
    /*is_ambiguous_... S20486C3::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C3*)(S20486C18*)(S20486C13*), ABISELECT(225,129), "S20486C1");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C5*)(S20486C3*)(S20486C18*)(S20486C13*), ABISELECT(216,124), "S20486C1");
    /*is_ambiguous_... S20486C3::S20486C5 */ AMB_check_base_class_offset(lv, (S20486C5*)(S20486C3*)(S20486C18*)(S20486C13*), ABISELECT(216,124), "S20486C1");
    check_base_class_offset(lv, (S20486C3*)(S20486C18*)(S20486C13*), ABISELECT(216,124), "S20486C1");
    /*is_ambiguous_... S20486C18::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S20486C18*)(S20486C13*), 0, "S20486C1");
    check_base_class_offset(lv, (S20486C18*)(S20486C13*), ABISELECT(216,124), "S20486C1");
    check_base_class_offset(lv, (S20486C13*), ABISELECT(144,80), "S20486C1");
    check_field_offset(lv, s20486c1f0, ABISELECT(8,4), "S20486C1.s20486c1f0");
    test_class_info(&lv, &cd_S20486C1);
    dp->~S20486C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20486C1(Test_S20486C1, "S20486C1", ABISELECT(336,208));

#else // __cplusplus

extern void _ZN8S20486C1C1Ev();
extern void _ZN8S20486C1D2Ev();
Name_Map name_map_S20486C1[] = {
  NSPAIR(_ZN8S20486C1C1Ev),
  NSPAIR(_ZN8S20486C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C7;
extern VTBL_ENTRY _ZTI8S20486C7[];
extern  VTBL_ENTRY _ZTV8S20486C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C7[];
extern Class_Descriptor cd_S20486C3;
extern VTBL_ENTRY _ZTI8S20486C3[];
extern  VTBL_ENTRY _ZTV8S20486C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C3[];
extern Class_Descriptor cd_S20486C2;
extern VTBL_ENTRY _ZTI8S20486C2[];
extern  VTBL_ENTRY _ZTV8S20486C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C2[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S20486C12;
extern VTBL_ENTRY _ZTI9S20486C12[];
extern  VTBL_ENTRY _ZTV9S20486C12[];
extern Class_Descriptor cd_S20486C15;
extern VTBL_ENTRY _ZTI9S20486C15[];
extern  VTBL_ENTRY _ZTV9S20486C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C15[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C17;
extern VTBL_ENTRY _ZTI9S20486C17[];
extern  VTBL_ENTRY _ZTV9S20486C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S20486C16;
extern VTBL_ENTRY _ZTI9S20486C16[];
extern  VTBL_ENTRY _ZTV9S20486C16[];
extern Class_Descriptor cd_S20486C14;
extern VTBL_ENTRY _ZTI9S20486C14[];
extern  VTBL_ENTRY _ZTV9S20486C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S20486C17;
extern VTBL_ENTRY _ZTI9S20486C17[];
extern  VTBL_ENTRY _ZTV9S20486C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C5;
extern VTBL_ENTRY _ZTI8S20486C5[];
extern  VTBL_ENTRY _ZTV8S20486C5[];
extern Class_Descriptor cd_S20486C3;
extern VTBL_ENTRY _ZTI8S20486C3[];
extern  VTBL_ENTRY _ZTV8S20486C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C3[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S20486C18;
extern VTBL_ENTRY _ZTI9S20486C18[];
extern  VTBL_ENTRY _ZTV9S20486C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C18[];
extern Class_Descriptor cd_S20486C13;
extern VTBL_ENTRY _ZTI9S20486C13[];
extern  VTBL_ENTRY _ZTV9S20486C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20486C13[];
static Base_Class bases_S20486C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(81,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(112,60), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(124,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20486C7,    ABISELECT(88,48), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20486C3,    ABISELECT(72,40), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20486C2,    ABISELECT(64,36), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20486C12,    ABISELECT(128,72), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20486C15,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(256,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(256,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(256,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(265,161), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(268,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20486C17,    ABISELECT(256,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(288,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(288,176), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20486C16,    ABISELECT(256,156), //bcp->offset
    77, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20486C14,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(200,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(200,116), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(304,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(313,193), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(316,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20486C17,    ABISELECT(304,188), //bcp->offset
    86, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(225,129), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20486C5,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20486C3,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S20486C18,    ABISELECT(216,124), //bcp->offset
    68, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20486C13,    ABISELECT(144,80), //bcp->offset
    52, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20486C1[];
extern void _ZN8S20486C1D1Ev();
extern void _ZN8S20486C1D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S20486C1D1Ev,_ZTv0_n32_N8S20486C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20486C1D1Ev,_ZThn36_N8S20486C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20486C1D0Ev,_ZTv0_n32_N8S20486C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S20486C1D0Ev,_ZThn36_N8S20486C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20486C1D1Ev,_ZTv0_n28_N8S20486C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S20486C1D1Ev,_ZThn40_N8S20486C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20486C1D0Ev,_ZTv0_n28_N8S20486C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S20486C1D0Ev,_ZThn40_N8S20486C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C1D1Ev,_ZTv0_n24_N8S20486C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S20486C1D1Ev,_ZThn48_N8S20486C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C1D0Ev,_ZTv0_n24_N8S20486C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S20486C1D0Ev,_ZThn48_N8S20486C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C1D1Ev,_ZTv0_n12_N8S20486C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S20486C1D1Ev,_ZThn60_N8S20486C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C1D0Ev,_ZTv0_n12_N8S20486C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S20486C1D0Ev,_ZThn60_N8S20486C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C1D1Ev,_ZTv0_n12_N8S20486C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20486C1D1Ev,_ZThn72_N8S20486C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C1D0Ev,_ZTv0_n12_N8S20486C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20486C1D0Ev,_ZThn72_N8S20486C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20486C1D1Ev,_ZTv0_n40_N8S20486C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20486C1D1Ev,_ZThn80_N8S20486C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20486C1D0Ev,_ZTv0_n40_N8S20486C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20486C1D0Ev,_ZThn80_N8S20486C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn56_n80_N8S20486C1D1Ev,_ZTvn36_n40_N8S20486C1D1Ev)();
extern void ABISELECT(_ZTvn56_n80_N8S20486C1D0Ev,_ZTvn36_n40_N8S20486C1D0Ev)();
extern void ABISELECT(_ZTvn72_n80_N8S20486C1D1Ev,_ZTvn44_n40_N8S20486C1D1Ev)();
extern void ABISELECT(_ZTvn72_n80_N8S20486C1D0Ev,_ZTvn44_n40_N8S20486C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20486C1D1Ev,_ZTv0_n12_N8S20486C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S20486C1D1Ev,_ZThn156_N8S20486C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C1D0Ev,_ZTv0_n12_N8S20486C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S20486C1D0Ev,_ZThn156_N8S20486C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S20486C1D1Ev,_ZTvn20_n12_N8S20486C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S20486C1D0Ev,_ZTvn20_n12_N8S20486C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20486C1D1Ev,_ZTv0_n12_N8S20486C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S20486C1D1Ev,_ZThn188_N8S20486C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C1D0Ev,_ZTv0_n12_N8S20486C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S20486C1D0Ev,_ZThn188_N8S20486C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20486C1[] = {
  0,
  ABISELECT(304,188),
  ABISELECT(256,156),
  ABISELECT(144,80),
  ABISELECT(128,72),
  ABISELECT(124,68),
  ABISELECT(112,60),
  ABISELECT(88,48),
  0,
  ABISELECT(72,40),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&_ZN8S20486C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C1D0Ev,
  ABISELECT(-64,-36),
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-64,-36),
  ABISELECT(8,4),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20486C1D1Ev,_ZTv0_n32_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20486C1D0Ev,_ZTv0_n32_N8S20486C1D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20486C1D1Ev,_ZTv0_n28_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20486C1D0Ev,_ZTv0_n28_N8S20486C1D0Ev),
  ABISELECT(-88,-48),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C1D1Ev,_ZTv0_n24_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C1D0Ev,_ZTv0_n24_N8S20486C1D0Ev),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C1D1Ev,_ZTv0_n12_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C1D0Ev,_ZTv0_n12_N8S20486C1D0Ev),
  ABISELECT(-128,-72),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C1D1Ev,_ZTv0_n12_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C1D0Ev,_ZTv0_n12_N8S20486C1D0Ev),
  ABISELECT(-144,-80),
  ABISELECT(-144,-80),
  ABISELECT(160,108),
  ABISELECT(112,76),
  ABISELECT(-56,-32),
  ABISELECT(-20,-12),
  ABISELECT(-144,-80),
  ABISELECT(-32,-20),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20486C1D1Ev,_ZTv0_n40_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20486C1D0Ev,_ZTv0_n40_N8S20486C1D0Ev),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n80_N8S20486C1D1Ev,_ZTvn36_n40_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n80_N8S20486C1D0Ev,_ZTvn36_n40_N8S20486C1D0Ev),
  ABISELECT(-216,-124),
  ABISELECT(-92,-56),
  ABISELECT(-104,-64),
  ABISELECT(-128,-76),
  ABISELECT(-216,-124),
  ABISELECT(-216,-124),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n80_N8S20486C1D1Ev,_ZTvn44_n40_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n80_N8S20486C1D0Ev,_ZTvn44_n40_N8S20486C1D0Ev),
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C1D1Ev,_ZTv0_n12_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C1D0Ev,_ZTv0_n12_N8S20486C1D0Ev),
  ABISELECT(-288,-176),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S20486C1D1Ev,_ZTvn20_n12_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S20486C1D0Ev,_ZTvn20_n12_N8S20486C1D0Ev),
  ABISELECT(-304,-188),
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S20486C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C1D1Ev,_ZTv0_n12_N8S20486C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C1D0Ev,_ZTv0_n12_N8S20486C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20486C1[];
extern void _ZN8S20486C2D1Ev();
extern void _ZN8S20486C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C2__8S20486C1[] = {
  ABISELECT(60,32),
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-64,-36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C2[0]),
  (VTBL_ENTRY)&_ZN8S20486C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C2D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S20486C2D1Ev,_ZTv0_n28_N8S20486C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20486C2D1Ev,_ZThn4_N8S20486C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20486C2D0Ev,_ZTv0_n28_N8S20486C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20486C2D0Ev,_ZThn4_N8S20486C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C3__8S20486C2__8S20486C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-72,-40),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20486C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20486C2D1Ev,_ZTv0_n28_N8S20486C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20486C2D0Ev,_ZTv0_n28_N8S20486C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20486C2D1Ev,_ZTv0_n24_N8S20486C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20486C2D1Ev,_ZThn12_N8S20486C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C2D0Ev,_ZTv0_n24_N8S20486C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20486C2D0Ev,_ZThn12_N8S20486C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C7__8S20486C2__8S20486C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20486C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C2D1Ev,_ZTv0_n24_N8S20486C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C2D0Ev,_ZTv0_n24_N8S20486C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20486C2D1Ev,_ZTv0_n12_N8S20486C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20486C2D1Ev,_ZThn24_N8S20486C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C2D0Ev,_ZTv0_n12_N8S20486C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20486C2D0Ev,_ZThn24_N8S20486C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__A1__8S20486C2__8S20486C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20486C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C2D1Ev,_ZTv0_n12_N8S20486C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C2D0Ev,_ZTv0_n12_N8S20486C2D0Ev),
};
extern void _ZN8S20486C3D1Ev();
extern void _ZN8S20486C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C3__8S20486C1[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&_ZN8S20486C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20486C3D1Ev,_ZThn8_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20486C3D0Ev,_ZThn8_N8S20486C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C7__8S20486C3__8S20486C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn20_N8S20486C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn20_N8S20486C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__A1__8S20486C3__8S20486C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev),
};
extern void _ZN8S20486C7D1Ev();
extern void _ZN8S20486C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C7__8S20486C1[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&_ZN8S20486C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20486C5__8S20486C7__8S20486C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20486C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev),
};
extern void _ZN9S20486C13D1Ev();
extern void _ZN9S20486C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20486C13__8S20486C1[] = {
  ABISELECT(-144,-80),
  ABISELECT(160,108),
  ABISELECT(112,76),
  ABISELECT(-56,-32),
  ABISELECT(-20,-12),
  ABISELECT(-144,-80),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&_ZN9S20486C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C13D0Ev,
};
extern void _ZN9S20486C14D1Ev();
extern void _ZN9S20486C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20486C149S20486C13__8S20486C1[] = {
  ABISELECT(112,76),
  ABISELECT(-56,-32),
  ABISELECT(-20,-12),
  ABISELECT(-144,-80),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&_ZN9S20486C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C14D0Ev,
};
extern void _ZN9S20486C15D1Ev();
extern void _ZN9S20486C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20486C159S20486C149S20486C13__8S20486C1[] = {
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C15[0]),
  (VTBL_ENTRY)&_ZN9S20486C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C5__9S20486C159S20486C149S20486C13__8S20486C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S20486C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C15D1Ev,_ZTv0_n12_N9S20486C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C15D0Ev,_ZTv0_n12_N9S20486C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C5__9S20486C149S20486C13__8S20486C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20486C14D1Ev,_ZTv0_n24_N9S20486C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20486C14D0Ev,_ZTv0_n24_N9S20486C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C7__9S20486C149S20486C13__8S20486C1[] = {
  ABISELECT(56,32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C14D1Ev,_ZTv0_n24_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C14D0Ev,_ZTv0_n24_N9S20486C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev)();
extern void ABISELECT(_ZThn112_N9S20486C14D1Ev,_ZThn76_N9S20486C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev)();
extern void ABISELECT(_ZThn112_N9S20486C14D0Ev,_ZThn76_N9S20486C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20486C16__9S20486C149S20486C13__8S20486C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S20486C14D1Ev,_ZTvn20_n12_N9S20486C14D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20486C14D0Ev,_ZTvn20_n12_N9S20486C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C59S20486C16__A2__9S20486C149S20486C13__8S20486C1[] = {
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S20486C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C14D1Ev,_ZTvn20_n12_N9S20486C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C14D0Ev,_ZTvn20_n12_N9S20486C14D0Ev),
};
extern void _ZN9S20486C18D1Ev();
extern void _ZN9S20486C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20486C189S20486C13__8S20486C1[] = {
  ABISELECT(-216,-124),
  ABISELECT(-92,-56),
  ABISELECT(-104,-64),
  ABISELECT(-128,-76),
  ABISELECT(-216,-124),
  0,
  (VTBL_ENTRY)&(_ZTI9S20486C18[0]),
  (VTBL_ENTRY)&_ZN9S20486C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20486C18D0Ev,
};
extern void _ZN8S20486C3D1Ev();
extern void _ZN8S20486C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20486C39S20486C189S20486C13__A1__8S20486C1[] = {
  ABISELECT(-92,-56),
  ABISELECT(-104,-64),
  ABISELECT(-128,-76),
  ABISELECT(-216,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&_ZN8S20486C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20486C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C7__8S20486C39S20486C189S20486C13__A1__8S20486C1[] = {
  ABISELECT(128,76),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C5__A1__8S20486C39S20486C189S20486C13__A1__8S20486C1[] = {
  ABISELECT(104,64),
  ABISELECT(104,64),
  (VTBL_ENTRY)&(_ZTI8S20486C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20486C18D1Ev,_ZTv0_n24_N9S20486C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20486C18D0Ev,_ZTv0_n24_N9S20486C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C7__9S20486C189S20486C13__8S20486C1[] = {
  ABISELECT(128,76),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI9S20486C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C18D1Ev,_ZTv0_n24_N9S20486C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C18D0Ev,_ZTv0_n24_N9S20486C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20486C18D1Ev,_ZTv0_n12_N9S20486C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20486C18D0Ev,_ZTv0_n12_N9S20486C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C5__9S20486C189S20486C13__8S20486C1[] = {
  ABISELECT(104,64),
  ABISELECT(104,64),
  (VTBL_ENTRY)&(_ZTI9S20486C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C18D1Ev,_ZTv0_n12_N9S20486C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C18D0Ev,_ZTv0_n12_N9S20486C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C5__9S20486C13__8S20486C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20486C13D1Ev,_ZTv0_n24_N9S20486C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20486C13D0Ev,_ZTv0_n24_N9S20486C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C7__9S20486C13__8S20486C1[] = {
  ABISELECT(56,32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-88,-48),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C13D1Ev,_ZTv0_n24_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20486C13D0Ev,_ZTv0_n24_N9S20486C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev)();
extern void ABISELECT(_ZThn112_N9S20486C13D1Ev,_ZThn76_N9S20486C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev)();
extern void ABISELECT(_ZThn112_N9S20486C13D0Ev,_ZThn76_N9S20486C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20486C16__9S20486C13__8S20486C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S20486C13D1Ev,_ZTvn20_n12_N9S20486C13D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S20486C13D0Ev,_ZTvn20_n12_N9S20486C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20486C59S20486C16__A2__9S20486C13__8S20486C1[] = {
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C13D1Ev,_ZTvn20_n12_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S20486C13D0Ev,_ZTvn20_n12_N9S20486C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev)();
extern void ABISELECT(_ZThn160_N9S20486C13D1Ev,_ZThn108_N9S20486C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev)();
extern void ABISELECT(_ZThn160_N9S20486C13D0Ev,_ZThn108_N9S20486C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20486C17__A1__9S20486C13__8S20486C1[] = {
  ABISELECT(-160,-108),
  ABISELECT(-160,-108),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev),
};
extern void ABISELECT(_ZThn72_N9S20486C13D1Ev,_ZThn44_N9S20486C13D1Ev)();
extern void ABISELECT(_ZThn72_N9S20486C13D0Ev,_ZThn44_N9S20486C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20486C18__9S20486C13__8S20486C1[] = {
  ABISELECT(-216,-124),
  ABISELECT(-92,-56),
  ABISELECT(-104,-64),
  ABISELECT(-128,-76),
  ABISELECT(-216,-124),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S20486C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S20486C13D1Ev,_ZThn44_N9S20486C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S20486C13D0Ev,_ZThn44_N9S20486C13D0Ev),
};
static  VTT_ENTRY vtt_S20486C1[] = {
  {&(_ZTV8S20486C1[13]),  13,91},
  {&(_ZTV8S20486C1[23]),  23,91},
  {&(_ZTV8S20486C1[32]),  32,91},
  {&(_ZTV8S20486C1[40]),  40,91},
  {&(_ZTV8S20486C1[45]),  45,91},
  {&(_ZTV8S20486C1[50]),  50,91},
  {&(_ZTV8S20486C1[62]),  62,91},
  {&(_ZTV8S20486C1[80]),  80,91},
  {&(_ZTV8S20486C1[84]),  84,91},
  {&(_ZTV8S20486C1[66]),  66,91},
  {&(_ZTV8S20486C1[89]),  89,91},
  {&(_ZTV8S20486C1[75]),  75,91},
  {&(_tg__ZTV8S20486C2__8S20486C1[7]),  7,9},
  {&(_tg__ZTV8S20486C3__8S20486C2__8S20486C1[7]),  7,9},
  {&(_tg__ZTV8S20486C7__8S20486C2__8S20486C1[6]),  6,8},
  {&(_tg__ZTV8S20486C5__A1__8S20486C2__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C3__8S20486C1[6]),  6,8},
  {&(_tg__ZTV8S20486C7__8S20486C3__8S20486C1[6]),  6,8},
  {&(_tg__ZTV8S20486C5__A1__8S20486C3__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C7__8S20486C1[5]),  5,7},
  {&(_tg__ZTV8S20486C5__8S20486C7__8S20486C1[3]),  3,5},
  {&(_tg__ZTV9S20486C13__8S20486C1[9]),  9,11},
  {&(_tg__ZTV9S20486C149S20486C13__8S20486C1[7]),  7,9},
  {&(_tg__ZTV9S20486C159S20486C149S20486C13__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C5__9S20486C159S20486C149S20486C13__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C5__9S20486C149S20486C13__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C7__9S20486C149S20486C13__8S20486C1[6]),  6,8},
  {&(_tg__ZTV9S20486C16__9S20486C149S20486C13__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C59S20486C16__A2__9S20486C149S20486C13__8S20486C1[2]),  2,4},
  {&(_tg__ZTV9S20486C189S20486C13__8S20486C1[7]),  7,9},
  {&(_tg__ZTV8S20486C39S20486C189S20486C13__A1__8S20486C1[6]),  6,8},
  {&(_tg__ZTV8S20486C7__8S20486C39S20486C189S20486C13__A1__8S20486C1[6]),  6,8},
  {&(_tg__ZTV8S20486C5__A1__8S20486C39S20486C189S20486C13__A1__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C7__9S20486C189S20486C13__8S20486C1[6]),  6,8},
  {&(_tg__ZTV8S20486C5__9S20486C189S20486C13__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C5__9S20486C13__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C7__9S20486C13__8S20486C1[6]),  6,8},
  {&(_tg__ZTV9S20486C16__9S20486C13__8S20486C1[3]),  3,5},
  {&(_tg__ZTV8S20486C59S20486C16__A2__9S20486C13__8S20486C1[2]),  2,4},
  {&(_tg__ZTV9S20486C17__A1__9S20486C13__8S20486C1[3]),  3,5},
  {&(_tg__ZTV9S20486C18__9S20486C13__8S20486C1[7]),  7,9},
};
extern VTBL_ENTRY _ZTI8S20486C1[];
extern  VTBL_ENTRY _ZTV8S20486C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20486C1[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C13D0Ev,_ZTv0_n12_N9S20486C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20486C13D0Ev,_ZThn108_N9S20486C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C13D0Ev,_ZThn76_N9S20486C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C13D1Ev,_ZTv0_n12_N9S20486C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20486C13D1Ev,_ZThn108_N9S20486C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C13D1Ev,_ZThn76_N9S20486C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C14D0Ev,_ZTv0_n12_N9S20486C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C14D0Ev,_ZThn76_N9S20486C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20486C14D1Ev,_ZTv0_n12_N9S20486C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20486C14D1Ev,_ZThn76_N9S20486C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D0Ev,_ZTv0_n12_N8S20486C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D0Ev,_ZThn12_N8S20486C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C7D1Ev,_ZTv0_n12_N8S20486C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C7D1Ev,_ZThn12_N8S20486C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D0Ev,_ZTv0_n12_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D0Ev,_ZThn20_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C3D1Ev,_ZTv0_n12_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20486C3D1Ev,_ZThn20_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D0Ev,_ZTv0_n24_N8S20486C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20486C3D0Ev,_ZThn8_N8S20486C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C3D1Ev,_ZTv0_n24_N8S20486C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20486C3D1Ev,_ZThn8_N8S20486C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C2D0Ev,_ZTv0_n12_N8S20486C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20486C2D0Ev,_ZThn24_N8S20486C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C2D1Ev,_ZTv0_n12_N8S20486C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20486C2D1Ev,_ZThn24_N8S20486C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C2D0Ev,_ZTv0_n24_N8S20486C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C2D0Ev,_ZThn12_N8S20486C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C2D1Ev,_ZTv0_n24_N8S20486C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20486C2D1Ev,_ZThn12_N8S20486C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20486C2D0Ev,_ZTv0_n28_N8S20486C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20486C2D0Ev,_ZThn4_N8S20486C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20486C2D1Ev,_ZTv0_n28_N8S20486C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20486C2D1Ev,_ZThn4_N8S20486C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20486C1D0Ev,_ZTv0_n40_N8S20486C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20486C1D0Ev,_ZThn80_N8S20486C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20486C1D1Ev,_ZTv0_n40_N8S20486C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20486C1D1Ev,_ZThn80_N8S20486C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C1D0Ev,_ZTv0_n12_N8S20486C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20486C1D0Ev,_ZThn188_N8S20486C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20486C1D0Ev,_ZThn156_N8S20486C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20486C1D0Ev,_ZThn72_N8S20486C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20486C1D0Ev,_ZThn60_N8S20486C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20486C1D1Ev,_ZTv0_n12_N8S20486C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20486C1D1Ev,_ZThn188_N8S20486C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20486C1D1Ev,_ZThn156_N8S20486C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20486C1D1Ev,_ZThn72_N8S20486C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20486C1D1Ev,_ZThn60_N8S20486C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C1D0Ev,_ZTv0_n24_N8S20486C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20486C1D0Ev,_ZThn48_N8S20486C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20486C1D1Ev,_ZTv0_n24_N8S20486C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20486C1D1Ev,_ZThn48_N8S20486C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20486C1D0Ev,_ZTv0_n28_N8S20486C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20486C1D0Ev,_ZThn40_N8S20486C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20486C1D1Ev,_ZTv0_n28_N8S20486C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20486C1D1Ev,_ZThn40_N8S20486C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20486C1D0Ev,_ZTv0_n32_N8S20486C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20486C1D0Ev,_ZThn36_N8S20486C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20486C1D1Ev,_ZTv0_n32_N8S20486C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20486C1D1Ev,_ZThn36_N8S20486C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20486C1 = {  "S20486C1", // class name
  bases_S20486C1, 41,
  &(vtc_S20486C1[0]), // expected_vtbl_contents
  &(vtt_S20486C1[0]), // expected_vtt_contents
  ABISELECT(336,208), // object size
  NSPAIRA(_ZTI8S20486C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20486C1),91, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20486C1),41, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19238C2  : S2014C38 {
  ::S2014C38 s19238c2f0;
  virtual  ~S19238C2(); // _ZN8S19238C2D1Ev
  S19238C2(); // tgen
};
//SIG(-1 S19238C2) C1{ BC2{ m} vd FC2}


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

static void Test_S19238C2()
{
  extern Class_Descriptor cd_S19238C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19238C2, buf);
    S19238C2 *dp, &lv = *(dp=new (buf) S19238C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19238C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C2)");
    check_base_class_offset(lv, (S2014C38*), 0, "S19238C2");
    check_field_offset(lv, s19238c2f0, ABISELECT(8,4), "S19238C2.s19238c2f0");
    test_class_info(&lv, &cd_S19238C2);
    dp->~S19238C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C2(Test_S19238C2, "S19238C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19238C2C1Ev();
extern void _ZN8S19238C2D1Ev();
Name_Map name_map_S19238C2[] = {
  NSPAIR(_ZN8S19238C2C1Ev),
  NSPAIR(_ZN8S19238C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S19238C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19238C2[];
extern void _ZN8S19238C2D1Ev();
extern void _ZN8S19238C2D0Ev();
static  VTBL_ENTRY vtc_S19238C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19238C2[0]),
  (VTBL_ENTRY)&_ZN8S19238C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19238C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
Class_Descriptor cd_S19238C2 = {  "S19238C2", // class name
  bases_S19238C2, 1,
  &(vtc_S19238C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19238C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19238C2),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  S19238C5_nt  : virtual S2014C28 {
  ~S19238C5_nt(); // tgen
  S19238C5_nt(); // tgen
};
//SIG(-1 S19238C5_nt) C1{ VBC2{ m}}


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

//skip512 S19238C5_nt

#else // __cplusplus

extern void _ZN11S19238C5_ntC1Ev();
extern void _ZN11S19238C5_ntD1Ev();
Name_Map name_map_S19238C5_nt[] = {
  NSPAIR(_ZN11S19238C5_ntC1Ev),
  NSPAIR(_ZN11S19238C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
static Base_Class bases_S19238C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI11S19238C5_nt[];
static  VTBL_ENTRY vtc_S19238C5_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19238C5_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19238C5_nt[];
static  VTT_ENTRY vtt_S19238C5_nt[] = {
  {&(_ZTV11S19238C5_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S19238C5_nt[];
VTBL_ENTRY *P__ZTI11S19238C5_nt = _ZTI11S19238C5_nt; 
extern  VTBL_ENTRY _ZTV11S19238C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19238C5_nt[];
Class_Descriptor cd_S19238C5_nt = {  "S19238C5_nt", // class name
  bases_S19238C5_nt, 1,
  &(vtc_S19238C5_nt[0]), // expected_vtbl_contents
  &(vtt_S19238C5_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19238C5_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S19238C5_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19238C5_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19238C8  : S2014C28 , S19238C2 , S2014C38 , S3222C8_nt {
  short s19238c8f0:16;
  __tsi64 s19238c8f1;
  ~S19238C8(); // tgen
  S19238C8(); // tgen
};
//SIG(-1 S19238C8) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 FL}


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

static void Test_S19238C8()
{
  extern Class_Descriptor cd_S19238C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19238C8, buf);
    S19238C8 *dp, &lv = *(dp=new (buf) S19238C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19238C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C8)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19238C8");
    check_base_class_offset(lv, (S2014C38*)(S19238C2*), 0, "S19238C8");
    check_base_class_offset(lv, (S19238C2*), 0, "S19238C8");
    /*is_ambiguous_... S19238C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S19238C8");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S19238C8");
    set_bf_and_test(lv, s19238c8f0, ABISELECT(16,12), 0, 16, 1, "S19238C8");
    set_bf_and_test(lv, s19238c8f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S19238C8");
    check_field_offset(lv, s19238c8f1, ABISELECT(24,16), "S19238C8.s19238c8f1");
    test_class_info(&lv, &cd_S19238C8);
    dp->~S19238C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C8(Test_S19238C8, "S19238C8", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S19238C8C1Ev();
extern void _ZN8S19238C8D1Ev();
Name_Map name_map_S19238C8[] = {
  NSPAIR(_ZN8S19238C8C1Ev),
  NSPAIR(_ZN8S19238C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19238C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19238C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19238C8[];
extern void _ZN8S19238C8D1Ev();
extern void _ZN8S19238C8D0Ev();
static  VTBL_ENTRY vtc_S19238C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19238C8[0]),
  (VTBL_ENTRY)&_ZN8S19238C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19238C8D0Ev,
};
extern VTBL_ENTRY _ZTI8S19238C8[];
extern  VTBL_ENTRY _ZTV8S19238C8[];
Class_Descriptor cd_S19238C8 = {  "S19238C8", // class name
  bases_S19238C8, 5,
  &(vtc_S19238C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S19238C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19238C8),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  S19238C7  : S19238C8 , S19238C2 {
  int s19238c7f0;
  ~S19238C7(); // tgen
  S19238C7(); // tgen
};
//SIG(-1 S19238C7) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 FL} BC4 Fi}


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

static void Test_S19238C7()
{
  extern Class_Descriptor cd_S19238C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S19238C7, buf);
    S19238C7 *dp, &lv = *(dp=new (buf) S19238C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S19238C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C7)");
    check_base_class_offset(lv, (S2014C28*)(S19238C8*), 0, "S19238C7");
    check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C8*), 0, "S19238C7");
    check_base_class_offset(lv, (S19238C2*)(S19238C8*), 0, "S19238C7");
    /*is_ambiguous_... S19238C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C8*), ABISELECT(9,5), "S19238C7");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C8*), ABISELECT(12,8), "S19238C7");
    check_base_class_offset(lv, (S19238C8*), 0, "S19238C7");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*), ABISELECT(32,24), "S19238C7");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*), ABISELECT(32,24), "S19238C7");
    check_field_offset(lv, s19238c7f0, ABISELECT(44,32), "S19238C7.s19238c7f0");
    test_class_info(&lv, &cd_S19238C7);
    dp->~S19238C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C7(Test_S19238C7, "S19238C7", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN8S19238C7C1Ev();
extern void _ZN8S19238C7D1Ev();
Name_Map name_map_S19238C7[] = {
  NSPAIR(_ZN8S19238C7C1Ev),
  NSPAIR(_ZN8S19238C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C8;
extern VTBL_ENTRY _ZTI8S19238C8[];
extern  VTBL_ENTRY _ZTV8S19238C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
static Base_Class bases_S19238C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19238C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S19238C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(32,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19238C7[];
extern void _ZN8S19238C7D1Ev();
extern void _ZN8S19238C7D0Ev();
extern void ABISELECT(_ZThn32_N8S19238C7D1Ev,_ZThn24_N8S19238C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19238C7D0Ev,_ZThn24_N8S19238C7D0Ev)();
static  VTBL_ENTRY vtc_S19238C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19238C7[0]),
  (VTBL_ENTRY)&_ZN8S19238C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19238C7D0Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19238C7D1Ev,_ZThn24_N8S19238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19238C7D0Ev,_ZThn24_N8S19238C7D0Ev),
};
extern VTBL_ENTRY _ZTI8S19238C7[];
extern  VTBL_ENTRY _ZTV8S19238C7[];
Class_Descriptor cd_S19238C7 = {  "S19238C7", // class name
  bases_S19238C7, 8,
  &(vtc_S19238C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI8S19238C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19238C7),8, //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  S19238C4  : virtual S19238C5_nt , S19238C7 {
  int s19238c4f0;
  virtual  ~S19238C4(); // _ZN8S19238C4D2Ev
  virtual void  v1(); // _ZN8S19238C42v1Ev
  S19238C4(); // tgen
};
//SIG(-1 S19238C4) C1{ VBC2{ VBC3{ m}} BC4{ BC5{ BC3 BC6{ BC7{ m} vd FC7} BC7 BC8{ m Fi} Fs:16 FL} BC6 Fi} vd v1 Fi}


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

static void Test_S19238C4()
{
  extern Class_Descriptor cd_S19238C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S19238C4, buf);
    S19238C4 *dp, &lv = *(dp=new (buf) S19238C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S19238C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C4)");
    check_base_class_offset(lv, (S2014C28*)(S19238C5_nt*), ABISELECT(64,44), "S19238C4");
    check_base_class_offset(lv, (S19238C5_nt*), ABISELECT(56,40), "S19238C4");
    check_base_class_offset(lv, (S2014C28*)(S19238C8*)(S19238C7*), 0, "S19238C4");
    check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C8*)(S19238C7*), 0, "S19238C4");
    check_base_class_offset(lv, (S19238C2*)(S19238C8*)(S19238C7*), 0, "S19238C4");
    /*is_ambiguous_... S19238C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C8*)(S19238C7*), ABISELECT(9,5), "S19238C4");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C8*)(S19238C7*), ABISELECT(12,8), "S19238C4");
    check_base_class_offset(lv, (S19238C8*)(S19238C7*), 0, "S19238C4");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C7*), ABISELECT(32,24), "S19238C4");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C7*), ABISELECT(32,24), "S19238C4");
    check_base_class_offset(lv, (S19238C7*), 0, "S19238C4");
    check_field_offset(lv, s19238c4f0, ABISELECT(48,36), "S19238C4.s19238c4f0");
    test_class_info(&lv, &cd_S19238C4);
    dp->~S19238C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C4(Test_S19238C4, "S19238C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S19238C4C1Ev();
extern void _ZN8S19238C4D2Ev();
Name_Map name_map_S19238C4[] = {
  NSPAIR(_ZN8S19238C4C1Ev),
  NSPAIR(_ZN8S19238C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19238C5_nt;
extern VTBL_ENTRY _ZTI11S19238C5_nt[];
extern  VTBL_ENTRY _ZTV11S19238C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19238C5_nt[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C8;
extern VTBL_ENTRY _ZTI8S19238C8[];
extern  VTBL_ENTRY _ZTV8S19238C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C7;
extern VTBL_ENTRY _ZTI8S19238C7[];
extern  VTBL_ENTRY _ZTV8S19238C7[];
static Base_Class bases_S19238C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19238C5_nt,    ABISELECT(56,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19238C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    7, //immediately_derived
  0, 0},
  {&cd_S19238C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(32,24), //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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19238C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19238C4[];
extern void _ZN8S19238C4D1Ev();
extern void _ZN8S19238C4D0Ev();
extern void _ZN8S19238C42v1Ev();
extern void ABISELECT(_ZThn32_N8S19238C4D1Ev,_ZThn24_N8S19238C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19238C4D0Ev,_ZThn24_N8S19238C4D0Ev)();
static  VTBL_ENTRY vtc_S19238C4[] = {
  ABISELECT(64,44),
  ABISELECT(56,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19238C4[0]),
  (VTBL_ENTRY)&_ZN8S19238C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19238C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19238C42v1Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19238C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19238C4D1Ev,_ZThn24_N8S19238C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19238C4D0Ev,_ZThn24_N8S19238C4D0Ev),
  ABISELECT(8,4),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19238C4[0]),
};
extern VTBL_ENTRY _ZTV8S19238C4[];
static  VTBL_ENTRY _tg__ZTV11S19238C5_nt__8S19238C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19238C5_nt[0]),
};
static  VTT_ENTRY vtt_S19238C4[] = {
  {&(_ZTV8S19238C4[4]),  4,14},
  {&(_ZTV8S19238C4[14]),  14,14},
  {&(_tg__ZTV11S19238C5_nt__8S19238C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19238C4[];
extern  VTBL_ENTRY _ZTV8S19238C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19238C4[];
Class_Descriptor cd_S19238C4 = {  "S19238C4", // class name
  bases_S19238C4, 11,
  &(vtc_S19238C4[0]), // expected_vtbl_contents
  &(vtt_S19238C4[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S19238C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19238C4),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19238C4),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19238C13  : virtual S19238C2 {
  __tsi64 s19238c13f0;
  ~S19238C13(); // tgen
  S19238C13(); // tgen
};
//SIG(-1 S19238C13) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S19238C13()
{
  extern Class_Descriptor cd_S19238C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19238C13, buf);
    S19238C13 *dp, &lv = *(dp=new (buf) S19238C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19238C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C13)");
    check_base_class_offset(lv, (S2014C38*)(S19238C2*), ABISELECT(16,12), "S19238C13");
    check_base_class_offset(lv, (S19238C2*), ABISELECT(16,12), "S19238C13");
    check_field_offset(lv, s19238c13f0, ABISELECT(8,4), "S19238C13.s19238c13f0");
    test_class_info(&lv, &cd_S19238C13);
    dp->~S19238C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C13(Test_S19238C13, "S19238C13", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19238C13C1Ev();
extern void _ZN9S19238C13D1Ev();
Name_Map name_map_S19238C13[] = {
  NSPAIR(_ZN9S19238C13C1Ev),
  NSPAIR(_ZN9S19238C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
static Base_Class bases_S19238C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19238C13[];
extern void _ZN9S19238C13D1Ev();
extern void _ZN9S19238C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19238C13D1Ev,_ZThn12_N9S19238C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19238C13D0Ev,_ZThn12_N9S19238C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19238C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C13[0]),
  (VTBL_ENTRY)&_ZN9S19238C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C13D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19238C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19238C13[];
static  VTT_ENTRY vtt_S19238C13[] = {
  {&(_ZTV9S19238C13[3]),  3,10},
  {&(_ZTV9S19238C13[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19238C13[];
extern  VTBL_ENTRY _ZTV9S19238C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C13[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19238C13D0Ev,_ZThn12_N9S19238C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19238C13D1Ev,_ZThn12_N9S19238C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19238C13 = {  "S19238C13", // class name
  bases_S19238C13, 2,
  &(vtc_S19238C13[0]), // expected_vtbl_contents
  &(vtt_S19238C13[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19238C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19238C13),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19238C13),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19238C14  : virtual S2014C28 , virtual S19238C2 , virtual S3222C8_nt {
  void *s19238c14f0;
  ::S19762C18_nt s19238c14f1;
  virtual  ~S19238C14(); // _ZN9S19238C14D2Ev
  S19238C14(); // tgen
};
//SIG(-1 S19238C14) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S19238C14()
{
  extern Class_Descriptor cd_S19238C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19238C14, buf);
    S19238C14 *dp, &lv = *(dp=new (buf) S19238C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19238C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C14)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19238C14");
    check_base_class_offset(lv, (S2014C38*)(S19238C2*), ABISELECT(24,12), "S19238C14");
    check_base_class_offset(lv, (S19238C2*), ABISELECT(24,12), "S19238C14");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S19238C14");
    check_field_offset(lv, s19238c14f0, ABISELECT(8,4), "S19238C14.s19238c14f0");
    check_field_offset(lv, s19238c14f1, ABISELECT(16,8), "S19238C14.s19238c14f1");
    test_class_info(&lv, &cd_S19238C14);
    dp->~S19238C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C14(Test_S19238C14, "S19238C14", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19238C14C1Ev();
extern void _ZN9S19238C14D2Ev();
Name_Map name_map_S19238C14[] = {
  NSPAIR(_ZN9S19238C14C1Ev),
  NSPAIR(_ZN9S19238C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19238C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19238C14[];
extern void _ZN9S19238C14D1Ev();
extern void _ZN9S19238C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19238C14D1Ev,_ZThn12_N9S19238C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19238C14D0Ev,_ZThn12_N9S19238C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19238C14[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&_ZN9S19238C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C14D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19238C14[];
static  VTT_ENTRY vtt_S19238C14[] = {
  {&(_ZTV9S19238C14[5]),  5,12},
  {&(_ZTV9S19238C14[10]),  10,12},
};
extern VTBL_ENTRY _ZTI9S19238C14[];
extern  VTBL_ENTRY _ZTV9S19238C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C14[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19238C14D0Ev,_ZThn12_N9S19238C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19238C14D1Ev,_ZThn12_N9S19238C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19238C14 = {  "S19238C14", // class name
  bases_S19238C14, 4,
  &(vtc_S19238C14[0]), // expected_vtbl_contents
  &(vtt_S19238C14[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19238C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19238C14),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19238C14),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19238C12  : S19238C13 , virtual S2014C28 , virtual S3222C8_nt , virtual S19238C14 , virtual S19238C7 {
  long s19238c12f0;
  ::S19238C13 s19238c12f1;
  virtual  ~S19238C12(); // _ZN9S19238C12D2Ev
  S19238C12(); // tgen
};
//SIG(-1 S19238C12) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 FL} BC3 Fi} vd Fl FC2}


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

static void Test_S19238C12()
{
  extern Class_Descriptor cd_S19238C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S19238C12, buf);
    S19238C12 *dp, &lv = *(dp=new (buf) S19238C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S19238C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C12)");
    /*is_ambiguous_... S19238C12::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*), ABISELECT(56,36), "S19238C12");
    check_base_class_offset(lv, (S19238C2*)(S19238C13*), ABISELECT(56,36), "S19238C12");
    check_base_class_offset(lv, (S19238C2*)(S19238C14*), ABISELECT(56,36), "S19238C12");
    check_base_class_offset(lv, (S19238C13*), 0, "S19238C12");
    /*is_ambiguous_... S19238C12::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), 0, "S19238C12");
    check_base_class_offset(lv, (S2014C28*)(S19238C14*), 0, "S19238C12");
    /*is_ambiguous_... S19238C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S19238C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C14*), ABISELECT(68,44), "S19238C12");
    check_base_class_offset(lv, (S19238C14*), ABISELECT(72,48), "S19238C12");
    check_base_class_offset(lv, (S2014C28*)(S19238C8*)(S19238C7*), ABISELECT(96,60), "S19238C12");
    check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C8*)(S19238C7*), ABISELECT(96,60), "S19238C12");
    check_base_class_offset(lv, (S19238C2*)(S19238C8*)(S19238C7*), ABISELECT(96,60), "S19238C12");
    /*is_ambiguous_... S19238C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C8*)(S19238C7*), ABISELECT(105,65), "S19238C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C8*)(S19238C7*), ABISELECT(108,68), "S19238C12");
    check_base_class_offset(lv, (S19238C8*)(S19238C7*), ABISELECT(96,60), "S19238C12");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C7*), ABISELECT(128,84), "S19238C12");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C7*), ABISELECT(128,84), "S19238C12");
    check_base_class_offset(lv, (S19238C7*), ABISELECT(96,60), "S19238C12");
    check_field_offset(lv, s19238c12f0, ABISELECT(16,12), "S19238C12.s19238c12f0");
    check_field_offset(lv, s19238c12f1, ABISELECT(24,16), "S19238C12.s19238c12f1");
    test_class_info(&lv, &cd_S19238C12);
    dp->~S19238C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C12(Test_S19238C12, "S19238C12", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN9S19238C12C1Ev();
extern void _ZN9S19238C12D2Ev();
Name_Map name_map_S19238C12[] = {
  NSPAIR(_ZN9S19238C12C1Ev),
  NSPAIR(_ZN9S19238C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C13;
extern VTBL_ENTRY _ZTI9S19238C13[];
extern  VTBL_ENTRY _ZTV9S19238C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C13[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C14;
extern VTBL_ENTRY _ZTI9S19238C14[];
extern  VTBL_ENTRY _ZTV9S19238C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C14[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C8;
extern VTBL_ENTRY _ZTI8S19238C8[];
extern  VTBL_ENTRY _ZTV8S19238C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C7;
extern VTBL_ENTRY _ZTI8S19238C7[];
extern  VTBL_ENTRY _ZTV8S19238C7[];
static Base_Class bases_S19238C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19238C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19238C14,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19238C8,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(128,84), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19238C7,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19238C12[];
extern void _ZN9S19238C12D1Ev();
extern void _ZN9S19238C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19238C12D1Ev,_ZThn36_N9S19238C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19238C12D0Ev,_ZThn36_N9S19238C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C12D1Ev,_ZTv0_n24_N9S19238C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S19238C12D1Ev,_ZThn48_N9S19238C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C12D0Ev,_ZTv0_n24_N9S19238C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S19238C12D0Ev,_ZThn48_N9S19238C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev)();
extern void ABISELECT(_ZThn96_N9S19238C12D1Ev,_ZThn60_N9S19238C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev)();
extern void ABISELECT(_ZThn96_N9S19238C12D0Ev,_ZThn60_N9S19238C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S19238C12D1Ev,_ZTvn24_n12_N9S19238C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19238C12D0Ev,_ZTvn24_n12_N9S19238C12D0Ev)();
static  VTBL_ENTRY vtc_S19238C12[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&_ZN9S19238C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C12D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C12D1Ev,_ZTv0_n24_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C12D0Ev,_ZTv0_n24_N9S19238C12D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C12D1Ev,_ZTvn24_n12_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C12D0Ev,_ZTvn24_n12_N9S19238C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19238C12[];
extern void _ZN9S19238C13D1Ev();
extern void _ZN9S19238C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C13__9S19238C12[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C13[0]),
  (VTBL_ENTRY)&_ZN9S19238C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S19238C13D1Ev,_ZThn36_N9S19238C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S19238C13D0Ev,_ZThn36_N9S19238C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C13__9S19238C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19238C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev),
};
extern void _ZN9S19238C14D1Ev();
extern void _ZN9S19238C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C12[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&_ZN9S19238C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C14__9S19238C12[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev),
};
static  VTT_ENTRY vtt_S19238C12[] = {
  {&(_ZTV9S19238C12[7]),  7,31},
  {&(_tg__ZTV9S19238C13__9S19238C12[3]),  3,5},
  {&(_tg__ZTV8S19238C2__9S19238C13__9S19238C12[3]),  3,5},
  {&(_ZTV9S19238C12[12]),  12,31},
  {&(_ZTV9S19238C12[20]),  20,31},
  {&(_ZTV9S19238C12[25]),  25,31},
  {&(_ZTV9S19238C12[29]),  29,31},
  {&(_tg__ZTV9S19238C14__9S19238C12[5]),  5,7},
  {&(_tg__ZTV8S19238C2__9S19238C14__9S19238C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19238C12[];
extern  VTBL_ENTRY _ZTV9S19238C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C12[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19238C13D0Ev,_ZThn36_N9S19238C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19238C13D1Ev,_ZThn36_N9S19238C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C12D0Ev,_ZTv0_n24_N9S19238C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19238C12D0Ev,_ZThn48_N9S19238C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C12D1Ev,_ZTv0_n24_N9S19238C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19238C12D1Ev,_ZThn48_N9S19238C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19238C12D0Ev,_ZThn60_N9S19238C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19238C12D0Ev,_ZThn36_N9S19238C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19238C12D1Ev,_ZThn60_N9S19238C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19238C12D1Ev,_ZThn36_N9S19238C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19238C12 = {  "S19238C12", // class name
  bases_S19238C12, 15,
  &(vtc_S19238C12[0]), // expected_vtbl_contents
  &(vtt_S19238C12[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI9S19238C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19238C12),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19238C12),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19238C17  : S2014C38 , S19238C2 , virtual S2014C28 , virtual S19238C14 {
  virtual  ~S19238C17(); // _ZN9S19238C17D2Ev
  S19238C17(); // tgen
};
//SIG(-1 S19238C17) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S19238C17()
{
  extern Class_Descriptor cd_S19238C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S19238C17, buf);
    S19238C17 *dp, &lv = *(dp=new (buf) S19238C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S19238C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C17)");
    /*is_ambiguous_... S19238C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S19238C17");
    /*is_ambiguous_... S19238C17::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*), 0, "S19238C17");
    /*is_ambiguous_... S19238C17::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*), 0, "S19238C17");
    check_base_class_offset(lv, (S2014C28*), 0, "S19238C17");
    check_base_class_offset(lv, (S2014C28*)(S19238C14*), 0, "S19238C17");
    /*is_ambiguous_... S19238C17::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*), ABISELECT(40,20), "S19238C17");
    check_base_class_offset(lv, (S19238C2*)(S19238C14*), ABISELECT(40,20), "S19238C17");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C14*), ABISELECT(52,28), "S19238C17");
    check_base_class_offset(lv, (S19238C14*), ABISELECT(16,8), "S19238C17");
    test_class_info(&lv, &cd_S19238C17);
    dp->~S19238C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C17(Test_S19238C17, "S19238C17", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN9S19238C17C1Ev();
extern void _ZN9S19238C17D2Ev();
Name_Map name_map_S19238C17[] = {
  NSPAIR(_ZN9S19238C17C1Ev),
  NSPAIR(_ZN9S19238C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C14;
extern VTBL_ENTRY _ZTI9S19238C14[];
extern  VTBL_ENTRY _ZTV9S19238C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C14[];
static Base_Class bases_S19238C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19238C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19238C14,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19238C17[];
extern void _ZN9S19238C17D1Ev();
extern void _ZN9S19238C17D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19238C17D1Ev,_ZThn8_N9S19238C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19238C17D0Ev,_ZThn8_N9S19238C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19238C17D1Ev,_ZThn20_N9S19238C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19238C17D0Ev,_ZThn20_N9S19238C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19238C17[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&_ZN9S19238C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C17D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19238C17[];
extern void _ZN9S19238C14D1Ev();
extern void _ZN9S19238C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C17[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&_ZN9S19238C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19238C14D1Ev,_ZThn12_N9S19238C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19238C14D0Ev,_ZThn12_N9S19238C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C14__9S19238C17[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev),
};
static  VTT_ENTRY vtt_S19238C17[] = {
  {&(_ZTV9S19238C17[6]),  6,21},
  {&(_ZTV9S19238C17[14]),  14,21},
  {&(_ZTV9S19238C17[19]),  19,21},
  {&(_tg__ZTV9S19238C14__9S19238C17[5]),  5,7},
  {&(_tg__ZTV8S19238C2__9S19238C14__9S19238C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19238C17[];
extern  VTBL_ENTRY _ZTV9S19238C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C17[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19238C14D0Ev,_ZThn12_N9S19238C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19238C14D1Ev,_ZThn12_N9S19238C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C17D0Ev,_ZThn20_N9S19238C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C17D1Ev,_ZThn20_N9S19238C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19238C17D0Ev,_ZThn8_N9S19238C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19238C17D1Ev,_ZThn8_N9S19238C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19238C17 = {  "S19238C17", // class name
  bases_S19238C17, 8,
  &(vtc_S19238C17[0]), // expected_vtbl_contents
  &(vtt_S19238C17[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI9S19238C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19238C17),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19238C17),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19238C16  : virtual S19238C14 , S19238C17 , virtual S2014C38 {
  ::S3222C8_nt s19238c16f0[6];
  virtual  ~S19238C16(); // _ZN9S19238C16D2Ev
  S19238C16(); // tgen
};
//SIG(-1 S19238C16) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S19238C16()
{
  extern Class_Descriptor cd_S19238C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S19238C16, buf);
    S19238C16 *dp, &lv = *(dp=new (buf) S19238C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S19238C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C16)");
    check_base_class_offset(lv, (S2014C28*)(S19238C14*), 0, "S19238C16");
    check_base_class_offset(lv, (S2014C28*)(S19238C17*), 0, "S19238C16");
    /*is_ambiguous_... S19238C16::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*), ABISELECT(64,44), "S19238C16");
    check_base_class_offset(lv, (S19238C2*)(S19238C14*), ABISELECT(64,44), "S19238C16");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C14*), ABISELECT(76,52), "S19238C16");
    check_base_class_offset(lv, (S19238C14*), ABISELECT(40,32), "S19238C16");
    check_base_class_offset(lv, (S19238C14*)(S19238C17*), ABISELECT(40,32), "S19238C16");
    /*is_ambiguous_... S19238C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C17*), ABISELECT(9,5), "S19238C16");
    /*is_ambiguous_... S19238C17::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C17*), 0, "S19238C16");
    /*is_ambiguous_... S19238C17::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C17*), 0, "S19238C16");
    check_base_class_offset(lv, (S19238C17*), 0, "S19238C16");
    /*is_ambiguous_... S19238C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(80,56), "S19238C16");
    check_field_offset(lv, s19238c16f0, ABISELECT(12,8), "S19238C16.s19238c16f0");
    test_class_info(&lv, &cd_S19238C16);
    dp->~S19238C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C16(Test_S19238C16, "S19238C16", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN9S19238C16C1Ev();
extern void _ZN9S19238C16D2Ev();
Name_Map name_map_S19238C16[] = {
  NSPAIR(_ZN9S19238C16C1Ev),
  NSPAIR(_ZN9S19238C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C14;
extern VTBL_ENTRY _ZTI9S19238C14[];
extern  VTBL_ENTRY _ZTV9S19238C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C17;
extern VTBL_ENTRY _ZTI9S19238C17[];
extern  VTBL_ENTRY _ZTV9S19238C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S19238C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19238C14,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19238C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19238C17,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19238C16[];
extern void _ZN9S19238C16D1Ev();
extern void _ZN9S19238C16D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19238C16D1Ev,_ZTv0_n24_N9S19238C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19238C16D1Ev,_ZThn32_N9S19238C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C16D0Ev,_ZTv0_n24_N9S19238C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19238C16D0Ev,_ZThn32_N9S19238C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C16D1Ev,_ZTv0_n12_N9S19238C16D1Ev)();
extern void ABISELECT(_ZThn64_N9S19238C16D1Ev,_ZThn44_N9S19238C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C16D0Ev,_ZTv0_n12_N9S19238C16D0Ev)();
extern void ABISELECT(_ZThn64_N9S19238C16D0Ev,_ZThn44_N9S19238C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19238C16[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C16[0]),
  (VTBL_ENTRY)&_ZN9S19238C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C16D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19238C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C16D1Ev,_ZTv0_n24_N9S19238C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C16D0Ev,_ZTv0_n24_N9S19238C16D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19238C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C16D1Ev,_ZTv0_n12_N9S19238C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C16D0Ev,_ZTv0_n12_N9S19238C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19238C16[];
extern void _ZN9S19238C17D1Ev();
extern void _ZN9S19238C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C17__9S19238C16[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&_ZN9S19238C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C17D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19238C17D1Ev,_ZThn32_N9S19238C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19238C17D0Ev,_ZThn32_N9S19238C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C17__9S19238C16[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev)();
extern void ABISELECT(_ZThn64_N9S19238C17D1Ev,_ZThn44_N9S19238C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev)();
extern void ABISELECT(_ZThn64_N9S19238C17D0Ev,_ZThn44_N9S19238C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__A1__9S19238C17__9S19238C16[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev),
};
extern void _ZN9S19238C14D1Ev();
extern void _ZN9S19238C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C16[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&_ZN9S19238C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19238C14D1Ev,_ZThn12_N9S19238C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19238C14D0Ev,_ZThn12_N9S19238C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C14__9S19238C16[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev),
};
static  VTT_ENTRY vtt_S19238C16[] = {
  {&(_ZTV9S19238C16[7]),  7,22},
  {&(_tg__ZTV9S19238C17__9S19238C16[6]),  6,8},
  {&(_tg__ZTV9S19238C14__9S19238C17__9S19238C16[6]),  6,8},
  {&(_tg__ZTV8S19238C2__A1__9S19238C17__9S19238C16[3]),  3,5},
  {&(_ZTV9S19238C16[15]),  15,22},
  {&(_ZTV9S19238C16[20]),  20,22},
  {&(_tg__ZTV9S19238C14__9S19238C16[5]),  5,7},
  {&(_tg__ZTV8S19238C2__9S19238C14__9S19238C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19238C16[];
extern  VTBL_ENTRY _ZTV9S19238C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C16[];
static VTBL_ENTRY alt_thunk_names109[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19238C14D0Ev,_ZThn12_N9S19238C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19238C14D1Ev,_ZThn12_N9S19238C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19238C17D0Ev,_ZThn44_N9S19238C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19238C17D1Ev,_ZThn44_N9S19238C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C17D0Ev,_ZThn32_N9S19238C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C17D1Ev,_ZThn32_N9S19238C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C16D0Ev,_ZTv0_n12_N9S19238C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19238C16D0Ev,_ZThn44_N9S19238C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C16D1Ev,_ZTv0_n12_N9S19238C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19238C16D1Ev,_ZThn44_N9S19238C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C16D0Ev,_ZTv0_n24_N9S19238C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C16D0Ev,_ZThn32_N9S19238C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C16D1Ev,_ZTv0_n24_N9S19238C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C16D1Ev,_ZThn32_N9S19238C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19238C16 = {  "S19238C16", // class name
  bases_S19238C16, 10,
  &(vtc_S19238C16[0]), // expected_vtbl_contents
  &(vtt_S19238C16[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI9S19238C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19238C16),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19238C16),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names109,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19238C11  : S19238C12 , S19238C2 , virtual S19238C8 , S19238C16 {
  virtual  ~S19238C11(); // _ZN9S19238C11D2Ev
  S19238C11(); // tgen
};
//SIG(-1 S19238C11) C1{ BC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 FL} BC4 Fi} vd Fl FC3} BC4 VBC11 BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} vd}


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

static void Test_S19238C11()
{
  extern Class_Descriptor cd_S19238C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,41)];
    init_test(&cd_S19238C11, buf);
    S19238C11 *dp, &lv = *(dp=new (buf) S19238C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,160), "sizeof(S19238C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C11)");
    /*is_ambiguous_... S19238C11::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*), ABISELECT(112,76), "S19238C11");
    check_base_class_offset(lv, (S19238C2*)(S19238C13*)(S19238C12*), ABISELECT(112,76), "S19238C11");
    check_base_class_offset(lv, (S19238C2*)(S19238C14*), ABISELECT(112,76), "S19238C11");
    check_base_class_offset(lv, (S19238C13*)(S19238C12*), 0, "S19238C11");
    /*is_ambiguous_... S19238C12::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19238C12*), 0, "S19238C11");
    check_base_class_offset(lv, (S2014C28*)(S19238C14*), 0, "S19238C11");
    check_base_class_offset(lv, (S2014C28*)(S19238C17*)(S19238C16*), 0, "S19238C11");
    /*is_ambiguous_... S19238C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19238C12*), ABISELECT(124,84), "S19238C11");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C14*), ABISELECT(124,84), "S19238C11");
    check_base_class_offset(lv, (S19238C14*)(S19238C12*), ABISELECT(128,88), "S19238C11");
    check_base_class_offset(lv, (S19238C14*)(S19238C16*), ABISELECT(128,88), "S19238C11");
    check_base_class_offset(lv, (S19238C14*)(S19238C17*)(S19238C16*), ABISELECT(128,88), "S19238C11");
    check_base_class_offset(lv, (S2014C28*)(S19238C8*)(S19238C7*), ABISELECT(152,100), "S19238C11");
    check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C8*)(S19238C7*), ABISELECT(152,100), "S19238C11");
    check_base_class_offset(lv, (S19238C2*)(S19238C8*)(S19238C7*), ABISELECT(152,100), "S19238C11");
    /*is_ambiguous_... S19238C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C8*)(S19238C7*), ABISELECT(161,105), "S19238C11");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C8*)(S19238C7*), ABISELECT(164,108), "S19238C11");
    check_base_class_offset(lv, (S19238C8*)(S19238C7*), ABISELECT(152,100), "S19238C11");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C7*), ABISELECT(184,124), "S19238C11");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C7*), ABISELECT(184,124), "S19238C11");
    check_base_class_offset(lv, (S19238C7*)(S19238C12*), ABISELECT(152,100), "S19238C11");
    check_base_class_offset(lv, (S19238C12*), 0, "S19238C11");
    /*is_ambiguous_... S19238C11::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*), ABISELECT(56,36), "S19238C11");
    /*is_ambiguous_... S19238C11::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*), ABISELECT(56,36), "S19238C11");
    /*is_ambiguous_... S19238C11::S19238C8 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19238C8*), ABISELECT(200,136), "S19238C11");
    /*is_ambiguous_... S19238C11::S19238C8 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C8*), ABISELECT(200,136), "S19238C11");
    /*is_ambiguous_... S19238C11::S19238C8 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C8*), ABISELECT(200,136), "S19238C11");
    /*is_ambiguous_... S19238C11::S19238C8 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C8*), ABISELECT(209,141), "S19238C11");
    /*is_ambiguous_... S19238C11::S19238C8 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19238C8*), ABISELECT(212,144), "S19238C11");
    /*is_ambiguous_... S19238C11::S19238C8 */ AMB_check_base_class_offset(lv, (S19238C8*), ABISELECT(200,136), "S19238C11");
    /*is_ambiguous_... S19238C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C17*)(S19238C16*), ABISELECT(81,49), "S19238C11");
    /*is_ambiguous_... S19238C17::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C17*)(S19238C16*), ABISELECT(72,44), "S19238C11");
    /*is_ambiguous_... S19238C17::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C17*)(S19238C16*), ABISELECT(72,44), "S19238C11");
    check_base_class_offset(lv, (S19238C17*)(S19238C16*), ABISELECT(72,44), "S19238C11");
    /*is_ambiguous_... S19238C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C16*), 0, "S19238C11");
    check_base_class_offset(lv, (S19238C16*), ABISELECT(72,44), "S19238C11");
    test_class_info(&lv, &cd_S19238C11);
    dp->~S19238C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C11(Test_S19238C11, "S19238C11", ABISELECT(232,160));

#else // __cplusplus

extern void _ZN9S19238C11C1Ev();
extern void _ZN9S19238C11D2Ev();
Name_Map name_map_S19238C11[] = {
  NSPAIR(_ZN9S19238C11C1Ev),
  NSPAIR(_ZN9S19238C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C13;
extern VTBL_ENTRY _ZTI9S19238C13[];
extern  VTBL_ENTRY _ZTV9S19238C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C13[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C14;
extern VTBL_ENTRY _ZTI9S19238C14[];
extern  VTBL_ENTRY _ZTV9S19238C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C14[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C8;
extern VTBL_ENTRY _ZTI8S19238C8[];
extern  VTBL_ENTRY _ZTV8S19238C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C7;
extern VTBL_ENTRY _ZTI8S19238C7[];
extern  VTBL_ENTRY _ZTV8S19238C7[];
extern Class_Descriptor cd_S19238C12;
extern VTBL_ENTRY _ZTI9S19238C12[];
extern  VTBL_ENTRY _ZTV9S19238C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C12[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C8;
extern VTBL_ENTRY _ZTI8S19238C8[];
extern  VTBL_ENTRY _ZTV8S19238C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C17;
extern VTBL_ENTRY _ZTI9S19238C17[];
extern  VTBL_ENTRY _ZTV9S19238C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C16;
extern VTBL_ENTRY _ZTI9S19238C16[];
extern  VTBL_ENTRY _ZTV9S19238C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C16[];
static Base_Class bases_S19238C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(112,76), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19238C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19238C14,    ABISELECT(128,88), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(161,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(164,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19238C8,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(184,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(184,124), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19238C7,    ABISELECT(152,100), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19238C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(56,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    ABISELECT(200,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(200,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(200,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(209,141), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(212,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19238C8,    ABISELECT(200,136), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(81,49), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19238C17,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19238C16,    ABISELECT(72,44), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19238C11[];
extern void _ZN9S19238C11D1Ev();
extern void _ZN9S19238C11D0Ev();
extern void ABISELECT(_ZThn56_N9S19238C11D1Ev,_ZThn36_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S19238C11D0Ev,_ZThn36_N9S19238C11D0Ev)();
extern void ABISELECT(_ZThn72_N9S19238C11D1Ev,_ZThn44_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn72_N9S19238C11D0Ev,_ZThn44_N9S19238C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn112_N9S19238C11D1Ev,_ZThn76_N9S19238C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev)();
extern void ABISELECT(_ZThn112_N9S19238C11D0Ev,_ZThn76_N9S19238C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C11D1Ev,_ZTv0_n24_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn128_N9S19238C11D1Ev,_ZThn88_N9S19238C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C11D0Ev,_ZTv0_n24_N9S19238C11D0Ev)();
extern void ABISELECT(_ZThn128_N9S19238C11D0Ev,_ZThn88_N9S19238C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn152_N9S19238C11D1Ev,_ZThn100_N9S19238C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev)();
extern void ABISELECT(_ZThn152_N9S19238C11D0Ev,_ZThn100_N9S19238C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S19238C11D1Ev,_ZTvn24_n12_N9S19238C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19238C11D0Ev,_ZTvn24_n12_N9S19238C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn200_N9S19238C11D1Ev,_ZThn136_N9S19238C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev)();
extern void ABISELECT(_ZThn200_N9S19238C11D0Ev,_ZThn136_N9S19238C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19238C11[] = {
  0,
  ABISELECT(200,136),
  ABISELECT(152,100),
  ABISELECT(128,88),
  ABISELECT(124,84),
  0,
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&_ZN9S19238C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C11D0Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19238C11D1Ev,_ZThn36_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19238C11D0Ev,_ZThn36_N9S19238C11D0Ev),
  ABISELECT(-72,-44),
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19238C11D1Ev,_ZThn44_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19238C11D0Ev,_ZThn44_N9S19238C11D0Ev),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev),
  ABISELECT(-128,-88),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C11D1Ev,_ZTv0_n24_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C11D0Ev,_ZTv0_n24_N9S19238C11D0Ev),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev),
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C11D1Ev,_ZTvn24_n12_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C11D0Ev,_ZTvn24_n12_N9S19238C11D0Ev),
  ABISELECT(-200,-136),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19238C11[];
extern void _ZN9S19238C12D1Ev();
extern void _ZN9S19238C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C12__9S19238C11[] = {
  ABISELECT(152,100),
  ABISELECT(128,88),
  ABISELECT(124,84),
  0,
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&_ZN9S19238C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C12D0Ev,
};
extern void _ZN9S19238C13D1Ev();
extern void _ZN9S19238C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C139S19238C12__9S19238C11[] = {
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C13[0]),
  (VTBL_ENTRY)&_ZN9S19238C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev)();
extern void ABISELECT(_ZThn112_N9S19238C13D1Ev,_ZThn76_N9S19238C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev)();
extern void ABISELECT(_ZThn112_N9S19238C13D0Ev,_ZThn76_N9S19238C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C139S19238C12__9S19238C11[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19238C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19238C12D1Ev,_ZThn76_N9S19238C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19238C12D0Ev,_ZThn76_N9S19238C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C12__9S19238C11[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19238C12D1Ev,_ZTv0_n24_N9S19238C12D1Ev)();
extern void ABISELECT(_ZThn128_N9S19238C12D1Ev,_ZThn88_N9S19238C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C12D0Ev,_ZTv0_n24_N9S19238C12D0Ev)();
extern void ABISELECT(_ZThn128_N9S19238C12D0Ev,_ZThn88_N9S19238C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C12__9S19238C11[] = {
  ABISELECT(-128,-88),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C12D1Ev,_ZTv0_n24_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C12D0Ev,_ZTv0_n24_N9S19238C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev)();
extern void ABISELECT(_ZThn152_N9S19238C12D1Ev,_ZThn100_N9S19238C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev)();
extern void ABISELECT(_ZThn152_N9S19238C12D0Ev,_ZThn100_N9S19238C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C7__9S19238C12__9S19238C11[] = {
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19238C12D1Ev,_ZTvn24_n12_N9S19238C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19238C12D0Ev,_ZTvn24_n12_N9S19238C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19238C28S19238C7__A2__9S19238C12__9S19238C11[] = {
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C12D1Ev,_ZTvn24_n12_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C12D0Ev,_ZTvn24_n12_N9S19238C12D0Ev),
};
extern void _ZN9S19238C16D1Ev();
extern void _ZN9S19238C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C16__9S19238C11[] = {
  ABISELECT(-72,-44),
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C16[0]),
  (VTBL_ENTRY)&_ZN9S19238C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C16D0Ev,
};
extern void _ZN9S19238C17D1Ev();
extern void _ZN9S19238C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C179S19238C16__9S19238C11[] = {
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&_ZN9S19238C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C17D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev)();
extern void ABISELECT(_ZThn56_N9S19238C17D1Ev,_ZThn44_N9S19238C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev)();
extern void ABISELECT(_ZThn56_N9S19238C17D0Ev,_ZThn44_N9S19238C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C179S19238C16__9S19238C11[] = {
  ABISELECT(-56,-44),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19238C17D1Ev,_ZThn32_N9S19238C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19238C17D0Ev,_ZThn32_N9S19238C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__A1__9S19238C179S19238C16__9S19238C11[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19238C16D1Ev,_ZTv0_n24_N9S19238C16D1Ev)();
extern void ABISELECT(_ZThn56_N9S19238C16D1Ev,_ZThn44_N9S19238C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C16D0Ev,_ZTv0_n24_N9S19238C16D0Ev)();
extern void ABISELECT(_ZThn56_N9S19238C16D0Ev,_ZThn44_N9S19238C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C16__9S19238C11[] = {
  ABISELECT(-56,-44),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI9S19238C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C16D1Ev,_ZTv0_n24_N9S19238C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C16D0Ev,_ZTv0_n24_N9S19238C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C16D1Ev,_ZTv0_n12_N9S19238C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19238C16D1Ev,_ZThn32_N9S19238C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C16D0Ev,_ZTv0_n12_N9S19238C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19238C16D0Ev,_ZThn32_N9S19238C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C16__9S19238C11[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19238C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C16D1Ev,_ZTv0_n12_N9S19238C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C16D0Ev,_ZTv0_n12_N9S19238C16D0Ev),
};
extern void _ZN9S19238C14D1Ev();
extern void _ZN9S19238C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C11[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&_ZN9S19238C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C14__9S19238C11[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev),
};
static  VTT_ENTRY vtt_S19238C11[] = {
  {&(_ZTV9S19238C11[9]),  9,51},
  {&(_tg__ZTV9S19238C12__9S19238C11[7]),  7,9},
  {&(_tg__ZTV9S19238C139S19238C12__9S19238C11[3]),  3,5},
  {&(_tg__ZTV8S19238C2__9S19238C139S19238C12__9S19238C11[3]),  3,5},
  {&(_tg__ZTV8S19238C2__9S19238C12__9S19238C11[3]),  3,5},
  {&(_tg__ZTV9S19238C14__9S19238C12__9S19238C11[6]),  6,8},
  {&(_tg__ZTV8S19238C7__9S19238C12__9S19238C11[3]),  3,5},
  {&(_tg__ZTV8S19238C28S19238C7__A2__9S19238C12__9S19238C11[2]),  2,4},
  {&(_tg__ZTV9S19238C16__9S19238C11[7]),  7,9},
  {&(_tg__ZTV9S19238C179S19238C16__9S19238C11[6]),  6,8},
  {&(_tg__ZTV9S19238C14__9S19238C179S19238C16__9S19238C11[6]),  6,8},
  {&(_tg__ZTV8S19238C2__A1__9S19238C179S19238C16__9S19238C11[3]),  3,5},
  {&(_tg__ZTV9S19238C14__9S19238C16__9S19238C11[6]),  6,8},
  {&(_tg__ZTV8S19238C2__9S19238C16__9S19238C11[3]),  3,5},
  {&(_ZTV9S19238C11[27]),  27,51},
  {&(_ZTV9S19238C11[35]),  35,51},
  {&(_ZTV9S19238C11[40]),  40,51},
  {&(_ZTV9S19238C11[44]),  44,51},
  {&(_ZTV9S19238C11[49]),  49,51},
  {&(_ZTV9S19238C11[22]),  22,51},
  {&(_tg__ZTV9S19238C14__9S19238C11[5]),  5,7},
  {&(_tg__ZTV8S19238C2__9S19238C14__9S19238C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19238C11[];
extern  VTBL_ENTRY _ZTV9S19238C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C11[];
static VTBL_ENTRY alt_thunk_names110[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C16D0Ev,_ZTv0_n12_N9S19238C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C16D0Ev,_ZThn32_N9S19238C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C16D1Ev,_ZTv0_n12_N9S19238C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C16D1Ev,_ZThn32_N9S19238C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C16D0Ev,_ZTv0_n24_N9S19238C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19238C16D0Ev,_ZThn44_N9S19238C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C16D1Ev,_ZTv0_n24_N9S19238C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19238C16D1Ev,_ZThn44_N9S19238C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C17D0Ev,_ZThn32_N9S19238C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C17D1Ev,_ZThn32_N9S19238C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19238C17D0Ev,_ZThn44_N9S19238C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19238C17D1Ev,_ZThn44_N9S19238C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C12D0Ev,_ZTv0_n24_N9S19238C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19238C12D0Ev,_ZThn88_N9S19238C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C12D1Ev,_ZTv0_n24_N9S19238C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19238C12D1Ev,_ZThn88_N9S19238C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19238C12D0Ev,_ZThn100_N9S19238C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C12D0Ev,_ZThn76_N9S19238C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19238C12D1Ev,_ZThn100_N9S19238C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C12D1Ev,_ZThn76_N9S19238C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C13D0Ev,_ZThn76_N9S19238C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C13D1Ev,_ZThn76_N9S19238C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C11D0Ev,_ZTv0_n24_N9S19238C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19238C11D0Ev,_ZThn88_N9S19238C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C11D1Ev,_ZTv0_n24_N9S19238C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19238C11D1Ev,_ZThn88_N9S19238C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19238C11D0Ev,_ZThn136_N9S19238C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19238C11D0Ev,_ZThn100_N9S19238C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C11D0Ev,_ZThn76_N9S19238C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19238C11D1Ev,_ZThn136_N9S19238C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19238C11D1Ev,_ZThn100_N9S19238C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C11D1Ev,_ZThn76_N9S19238C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19238C11 = {  "S19238C11", // class name
  bases_S19238C11, 30,
  &(vtc_S19238C11[0]), // expected_vtbl_contents
  &(vtt_S19238C11[0]), // expected_vtt_contents
  ABISELECT(232,160), // object size
  NSPAIRA(_ZTI9S19238C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19238C11),51, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19238C11),22, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names110,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19238C1  : virtual S19238C2 , S19238C4 , virtual S2014C24 , S19238C11 {
  ~S19238C1(); // tgen
  S19238C1(); // tgen
};
//SIG(1 S19238C1) C1{ VBC2{ BC3{ m} vd FC3} BC4{ VBC5{ VBC6{ m}} BC7{ BC8{ BC6 BC2 BC3 BC9{ m Fi} Fs:16 FL} BC2 Fi} vd v1 Fi} VBC10{ m} BC11{ BC12{ BC13{ VBC2 FL} VBC6 VBC9 VBC14{ VBC6 VBC2 VBC9 vd Fp FC15{}} VBC7 vd Fl FC13} BC2 VBC8 BC16{ VBC14 BC17{ BC3 BC2 VBC6 VBC14 vd} VBC3 vd FC9[6]} vd}}


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

static void Test_S19238C1()
{
  extern Class_Descriptor cd_S19238C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,53)];
    init_test(&cd_S19238C1, buf);
    S19238C1 *dp, &lv = *(dp=new (buf) S19238C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,208), "sizeof(S19238C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19238C1)");
    /*is_ambiguous_... S19238C1::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*), ABISELECT(168,116), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*), ABISELECT(168,116), "S19238C1");
    check_base_class_offset(lv, (S19238C2*)(S19238C13*)(S19238C12*)(S19238C11*), ABISELECT(168,116), "S19238C1");
    check_base_class_offset(lv, (S19238C2*)(S19238C14*), ABISELECT(168,116), "S19238C1");
    check_base_class_offset(lv, (S2014C28*)(S19238C5_nt*), ABISELECT(192,128), "S19238C1");
    /*is_ambiguous_... S19238C12::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19238C12*)(S19238C11*), ABISELECT(192,128), "S19238C1");
    check_base_class_offset(lv, (S2014C28*)(S19238C14*), ABISELECT(192,128), "S19238C1");
    check_base_class_offset(lv, (S2014C28*)(S19238C17*)(S19238C16*)(S19238C11*), ABISELECT(192,128), "S19238C1");
    check_base_class_offset(lv, (S19238C5_nt*)(S19238C4*), ABISELECT(184,124), "S19238C1");
    check_base_class_offset(lv, (S2014C28*)(S19238C8*)(S19238C7*)(S19238C4*), 0, "S19238C1");
    check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C8*)(S19238C7*)(S19238C4*), 0, "S19238C1");
    check_base_class_offset(lv, (S19238C2*)(S19238C8*)(S19238C7*)(S19238C4*), 0, "S19238C1");
    /*is_ambiguous_... S19238C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C8*)(S19238C7*)(S19238C4*), ABISELECT(9,5), "S19238C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C8*)(S19238C7*)(S19238C4*), ABISELECT(12,8), "S19238C1");
    check_base_class_offset(lv, (S19238C8*)(S19238C7*)(S19238C4*), 0, "S19238C1");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C7*)(S19238C4*), ABISELECT(32,24), "S19238C1");
    /*is_ambiguous_... S19238C7::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C7*)(S19238C4*), ABISELECT(32,24), "S19238C1");
    check_base_class_offset(lv, (S19238C7*)(S19238C4*), 0, "S19238C1");
    check_base_class_offset(lv, (S19238C4*), 0, "S19238C1");
    check_base_class_offset(lv, (S2014C24*), 0, "S19238C1");
    check_base_class_offset(lv, (S19238C13*)(S19238C12*)(S19238C11*), ABISELECT(56,40), "S19238C1");
    /*is_ambiguous_... S19238C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19238C12*)(S19238C11*), ABISELECT(192,128), "S19238C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19238C14*), ABISELECT(192,128), "S19238C1");
    check_base_class_offset(lv, (S19238C14*)(S19238C12*)(S19238C11*), ABISELECT(200,132), "S19238C1");
    check_base_class_offset(lv, (S19238C14*)(S19238C16*)(S19238C11*), ABISELECT(200,132), "S19238C1");
    check_base_class_offset(lv, (S19238C14*)(S19238C17*)(S19238C16*)(S19238C11*), ABISELECT(200,132), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19238C8*)(S19238C7*), ABISELECT(224,144), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C7 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C8*)(S19238C7*), ABISELECT(224,144), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C7 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C8*)(S19238C7*), ABISELECT(224,144), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C7 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C8*)(S19238C7*), ABISELECT(233,149), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19238C8*)(S19238C7*), ABISELECT(236,152), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C7 */ AMB_check_base_class_offset(lv, (S19238C8*)(S19238C7*), ABISELECT(224,144), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C7 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C7*), ABISELECT(256,168), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C7 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C7*), ABISELECT(256,168), "S19238C1");
    check_base_class_offset(lv, (S19238C7*)(S19238C12*)(S19238C11*), ABISELECT(224,144), "S19238C1");
    check_base_class_offset(lv, (S19238C12*)(S19238C11*), ABISELECT(56,40), "S19238C1");
    /*is_ambiguous_... S19238C11::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C11*), ABISELECT(112,76), "S19238C1");
    /*is_ambiguous_... S19238C11::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C11*), ABISELECT(112,76), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C8 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19238C8*), ABISELECT(272,180), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C8 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C8*), ABISELECT(272,180), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C8 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C8*), ABISELECT(272,180), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C8 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C8*), ABISELECT(281,185), "S19238C1");
    /*is_ambiguous_... S19238C1::S19238C8 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19238C8*), ABISELECT(284,188), "S19238C1");
    /*is_ambiguous_... S19238C11::S19238C8 */ AMB_check_base_class_offset(lv, (S19238C8*)(S19238C11*), ABISELECT(272,180), "S19238C1");
    /*is_ambiguous_... S19238C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C17*)(S19238C16*)(S19238C11*), ABISELECT(137,89), "S19238C1");
    /*is_ambiguous_... S19238C17::S19238C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C2*)(S19238C17*)(S19238C16*)(S19238C11*), ABISELECT(128,84), "S19238C1");
    /*is_ambiguous_... S19238C17::S19238C2 */ AMB_check_base_class_offset(lv, (S19238C2*)(S19238C17*)(S19238C16*)(S19238C11*), ABISELECT(128,84), "S19238C1");
    check_base_class_offset(lv, (S19238C17*)(S19238C16*)(S19238C11*), ABISELECT(128,84), "S19238C1");
    /*is_ambiguous_... S19238C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19238C16*)(S19238C11*), ABISELECT(304,204), "S19238C1");
    check_base_class_offset(lv, (S19238C16*)(S19238C11*), ABISELECT(128,84), "S19238C1");
    check_base_class_offset(lv, (S19238C11*), ABISELECT(56,40), "S19238C1");
    test_class_info(&lv, &cd_S19238C1);
    dp->~S19238C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19238C1(Test_S19238C1, "S19238C1", ABISELECT(312,208));

#else // __cplusplus

extern void _ZN8S19238C1C1Ev();
extern void _ZN8S19238C1D1Ev();
Name_Map name_map_S19238C1[] = {
  NSPAIR(_ZN8S19238C1C1Ev),
  NSPAIR(_ZN8S19238C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19238C5_nt;
extern VTBL_ENTRY _ZTI11S19238C5_nt[];
extern  VTBL_ENTRY _ZTV11S19238C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19238C5_nt[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C8;
extern VTBL_ENTRY _ZTI8S19238C8[];
extern  VTBL_ENTRY _ZTV8S19238C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C7;
extern VTBL_ENTRY _ZTI8S19238C7[];
extern  VTBL_ENTRY _ZTV8S19238C7[];
extern Class_Descriptor cd_S19238C4;
extern VTBL_ENTRY _ZTI8S19238C4[];
extern  VTBL_ENTRY _ZTV8S19238C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19238C4[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S19238C13;
extern VTBL_ENTRY _ZTI9S19238C13[];
extern  VTBL_ENTRY _ZTV9S19238C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C13[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C14;
extern VTBL_ENTRY _ZTI9S19238C14[];
extern  VTBL_ENTRY _ZTV9S19238C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C14[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C8;
extern VTBL_ENTRY _ZTI8S19238C8[];
extern  VTBL_ENTRY _ZTV8S19238C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C7;
extern VTBL_ENTRY _ZTI8S19238C7[];
extern  VTBL_ENTRY _ZTV8S19238C7[];
extern Class_Descriptor cd_S19238C12;
extern VTBL_ENTRY _ZTI9S19238C12[];
extern  VTBL_ENTRY _ZTV9S19238C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C12[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19238C8;
extern VTBL_ENTRY _ZTI8S19238C8[];
extern  VTBL_ENTRY _ZTV8S19238C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C2;
extern VTBL_ENTRY _ZTI8S19238C2[];
extern  VTBL_ENTRY _ZTV8S19238C2[];
extern Class_Descriptor cd_S19238C17;
extern VTBL_ENTRY _ZTI9S19238C17[];
extern  VTBL_ENTRY _ZTV9S19238C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19238C16;
extern VTBL_ENTRY _ZTI9S19238C16[];
extern  VTBL_ENTRY _ZTV9S19238C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C16[];
extern Class_Descriptor cd_S19238C11;
extern VTBL_ENTRY _ZTI9S19238C11[];
extern  VTBL_ENTRY _ZTV9S19238C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19238C11[];
static Base_Class bases_S19238C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(168,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(168,116), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19238C5_nt,    ABISELECT(184,124), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19238C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    9, //immediately_derived
  0, 0},
  {&cd_S19238C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(32,24), //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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19238C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19238C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19238C13,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19238C14,    ABISELECT(200,132), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(233,149), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(236,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19238C8,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(256,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(256,168), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19238C7,    ABISELECT(224,144), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S19238C12,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(112,76), //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
    17, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(272,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(272,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(272,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(281,185), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(284,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19238C8,    ABISELECT(272,180), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(137,89), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19238C2,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19238C17,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S19238C16,    ABISELECT(128,84), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19238C11,    ABISELECT(56,40), //bcp->offset
    18, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19238C1[];
extern void _ZN8S19238C1D1Ev();
extern void _ZN8S19238C1D0Ev();
extern void _ZN8S19238C42v1Ev();
extern void ABISELECT(_ZThn32_N8S19238C1D1Ev,_ZThn24_N8S19238C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19238C1D0Ev,_ZThn24_N8S19238C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19238C1D1Ev,_ZThn40_N8S19238C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19238C1D0Ev,_ZThn40_N8S19238C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S19238C1D1Ev,_ZThn76_N8S19238C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19238C1D0Ev,_ZThn76_N8S19238C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19238C1D1Ev,_ZThn84_N8S19238C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19238C1D0Ev,_ZThn84_N8S19238C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19238C1D1Ev,_ZTv0_n12_N8S19238C1D1Ev)();
extern void ABISELECT(_ZThn168_N8S19238C1D1Ev,_ZThn116_N8S19238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19238C1D0Ev,_ZTv0_n12_N8S19238C1D0Ev)();
extern void ABISELECT(_ZThn168_N8S19238C1D0Ev,_ZThn116_N8S19238C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19238C1D1Ev,_ZTv0_n24_N8S19238C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S19238C1D1Ev,_ZThn132_N8S19238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19238C1D0Ev,_ZTv0_n24_N8S19238C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S19238C1D0Ev,_ZThn132_N8S19238C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19238C1D1Ev,_ZTv0_n12_N8S19238C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19238C1D1Ev,_ZThn144_N8S19238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19238C1D0Ev,_ZTv0_n12_N8S19238C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19238C1D0Ev,_ZThn144_N8S19238C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19238C1D1Ev,_ZTvn24_n12_N8S19238C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19238C1D0Ev,_ZTvn24_n12_N8S19238C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19238C1D1Ev,_ZTv0_n12_N8S19238C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S19238C1D1Ev,_ZThn180_N8S19238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19238C1D0Ev,_ZTv0_n12_N8S19238C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S19238C1D0Ev,_ZThn180_N8S19238C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19238C1[] = {
  ABISELECT(304,204),
  ABISELECT(272,180),
  ABISELECT(224,144),
  ABISELECT(200,132),
  ABISELECT(192,128),
  0,
  ABISELECT(168,116),
  ABISELECT(192,128),
  ABISELECT(184,124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&_ZN8S19238C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19238C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19238C42v1Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19238C1D1Ev,_ZThn24_N8S19238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19238C1D0Ev,_ZThn24_N8S19238C1D0Ev),
  ABISELECT(248,164),
  ABISELECT(216,140),
  ABISELECT(168,104),
  ABISELECT(144,92),
  ABISELECT(136,88),
  ABISELECT(136,88),
  ABISELECT(112,76),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19238C1D1Ev,_ZThn40_N8S19238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19238C1D0Ev,_ZThn40_N8S19238C1D0Ev),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19238C1D1Ev,_ZThn76_N8S19238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19238C1D0Ev,_ZThn76_N8S19238C1D0Ev),
  ABISELECT(176,120),
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(72,48),
  ABISELECT(64,44),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19238C1D1Ev,_ZThn84_N8S19238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19238C1D0Ev,_ZThn84_N8S19238C1D0Ev),
  ABISELECT(-168,-116),
  ABISELECT(-168,-116),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19238C1D1Ev,_ZTv0_n12_N8S19238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19238C1D0Ev,_ZTv0_n12_N8S19238C1D0Ev),
  ABISELECT(8,4),
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  ABISELECT(-200,-132),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19238C1D1Ev,_ZTv0_n24_N8S19238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19238C1D0Ev,_ZTv0_n24_N8S19238C1D0Ev),
  ABISELECT(-224,-144),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19238C1D1Ev,_ZTv0_n12_N8S19238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19238C1D0Ev,_ZTv0_n12_N8S19238C1D0Ev),
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19238C1D1Ev,_ZTvn24_n12_N8S19238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19238C1D0Ev,_ZTvn24_n12_N8S19238C1D0Ev),
  ABISELECT(-272,-180),
  ABISELECT(-272,-180),
  (VTBL_ENTRY)&(_ZTI8S19238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19238C1D1Ev,_ZTv0_n12_N8S19238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19238C1D0Ev,_ZTv0_n12_N8S19238C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19238C1[];
extern void _ZN8S19238C4D1Ev();
extern void _ZN8S19238C4D0Ev();
extern void _ZN8S19238C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19238C4__8S19238C1[] = {
  ABISELECT(192,128),
  ABISELECT(184,124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19238C4[0]),
  (VTBL_ENTRY)&_ZN8S19238C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19238C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19238C42v1Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19238C5_nt__8S19238C4__8S19238C1[] = {
  ABISELECT(8,4),
  ABISELECT(-184,-124),
  (VTBL_ENTRY)&(_ZTI8S19238C4[0]),
};
extern void _ZN9S19238C11D1Ev();
extern void _ZN9S19238C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C11__8S19238C1[] = {
  ABISELECT(248,164),
  ABISELECT(216,140),
  ABISELECT(168,104),
  ABISELECT(144,92),
  ABISELECT(136,88),
  ABISELECT(136,88),
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&_ZN9S19238C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C11D0Ev,
};
extern void _ZN9S19238C12D1Ev();
extern void _ZN9S19238C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C129S19238C11__8S19238C1[] = {
  ABISELECT(168,104),
  ABISELECT(144,92),
  ABISELECT(136,88),
  ABISELECT(136,88),
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&_ZN9S19238C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C12D0Ev,
};
extern void _ZN9S19238C13D1Ev();
extern void _ZN9S19238C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C139S19238C129S19238C11__8S19238C1[] = {
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C13[0]),
  (VTBL_ENTRY)&_ZN9S19238C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev)();
extern void ABISELECT(_ZThn112_N9S19238C13D1Ev,_ZThn76_N9S19238C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev)();
extern void ABISELECT(_ZThn112_N9S19238C13D0Ev,_ZThn76_N9S19238C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C139S19238C129S19238C11__8S19238C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19238C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19238C12D1Ev,_ZThn76_N9S19238C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19238C12D0Ev,_ZThn76_N9S19238C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C129S19238C11__8S19238C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19238C12D1Ev,_ZTv0_n24_N9S19238C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19238C12D1Ev,_ZThn92_N9S19238C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C12D0Ev,_ZTv0_n24_N9S19238C12D0Ev)();
extern void ABISELECT(_ZThn144_N9S19238C12D0Ev,_ZThn92_N9S19238C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C129S19238C11__8S19238C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C12D1Ev,_ZTv0_n24_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C12D0Ev,_ZTv0_n24_N9S19238C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev)();
extern void ABISELECT(_ZThn168_N9S19238C12D1Ev,_ZThn104_N9S19238C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev)();
extern void ABISELECT(_ZThn168_N9S19238C12D0Ev,_ZThn104_N9S19238C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C7__9S19238C129S19238C11__8S19238C1[] = {
  ABISELECT(-168,-104),
  ABISELECT(-168,-104),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19238C12D1Ev,_ZTvn24_n12_N9S19238C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19238C12D0Ev,_ZTvn24_n12_N9S19238C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19238C28S19238C7__A2__9S19238C129S19238C11__8S19238C1[] = {
  ABISELECT(-200,-128),
  (VTBL_ENTRY)&(_ZTI9S19238C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C12D1Ev,_ZTvn24_n12_N9S19238C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C12D0Ev,_ZTvn24_n12_N9S19238C12D0Ev),
};
extern void _ZN9S19238C16D1Ev();
extern void _ZN9S19238C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C169S19238C11__8S19238C1[] = {
  ABISELECT(176,120),
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(72,48),
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C16[0]),
  (VTBL_ENTRY)&_ZN9S19238C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C16D0Ev,
};
extern void _ZN9S19238C17D1Ev();
extern void _ZN9S19238C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C179S19238C169S19238C11__8S19238C1[] = {
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(72,48),
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&_ZN9S19238C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C17D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev)();
extern void ABISELECT(_ZThn72_N9S19238C17D1Ev,_ZThn48_N9S19238C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev)();
extern void ABISELECT(_ZThn72_N9S19238C17D0Ev,_ZThn48_N9S19238C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C179S19238C169S19238C11__8S19238C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19238C17D1Ev,_ZThn32_N9S19238C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19238C17D0Ev,_ZThn32_N9S19238C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__A1__9S19238C179S19238C169S19238C11__8S19238C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19238C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19238C16D1Ev,_ZTv0_n24_N9S19238C16D1Ev)();
extern void ABISELECT(_ZThn72_N9S19238C16D1Ev,_ZThn48_N9S19238C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C16D0Ev,_ZTv0_n24_N9S19238C16D0Ev)();
extern void ABISELECT(_ZThn72_N9S19238C16D0Ev,_ZThn48_N9S19238C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C169S19238C11__8S19238C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19238C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C16D1Ev,_ZTv0_n24_N9S19238C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C16D0Ev,_ZTv0_n24_N9S19238C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C16D1Ev,_ZTv0_n12_N9S19238C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19238C16D1Ev,_ZThn32_N9S19238C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C16D0Ev,_ZTv0_n12_N9S19238C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19238C16D0Ev,_ZThn32_N9S19238C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C169S19238C11__8S19238C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19238C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C16D1Ev,_ZTv0_n12_N9S19238C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C16D0Ev,_ZTv0_n12_N9S19238C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn112_N9S19238C11D1Ev,_ZThn76_N9S19238C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev)();
extern void ABISELECT(_ZThn112_N9S19238C11D0Ev,_ZThn76_N9S19238C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C11__8S19238C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19238C11D1Ev,_ZTv0_n24_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn144_N9S19238C11D1Ev,_ZThn92_N9S19238C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19238C11D0Ev,_ZTv0_n24_N9S19238C11D0Ev)();
extern void ABISELECT(_ZThn144_N9S19238C11D0Ev,_ZThn92_N9S19238C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19238C14__9S19238C11__8S19238C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C11D1Ev,_ZTv0_n24_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19238C11D0Ev,_ZTv0_n24_N9S19238C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn168_N9S19238C11D1Ev,_ZThn104_N9S19238C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev)();
extern void ABISELECT(_ZThn168_N9S19238C11D0Ev,_ZThn104_N9S19238C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C7__9S19238C11__8S19238C1[] = {
  ABISELECT(-168,-104),
  ABISELECT(-168,-104),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19238C11D1Ev,_ZTvn24_n12_N9S19238C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19238C11D0Ev,_ZTvn24_n12_N9S19238C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19238C28S19238C7__A2__9S19238C11__8S19238C1[] = {
  ABISELECT(-200,-128),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C11D1Ev,_ZTvn24_n12_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19238C11D0Ev,_ZTvn24_n12_N9S19238C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn216_N9S19238C11D1Ev,_ZThn140_N9S19238C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev)();
extern void ABISELECT(_ZThn216_N9S19238C11D0Ev,_ZThn140_N9S19238C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19238C8__A1__9S19238C11__8S19238C1[] = {
  ABISELECT(-216,-140),
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev),
};
extern void ABISELECT(_ZThn72_N9S19238C11D1Ev,_ZThn44_N9S19238C11D1Ev)();
extern void ABISELECT(_ZThn72_N9S19238C11D0Ev,_ZThn44_N9S19238C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19238C16__9S19238C11__8S19238C1[] = {
  ABISELECT(176,120),
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(72,48),
  ABISELECT(64,44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S19238C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19238C11D1Ev,_ZThn44_N9S19238C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19238C11D0Ev,_ZThn44_N9S19238C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19238C5_nt__8S19238C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19238C5_nt[0]),
};
extern void _ZN9S19238C14D1Ev();
extern void _ZN9S19238C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19238C14__8S19238C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&_ZN9S19238C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19238C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19238C2__9S19238C14__8S19238C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19238C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D1Ev,_ZTv0_n12_N9S19238C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19238C14D0Ev,_ZTv0_n12_N9S19238C14D0Ev),
};
static  VTT_ENTRY vtt_S19238C1[] = {
  {&(_ZTV8S19238C1[11]),  11,72},
  {&(_tg__ZTV8S19238C4__8S19238C1[4]),  4,7},
  {&(_tg__ZTV11S19238C5_nt__8S19238C4__8S19238C1[3]),  3,3},
  {&(_tg__ZTV9S19238C11__8S19238C1[9]),  9,11},
  {&(_tg__ZTV9S19238C129S19238C11__8S19238C1[7]),  7,9},
  {&(_tg__ZTV9S19238C139S19238C129S19238C11__8S19238C1[3]),  3,5},
  {&(_tg__ZTV8S19238C2__9S19238C139S19238C129S19238C11__8S19238C1[3]),  3,5},
  {&(_tg__ZTV8S19238C2__9S19238C129S19238C11__8S19238C1[3]),  3,5},
  {&(_tg__ZTV9S19238C14__9S19238C129S19238C11__8S19238C1[6]),  6,8},
  {&(_tg__ZTV8S19238C7__9S19238C129S19238C11__8S19238C1[3]),  3,5},
  {&(_tg__ZTV8S19238C28S19238C7__A2__9S19238C129S19238C11__8S19238C1[2]),  2,4},
  {&(_tg__ZTV9S19238C169S19238C11__8S19238C1[7]),  7,9},
  {&(_tg__ZTV9S19238C179S19238C169S19238C11__8S19238C1[6]),  6,8},
  {&(_tg__ZTV9S19238C14__9S19238C179S19238C169S19238C11__8S19238C1[6]),  6,8},
  {&(_tg__ZTV8S19238C2__A1__9S19238C179S19238C169S19238C11__8S19238C1[3]),  3,5},
  {&(_tg__ZTV9S19238C14__9S19238C169S19238C11__8S19238C1[6]),  6,8},
  {&(_tg__ZTV8S19238C2__9S19238C169S19238C11__8S19238C1[3]),  3,5},
  {&(_tg__ZTV8S19238C2__9S19238C11__8S19238C1[3]),  3,5},
  {&(_tg__ZTV9S19238C14__9S19238C11__8S19238C1[6]),  6,8},
  {&(_tg__ZTV8S19238C7__9S19238C11__8S19238C1[3]),  3,5},
  {&(_tg__ZTV8S19238C28S19238C7__A2__9S19238C11__8S19238C1[2]),  2,4},
  {&(_tg__ZTV8S19238C8__A1__9S19238C11__8S19238C1[3]),  3,5},
  {&(_tg__ZTV9S19238C16__9S19238C11__8S19238C1[7]),  7,9},
  {&(_ZTV8S19238C1[45]),  45,72},
  {&(_ZTV8S19238C1[50]),  50,72},
  {&(_ZTV8S19238C1[27]),  27,72},
  {&(_ZTV8S19238C1[56]),  56,72},
  {&(_ZTV8S19238C1[61]),  61,72},
  {&(_ZTV8S19238C1[65]),  65,72},
  {&(_ZTV8S19238C1[70]),  70,72},
  {&(_ZTV8S19238C1[40]),  40,72},
  {&(_tg__ZTV11S19238C5_nt__8S19238C1[3]),  3,3},
  {&(_tg__ZTV9S19238C14__8S19238C1[5]),  5,7},
  {&(_tg__ZTV8S19238C2__9S19238C14__8S19238C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19238C1[];
extern  VTBL_ENTRY _ZTV8S19238C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19238C1[];
static VTBL_ENTRY alt_thunk_names111[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C11D0Ev,_ZTv0_n24_N9S19238C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19238C11D0Ev,_ZThn92_N9S19238C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C11D1Ev,_ZTv0_n24_N9S19238C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19238C11D1Ev,_ZThn92_N9S19238C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C11D0Ev,_ZTv0_n12_N9S19238C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S19238C11D0Ev,_ZThn140_N9S19238C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S19238C11D0Ev,_ZThn104_N9S19238C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C11D0Ev,_ZThn76_N9S19238C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C11D1Ev,_ZTv0_n12_N9S19238C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S19238C11D1Ev,_ZThn140_N9S19238C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S19238C11D1Ev,_ZThn104_N9S19238C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C11D1Ev,_ZThn76_N9S19238C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C16D0Ev,_ZTv0_n12_N9S19238C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C16D0Ev,_ZThn32_N9S19238C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C16D1Ev,_ZTv0_n12_N9S19238C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C16D1Ev,_ZThn32_N9S19238C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C16D0Ev,_ZTv0_n24_N9S19238C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19238C16D0Ev,_ZThn48_N9S19238C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C16D1Ev,_ZTv0_n24_N9S19238C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19238C16D1Ev,_ZThn48_N9S19238C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C17D0Ev,_ZTv0_n12_N9S19238C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C17D0Ev,_ZThn32_N9S19238C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C17D1Ev,_ZTv0_n12_N9S19238C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19238C17D1Ev,_ZThn32_N9S19238C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C17D0Ev,_ZTv0_n24_N9S19238C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19238C17D0Ev,_ZThn48_N9S19238C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C17D1Ev,_ZTv0_n24_N9S19238C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19238C17D1Ev,_ZThn48_N9S19238C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C12D0Ev,_ZTv0_n24_N9S19238C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19238C12D0Ev,_ZThn92_N9S19238C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19238C12D1Ev,_ZTv0_n24_N9S19238C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19238C12D1Ev,_ZThn92_N9S19238C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C12D0Ev,_ZTv0_n12_N9S19238C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S19238C12D0Ev,_ZThn104_N9S19238C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C12D0Ev,_ZThn76_N9S19238C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C12D1Ev,_ZTv0_n12_N9S19238C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S19238C12D1Ev,_ZThn104_N9S19238C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C12D1Ev,_ZThn76_N9S19238C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C13D0Ev,_ZTv0_n12_N9S19238C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C13D0Ev,_ZThn76_N9S19238C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19238C13D1Ev,_ZTv0_n12_N9S19238C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19238C13D1Ev,_ZThn76_N9S19238C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19238C1D0Ev,_ZTv0_n24_N8S19238C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19238C1D0Ev,_ZThn132_N8S19238C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19238C1D1Ev,_ZTv0_n24_N8S19238C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19238C1D1Ev,_ZThn132_N8S19238C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19238C1D0Ev,_ZTv0_n12_N8S19238C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19238C1D0Ev,_ZThn180_N8S19238C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19238C1D0Ev,_ZThn144_N8S19238C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19238C1D0Ev,_ZThn116_N8S19238C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19238C1D1Ev,_ZTv0_n12_N8S19238C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19238C1D1Ev,_ZThn180_N8S19238C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19238C1D1Ev,_ZThn144_N8S19238C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19238C1D1Ev,_ZThn116_N8S19238C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19238C1 = {  "S19238C1", // class name
  bases_S19238C1, 43,
  &(vtc_S19238C1[0]), // expected_vtbl_contents
  &(vtt_S19238C1[0]), // expected_vtt_contents
  ABISELECT(312,208), // object size
  NSPAIRA(_ZTI8S19238C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19238C1),72, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19238C1),34, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names111,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19237C2  : S2014C38 {
  ::S2014C38 s19237c2f0;
  virtual  ~S19237C2(); // _ZN8S19237C2D1Ev
  S19237C2(); // tgen
};
//SIG(-1 S19237C2) C1{ BC2{ m} vd FC2}


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

static void Test_S19237C2()
{
  extern Class_Descriptor cd_S19237C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19237C2, buf);
    S19237C2 *dp, &lv = *(dp=new (buf) S19237C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19237C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C2)");
    check_base_class_offset(lv, (S2014C38*), 0, "S19237C2");
    check_field_offset(lv, s19237c2f0, ABISELECT(8,4), "S19237C2.s19237c2f0");
    test_class_info(&lv, &cd_S19237C2);
    dp->~S19237C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C2(Test_S19237C2, "S19237C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19237C2C1Ev();
extern void _ZN8S19237C2D1Ev();
Name_Map name_map_S19237C2[] = {
  NSPAIR(_ZN8S19237C2C1Ev),
  NSPAIR(_ZN8S19237C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S19237C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19237C2[];
extern void _ZN8S19237C2D1Ev();
extern void _ZN8S19237C2D0Ev();
static  VTBL_ENTRY vtc_S19237C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19237C2[0]),
  (VTBL_ENTRY)&_ZN8S19237C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19237C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
Class_Descriptor cd_S19237C2 = {  "S19237C2", // class name
  bases_S19237C2, 1,
  &(vtc_S19237C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19237C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19237C2),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  S19237C5  : virtual S2014C28 {
  ~S19237C5(); // tgen
  S19237C5(); // tgen
};
//SIG(-1 S19237C5) C1{ VBC2{ m}}


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

static void Test_S19237C5()
{
  extern Class_Descriptor cd_S19237C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19237C5, buf);
    S19237C5 *dp, &lv = *(dp=new (buf) S19237C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19237C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C5)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19237C5");
    test_class_info(&lv, &cd_S19237C5);
    dp->~S19237C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C5(Test_S19237C5, "S19237C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19237C5C1Ev();
extern void _ZN8S19237C5D1Ev();
Name_Map name_map_S19237C5[] = {
  NSPAIR(_ZN8S19237C5C1Ev),
  NSPAIR(_ZN8S19237C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
static Base_Class bases_S19237C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19237C5[];
static  VTBL_ENTRY vtc_S19237C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19237C5[0]),
};
extern VTBL_ENTRY _ZTV8S19237C5[];
static  VTT_ENTRY vtt_S19237C5[] = {
  {&(_ZTV8S19237C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19237C5[];
extern  VTBL_ENTRY _ZTV8S19237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19237C5[];
Class_Descriptor cd_S19237C5 = {  "S19237C5", // class name
  bases_S19237C5, 1,
  &(vtc_S19237C5[0]), // expected_vtbl_contents
  &(vtt_S19237C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19237C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19237C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19237C5),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  S19237C8  : S2014C28 , S19237C2 , S2014C38 , S3222C8_nt {
  short s19237c8f0:16;
  long s19237c8f1;
  ~S19237C8(); // tgen
  S19237C8(); // tgen
};
//SIG(-1 S19237C8) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 Fl}


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

static void Test_S19237C8()
{
  extern Class_Descriptor cd_S19237C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19237C8, buf);
    S19237C8 *dp, &lv = *(dp=new (buf) S19237C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19237C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C8)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19237C8");
    check_base_class_offset(lv, (S2014C38*)(S19237C2*), 0, "S19237C8");
    check_base_class_offset(lv, (S19237C2*), 0, "S19237C8");
    /*is_ambiguous_... S19237C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S19237C8");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S19237C8");
    set_bf_and_test(lv, s19237c8f0, ABISELECT(16,12), 0, 16, 1, "S19237C8");
    set_bf_and_test(lv, s19237c8f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S19237C8");
    check_field_offset(lv, s19237c8f1, ABISELECT(24,16), "S19237C8.s19237c8f1");
    test_class_info(&lv, &cd_S19237C8);
    dp->~S19237C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C8(Test_S19237C8, "S19237C8", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19237C8C1Ev();
extern void _ZN8S19237C8D1Ev();
Name_Map name_map_S19237C8[] = {
  NSPAIR(_ZN8S19237C8C1Ev),
  NSPAIR(_ZN8S19237C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19237C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19237C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19237C8[];
extern void _ZN8S19237C8D1Ev();
extern void _ZN8S19237C8D0Ev();
static  VTBL_ENTRY vtc_S19237C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19237C8[0]),
  (VTBL_ENTRY)&_ZN8S19237C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19237C8D0Ev,
};
extern VTBL_ENTRY _ZTI8S19237C8[];
extern  VTBL_ENTRY _ZTV8S19237C8[];
Class_Descriptor cd_S19237C8 = {  "S19237C8", // class name
  bases_S19237C8, 5,
  &(vtc_S19237C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19237C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19237C8),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  S19237C7  : S19237C8 , S19237C2 {
  int s19237c7f0;
  ~S19237C7(); // tgen
  S19237C7(); // tgen
};
//SIG(-1 S19237C7) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 Fl} BC4 Fi}


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

static void Test_S19237C7()
{
  extern Class_Descriptor cd_S19237C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S19237C7, buf);
    S19237C7 *dp, &lv = *(dp=new (buf) S19237C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S19237C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C7)");
    check_base_class_offset(lv, (S2014C28*)(S19237C8*), 0, "S19237C7");
    check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C8*), 0, "S19237C7");
    check_base_class_offset(lv, (S19237C2*)(S19237C8*), 0, "S19237C7");
    /*is_ambiguous_... S19237C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C8*), ABISELECT(9,5), "S19237C7");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C8*), ABISELECT(12,8), "S19237C7");
    check_base_class_offset(lv, (S19237C8*), 0, "S19237C7");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*), ABISELECT(32,20), "S19237C7");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*), ABISELECT(32,20), "S19237C7");
    check_field_offset(lv, s19237c7f0, ABISELECT(44,28), "S19237C7.s19237c7f0");
    test_class_info(&lv, &cd_S19237C7);
    dp->~S19237C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C7(Test_S19237C7, "S19237C7", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S19237C7C1Ev();
extern void _ZN8S19237C7D1Ev();
Name_Map name_map_S19237C7[] = {
  NSPAIR(_ZN8S19237C7C1Ev),
  NSPAIR(_ZN8S19237C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C8;
extern VTBL_ENTRY _ZTI8S19237C8[];
extern  VTBL_ENTRY _ZTV8S19237C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
static Base_Class bases_S19237C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19237C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S19237C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(32,20), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19237C7[];
extern void _ZN8S19237C7D1Ev();
extern void _ZN8S19237C7D0Ev();
extern void ABISELECT(_ZThn32_N8S19237C7D1Ev,_ZThn20_N8S19237C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19237C7D0Ev,_ZThn20_N8S19237C7D0Ev)();
static  VTBL_ENTRY vtc_S19237C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19237C7[0]),
  (VTBL_ENTRY)&_ZN8S19237C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19237C7D0Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19237C7D1Ev,_ZThn20_N8S19237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19237C7D0Ev,_ZThn20_N8S19237C7D0Ev),
};
extern VTBL_ENTRY _ZTI8S19237C7[];
extern  VTBL_ENTRY _ZTV8S19237C7[];
Class_Descriptor cd_S19237C7 = {  "S19237C7", // class name
  bases_S19237C7, 8,
  &(vtc_S19237C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S19237C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19237C7),8, //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  S19237C4  : virtual S19237C5 , S19237C7 {
  int s19237c4f0;
  virtual  ~S19237C4(); // _ZN8S19237C4D2Ev
  virtual void  v1(); // _ZN8S19237C42v1Ev
  S19237C4(); // tgen
};
//SIG(-1 S19237C4) C1{ VBC2{ VBC3{ m}} BC4{ BC5{ BC3 BC6{ BC7{ m} vd FC7} BC7 BC8{ m Fi} Fs:16 Fl} BC6 Fi} vd v1 Fi}


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

static void Test_S19237C4()
{
  extern Class_Descriptor cd_S19237C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S19237C4, buf);
    S19237C4 *dp, &lv = *(dp=new (buf) S19237C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S19237C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C4)");
    check_base_class_offset(lv, (S2014C28*)(S19237C5*), ABISELECT(64,40), "S19237C4");
    check_base_class_offset(lv, (S19237C5*), ABISELECT(56,36), "S19237C4");
    check_base_class_offset(lv, (S2014C28*)(S19237C8*)(S19237C7*), 0, "S19237C4");
    check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C8*)(S19237C7*), 0, "S19237C4");
    check_base_class_offset(lv, (S19237C2*)(S19237C8*)(S19237C7*), 0, "S19237C4");
    /*is_ambiguous_... S19237C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C8*)(S19237C7*), ABISELECT(9,5), "S19237C4");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C8*)(S19237C7*), ABISELECT(12,8), "S19237C4");
    check_base_class_offset(lv, (S19237C8*)(S19237C7*), 0, "S19237C4");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C7*), ABISELECT(32,20), "S19237C4");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C7*), ABISELECT(32,20), "S19237C4");
    check_base_class_offset(lv, (S19237C7*), 0, "S19237C4");
    check_field_offset(lv, s19237c4f0, ABISELECT(48,32), "S19237C4.s19237c4f0");
    test_class_info(&lv, &cd_S19237C4);
    dp->~S19237C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C4(Test_S19237C4, "S19237C4", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN8S19237C4C1Ev();
extern void _ZN8S19237C4D2Ev();
Name_Map name_map_S19237C4[] = {
  NSPAIR(_ZN8S19237C4C1Ev),
  NSPAIR(_ZN8S19237C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19237C5;
extern VTBL_ENTRY _ZTI8S19237C5[];
extern  VTBL_ENTRY _ZTV8S19237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19237C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C8;
extern VTBL_ENTRY _ZTI8S19237C8[];
extern  VTBL_ENTRY _ZTV8S19237C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C7;
extern VTBL_ENTRY _ZTI8S19237C7[];
extern  VTBL_ENTRY _ZTV8S19237C7[];
static Base_Class bases_S19237C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19237C5,    ABISELECT(56,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19237C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    7, //immediately_derived
  0, 0},
  {&cd_S19237C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(32,20), //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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19237C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19237C4[];
extern void _ZN8S19237C4D1Ev();
extern void _ZN8S19237C4D0Ev();
extern void _ZN8S19237C42v1Ev();
extern void ABISELECT(_ZThn32_N8S19237C4D1Ev,_ZThn20_N8S19237C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19237C4D0Ev,_ZThn20_N8S19237C4D0Ev)();
static  VTBL_ENTRY vtc_S19237C4[] = {
  ABISELECT(64,40),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19237C4[0]),
  (VTBL_ENTRY)&_ZN8S19237C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19237C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19237C42v1Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19237C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19237C4D1Ev,_ZThn20_N8S19237C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19237C4D0Ev,_ZThn20_N8S19237C4D0Ev),
  ABISELECT(8,4),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19237C4[0]),
};
extern VTBL_ENTRY _ZTV8S19237C4[];
static  VTBL_ENTRY _tg__ZTV8S19237C5__8S19237C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19237C5[0]),
};
static  VTT_ENTRY vtt_S19237C4[] = {
  {&(_ZTV8S19237C4[4]),  4,14},
  {&(_ZTV8S19237C4[14]),  14,14},
  {&(_tg__ZTV8S19237C5__8S19237C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19237C4[];
extern  VTBL_ENTRY _ZTV8S19237C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19237C4[];
Class_Descriptor cd_S19237C4 = {  "S19237C4", // class name
  bases_S19237C4, 11,
  &(vtc_S19237C4[0]), // expected_vtbl_contents
  &(vtt_S19237C4[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI8S19237C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19237C4),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19237C4),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19237C13  : virtual S19237C2 {
  __tsi64 s19237c13f0;
  ~S19237C13(); // tgen
  S19237C13(); // tgen
};
//SIG(-1 S19237C13) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S19237C13()
{
  extern Class_Descriptor cd_S19237C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19237C13, buf);
    S19237C13 *dp, &lv = *(dp=new (buf) S19237C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19237C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C13)");
    check_base_class_offset(lv, (S2014C38*)(S19237C2*), ABISELECT(16,12), "S19237C13");
    check_base_class_offset(lv, (S19237C2*), ABISELECT(16,12), "S19237C13");
    check_field_offset(lv, s19237c13f0, ABISELECT(8,4), "S19237C13.s19237c13f0");
    test_class_info(&lv, &cd_S19237C13);
    dp->~S19237C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C13(Test_S19237C13, "S19237C13", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19237C13C1Ev();
extern void _ZN9S19237C13D1Ev();
Name_Map name_map_S19237C13[] = {
  NSPAIR(_ZN9S19237C13C1Ev),
  NSPAIR(_ZN9S19237C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
static Base_Class bases_S19237C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19237C13[];
extern void _ZN9S19237C13D1Ev();
extern void _ZN9S19237C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19237C13D1Ev,_ZThn12_N9S19237C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19237C13D0Ev,_ZThn12_N9S19237C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19237C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C13[0]),
  (VTBL_ENTRY)&_ZN9S19237C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C13D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19237C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19237C13[];
static  VTT_ENTRY vtt_S19237C13[] = {
  {&(_ZTV9S19237C13[3]),  3,10},
  {&(_ZTV9S19237C13[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19237C13[];
extern  VTBL_ENTRY _ZTV9S19237C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C13[];
static VTBL_ENTRY alt_thunk_names112[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19237C13D0Ev,_ZThn12_N9S19237C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19237C13D1Ev,_ZThn12_N9S19237C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19237C13 = {  "S19237C13", // class name
  bases_S19237C13, 2,
  &(vtc_S19237C13[0]), // expected_vtbl_contents
  &(vtt_S19237C13[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19237C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19237C13),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19237C13),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names112,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19237C14  : virtual S2014C28 , virtual S19237C2 , virtual S3222C8_nt {
  void *s19237c14f0;
  ::S19762C18_nt s19237c14f1;
  virtual  ~S19237C14(); // _ZN9S19237C14D2Ev
  S19237C14(); // tgen
};
//SIG(-1 S19237C14) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S19237C14()
{
  extern Class_Descriptor cd_S19237C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19237C14, buf);
    S19237C14 *dp, &lv = *(dp=new (buf) S19237C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19237C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C14)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19237C14");
    check_base_class_offset(lv, (S2014C38*)(S19237C2*), ABISELECT(24,12), "S19237C14");
    check_base_class_offset(lv, (S19237C2*), ABISELECT(24,12), "S19237C14");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S19237C14");
    check_field_offset(lv, s19237c14f0, ABISELECT(8,4), "S19237C14.s19237c14f0");
    check_field_offset(lv, s19237c14f1, ABISELECT(16,8), "S19237C14.s19237c14f1");
    test_class_info(&lv, &cd_S19237C14);
    dp->~S19237C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C14(Test_S19237C14, "S19237C14", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19237C14C1Ev();
extern void _ZN9S19237C14D2Ev();
Name_Map name_map_S19237C14[] = {
  NSPAIR(_ZN9S19237C14C1Ev),
  NSPAIR(_ZN9S19237C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19237C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19237C14[];
extern void _ZN9S19237C14D1Ev();
extern void _ZN9S19237C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19237C14D1Ev,_ZThn12_N9S19237C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19237C14D0Ev,_ZThn12_N9S19237C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19237C14[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&_ZN9S19237C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C14D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19237C14[];
static  VTT_ENTRY vtt_S19237C14[] = {
  {&(_ZTV9S19237C14[5]),  5,12},
  {&(_ZTV9S19237C14[10]),  10,12},
};
extern VTBL_ENTRY _ZTI9S19237C14[];
extern  VTBL_ENTRY _ZTV9S19237C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C14[];
static VTBL_ENTRY alt_thunk_names113[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19237C14D0Ev,_ZThn12_N9S19237C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19237C14D1Ev,_ZThn12_N9S19237C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19237C14 = {  "S19237C14", // class name
  bases_S19237C14, 4,
  &(vtc_S19237C14[0]), // expected_vtbl_contents
  &(vtt_S19237C14[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19237C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19237C14),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19237C14),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names113,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19237C12  : S19237C13 , virtual S2014C28 , virtual S3222C8_nt , virtual S19237C14 , virtual S19237C7 {
  long s19237c12f0;
  ::S19237C13 s19237c12f1;
  virtual  ~S19237C12(); // _ZN9S19237C12D2Ev
  S19237C12(); // tgen
};
//SIG(-1 S19237C12) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 Fl} BC3 Fi} vd Fl FC2}


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

static void Test_S19237C12()
{
  extern Class_Descriptor cd_S19237C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S19237C12, buf);
    S19237C12 *dp, &lv = *(dp=new (buf) S19237C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S19237C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C12)");
    /*is_ambiguous_... S19237C12::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*), ABISELECT(56,36), "S19237C12");
    check_base_class_offset(lv, (S19237C2*)(S19237C13*), ABISELECT(56,36), "S19237C12");
    check_base_class_offset(lv, (S19237C2*)(S19237C14*), ABISELECT(56,36), "S19237C12");
    check_base_class_offset(lv, (S19237C13*), 0, "S19237C12");
    /*is_ambiguous_... S19237C12::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), 0, "S19237C12");
    check_base_class_offset(lv, (S2014C28*)(S19237C14*), 0, "S19237C12");
    /*is_ambiguous_... S19237C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S19237C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C14*), ABISELECT(68,44), "S19237C12");
    check_base_class_offset(lv, (S19237C14*), ABISELECT(72,48), "S19237C12");
    check_base_class_offset(lv, (S2014C28*)(S19237C8*)(S19237C7*), ABISELECT(96,60), "S19237C12");
    check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C8*)(S19237C7*), ABISELECT(96,60), "S19237C12");
    check_base_class_offset(lv, (S19237C2*)(S19237C8*)(S19237C7*), ABISELECT(96,60), "S19237C12");
    /*is_ambiguous_... S19237C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C8*)(S19237C7*), ABISELECT(105,65), "S19237C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C8*)(S19237C7*), ABISELECT(108,68), "S19237C12");
    check_base_class_offset(lv, (S19237C8*)(S19237C7*), ABISELECT(96,60), "S19237C12");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C7*), ABISELECT(128,80), "S19237C12");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C7*), ABISELECT(128,80), "S19237C12");
    check_base_class_offset(lv, (S19237C7*), ABISELECT(96,60), "S19237C12");
    check_field_offset(lv, s19237c12f0, ABISELECT(16,12), "S19237C12.s19237c12f0");
    check_field_offset(lv, s19237c12f1, ABISELECT(24,16), "S19237C12.s19237c12f1");
    test_class_info(&lv, &cd_S19237C12);
    dp->~S19237C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C12(Test_S19237C12, "S19237C12", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN9S19237C12C1Ev();
extern void _ZN9S19237C12D2Ev();
Name_Map name_map_S19237C12[] = {
  NSPAIR(_ZN9S19237C12C1Ev),
  NSPAIR(_ZN9S19237C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C13;
extern VTBL_ENTRY _ZTI9S19237C13[];
extern  VTBL_ENTRY _ZTV9S19237C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C13[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C14;
extern VTBL_ENTRY _ZTI9S19237C14[];
extern  VTBL_ENTRY _ZTV9S19237C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C14[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C8;
extern VTBL_ENTRY _ZTI8S19237C8[];
extern  VTBL_ENTRY _ZTV8S19237C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C7;
extern VTBL_ENTRY _ZTI8S19237C7[];
extern  VTBL_ENTRY _ZTV8S19237C7[];
static Base_Class bases_S19237C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19237C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19237C14,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19237C8,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(128,80), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19237C7,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19237C12[];
extern void _ZN9S19237C12D1Ev();
extern void _ZN9S19237C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S19237C12D1Ev,_ZThn36_N9S19237C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S19237C12D0Ev,_ZThn36_N9S19237C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C12D1Ev,_ZTv0_n24_N9S19237C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S19237C12D1Ev,_ZThn48_N9S19237C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C12D0Ev,_ZTv0_n24_N9S19237C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S19237C12D0Ev,_ZThn48_N9S19237C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev)();
extern void ABISELECT(_ZThn96_N9S19237C12D1Ev,_ZThn60_N9S19237C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev)();
extern void ABISELECT(_ZThn96_N9S19237C12D0Ev,_ZThn60_N9S19237C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S19237C12D1Ev,_ZTvn20_n12_N9S19237C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19237C12D0Ev,_ZTvn20_n12_N9S19237C12D0Ev)();
static  VTBL_ENTRY vtc_S19237C12[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&_ZN9S19237C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C12D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C12D1Ev,_ZTv0_n24_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C12D0Ev,_ZTv0_n24_N9S19237C12D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C12D1Ev,_ZTvn20_n12_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C12D0Ev,_ZTvn20_n12_N9S19237C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19237C12[];
extern void _ZN9S19237C13D1Ev();
extern void _ZN9S19237C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C13__9S19237C12[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C13[0]),
  (VTBL_ENTRY)&_ZN9S19237C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S19237C13D1Ev,_ZThn36_N9S19237C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S19237C13D0Ev,_ZThn36_N9S19237C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C13__9S19237C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19237C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev),
};
extern void _ZN9S19237C14D1Ev();
extern void _ZN9S19237C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C12[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&_ZN9S19237C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C14__9S19237C12[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev),
};
static  VTT_ENTRY vtt_S19237C12[] = {
  {&(_ZTV9S19237C12[7]),  7,31},
  {&(_tg__ZTV9S19237C13__9S19237C12[3]),  3,5},
  {&(_tg__ZTV8S19237C2__9S19237C13__9S19237C12[3]),  3,5},
  {&(_ZTV9S19237C12[12]),  12,31},
  {&(_ZTV9S19237C12[20]),  20,31},
  {&(_ZTV9S19237C12[25]),  25,31},
  {&(_ZTV9S19237C12[29]),  29,31},
  {&(_tg__ZTV9S19237C14__9S19237C12[5]),  5,7},
  {&(_tg__ZTV8S19237C2__9S19237C14__9S19237C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19237C12[];
extern  VTBL_ENTRY _ZTV9S19237C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C12[];
static VTBL_ENTRY alt_thunk_names114[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19237C13D0Ev,_ZThn36_N9S19237C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19237C13D1Ev,_ZThn36_N9S19237C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C12D0Ev,_ZTv0_n24_N9S19237C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19237C12D0Ev,_ZThn48_N9S19237C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C12D1Ev,_ZTv0_n24_N9S19237C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19237C12D1Ev,_ZThn48_N9S19237C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19237C12D0Ev,_ZThn60_N9S19237C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19237C12D0Ev,_ZThn36_N9S19237C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19237C12D1Ev,_ZThn60_N9S19237C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19237C12D1Ev,_ZThn36_N9S19237C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19237C12 = {  "S19237C12", // class name
  bases_S19237C12, 15,
  &(vtc_S19237C12[0]), // expected_vtbl_contents
  &(vtt_S19237C12[0]), // expected_vtt_contents
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI9S19237C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19237C12),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19237C12),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names114,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19237C17  : S2014C38 , S19237C2 , virtual S2014C28 , virtual S19237C14 {
  virtual  ~S19237C17(); // _ZN9S19237C17D2Ev
  S19237C17(); // tgen
};
//SIG(-1 S19237C17) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S19237C17()
{
  extern Class_Descriptor cd_S19237C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S19237C17, buf);
    S19237C17 *dp, &lv = *(dp=new (buf) S19237C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S19237C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C17)");
    /*is_ambiguous_... S19237C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S19237C17");
    /*is_ambiguous_... S19237C17::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*), 0, "S19237C17");
    /*is_ambiguous_... S19237C17::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*), 0, "S19237C17");
    check_base_class_offset(lv, (S2014C28*), 0, "S19237C17");
    check_base_class_offset(lv, (S2014C28*)(S19237C14*), 0, "S19237C17");
    /*is_ambiguous_... S19237C17::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*), ABISELECT(40,20), "S19237C17");
    check_base_class_offset(lv, (S19237C2*)(S19237C14*), ABISELECT(40,20), "S19237C17");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C14*), ABISELECT(52,28), "S19237C17");
    check_base_class_offset(lv, (S19237C14*), ABISELECT(16,8), "S19237C17");
    test_class_info(&lv, &cd_S19237C17);
    dp->~S19237C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C17(Test_S19237C17, "S19237C17", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN9S19237C17C1Ev();
extern void _ZN9S19237C17D2Ev();
Name_Map name_map_S19237C17[] = {
  NSPAIR(_ZN9S19237C17C1Ev),
  NSPAIR(_ZN9S19237C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C14;
extern VTBL_ENTRY _ZTI9S19237C14[];
extern  VTBL_ENTRY _ZTV9S19237C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C14[];
static Base_Class bases_S19237C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19237C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19237C14,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19237C17[];
extern void _ZN9S19237C17D1Ev();
extern void _ZN9S19237C17D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19237C17D1Ev,_ZThn8_N9S19237C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19237C17D0Ev,_ZThn8_N9S19237C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19237C17D1Ev,_ZThn20_N9S19237C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19237C17D0Ev,_ZThn20_N9S19237C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19237C17[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&_ZN9S19237C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C17D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19237C17[];
extern void _ZN9S19237C14D1Ev();
extern void _ZN9S19237C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C17[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&_ZN9S19237C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19237C14D1Ev,_ZThn12_N9S19237C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19237C14D0Ev,_ZThn12_N9S19237C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C14__9S19237C17[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev),
};
static  VTT_ENTRY vtt_S19237C17[] = {
  {&(_ZTV9S19237C17[6]),  6,21},
  {&(_ZTV9S19237C17[14]),  14,21},
  {&(_ZTV9S19237C17[19]),  19,21},
  {&(_tg__ZTV9S19237C14__9S19237C17[5]),  5,7},
  {&(_tg__ZTV8S19237C2__9S19237C14__9S19237C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19237C17[];
extern  VTBL_ENTRY _ZTV9S19237C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C17[];
static VTBL_ENTRY alt_thunk_names115[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19237C14D0Ev,_ZThn12_N9S19237C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19237C14D1Ev,_ZThn12_N9S19237C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C17D0Ev,_ZThn20_N9S19237C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C17D1Ev,_ZThn20_N9S19237C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19237C17D0Ev,_ZThn8_N9S19237C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19237C17D1Ev,_ZThn8_N9S19237C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19237C17 = {  "S19237C17", // class name
  bases_S19237C17, 8,
  &(vtc_S19237C17[0]), // expected_vtbl_contents
  &(vtt_S19237C17[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI9S19237C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19237C17),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19237C17),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names115,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19237C16  : virtual S19237C14 , S19237C17 , virtual S2014C38 {
  ::S3222C8_nt s19237c16f0[6];
  virtual  ~S19237C16(); // _ZN9S19237C16D2Ev
  S19237C16(); // tgen
};
//SIG(-1 S19237C16) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S19237C16()
{
  extern Class_Descriptor cd_S19237C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S19237C16, buf);
    S19237C16 *dp, &lv = *(dp=new (buf) S19237C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S19237C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C16)");
    check_base_class_offset(lv, (S2014C28*)(S19237C14*), 0, "S19237C16");
    check_base_class_offset(lv, (S2014C28*)(S19237C17*), 0, "S19237C16");
    /*is_ambiguous_... S19237C16::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*), ABISELECT(64,44), "S19237C16");
    check_base_class_offset(lv, (S19237C2*)(S19237C14*), ABISELECT(64,44), "S19237C16");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C14*), ABISELECT(76,52), "S19237C16");
    check_base_class_offset(lv, (S19237C14*), ABISELECT(40,32), "S19237C16");
    check_base_class_offset(lv, (S19237C14*)(S19237C17*), ABISELECT(40,32), "S19237C16");
    /*is_ambiguous_... S19237C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C17*), ABISELECT(9,5), "S19237C16");
    /*is_ambiguous_... S19237C17::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C17*), 0, "S19237C16");
    /*is_ambiguous_... S19237C17::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C17*), 0, "S19237C16");
    check_base_class_offset(lv, (S19237C17*), 0, "S19237C16");
    /*is_ambiguous_... S19237C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(80,56), "S19237C16");
    check_field_offset(lv, s19237c16f0, ABISELECT(12,8), "S19237C16.s19237c16f0");
    test_class_info(&lv, &cd_S19237C16);
    dp->~S19237C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C16(Test_S19237C16, "S19237C16", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN9S19237C16C1Ev();
extern void _ZN9S19237C16D2Ev();
Name_Map name_map_S19237C16[] = {
  NSPAIR(_ZN9S19237C16C1Ev),
  NSPAIR(_ZN9S19237C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C14;
extern VTBL_ENTRY _ZTI9S19237C14[];
extern  VTBL_ENTRY _ZTV9S19237C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C14[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C17;
extern VTBL_ENTRY _ZTI9S19237C17[];
extern  VTBL_ENTRY _ZTV9S19237C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S19237C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19237C14,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19237C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19237C17,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19237C16[];
extern void _ZN9S19237C16D1Ev();
extern void _ZN9S19237C16D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19237C16D1Ev,_ZTv0_n24_N9S19237C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19237C16D1Ev,_ZThn32_N9S19237C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C16D0Ev,_ZTv0_n24_N9S19237C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19237C16D0Ev,_ZThn32_N9S19237C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C16D1Ev,_ZTv0_n12_N9S19237C16D1Ev)();
extern void ABISELECT(_ZThn64_N9S19237C16D1Ev,_ZThn44_N9S19237C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C16D0Ev,_ZTv0_n12_N9S19237C16D0Ev)();
extern void ABISELECT(_ZThn64_N9S19237C16D0Ev,_ZThn44_N9S19237C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19237C16[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C16[0]),
  (VTBL_ENTRY)&_ZN9S19237C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C16D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19237C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C16D1Ev,_ZTv0_n24_N9S19237C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C16D0Ev,_ZTv0_n24_N9S19237C16D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19237C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C16D1Ev,_ZTv0_n12_N9S19237C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C16D0Ev,_ZTv0_n12_N9S19237C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19237C16[];
extern void _ZN9S19237C17D1Ev();
extern void _ZN9S19237C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C17__9S19237C16[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&_ZN9S19237C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C17D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19237C17D1Ev,_ZThn32_N9S19237C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19237C17D0Ev,_ZThn32_N9S19237C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C17__9S19237C16[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev)();
extern void ABISELECT(_ZThn64_N9S19237C17D1Ev,_ZThn44_N9S19237C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev)();
extern void ABISELECT(_ZThn64_N9S19237C17D0Ev,_ZThn44_N9S19237C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__A1__9S19237C17__9S19237C16[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev),
};
extern void _ZN9S19237C14D1Ev();
extern void _ZN9S19237C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C16[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&_ZN9S19237C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19237C14D1Ev,_ZThn12_N9S19237C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19237C14D0Ev,_ZThn12_N9S19237C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C14__9S19237C16[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev),
};
static  VTT_ENTRY vtt_S19237C16[] = {
  {&(_ZTV9S19237C16[7]),  7,22},
  {&(_tg__ZTV9S19237C17__9S19237C16[6]),  6,8},
  {&(_tg__ZTV9S19237C14__9S19237C17__9S19237C16[6]),  6,8},
  {&(_tg__ZTV8S19237C2__A1__9S19237C17__9S19237C16[3]),  3,5},
  {&(_ZTV9S19237C16[15]),  15,22},
  {&(_ZTV9S19237C16[20]),  20,22},
  {&(_tg__ZTV9S19237C14__9S19237C16[5]),  5,7},
  {&(_tg__ZTV8S19237C2__9S19237C14__9S19237C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19237C16[];
extern  VTBL_ENTRY _ZTV9S19237C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C16[];
static VTBL_ENTRY alt_thunk_names116[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19237C14D0Ev,_ZThn12_N9S19237C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19237C14D1Ev,_ZThn12_N9S19237C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19237C17D0Ev,_ZThn44_N9S19237C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19237C17D1Ev,_ZThn44_N9S19237C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C17D0Ev,_ZThn32_N9S19237C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C17D1Ev,_ZThn32_N9S19237C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C16D0Ev,_ZTv0_n12_N9S19237C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19237C16D0Ev,_ZThn44_N9S19237C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C16D1Ev,_ZTv0_n12_N9S19237C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19237C16D1Ev,_ZThn44_N9S19237C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C16D0Ev,_ZTv0_n24_N9S19237C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C16D0Ev,_ZThn32_N9S19237C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C16D1Ev,_ZTv0_n24_N9S19237C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C16D1Ev,_ZThn32_N9S19237C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19237C16 = {  "S19237C16", // class name
  bases_S19237C16, 10,
  &(vtc_S19237C16[0]), // expected_vtbl_contents
  &(vtt_S19237C16[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI9S19237C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19237C16),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19237C16),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names116,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19237C11  : S19237C12 , S19237C2 , virtual S19237C8 , S19237C16 {
  virtual  ~S19237C11(); // _ZN9S19237C11D2Ev
  S19237C11(); // tgen
};
//SIG(-1 S19237C11) C1{ BC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 Fl} BC4 Fi} vd Fl FC3} BC4 VBC11 BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} vd}


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

static void Test_S19237C11()
{
  extern Class_Descriptor cd_S19237C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,39)];
    init_test(&cd_S19237C11, buf);
    S19237C11 *dp, &lv = *(dp=new (buf) S19237C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,152), "sizeof(S19237C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C11)");
    /*is_ambiguous_... S19237C11::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*), ABISELECT(112,76), "S19237C11");
    check_base_class_offset(lv, (S19237C2*)(S19237C13*)(S19237C12*), ABISELECT(112,76), "S19237C11");
    check_base_class_offset(lv, (S19237C2*)(S19237C14*), ABISELECT(112,76), "S19237C11");
    check_base_class_offset(lv, (S19237C13*)(S19237C12*), 0, "S19237C11");
    /*is_ambiguous_... S19237C12::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19237C12*), 0, "S19237C11");
    check_base_class_offset(lv, (S2014C28*)(S19237C14*), 0, "S19237C11");
    check_base_class_offset(lv, (S2014C28*)(S19237C17*)(S19237C16*), 0, "S19237C11");
    /*is_ambiguous_... S19237C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19237C12*), ABISELECT(124,84), "S19237C11");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C14*), ABISELECT(124,84), "S19237C11");
    check_base_class_offset(lv, (S19237C14*)(S19237C12*), ABISELECT(128,88), "S19237C11");
    check_base_class_offset(lv, (S19237C14*)(S19237C16*), ABISELECT(128,88), "S19237C11");
    check_base_class_offset(lv, (S19237C14*)(S19237C17*)(S19237C16*), ABISELECT(128,88), "S19237C11");
    check_base_class_offset(lv, (S2014C28*)(S19237C8*)(S19237C7*), ABISELECT(152,100), "S19237C11");
    check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C8*)(S19237C7*), ABISELECT(152,100), "S19237C11");
    check_base_class_offset(lv, (S19237C2*)(S19237C8*)(S19237C7*), ABISELECT(152,100), "S19237C11");
    /*is_ambiguous_... S19237C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C8*)(S19237C7*), ABISELECT(161,105), "S19237C11");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C8*)(S19237C7*), ABISELECT(164,108), "S19237C11");
    check_base_class_offset(lv, (S19237C8*)(S19237C7*), ABISELECT(152,100), "S19237C11");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C7*), ABISELECT(184,120), "S19237C11");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C7*), ABISELECT(184,120), "S19237C11");
    check_base_class_offset(lv, (S19237C7*)(S19237C12*), ABISELECT(152,100), "S19237C11");
    check_base_class_offset(lv, (S19237C12*), 0, "S19237C11");
    /*is_ambiguous_... S19237C11::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*), ABISELECT(56,36), "S19237C11");
    /*is_ambiguous_... S19237C11::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*), ABISELECT(56,36), "S19237C11");
    /*is_ambiguous_... S19237C11::S19237C8 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19237C8*), ABISELECT(200,132), "S19237C11");
    /*is_ambiguous_... S19237C11::S19237C8 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C8*), ABISELECT(200,132), "S19237C11");
    /*is_ambiguous_... S19237C11::S19237C8 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C8*), ABISELECT(200,132), "S19237C11");
    /*is_ambiguous_... S19237C11::S19237C8 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C8*), ABISELECT(209,137), "S19237C11");
    /*is_ambiguous_... S19237C11::S19237C8 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19237C8*), ABISELECT(212,140), "S19237C11");
    /*is_ambiguous_... S19237C11::S19237C8 */ AMB_check_base_class_offset(lv, (S19237C8*), ABISELECT(200,132), "S19237C11");
    /*is_ambiguous_... S19237C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C17*)(S19237C16*), ABISELECT(81,49), "S19237C11");
    /*is_ambiguous_... S19237C17::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C17*)(S19237C16*), ABISELECT(72,44), "S19237C11");
    /*is_ambiguous_... S19237C17::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C17*)(S19237C16*), ABISELECT(72,44), "S19237C11");
    check_base_class_offset(lv, (S19237C17*)(S19237C16*), ABISELECT(72,44), "S19237C11");
    /*is_ambiguous_... S19237C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C16*), 0, "S19237C11");
    check_base_class_offset(lv, (S19237C16*), ABISELECT(72,44), "S19237C11");
    test_class_info(&lv, &cd_S19237C11);
    dp->~S19237C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C11(Test_S19237C11, "S19237C11", ABISELECT(232,152));

#else // __cplusplus

extern void _ZN9S19237C11C1Ev();
extern void _ZN9S19237C11D2Ev();
Name_Map name_map_S19237C11[] = {
  NSPAIR(_ZN9S19237C11C1Ev),
  NSPAIR(_ZN9S19237C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C13;
extern VTBL_ENTRY _ZTI9S19237C13[];
extern  VTBL_ENTRY _ZTV9S19237C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C13[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C14;
extern VTBL_ENTRY _ZTI9S19237C14[];
extern  VTBL_ENTRY _ZTV9S19237C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C14[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C8;
extern VTBL_ENTRY _ZTI8S19237C8[];
extern  VTBL_ENTRY _ZTV8S19237C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C7;
extern VTBL_ENTRY _ZTI8S19237C7[];
extern  VTBL_ENTRY _ZTV8S19237C7[];
extern Class_Descriptor cd_S19237C12;
extern VTBL_ENTRY _ZTI9S19237C12[];
extern  VTBL_ENTRY _ZTV9S19237C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C12[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C8;
extern VTBL_ENTRY _ZTI8S19237C8[];
extern  VTBL_ENTRY _ZTV8S19237C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C17;
extern VTBL_ENTRY _ZTI9S19237C17[];
extern  VTBL_ENTRY _ZTV9S19237C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C16;
extern VTBL_ENTRY _ZTI9S19237C16[];
extern  VTBL_ENTRY _ZTV9S19237C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C16[];
static Base_Class bases_S19237C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(112,76), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19237C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19237C14,    ABISELECT(128,88), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(161,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(164,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19237C8,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(184,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(184,120), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19237C7,    ABISELECT(152,100), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19237C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(56,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    ABISELECT(200,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(200,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(200,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(209,137), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(212,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19237C8,    ABISELECT(200,132), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(81,49), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19237C17,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19237C16,    ABISELECT(72,44), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19237C11[];
extern void _ZN9S19237C11D1Ev();
extern void _ZN9S19237C11D0Ev();
extern void ABISELECT(_ZThn56_N9S19237C11D1Ev,_ZThn36_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S19237C11D0Ev,_ZThn36_N9S19237C11D0Ev)();
extern void ABISELECT(_ZThn72_N9S19237C11D1Ev,_ZThn44_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn72_N9S19237C11D0Ev,_ZThn44_N9S19237C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn112_N9S19237C11D1Ev,_ZThn76_N9S19237C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev)();
extern void ABISELECT(_ZThn112_N9S19237C11D0Ev,_ZThn76_N9S19237C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C11D1Ev,_ZTv0_n24_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn128_N9S19237C11D1Ev,_ZThn88_N9S19237C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C11D0Ev,_ZTv0_n24_N9S19237C11D0Ev)();
extern void ABISELECT(_ZThn128_N9S19237C11D0Ev,_ZThn88_N9S19237C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn152_N9S19237C11D1Ev,_ZThn100_N9S19237C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev)();
extern void ABISELECT(_ZThn152_N9S19237C11D0Ev,_ZThn100_N9S19237C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N9S19237C11D1Ev,_ZTvn20_n12_N9S19237C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19237C11D0Ev,_ZTvn20_n12_N9S19237C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn200_N9S19237C11D1Ev,_ZThn132_N9S19237C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev)();
extern void ABISELECT(_ZThn200_N9S19237C11D0Ev,_ZThn132_N9S19237C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19237C11[] = {
  0,
  ABISELECT(200,132),
  ABISELECT(152,100),
  ABISELECT(128,88),
  ABISELECT(124,84),
  0,
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&_ZN9S19237C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C11D0Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19237C11D1Ev,_ZThn36_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S19237C11D0Ev,_ZThn36_N9S19237C11D0Ev),
  ABISELECT(-72,-44),
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19237C11D1Ev,_ZThn44_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19237C11D0Ev,_ZThn44_N9S19237C11D0Ev),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev),
  ABISELECT(-128,-88),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C11D1Ev,_ZTv0_n24_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C11D0Ev,_ZTv0_n24_N9S19237C11D0Ev),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C11D1Ev,_ZTvn20_n12_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C11D0Ev,_ZTvn20_n12_N9S19237C11D0Ev),
  ABISELECT(-200,-132),
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19237C11[];
extern void _ZN9S19237C12D1Ev();
extern void _ZN9S19237C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C12__9S19237C11[] = {
  ABISELECT(152,100),
  ABISELECT(128,88),
  ABISELECT(124,84),
  0,
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&_ZN9S19237C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C12D0Ev,
};
extern void _ZN9S19237C13D1Ev();
extern void _ZN9S19237C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C139S19237C12__9S19237C11[] = {
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C13[0]),
  (VTBL_ENTRY)&_ZN9S19237C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev)();
extern void ABISELECT(_ZThn112_N9S19237C13D1Ev,_ZThn76_N9S19237C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev)();
extern void ABISELECT(_ZThn112_N9S19237C13D0Ev,_ZThn76_N9S19237C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C139S19237C12__9S19237C11[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19237C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19237C12D1Ev,_ZThn76_N9S19237C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19237C12D0Ev,_ZThn76_N9S19237C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C12__9S19237C11[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19237C12D1Ev,_ZTv0_n24_N9S19237C12D1Ev)();
extern void ABISELECT(_ZThn128_N9S19237C12D1Ev,_ZThn88_N9S19237C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C12D0Ev,_ZTv0_n24_N9S19237C12D0Ev)();
extern void ABISELECT(_ZThn128_N9S19237C12D0Ev,_ZThn88_N9S19237C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C12__9S19237C11[] = {
  ABISELECT(-128,-88),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C12D1Ev,_ZTv0_n24_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C12D0Ev,_ZTv0_n24_N9S19237C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev)();
extern void ABISELECT(_ZThn152_N9S19237C12D1Ev,_ZThn100_N9S19237C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev)();
extern void ABISELECT(_ZThn152_N9S19237C12D0Ev,_ZThn100_N9S19237C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C7__9S19237C12__9S19237C11[] = {
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19237C12D1Ev,_ZTvn20_n12_N9S19237C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19237C12D0Ev,_ZTvn20_n12_N9S19237C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19237C28S19237C7__A2__9S19237C12__9S19237C11[] = {
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C12D1Ev,_ZTvn20_n12_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C12D0Ev,_ZTvn20_n12_N9S19237C12D0Ev),
};
extern void _ZN9S19237C16D1Ev();
extern void _ZN9S19237C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C16__9S19237C11[] = {
  ABISELECT(-72,-44),
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C16[0]),
  (VTBL_ENTRY)&_ZN9S19237C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C16D0Ev,
};
extern void _ZN9S19237C17D1Ev();
extern void _ZN9S19237C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C179S19237C16__9S19237C11[] = {
  ABISELECT(52,40),
  ABISELECT(40,32),
  ABISELECT(56,44),
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&_ZN9S19237C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C17D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev)();
extern void ABISELECT(_ZThn56_N9S19237C17D1Ev,_ZThn44_N9S19237C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev)();
extern void ABISELECT(_ZThn56_N9S19237C17D0Ev,_ZThn44_N9S19237C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C179S19237C16__9S19237C11[] = {
  ABISELECT(-56,-44),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19237C17D1Ev,_ZThn32_N9S19237C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19237C17D0Ev,_ZThn32_N9S19237C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__A1__9S19237C179S19237C16__9S19237C11[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19237C16D1Ev,_ZTv0_n24_N9S19237C16D1Ev)();
extern void ABISELECT(_ZThn56_N9S19237C16D1Ev,_ZThn44_N9S19237C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C16D0Ev,_ZTv0_n24_N9S19237C16D0Ev)();
extern void ABISELECT(_ZThn56_N9S19237C16D0Ev,_ZThn44_N9S19237C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C16__9S19237C11[] = {
  ABISELECT(-56,-44),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  ABISELECT(-56,-44),
  (VTBL_ENTRY)&(_ZTI9S19237C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C16D1Ev,_ZTv0_n24_N9S19237C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C16D0Ev,_ZTv0_n24_N9S19237C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C16D1Ev,_ZTv0_n12_N9S19237C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19237C16D1Ev,_ZThn32_N9S19237C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C16D0Ev,_ZTv0_n12_N9S19237C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19237C16D0Ev,_ZThn32_N9S19237C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C16__9S19237C11[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19237C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C16D1Ev,_ZTv0_n12_N9S19237C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C16D0Ev,_ZTv0_n12_N9S19237C16D0Ev),
};
extern void _ZN9S19237C14D1Ev();
extern void _ZN9S19237C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C11[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-128,-88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&_ZN9S19237C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C14__9S19237C11[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev),
};
static  VTT_ENTRY vtt_S19237C11[] = {
  {&(_ZTV9S19237C11[9]),  9,51},
  {&(_tg__ZTV9S19237C12__9S19237C11[7]),  7,9},
  {&(_tg__ZTV9S19237C139S19237C12__9S19237C11[3]),  3,5},
  {&(_tg__ZTV8S19237C2__9S19237C139S19237C12__9S19237C11[3]),  3,5},
  {&(_tg__ZTV8S19237C2__9S19237C12__9S19237C11[3]),  3,5},
  {&(_tg__ZTV9S19237C14__9S19237C12__9S19237C11[6]),  6,8},
  {&(_tg__ZTV8S19237C7__9S19237C12__9S19237C11[3]),  3,5},
  {&(_tg__ZTV8S19237C28S19237C7__A2__9S19237C12__9S19237C11[2]),  2,4},
  {&(_tg__ZTV9S19237C16__9S19237C11[7]),  7,9},
  {&(_tg__ZTV9S19237C179S19237C16__9S19237C11[6]),  6,8},
  {&(_tg__ZTV9S19237C14__9S19237C179S19237C16__9S19237C11[6]),  6,8},
  {&(_tg__ZTV8S19237C2__A1__9S19237C179S19237C16__9S19237C11[3]),  3,5},
  {&(_tg__ZTV9S19237C14__9S19237C16__9S19237C11[6]),  6,8},
  {&(_tg__ZTV8S19237C2__9S19237C16__9S19237C11[3]),  3,5},
  {&(_ZTV9S19237C11[27]),  27,51},
  {&(_ZTV9S19237C11[35]),  35,51},
  {&(_ZTV9S19237C11[40]),  40,51},
  {&(_ZTV9S19237C11[44]),  44,51},
  {&(_ZTV9S19237C11[49]),  49,51},
  {&(_ZTV9S19237C11[22]),  22,51},
  {&(_tg__ZTV9S19237C14__9S19237C11[5]),  5,7},
  {&(_tg__ZTV8S19237C2__9S19237C14__9S19237C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19237C11[];
extern  VTBL_ENTRY _ZTV9S19237C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C11[];
static VTBL_ENTRY alt_thunk_names117[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C16D0Ev,_ZTv0_n12_N9S19237C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C16D0Ev,_ZThn32_N9S19237C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C16D1Ev,_ZTv0_n12_N9S19237C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C16D1Ev,_ZThn32_N9S19237C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C16D0Ev,_ZTv0_n24_N9S19237C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19237C16D0Ev,_ZThn44_N9S19237C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C16D1Ev,_ZTv0_n24_N9S19237C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19237C16D1Ev,_ZThn44_N9S19237C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C17D0Ev,_ZThn32_N9S19237C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C17D1Ev,_ZThn32_N9S19237C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19237C17D0Ev,_ZThn44_N9S19237C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19237C17D1Ev,_ZThn44_N9S19237C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C12D0Ev,_ZTv0_n24_N9S19237C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19237C12D0Ev,_ZThn88_N9S19237C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C12D1Ev,_ZTv0_n24_N9S19237C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19237C12D1Ev,_ZThn88_N9S19237C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19237C12D0Ev,_ZThn100_N9S19237C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C12D0Ev,_ZThn76_N9S19237C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19237C12D1Ev,_ZThn100_N9S19237C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C12D1Ev,_ZThn76_N9S19237C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C13D0Ev,_ZThn76_N9S19237C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C13D1Ev,_ZThn76_N9S19237C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C11D0Ev,_ZTv0_n24_N9S19237C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19237C11D0Ev,_ZThn88_N9S19237C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C11D1Ev,_ZTv0_n24_N9S19237C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19237C11D1Ev,_ZThn88_N9S19237C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19237C11D0Ev,_ZThn132_N9S19237C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19237C11D0Ev,_ZThn100_N9S19237C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C11D0Ev,_ZThn76_N9S19237C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19237C11D1Ev,_ZThn132_N9S19237C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19237C11D1Ev,_ZThn100_N9S19237C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C11D1Ev,_ZThn76_N9S19237C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19237C11 = {  "S19237C11", // class name
  bases_S19237C11, 30,
  &(vtc_S19237C11[0]), // expected_vtbl_contents
  &(vtt_S19237C11[0]), // expected_vtt_contents
  ABISELECT(232,152), // object size
  NSPAIRA(_ZTI9S19237C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19237C11),51, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19237C11),22, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names117,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19237C1  : virtual S19237C2 , S19237C4 , virtual S2014C24 , S19237C11 {
  ~S19237C1(); // tgen
  S19237C1(); // tgen
};
//SIG(1 S19237C1) C1{ VBC2{ BC3{ m} vd FC3} BC4{ VBC5{ VBC6{ m}} BC7{ BC8{ BC6 BC2 BC3 BC9{ m Fi} Fs:16 Fl} BC2 Fi} vd v1 Fi} VBC10{ m} BC11{ BC12{ BC13{ VBC2 FL} VBC6 VBC9 VBC14{ VBC6 VBC2 VBC9 vd Fp FC15{}} VBC7 vd Fl FC13} BC2 VBC8 BC16{ VBC14 BC17{ BC3 BC2 VBC6 VBC14 vd} VBC3 vd FC9[6]} vd}}


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

static void Test_S19237C1()
{
  extern Class_Descriptor cd_S19237C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,50)];
    init_test(&cd_S19237C1, buf);
    S19237C1 *dp, &lv = *(dp=new (buf) S19237C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,196), "sizeof(S19237C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19237C1)");
    /*is_ambiguous_... S19237C1::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*), ABISELECT(168,112), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*), ABISELECT(168,112), "S19237C1");
    check_base_class_offset(lv, (S19237C2*)(S19237C13*)(S19237C12*)(S19237C11*), ABISELECT(168,112), "S19237C1");
    check_base_class_offset(lv, (S19237C2*)(S19237C14*), ABISELECT(168,112), "S19237C1");
    check_base_class_offset(lv, (S2014C28*)(S19237C5*), ABISELECT(192,124), "S19237C1");
    /*is_ambiguous_... S19237C12::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19237C12*)(S19237C11*), ABISELECT(192,124), "S19237C1");
    check_base_class_offset(lv, (S2014C28*)(S19237C14*), ABISELECT(192,124), "S19237C1");
    check_base_class_offset(lv, (S2014C28*)(S19237C17*)(S19237C16*)(S19237C11*), ABISELECT(192,124), "S19237C1");
    check_base_class_offset(lv, (S19237C5*)(S19237C4*), ABISELECT(184,120), "S19237C1");
    check_base_class_offset(lv, (S2014C28*)(S19237C8*)(S19237C7*)(S19237C4*), 0, "S19237C1");
    check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C8*)(S19237C7*)(S19237C4*), 0, "S19237C1");
    check_base_class_offset(lv, (S19237C2*)(S19237C8*)(S19237C7*)(S19237C4*), 0, "S19237C1");
    /*is_ambiguous_... S19237C8::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C8*)(S19237C7*)(S19237C4*), ABISELECT(9,5), "S19237C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C8*)(S19237C7*)(S19237C4*), ABISELECT(12,8), "S19237C1");
    check_base_class_offset(lv, (S19237C8*)(S19237C7*)(S19237C4*), 0, "S19237C1");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C7*)(S19237C4*), ABISELECT(32,20), "S19237C1");
    /*is_ambiguous_... S19237C7::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C7*)(S19237C4*), ABISELECT(32,20), "S19237C1");
    check_base_class_offset(lv, (S19237C7*)(S19237C4*), 0, "S19237C1");
    check_base_class_offset(lv, (S19237C4*), 0, "S19237C1");
    check_base_class_offset(lv, (S2014C24*), 0, "S19237C1");
    check_base_class_offset(lv, (S19237C13*)(S19237C12*)(S19237C11*), ABISELECT(56,36), "S19237C1");
    /*is_ambiguous_... S19237C12::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19237C12*)(S19237C11*), ABISELECT(192,124), "S19237C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19237C14*), ABISELECT(192,124), "S19237C1");
    check_base_class_offset(lv, (S19237C14*)(S19237C12*)(S19237C11*), ABISELECT(200,128), "S19237C1");
    check_base_class_offset(lv, (S19237C14*)(S19237C16*)(S19237C11*), ABISELECT(200,128), "S19237C1");
    check_base_class_offset(lv, (S19237C14*)(S19237C17*)(S19237C16*)(S19237C11*), ABISELECT(200,128), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C7 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19237C8*)(S19237C7*), ABISELECT(224,140), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C7 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C8*)(S19237C7*), ABISELECT(224,140), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C7 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C8*)(S19237C7*), ABISELECT(224,140), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C7 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C8*)(S19237C7*), ABISELECT(233,145), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C7 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19237C8*)(S19237C7*), ABISELECT(236,148), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C7 */ AMB_check_base_class_offset(lv, (S19237C8*)(S19237C7*), ABISELECT(224,140), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C7 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C7*), ABISELECT(256,160), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C7 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C7*), ABISELECT(256,160), "S19237C1");
    check_base_class_offset(lv, (S19237C7*)(S19237C12*)(S19237C11*), ABISELECT(224,140), "S19237C1");
    check_base_class_offset(lv, (S19237C12*)(S19237C11*), ABISELECT(56,36), "S19237C1");
    /*is_ambiguous_... S19237C11::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C11*), ABISELECT(112,72), "S19237C1");
    /*is_ambiguous_... S19237C11::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C11*), ABISELECT(112,72), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C8 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19237C8*), ABISELECT(272,172), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C8 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C8*), ABISELECT(272,172), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C8 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C8*), ABISELECT(272,172), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C8 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C8*), ABISELECT(281,177), "S19237C1");
    /*is_ambiguous_... S19237C1::S19237C8 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19237C8*), ABISELECT(284,180), "S19237C1");
    /*is_ambiguous_... S19237C11::S19237C8 */ AMB_check_base_class_offset(lv, (S19237C8*)(S19237C11*), ABISELECT(272,172), "S19237C1");
    /*is_ambiguous_... S19237C17::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C17*)(S19237C16*)(S19237C11*), ABISELECT(137,85), "S19237C1");
    /*is_ambiguous_... S19237C17::S19237C2 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C2*)(S19237C17*)(S19237C16*)(S19237C11*), ABISELECT(128,80), "S19237C1");
    /*is_ambiguous_... S19237C17::S19237C2 */ AMB_check_base_class_offset(lv, (S19237C2*)(S19237C17*)(S19237C16*)(S19237C11*), ABISELECT(128,80), "S19237C1");
    check_base_class_offset(lv, (S19237C17*)(S19237C16*)(S19237C11*), ABISELECT(128,80), "S19237C1");
    /*is_ambiguous_... S19237C16::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19237C16*)(S19237C11*), ABISELECT(304,192), "S19237C1");
    check_base_class_offset(lv, (S19237C16*)(S19237C11*), ABISELECT(128,80), "S19237C1");
    check_base_class_offset(lv, (S19237C11*), ABISELECT(56,36), "S19237C1");
    test_class_info(&lv, &cd_S19237C1);
    dp->~S19237C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19237C1(Test_S19237C1, "S19237C1", ABISELECT(312,196));

#else // __cplusplus

extern void _ZN8S19237C1C1Ev();
extern void _ZN8S19237C1D1Ev();
Name_Map name_map_S19237C1[] = {
  NSPAIR(_ZN8S19237C1C1Ev),
  NSPAIR(_ZN8S19237C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19237C5;
extern VTBL_ENTRY _ZTI8S19237C5[];
extern  VTBL_ENTRY _ZTV8S19237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19237C5[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C8;
extern VTBL_ENTRY _ZTI8S19237C8[];
extern  VTBL_ENTRY _ZTV8S19237C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C7;
extern VTBL_ENTRY _ZTI8S19237C7[];
extern  VTBL_ENTRY _ZTV8S19237C7[];
extern Class_Descriptor cd_S19237C4;
extern VTBL_ENTRY _ZTI8S19237C4[];
extern  VTBL_ENTRY _ZTV8S19237C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19237C4[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S19237C13;
extern VTBL_ENTRY _ZTI9S19237C13[];
extern  VTBL_ENTRY _ZTV9S19237C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C13[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C14;
extern VTBL_ENTRY _ZTI9S19237C14[];
extern  VTBL_ENTRY _ZTV9S19237C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C14[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C8;
extern VTBL_ENTRY _ZTI8S19237C8[];
extern  VTBL_ENTRY _ZTV8S19237C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C7;
extern VTBL_ENTRY _ZTI8S19237C7[];
extern  VTBL_ENTRY _ZTV8S19237C7[];
extern Class_Descriptor cd_S19237C12;
extern VTBL_ENTRY _ZTI9S19237C12[];
extern  VTBL_ENTRY _ZTV9S19237C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C12[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19237C8;
extern VTBL_ENTRY _ZTI8S19237C8[];
extern  VTBL_ENTRY _ZTV8S19237C8[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C2;
extern VTBL_ENTRY _ZTI8S19237C2[];
extern  VTBL_ENTRY _ZTV8S19237C2[];
extern Class_Descriptor cd_S19237C17;
extern VTBL_ENTRY _ZTI9S19237C17[];
extern  VTBL_ENTRY _ZTV9S19237C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C17[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19237C16;
extern VTBL_ENTRY _ZTI9S19237C16[];
extern  VTBL_ENTRY _ZTV9S19237C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C16[];
extern Class_Descriptor cd_S19237C11;
extern VTBL_ENTRY _ZTI9S19237C11[];
extern  VTBL_ENTRY _ZTV9S19237C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19237C11[];
static Base_Class bases_S19237C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(168,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
    1, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(168,112), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19237C5,    ABISELECT(184,120), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19237C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    9, //immediately_derived
  0, 0},
  {&cd_S19237C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(32,20), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19237C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19237C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19237C13,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19237C14,    ABISELECT(200,128), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(233,145), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(236,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19237C8,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(256,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(256,160), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19237C7,    ABISELECT(224,140), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S19237C12,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(112,72), //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
    17, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(272,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(272,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(272,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(281,177), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(284,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19237C8,    ABISELECT(272,172), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(137,85), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19237C2,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19237C17,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(304,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S19237C16,    ABISELECT(128,80), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19237C11,    ABISELECT(56,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19237C1[];
extern void _ZN8S19237C1D1Ev();
extern void _ZN8S19237C1D0Ev();
extern void _ZN8S19237C42v1Ev();
extern void ABISELECT(_ZThn32_N8S19237C1D1Ev,_ZThn20_N8S19237C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19237C1D0Ev,_ZThn20_N8S19237C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19237C1D1Ev,_ZThn36_N8S19237C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19237C1D0Ev,_ZThn36_N8S19237C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S19237C1D1Ev,_ZThn72_N8S19237C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19237C1D0Ev,_ZThn72_N8S19237C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19237C1D1Ev,_ZThn80_N8S19237C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19237C1D0Ev,_ZThn80_N8S19237C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19237C1D1Ev,_ZTv0_n12_N8S19237C1D1Ev)();
extern void ABISELECT(_ZThn168_N8S19237C1D1Ev,_ZThn112_N8S19237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19237C1D0Ev,_ZTv0_n12_N8S19237C1D0Ev)();
extern void ABISELECT(_ZThn168_N8S19237C1D0Ev,_ZThn112_N8S19237C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19237C1D1Ev,_ZTv0_n24_N8S19237C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S19237C1D1Ev,_ZThn128_N8S19237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19237C1D0Ev,_ZTv0_n24_N8S19237C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S19237C1D0Ev,_ZThn128_N8S19237C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19237C1D1Ev,_ZTv0_n12_N8S19237C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19237C1D1Ev,_ZThn140_N8S19237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19237C1D0Ev,_ZTv0_n12_N8S19237C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19237C1D0Ev,_ZThn140_N8S19237C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19237C1D1Ev,_ZTvn20_n12_N8S19237C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19237C1D0Ev,_ZTvn20_n12_N8S19237C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19237C1D1Ev,_ZTv0_n12_N8S19237C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S19237C1D1Ev,_ZThn172_N8S19237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19237C1D0Ev,_ZTv0_n12_N8S19237C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S19237C1D0Ev,_ZThn172_N8S19237C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19237C1[] = {
  ABISELECT(304,192),
  ABISELECT(272,172),
  ABISELECT(224,140),
  ABISELECT(200,128),
  ABISELECT(192,124),
  0,
  ABISELECT(168,112),
  ABISELECT(192,124),
  ABISELECT(184,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&_ZN8S19237C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19237C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19237C42v1Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19237C1D1Ev,_ZThn20_N8S19237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19237C1D0Ev,_ZThn20_N8S19237C1D0Ev),
  ABISELECT(248,156),
  ABISELECT(216,136),
  ABISELECT(168,104),
  ABISELECT(144,92),
  ABISELECT(136,88),
  ABISELECT(136,88),
  ABISELECT(112,76),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19237C1D1Ev,_ZThn36_N8S19237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19237C1D0Ev,_ZThn36_N8S19237C1D0Ev),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19237C1D1Ev,_ZThn72_N8S19237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19237C1D0Ev,_ZThn72_N8S19237C1D0Ev),
  ABISELECT(176,112),
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(72,48),
  ABISELECT(64,44),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19237C1D1Ev,_ZThn80_N8S19237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S19237C1D0Ev,_ZThn80_N8S19237C1D0Ev),
  ABISELECT(-168,-112),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19237C1D1Ev,_ZTv0_n12_N8S19237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19237C1D0Ev,_ZTv0_n12_N8S19237C1D0Ev),
  ABISELECT(8,4),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  ABISELECT(-200,-128),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-200,-128),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19237C1D1Ev,_ZTv0_n24_N8S19237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19237C1D0Ev,_ZTv0_n24_N8S19237C1D0Ev),
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19237C1D1Ev,_ZTv0_n12_N8S19237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19237C1D0Ev,_ZTv0_n12_N8S19237C1D0Ev),
  ABISELECT(-256,-160),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19237C1D1Ev,_ZTvn20_n12_N8S19237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19237C1D0Ev,_ZTvn20_n12_N8S19237C1D0Ev),
  ABISELECT(-272,-172),
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S19237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19237C1D1Ev,_ZTv0_n12_N8S19237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19237C1D0Ev,_ZTv0_n12_N8S19237C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19237C1[];
extern void _ZN8S19237C4D1Ev();
extern void _ZN8S19237C4D0Ev();
extern void _ZN8S19237C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19237C4__8S19237C1[] = {
  ABISELECT(192,124),
  ABISELECT(184,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19237C4[0]),
  (VTBL_ENTRY)&_ZN8S19237C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19237C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19237C42v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19237C5__8S19237C4__8S19237C1[] = {
  ABISELECT(8,4),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI8S19237C4[0]),
};
extern void _ZN9S19237C11D1Ev();
extern void _ZN9S19237C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C11__8S19237C1[] = {
  ABISELECT(248,156),
  ABISELECT(216,136),
  ABISELECT(168,104),
  ABISELECT(144,92),
  ABISELECT(136,88),
  ABISELECT(136,88),
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&_ZN9S19237C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C11D0Ev,
};
extern void _ZN9S19237C12D1Ev();
extern void _ZN9S19237C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C129S19237C11__8S19237C1[] = {
  ABISELECT(168,104),
  ABISELECT(144,92),
  ABISELECT(136,88),
  ABISELECT(136,88),
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&_ZN9S19237C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C12D0Ev,
};
extern void _ZN9S19237C13D1Ev();
extern void _ZN9S19237C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C139S19237C129S19237C11__8S19237C1[] = {
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C13[0]),
  (VTBL_ENTRY)&_ZN9S19237C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev)();
extern void ABISELECT(_ZThn112_N9S19237C13D1Ev,_ZThn76_N9S19237C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev)();
extern void ABISELECT(_ZThn112_N9S19237C13D0Ev,_ZThn76_N9S19237C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C139S19237C129S19237C11__8S19237C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19237C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19237C12D1Ev,_ZThn76_N9S19237C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19237C12D0Ev,_ZThn76_N9S19237C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C129S19237C11__8S19237C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19237C12D1Ev,_ZTv0_n24_N9S19237C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19237C12D1Ev,_ZThn92_N9S19237C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C12D0Ev,_ZTv0_n24_N9S19237C12D0Ev)();
extern void ABISELECT(_ZThn144_N9S19237C12D0Ev,_ZThn92_N9S19237C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C129S19237C11__8S19237C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C12D1Ev,_ZTv0_n24_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C12D0Ev,_ZTv0_n24_N9S19237C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev)();
extern void ABISELECT(_ZThn168_N9S19237C12D1Ev,_ZThn104_N9S19237C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev)();
extern void ABISELECT(_ZThn168_N9S19237C12D0Ev,_ZThn104_N9S19237C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C7__9S19237C129S19237C11__8S19237C1[] = {
  ABISELECT(-168,-104),
  ABISELECT(-168,-104),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19237C12D1Ev,_ZTvn20_n12_N9S19237C12D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19237C12D0Ev,_ZTvn20_n12_N9S19237C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19237C28S19237C7__A2__9S19237C129S19237C11__8S19237C1[] = {
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI9S19237C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C12D1Ev,_ZTvn20_n12_N9S19237C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C12D0Ev,_ZTvn20_n12_N9S19237C12D0Ev),
};
extern void _ZN9S19237C16D1Ev();
extern void _ZN9S19237C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C169S19237C11__8S19237C1[] = {
  ABISELECT(176,112),
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(72,48),
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C16[0]),
  (VTBL_ENTRY)&_ZN9S19237C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C16D0Ev,
};
extern void _ZN9S19237C17D1Ev();
extern void _ZN9S19237C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C179S19237C169S19237C11__8S19237C1[] = {
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(72,48),
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&_ZN9S19237C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C17D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev)();
extern void ABISELECT(_ZThn72_N9S19237C17D1Ev,_ZThn48_N9S19237C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev)();
extern void ABISELECT(_ZThn72_N9S19237C17D0Ev,_ZThn48_N9S19237C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C179S19237C169S19237C11__8S19237C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19237C17D1Ev,_ZThn32_N9S19237C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19237C17D0Ev,_ZThn32_N9S19237C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__A1__9S19237C179S19237C169S19237C11__8S19237C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19237C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19237C16D1Ev,_ZTv0_n24_N9S19237C16D1Ev)();
extern void ABISELECT(_ZThn72_N9S19237C16D1Ev,_ZThn48_N9S19237C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C16D0Ev,_ZTv0_n24_N9S19237C16D0Ev)();
extern void ABISELECT(_ZThn72_N9S19237C16D0Ev,_ZThn48_N9S19237C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C169S19237C11__8S19237C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19237C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C16D1Ev,_ZTv0_n24_N9S19237C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C16D0Ev,_ZTv0_n24_N9S19237C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C16D1Ev,_ZTv0_n12_N9S19237C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19237C16D1Ev,_ZThn32_N9S19237C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C16D0Ev,_ZTv0_n12_N9S19237C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19237C16D0Ev,_ZThn32_N9S19237C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C169S19237C11__8S19237C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19237C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C16D1Ev,_ZTv0_n12_N9S19237C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C16D0Ev,_ZTv0_n12_N9S19237C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn112_N9S19237C11D1Ev,_ZThn76_N9S19237C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev)();
extern void ABISELECT(_ZThn112_N9S19237C11D0Ev,_ZThn76_N9S19237C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C11__8S19237C1[] = {
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19237C11D1Ev,_ZTv0_n24_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn144_N9S19237C11D1Ev,_ZThn92_N9S19237C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19237C11D0Ev,_ZTv0_n24_N9S19237C11D0Ev)();
extern void ABISELECT(_ZThn144_N9S19237C11D0Ev,_ZThn92_N9S19237C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19237C14__9S19237C11__8S19237C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C11D1Ev,_ZTv0_n24_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19237C11D0Ev,_ZTv0_n24_N9S19237C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn168_N9S19237C11D1Ev,_ZThn104_N9S19237C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev)();
extern void ABISELECT(_ZThn168_N9S19237C11D0Ev,_ZThn104_N9S19237C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C7__9S19237C11__8S19237C1[] = {
  ABISELECT(-168,-104),
  ABISELECT(-168,-104),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N9S19237C11D1Ev,_ZTvn20_n12_N9S19237C11D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N9S19237C11D0Ev,_ZTvn20_n12_N9S19237C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19237C28S19237C7__A2__9S19237C11__8S19237C1[] = {
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C11D1Ev,_ZTvn20_n12_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N9S19237C11D0Ev,_ZTvn20_n12_N9S19237C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn216_N9S19237C11D1Ev,_ZThn136_N9S19237C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev)();
extern void ABISELECT(_ZThn216_N9S19237C11D0Ev,_ZThn136_N9S19237C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19237C8__A1__9S19237C11__8S19237C1[] = {
  ABISELECT(-216,-136),
  ABISELECT(-216,-136),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev),
};
extern void ABISELECT(_ZThn72_N9S19237C11D1Ev,_ZThn44_N9S19237C11D1Ev)();
extern void ABISELECT(_ZThn72_N9S19237C11D0Ev,_ZThn44_N9S19237C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19237C16__9S19237C11__8S19237C1[] = {
  ABISELECT(176,112),
  ABISELECT(64,44),
  ABISELECT(40,32),
  ABISELECT(72,48),
  ABISELECT(64,44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S19237C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19237C11D1Ev,_ZThn44_N9S19237C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19237C11D0Ev,_ZThn44_N9S19237C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19237C5__8S19237C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19237C5[0]),
};
extern void _ZN9S19237C14D1Ev();
extern void _ZN9S19237C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19237C14__8S19237C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&_ZN9S19237C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19237C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19237C2__9S19237C14__8S19237C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19237C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D1Ev,_ZTv0_n12_N9S19237C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19237C14D0Ev,_ZTv0_n12_N9S19237C14D0Ev),
};
static  VTT_ENTRY vtt_S19237C1[] = {
  {&(_ZTV8S19237C1[11]),  11,72},
  {&(_tg__ZTV8S19237C4__8S19237C1[4]),  4,7},
  {&(_tg__ZTV8S19237C5__8S19237C4__8S19237C1[3]),  3,3},
  {&(_tg__ZTV9S19237C11__8S19237C1[9]),  9,11},
  {&(_tg__ZTV9S19237C129S19237C11__8S19237C1[7]),  7,9},
  {&(_tg__ZTV9S19237C139S19237C129S19237C11__8S19237C1[3]),  3,5},
  {&(_tg__ZTV8S19237C2__9S19237C139S19237C129S19237C11__8S19237C1[3]),  3,5},
  {&(_tg__ZTV8S19237C2__9S19237C129S19237C11__8S19237C1[3]),  3,5},
  {&(_tg__ZTV9S19237C14__9S19237C129S19237C11__8S19237C1[6]),  6,8},
  {&(_tg__ZTV8S19237C7__9S19237C129S19237C11__8S19237C1[3]),  3,5},
  {&(_tg__ZTV8S19237C28S19237C7__A2__9S19237C129S19237C11__8S19237C1[2]),  2,4},
  {&(_tg__ZTV9S19237C169S19237C11__8S19237C1[7]),  7,9},
  {&(_tg__ZTV9S19237C179S19237C169S19237C11__8S19237C1[6]),  6,8},
  {&(_tg__ZTV9S19237C14__9S19237C179S19237C169S19237C11__8S19237C1[6]),  6,8},
  {&(_tg__ZTV8S19237C2__A1__9S19237C179S19237C169S19237C11__8S19237C1[3]),  3,5},
  {&(_tg__ZTV9S19237C14__9S19237C169S19237C11__8S19237C1[6]),  6,8},
  {&(_tg__ZTV8S19237C2__9S19237C169S19237C11__8S19237C1[3]),  3,5},
  {&(_tg__ZTV8S19237C2__9S19237C11__8S19237C1[3]),  3,5},
  {&(_tg__ZTV9S19237C14__9S19237C11__8S19237C1[6]),  6,8},
  {&(_tg__ZTV8S19237C7__9S19237C11__8S19237C1[3]),  3,5},
  {&(_tg__ZTV8S19237C28S19237C7__A2__9S19237C11__8S19237C1[2]),  2,4},
  {&(_tg__ZTV8S19237C8__A1__9S19237C11__8S19237C1[3]),  3,5},
  {&(_tg__ZTV9S19237C16__9S19237C11__8S19237C1[7]),  7,9},
  {&(_ZTV8S19237C1[45]),  45,72},
  {&(_ZTV8S19237C1[50]),  50,72},
  {&(_ZTV8S19237C1[27]),  27,72},
  {&(_ZTV8S19237C1[56]),  56,72},
  {&(_ZTV8S19237C1[61]),  61,72},
  {&(_ZTV8S19237C1[65]),  65,72},
  {&(_ZTV8S19237C1[70]),  70,72},
  {&(_ZTV8S19237C1[40]),  40,72},
  {&(_tg__ZTV8S19237C5__8S19237C1[3]),  3,3},
  {&(_tg__ZTV9S19237C14__8S19237C1[5]),  5,7},
  {&(_tg__ZTV8S19237C2__9S19237C14__8S19237C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19237C1[];
extern  VTBL_ENTRY _ZTV8S19237C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19237C1[];
static VTBL_ENTRY alt_thunk_names118[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C11D0Ev,_ZTv0_n24_N9S19237C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19237C11D0Ev,_ZThn92_N9S19237C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C11D1Ev,_ZTv0_n24_N9S19237C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19237C11D1Ev,_ZThn92_N9S19237C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C11D0Ev,_ZTv0_n12_N9S19237C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S19237C11D0Ev,_ZThn136_N9S19237C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S19237C11D0Ev,_ZThn104_N9S19237C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C11D0Ev,_ZThn76_N9S19237C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C11D1Ev,_ZTv0_n12_N9S19237C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S19237C11D1Ev,_ZThn136_N9S19237C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S19237C11D1Ev,_ZThn104_N9S19237C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C11D1Ev,_ZThn76_N9S19237C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C16D0Ev,_ZTv0_n12_N9S19237C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C16D0Ev,_ZThn32_N9S19237C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C16D1Ev,_ZTv0_n12_N9S19237C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C16D1Ev,_ZThn32_N9S19237C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C16D0Ev,_ZTv0_n24_N9S19237C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19237C16D0Ev,_ZThn48_N9S19237C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C16D1Ev,_ZTv0_n24_N9S19237C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19237C16D1Ev,_ZThn48_N9S19237C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C17D0Ev,_ZTv0_n12_N9S19237C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C17D0Ev,_ZThn32_N9S19237C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C17D1Ev,_ZTv0_n12_N9S19237C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19237C17D1Ev,_ZThn32_N9S19237C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C17D0Ev,_ZTv0_n24_N9S19237C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19237C17D0Ev,_ZThn48_N9S19237C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C17D1Ev,_ZTv0_n24_N9S19237C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19237C17D1Ev,_ZThn48_N9S19237C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C12D0Ev,_ZTv0_n24_N9S19237C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19237C12D0Ev,_ZThn92_N9S19237C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19237C12D1Ev,_ZTv0_n24_N9S19237C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19237C12D1Ev,_ZThn92_N9S19237C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C12D0Ev,_ZTv0_n12_N9S19237C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S19237C12D0Ev,_ZThn104_N9S19237C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C12D0Ev,_ZThn76_N9S19237C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C12D1Ev,_ZTv0_n12_N9S19237C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N9S19237C12D1Ev,_ZThn104_N9S19237C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C12D1Ev,_ZThn76_N9S19237C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C13D0Ev,_ZTv0_n12_N9S19237C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C13D0Ev,_ZThn76_N9S19237C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19237C13D1Ev,_ZTv0_n12_N9S19237C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19237C13D1Ev,_ZThn76_N9S19237C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19237C1D0Ev,_ZTv0_n24_N8S19237C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19237C1D0Ev,_ZThn128_N8S19237C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19237C1D1Ev,_ZTv0_n24_N8S19237C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19237C1D1Ev,_ZThn128_N8S19237C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19237C1D0Ev,_ZTv0_n12_N8S19237C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19237C1D0Ev,_ZThn172_N8S19237C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19237C1D0Ev,_ZThn140_N8S19237C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19237C1D0Ev,_ZThn112_N8S19237C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19237C1D1Ev,_ZTv0_n12_N8S19237C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19237C1D1Ev,_ZThn172_N8S19237C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19237C1D1Ev,_ZThn140_N8S19237C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19237C1D1Ev,_ZThn112_N8S19237C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19237C1 = {  "S19237C1", // class name
  bases_S19237C1, 43,
  &(vtc_S19237C1[0]), // expected_vtbl_contents
  &(vtt_S19237C1[0]), // expected_vtt_contents
  ABISELECT(312,196), // object size
  NSPAIRA(_ZTI8S19237C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19237C1),72, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19237C1),34, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names118,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19437C4  : S2014C38 {
  ::S2014C38 s19437c4f0;
  virtual  ~S19437C4(); // _ZN8S19437C4D1Ev
  S19437C4(); // tgen
};
//SIG(-1 S19437C4) C1{ BC2{ m} vd FC2}


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

static void Test_S19437C4()
{
  extern Class_Descriptor cd_S19437C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19437C4, buf);
    S19437C4 *dp, &lv = *(dp=new (buf) S19437C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19437C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C4)");
    check_base_class_offset(lv, (S2014C38*), 0, "S19437C4");
    check_field_offset(lv, s19437c4f0, ABISELECT(8,4), "S19437C4.s19437c4f0");
    test_class_info(&lv, &cd_S19437C4);
    dp->~S19437C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C4(Test_S19437C4, "S19437C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19437C4C1Ev();
extern void _ZN8S19437C4D1Ev();
Name_Map name_map_S19437C4[] = {
  NSPAIR(_ZN8S19437C4C1Ev),
  NSPAIR(_ZN8S19437C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S19437C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19437C4[];
extern void _ZN8S19437C4D1Ev();
extern void _ZN8S19437C4D0Ev();
static  VTBL_ENTRY vtc_S19437C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C4[0]),
  (VTBL_ENTRY)&_ZN8S19437C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C4D0Ev,
};
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
Class_Descriptor cd_S19437C4 = {  "S19437C4", // class name
  bases_S19437C4, 1,
  &(vtc_S19437C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19437C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19437C4),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  S19437C3  : virtual S19437C4 {
  __tsi64 s19437c3f0;
  ~S19437C3(); // tgen
  S19437C3(); // tgen
};
//SIG(-1 S19437C3) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S19437C3()
{
  extern Class_Descriptor cd_S19437C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19437C3, buf);
    S19437C3 *dp, &lv = *(dp=new (buf) S19437C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19437C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C3)");
    check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(16,12), "S19437C3");
    check_base_class_offset(lv, (S19437C4*), ABISELECT(16,12), "S19437C3");
    check_field_offset(lv, s19437c3f0, ABISELECT(8,4), "S19437C3.s19437c3f0");
    test_class_info(&lv, &cd_S19437C3);
    dp->~S19437C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C3(Test_S19437C3, "S19437C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19437C3C1Ev();
extern void _ZN8S19437C3D1Ev();
Name_Map name_map_S19437C3[] = {
  NSPAIR(_ZN8S19437C3C1Ev),
  NSPAIR(_ZN8S19437C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
static Base_Class bases_S19437C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19437C3[];
extern void _ZN8S19437C3D1Ev();
extern void _ZN8S19437C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19437C3D1Ev,_ZThn12_N8S19437C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19437C3D0Ev,_ZThn12_N8S19437C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19437C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&_ZN8S19437C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C3D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19437C3[];
static  VTT_ENTRY vtt_S19437C3[] = {
  {&(_ZTV8S19437C3[3]),  3,10},
  {&(_ZTV8S19437C3[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S19437C3[];
extern  VTBL_ENTRY _ZTV8S19437C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C3[];
static VTBL_ENTRY alt_thunk_names119[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C3D0Ev,_ZThn12_N8S19437C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C3D1Ev,_ZThn12_N8S19437C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19437C3 = {  "S19437C3", // class name
  bases_S19437C3, 2,
  &(vtc_S19437C3[0]), // expected_vtbl_contents
  &(vtt_S19437C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19437C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19437C3),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19437C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names119,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19437C2  : S19437C3 {
  virtual  ~S19437C2(); // _ZN8S19437C2D2Ev
  S19437C2(); // tgen
};
//SIG(-1 S19437C2) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} vd}


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

static void Test_S19437C2()
{
  extern Class_Descriptor cd_S19437C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19437C2, buf);
    S19437C2 *dp, &lv = *(dp=new (buf) S19437C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19437C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C2)");
    check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(16,12), "S19437C2");
    check_base_class_offset(lv, (S19437C4*)(S19437C3*), ABISELECT(16,12), "S19437C2");
    check_base_class_offset(lv, (S19437C3*), 0, "S19437C2");
    test_class_info(&lv, &cd_S19437C2);
    dp->~S19437C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C2(Test_S19437C2, "S19437C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19437C2C1Ev();
extern void _ZN8S19437C2D2Ev();
Name_Map name_map_S19437C2[] = {
  NSPAIR(_ZN8S19437C2C1Ev),
  NSPAIR(_ZN8S19437C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C3;
extern VTBL_ENTRY _ZTI8S19437C3[];
extern  VTBL_ENTRY _ZTV8S19437C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C3[];
static Base_Class bases_S19437C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19437C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19437C2[];
extern void _ZN8S19437C2D1Ev();
extern void _ZN8S19437C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19437C2D1Ev,_ZTv0_n12_N8S19437C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19437C2D1Ev,_ZThn12_N8S19437C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C2D0Ev,_ZTv0_n12_N8S19437C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19437C2D0Ev,_ZThn12_N8S19437C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19437C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C2[0]),
  (VTBL_ENTRY)&_ZN8S19437C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C2D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19437C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C2D1Ev,_ZTv0_n12_N8S19437C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C2D0Ev,_ZTv0_n12_N8S19437C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19437C2[];
extern void _ZN8S19437C3D1Ev();
extern void _ZN8S19437C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C3__8S19437C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&_ZN8S19437C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19437C3D1Ev,_ZThn12_N8S19437C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19437C3D0Ev,_ZThn12_N8S19437C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C3__8S19437C2[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev),
};
static  VTT_ENTRY vtt_S19437C2[] = {
  {&(_ZTV8S19437C2[3]),  3,10},
  {&(_tg__ZTV8S19437C3__8S19437C2[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C3__8S19437C2[3]),  3,5},
  {&(_ZTV8S19437C2[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S19437C2[];
extern  VTBL_ENTRY _ZTV8S19437C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C2[];
static VTBL_ENTRY alt_thunk_names120[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C3D0Ev,_ZThn12_N8S19437C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C3D1Ev,_ZThn12_N8S19437C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C2D0Ev,_ZTv0_n12_N8S19437C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C2D0Ev,_ZThn12_N8S19437C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C2D1Ev,_ZTv0_n12_N8S19437C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C2D1Ev,_ZThn12_N8S19437C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19437C2 = {  "S19437C2", // class name
  bases_S19437C2, 3,
  &(vtc_S19437C2[0]), // expected_vtbl_contents
  &(vtt_S19437C2[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19437C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19437C2),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19437C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names120,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19437C10  : virtual S2014C28 , virtual S19437C4 , virtual S3222C8_nt {
  void *s19437c10f0;
  ::S19762C18_nt s19437c10f1;
  virtual  ~S19437C10(); // _ZN9S19437C10D2Ev
  S19437C10(); // tgen
};
//SIG(-1 S19437C10) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S19437C10()
{
  extern Class_Descriptor cd_S19437C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19437C10, buf);
    S19437C10 *dp, &lv = *(dp=new (buf) S19437C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19437C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C10)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19437C10");
    check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(24,12), "S19437C10");
    check_base_class_offset(lv, (S19437C4*), ABISELECT(24,12), "S19437C10");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S19437C10");
    check_field_offset(lv, s19437c10f0, ABISELECT(8,4), "S19437C10.s19437c10f0");
    check_field_offset(lv, s19437c10f1, ABISELECT(16,8), "S19437C10.s19437c10f1");
    test_class_info(&lv, &cd_S19437C10);
    dp->~S19437C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C10(Test_S19437C10, "S19437C10", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19437C10C1Ev();
extern void _ZN9S19437C10D2Ev();
Name_Map name_map_S19437C10[] = {
  NSPAIR(_ZN9S19437C10C1Ev),
  NSPAIR(_ZN9S19437C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19437C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19437C10[];
extern void _ZN9S19437C10D1Ev();
extern void _ZN9S19437C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19437C10D1Ev,_ZThn12_N9S19437C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19437C10D0Ev,_ZThn12_N9S19437C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19437C10[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&_ZN9S19437C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C10D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19437C10[];
static  VTT_ENTRY vtt_S19437C10[] = {
  {&(_ZTV9S19437C10[5]),  5,12},
  {&(_ZTV9S19437C10[10]),  10,12},
};
extern VTBL_ENTRY _ZTI9S19437C10[];
extern  VTBL_ENTRY _ZTV9S19437C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C10[];
static VTBL_ENTRY alt_thunk_names121[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19437C10D0Ev,_ZThn12_N9S19437C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19437C10D1Ev,_ZThn12_N9S19437C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19437C10 = {  "S19437C10", // class name
  bases_S19437C10, 4,
  &(vtc_S19437C10[0]), // expected_vtbl_contents
  &(vtt_S19437C10[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19437C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19437C10),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19437C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names121,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19437C13  : S2014C28 , S19437C4 , S2014C38 , S3222C8_nt {
  short s19437c13f0:16;
  __tsi64 s19437c13f1;
  ~S19437C13(); // tgen
  S19437C13(); // tgen
};
//SIG(-1 S19437C13) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 FL}


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

static void Test_S19437C13()
{
  extern Class_Descriptor cd_S19437C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19437C13, buf);
    S19437C13 *dp, &lv = *(dp=new (buf) S19437C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19437C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C13)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19437C13");
    check_base_class_offset(lv, (S2014C38*)(S19437C4*), 0, "S19437C13");
    check_base_class_offset(lv, (S19437C4*), 0, "S19437C13");
    /*is_ambiguous_... S19437C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S19437C13");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S19437C13");
    set_bf_and_test(lv, s19437c13f0, ABISELECT(16,12), 0, 16, 1, "S19437C13");
    set_bf_and_test(lv, s19437c13f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S19437C13");
    check_field_offset(lv, s19437c13f1, ABISELECT(24,16), "S19437C13.s19437c13f1");
    test_class_info(&lv, &cd_S19437C13);
    dp->~S19437C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C13(Test_S19437C13, "S19437C13", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN9S19437C13C1Ev();
extern void _ZN9S19437C13D1Ev();
Name_Map name_map_S19437C13[] = {
  NSPAIR(_ZN9S19437C13C1Ev),
  NSPAIR(_ZN9S19437C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19437C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19437C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19437C13[];
extern void _ZN9S19437C13D1Ev();
extern void _ZN9S19437C13D0Ev();
static  VTBL_ENTRY vtc_S19437C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C13[0]),
  (VTBL_ENTRY)&_ZN9S19437C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C13D0Ev,
};
extern VTBL_ENTRY _ZTI9S19437C13[];
extern  VTBL_ENTRY _ZTV9S19437C13[];
Class_Descriptor cd_S19437C13 = {  "S19437C13", // class name
  bases_S19437C13, 5,
  &(vtc_S19437C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI9S19437C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19437C13),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  S19437C12  : S19437C13 , S19437C4 {
  int s19437c12f0;
  ~S19437C12(); // tgen
  S19437C12(); // tgen
};
//SIG(-1 S19437C12) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 FL} BC4 Fi}


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

static void Test_S19437C12()
{
  extern Class_Descriptor cd_S19437C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S19437C12, buf);
    S19437C12 *dp, &lv = *(dp=new (buf) S19437C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S19437C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C12)");
    check_base_class_offset(lv, (S2014C28*)(S19437C13*), 0, "S19437C12");
    check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C13*), 0, "S19437C12");
    check_base_class_offset(lv, (S19437C4*)(S19437C13*), 0, "S19437C12");
    /*is_ambiguous_... S19437C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C13*), ABISELECT(9,5), "S19437C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19437C13*), ABISELECT(12,8), "S19437C12");
    check_base_class_offset(lv, (S19437C13*), 0, "S19437C12");
    /*is_ambiguous_... S19437C12::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(32,24), "S19437C12");
    /*is_ambiguous_... S19437C12::S19437C4 */ AMB_check_base_class_offset(lv, (S19437C4*), ABISELECT(32,24), "S19437C12");
    check_field_offset(lv, s19437c12f0, ABISELECT(44,32), "S19437C12.s19437c12f0");
    test_class_info(&lv, &cd_S19437C12);
    dp->~S19437C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C12(Test_S19437C12, "S19437C12", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN9S19437C12C1Ev();
extern void _ZN9S19437C12D1Ev();
Name_Map name_map_S19437C12[] = {
  NSPAIR(_ZN9S19437C12C1Ev),
  NSPAIR(_ZN9S19437C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19437C13;
extern VTBL_ENTRY _ZTI9S19437C13[];
extern  VTBL_ENTRY _ZTV9S19437C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
static Base_Class bases_S19437C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19437C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S19437C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(32,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19437C12[];
extern void _ZN9S19437C12D1Ev();
extern void _ZN9S19437C12D0Ev();
extern void ABISELECT(_ZThn32_N9S19437C12D1Ev,_ZThn24_N9S19437C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19437C12D0Ev,_ZThn24_N9S19437C12D0Ev)();
static  VTBL_ENTRY vtc_S19437C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C12[0]),
  (VTBL_ENTRY)&_ZN9S19437C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C12D0Ev,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S19437C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19437C12D1Ev,_ZThn24_N9S19437C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19437C12D0Ev,_ZThn24_N9S19437C12D0Ev),
};
extern VTBL_ENTRY _ZTI9S19437C12[];
extern  VTBL_ENTRY _ZTV9S19437C12[];
Class_Descriptor cd_S19437C12 = {  "S19437C12", // class name
  bases_S19437C12, 8,
  &(vtc_S19437C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI9S19437C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19437C12),8, //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  S19437C7  : S19437C3 , virtual S2014C28 , virtual S3222C8_nt , virtual S19437C10 , virtual S19437C12 {
  long s19437c7f0;
  ::S19437C3 s19437c7f1;
  virtual  ~S19437C7(); // _ZN8S19437C7D2Ev
  S19437C7(); // tgen
};
//SIG(-1 S19437C7) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 FL} BC3 Fi} vd Fl FC2}


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

static void Test_S19437C7()
{
  extern Class_Descriptor cd_S19437C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,25)];
    init_test(&cd_S19437C7, buf);
    S19437C7 *dp, &lv = *(dp=new (buf) S19437C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S19437C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C7)");
    /*is_ambiguous_... S19437C7::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(56,36), "S19437C7");
    check_base_class_offset(lv, (S19437C4*)(S19437C3*), ABISELECT(56,36), "S19437C7");
    check_base_class_offset(lv, (S19437C4*)(S19437C10*), ABISELECT(56,36), "S19437C7");
    check_base_class_offset(lv, (S19437C3*), 0, "S19437C7");
    /*is_ambiguous_... S19437C7::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), 0, "S19437C7");
    check_base_class_offset(lv, (S2014C28*)(S19437C10*), 0, "S19437C7");
    /*is_ambiguous_... S19437C7::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S19437C7");
    check_base_class_offset(lv, (S3222C8_nt*)(S19437C10*), ABISELECT(68,44), "S19437C7");
    check_base_class_offset(lv, (S19437C10*), ABISELECT(72,48), "S19437C7");
    check_base_class_offset(lv, (S2014C28*)(S19437C13*)(S19437C12*), ABISELECT(96,60), "S19437C7");
    check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C13*)(S19437C12*), ABISELECT(96,60), "S19437C7");
    check_base_class_offset(lv, (S19437C4*)(S19437C13*)(S19437C12*), ABISELECT(96,60), "S19437C7");
    /*is_ambiguous_... S19437C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C13*)(S19437C12*), ABISELECT(105,65), "S19437C7");
    check_base_class_offset(lv, (S3222C8_nt*)(S19437C13*)(S19437C12*), ABISELECT(108,68), "S19437C7");
    check_base_class_offset(lv, (S19437C13*)(S19437C12*), ABISELECT(96,60), "S19437C7");
    /*is_ambiguous_... S19437C12::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C12*), ABISELECT(128,84), "S19437C7");
    /*is_ambiguous_... S19437C12::S19437C4 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C12*), ABISELECT(128,84), "S19437C7");
    check_base_class_offset(lv, (S19437C12*), ABISELECT(96,60), "S19437C7");
    check_field_offset(lv, s19437c7f0, ABISELECT(16,12), "S19437C7.s19437c7f0");
    check_field_offset(lv, s19437c7f1, ABISELECT(24,16), "S19437C7.s19437c7f1");
    test_class_info(&lv, &cd_S19437C7);
    dp->~S19437C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C7(Test_S19437C7, "S19437C7", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN8S19437C7C1Ev();
extern void _ZN8S19437C7D2Ev();
Name_Map name_map_S19437C7[] = {
  NSPAIR(_ZN8S19437C7C1Ev),
  NSPAIR(_ZN8S19437C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C3;
extern VTBL_ENTRY _ZTI8S19437C3[];
extern  VTBL_ENTRY _ZTV8S19437C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19437C10;
extern VTBL_ENTRY _ZTI9S19437C10[];
extern  VTBL_ENTRY _ZTV9S19437C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C10[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19437C13;
extern VTBL_ENTRY _ZTI9S19437C13[];
extern  VTBL_ENTRY _ZTV9S19437C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C12;
extern VTBL_ENTRY _ZTI9S19437C12[];
extern  VTBL_ENTRY _ZTV9S19437C12[];
static Base_Class bases_S19437C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19437C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19437C10,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19437C13,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(128,84), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19437C12,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19437C7[];
extern void _ZN8S19437C7D1Ev();
extern void _ZN8S19437C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S19437C7D1Ev,_ZThn36_N8S19437C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S19437C7D0Ev,_ZThn36_N8S19437C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19437C7D1Ev,_ZTv0_n24_N8S19437C7D1Ev)();
extern void ABISELECT(_ZThn72_N8S19437C7D1Ev,_ZThn48_N8S19437C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19437C7D0Ev,_ZTv0_n24_N8S19437C7D0Ev)();
extern void ABISELECT(_ZThn72_N8S19437C7D0Ev,_ZThn48_N8S19437C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev)();
extern void ABISELECT(_ZThn96_N8S19437C7D1Ev,_ZThn60_N8S19437C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev)();
extern void ABISELECT(_ZThn96_N8S19437C7D0Ev,_ZThn60_N8S19437C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19437C7D1Ev,_ZTvn24_n12_N8S19437C7D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19437C7D0Ev,_ZTvn24_n12_N8S19437C7D0Ev)();
static  VTBL_ENTRY vtc_S19437C7[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&_ZN8S19437C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C7D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C7D1Ev,_ZTv0_n24_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C7D0Ev,_ZTv0_n24_N8S19437C7D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C7D1Ev,_ZTvn24_n12_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C7D0Ev,_ZTvn24_n12_N8S19437C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19437C7[];
extern void _ZN8S19437C3D1Ev();
extern void _ZN8S19437C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C3__8S19437C7[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&_ZN8S19437C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S19437C3D1Ev,_ZThn36_N8S19437C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S19437C3D0Ev,_ZThn36_N8S19437C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C3__8S19437C7[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev),
};
extern void _ZN9S19437C10D1Ev();
extern void _ZN9S19437C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C10__8S19437C7[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&_ZN9S19437C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C10__8S19437C7[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev),
};
static  VTT_ENTRY vtt_S19437C7[] = {
  {&(_ZTV8S19437C7[7]),  7,31},
  {&(_tg__ZTV8S19437C3__8S19437C7[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C3__8S19437C7[3]),  3,5},
  {&(_ZTV8S19437C7[12]),  12,31},
  {&(_ZTV8S19437C7[20]),  20,31},
  {&(_ZTV8S19437C7[25]),  25,31},
  {&(_ZTV8S19437C7[29]),  29,31},
  {&(_tg__ZTV9S19437C10__8S19437C7[5]),  5,7},
  {&(_tg__ZTV8S19437C4__9S19437C10__8S19437C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19437C7[];
extern  VTBL_ENTRY _ZTV8S19437C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C7[];
static VTBL_ENTRY alt_thunk_names122[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19437C3D0Ev,_ZThn36_N8S19437C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19437C3D1Ev,_ZThn36_N8S19437C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C7D0Ev,_ZTv0_n24_N8S19437C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19437C7D0Ev,_ZThn48_N8S19437C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C7D1Ev,_ZTv0_n24_N8S19437C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19437C7D1Ev,_ZThn48_N8S19437C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19437C7D0Ev,_ZThn60_N8S19437C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19437C7D0Ev,_ZThn36_N8S19437C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19437C7D1Ev,_ZThn60_N8S19437C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19437C7D1Ev,_ZThn36_N8S19437C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19437C7 = {  "S19437C7", // class name
  bases_S19437C7, 15,
  &(vtc_S19437C7[0]), // expected_vtbl_contents
  &(vtt_S19437C7[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI8S19437C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19437C7),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19437C7),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names122,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19437C15  : S2014C38 , S19437C4 , virtual S2014C28 , virtual S19437C10 {
  virtual  ~S19437C15(); // _ZN9S19437C15D2Ev
  S19437C15(); // tgen
};
//SIG(-1 S19437C15) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S19437C15()
{
  extern Class_Descriptor cd_S19437C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S19437C15, buf);
    S19437C15 *dp, &lv = *(dp=new (buf) S19437C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S19437C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C15)");
    /*is_ambiguous_... S19437C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S19437C15");
    /*is_ambiguous_... S19437C15::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*), 0, "S19437C15");
    /*is_ambiguous_... S19437C15::S19437C4 */ AMB_check_base_class_offset(lv, (S19437C4*), 0, "S19437C15");
    check_base_class_offset(lv, (S2014C28*), 0, "S19437C15");
    check_base_class_offset(lv, (S2014C28*)(S19437C10*), 0, "S19437C15");
    /*is_ambiguous_... S19437C15::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(40,20), "S19437C15");
    check_base_class_offset(lv, (S19437C4*)(S19437C10*), ABISELECT(40,20), "S19437C15");
    check_base_class_offset(lv, (S3222C8_nt*)(S19437C10*), ABISELECT(52,28), "S19437C15");
    check_base_class_offset(lv, (S19437C10*), ABISELECT(16,8), "S19437C15");
    test_class_info(&lv, &cd_S19437C15);
    dp->~S19437C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C15(Test_S19437C15, "S19437C15", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN9S19437C15C1Ev();
extern void _ZN9S19437C15D2Ev();
Name_Map name_map_S19437C15[] = {
  NSPAIR(_ZN9S19437C15C1Ev),
  NSPAIR(_ZN9S19437C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19437C10;
extern VTBL_ENTRY _ZTI9S19437C10[];
extern  VTBL_ENTRY _ZTV9S19437C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C10[];
static Base_Class bases_S19437C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19437C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19437C10,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19437C15[];
extern void _ZN9S19437C15D1Ev();
extern void _ZN9S19437C15D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S19437C15D1Ev,_ZThn8_N9S19437C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S19437C15D0Ev,_ZThn8_N9S19437C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19437C15D1Ev,_ZThn20_N9S19437C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19437C15D0Ev,_ZThn20_N9S19437C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19437C15[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&_ZN9S19437C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C15D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19437C15[];
extern void _ZN9S19437C10D1Ev();
extern void _ZN9S19437C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C10__9S19437C15[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&_ZN9S19437C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19437C10D1Ev,_ZThn12_N9S19437C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19437C10D0Ev,_ZThn12_N9S19437C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C10__9S19437C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev),
};
static  VTT_ENTRY vtt_S19437C15[] = {
  {&(_ZTV9S19437C15[6]),  6,21},
  {&(_ZTV9S19437C15[14]),  14,21},
  {&(_ZTV9S19437C15[19]),  19,21},
  {&(_tg__ZTV9S19437C10__9S19437C15[5]),  5,7},
  {&(_tg__ZTV8S19437C4__9S19437C10__9S19437C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19437C15[];
extern  VTBL_ENTRY _ZTV9S19437C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C15[];
static VTBL_ENTRY alt_thunk_names123[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19437C10D0Ev,_ZThn12_N9S19437C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19437C10D1Ev,_ZThn12_N9S19437C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19437C15D0Ev,_ZThn20_N9S19437C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19437C15D1Ev,_ZThn20_N9S19437C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19437C15D0Ev,_ZThn8_N9S19437C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19437C15D1Ev,_ZThn8_N9S19437C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19437C15 = {  "S19437C15", // class name
  bases_S19437C15, 8,
  &(vtc_S19437C15[0]), // expected_vtbl_contents
  &(vtt_S19437C15[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI9S19437C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19437C15),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19437C15),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names123,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19437C14  : virtual S19437C10 , S19437C15 , virtual S2014C38 {
  ::S3222C8_nt s19437c14f0[6];
  virtual  ~S19437C14(); // _ZN9S19437C14D2Ev
  S19437C14(); // tgen
};
//SIG(-1 S19437C14) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S19437C14()
{
  extern Class_Descriptor cd_S19437C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S19437C14, buf);
    S19437C14 *dp, &lv = *(dp=new (buf) S19437C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S19437C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C14)");
    check_base_class_offset(lv, (S2014C28*)(S19437C10*), 0, "S19437C14");
    check_base_class_offset(lv, (S2014C28*)(S19437C15*), 0, "S19437C14");
    /*is_ambiguous_... S19437C14::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(64,44), "S19437C14");
    check_base_class_offset(lv, (S19437C4*)(S19437C10*), ABISELECT(64,44), "S19437C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S19437C10*), ABISELECT(76,52), "S19437C14");
    check_base_class_offset(lv, (S19437C10*), ABISELECT(40,32), "S19437C14");
    check_base_class_offset(lv, (S19437C10*)(S19437C15*), ABISELECT(40,32), "S19437C14");
    /*is_ambiguous_... S19437C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C15*), ABISELECT(9,5), "S19437C14");
    /*is_ambiguous_... S19437C15::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C15*), 0, "S19437C14");
    /*is_ambiguous_... S19437C15::S19437C4 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C15*), 0, "S19437C14");
    check_base_class_offset(lv, (S19437C15*), 0, "S19437C14");
    /*is_ambiguous_... S19437C14::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(80,56), "S19437C14");
    check_field_offset(lv, s19437c14f0, ABISELECT(12,8), "S19437C14.s19437c14f0");
    test_class_info(&lv, &cd_S19437C14);
    dp->~S19437C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C14(Test_S19437C14, "S19437C14", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN9S19437C14C1Ev();
extern void _ZN9S19437C14D2Ev();
Name_Map name_map_S19437C14[] = {
  NSPAIR(_ZN9S19437C14C1Ev),
  NSPAIR(_ZN9S19437C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19437C10;
extern VTBL_ENTRY _ZTI9S19437C10[];
extern  VTBL_ENTRY _ZTV9S19437C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C10[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C15;
extern VTBL_ENTRY _ZTI9S19437C15[];
extern  VTBL_ENTRY _ZTV9S19437C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S19437C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19437C10,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19437C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19437C15,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19437C14[];
extern void _ZN9S19437C14D1Ev();
extern void _ZN9S19437C14D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19437C14D1Ev,_ZTv0_n24_N9S19437C14D1Ev)();
extern void ABISELECT(_ZThn40_N9S19437C14D1Ev,_ZThn32_N9S19437C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19437C14D0Ev,_ZTv0_n24_N9S19437C14D0Ev)();
extern void ABISELECT(_ZThn40_N9S19437C14D0Ev,_ZThn32_N9S19437C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C14D1Ev,_ZTv0_n12_N9S19437C14D1Ev)();
extern void ABISELECT(_ZThn64_N9S19437C14D1Ev,_ZThn44_N9S19437C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C14D0Ev,_ZTv0_n12_N9S19437C14D0Ev)();
extern void ABISELECT(_ZThn64_N9S19437C14D0Ev,_ZThn44_N9S19437C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19437C14[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C14[0]),
  (VTBL_ENTRY)&_ZN9S19437C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C14D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19437C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C14D1Ev,_ZTv0_n24_N9S19437C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C14D0Ev,_ZTv0_n24_N9S19437C14D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19437C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C14D1Ev,_ZTv0_n12_N9S19437C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C14D0Ev,_ZTv0_n12_N9S19437C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19437C14[];
extern void _ZN9S19437C15D1Ev();
extern void _ZN9S19437C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C15__9S19437C14[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&_ZN9S19437C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19437C15D1Ev,_ZThn32_N9S19437C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19437C15D0Ev,_ZThn32_N9S19437C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C10__9S19437C15__9S19437C14[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S19437C15D1Ev,_ZThn44_N9S19437C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S19437C15D0Ev,_ZThn44_N9S19437C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__A1__9S19437C15__9S19437C14[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev),
};
extern void _ZN9S19437C10D1Ev();
extern void _ZN9S19437C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C10__9S19437C14[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&_ZN9S19437C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19437C10D1Ev,_ZThn12_N9S19437C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19437C10D0Ev,_ZThn12_N9S19437C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C10__9S19437C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev),
};
static  VTT_ENTRY vtt_S19437C14[] = {
  {&(_ZTV9S19437C14[7]),  7,22},
  {&(_tg__ZTV9S19437C15__9S19437C14[6]),  6,8},
  {&(_tg__ZTV9S19437C10__9S19437C15__9S19437C14[6]),  6,8},
  {&(_tg__ZTV8S19437C4__A1__9S19437C15__9S19437C14[3]),  3,5},
  {&(_ZTV9S19437C14[15]),  15,22},
  {&(_ZTV9S19437C14[20]),  20,22},
  {&(_tg__ZTV9S19437C10__9S19437C14[5]),  5,7},
  {&(_tg__ZTV8S19437C4__9S19437C10__9S19437C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19437C14[];
extern  VTBL_ENTRY _ZTV9S19437C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C14[];
static VTBL_ENTRY alt_thunk_names124[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19437C10D0Ev,_ZThn12_N9S19437C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19437C10D1Ev,_ZThn12_N9S19437C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19437C15D0Ev,_ZThn44_N9S19437C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19437C15D1Ev,_ZThn44_N9S19437C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19437C15D0Ev,_ZThn32_N9S19437C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19437C15D1Ev,_ZThn32_N9S19437C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C14D0Ev,_ZTv0_n12_N9S19437C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19437C14D0Ev,_ZThn44_N9S19437C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C14D1Ev,_ZTv0_n12_N9S19437C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19437C14D1Ev,_ZThn44_N9S19437C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C14D0Ev,_ZTv0_n24_N9S19437C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19437C14D0Ev,_ZThn32_N9S19437C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C14D1Ev,_ZTv0_n24_N9S19437C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19437C14D1Ev,_ZThn32_N9S19437C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19437C14 = {  "S19437C14", // class name
  bases_S19437C14, 10,
  &(vtc_S19437C14[0]), // expected_vtbl_contents
  &(vtt_S19437C14[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI9S19437C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19437C14),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19437C14),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names124,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19437C16  : virtual S19437C3 , virtual S3222C8_nt {
  unsigned char s19437c16f0:1;
  ~S19437C16(); // tgen
  S19437C16(); // tgen
};
//SIG(-1 S19437C16) C1{ VBC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m Fi} Fc:1}


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

static void Test_S19437C16()
{
  extern Class_Descriptor cd_S19437C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S19437C16, buf);
    S19437C16 *dp, &lv = *(dp=new (buf) S19437C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S19437C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C16)");
    check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(32,20), "S19437C16");
    check_base_class_offset(lv, (S19437C4*)(S19437C3*), ABISELECT(32,20), "S19437C16");
    check_base_class_offset(lv, (S19437C3*), ABISELECT(16,8), "S19437C16");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(44,28), "S19437C16");
    set_bf_and_test(lv, s19437c16f0, ABISELECT(8,4), 0, 1, 1, "S19437C16");
    test_class_info(&lv, &cd_S19437C16);
    dp->~S19437C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C16(Test_S19437C16, "S19437C16", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN9S19437C16C1Ev();
extern void _ZN9S19437C16D1Ev();
Name_Map name_map_S19437C16[] = {
  NSPAIR(_ZN9S19437C16C1Ev),
  NSPAIR(_ZN9S19437C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C3;
extern VTBL_ENTRY _ZTI8S19437C3[];
extern  VTBL_ENTRY _ZTV8S19437C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C3[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19437C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19437C3,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(44,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19437C16[];
extern void _ZN9S19437C16D1Ev();
extern void _ZN9S19437C16D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19437C16D1Ev,_ZTv0_n16_N9S19437C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19437C16D1Ev,_ZThn8_N9S19437C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19437C16D0Ev,_ZTv0_n16_N9S19437C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19437C16D0Ev,_ZThn8_N9S19437C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C16D1Ev,_ZTv0_n12_N9S19437C16D1Ev)();
extern void ABISELECT(_ZThn32_N9S19437C16D1Ev,_ZThn20_N9S19437C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C16D0Ev,_ZTv0_n12_N9S19437C16D0Ev)();
extern void ABISELECT(_ZThn32_N9S19437C16D0Ev,_ZThn20_N9S19437C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19437C16[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C16[0]),
  (VTBL_ENTRY)&_ZN9S19437C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C16D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19437C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19437C16D1Ev,_ZTv0_n16_N9S19437C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19437C16D0Ev,_ZTv0_n16_N9S19437C16D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19437C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C16D1Ev,_ZTv0_n12_N9S19437C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C16D0Ev,_ZTv0_n12_N9S19437C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19437C16[];
extern void _ZN8S19437C3D1Ev();
extern void _ZN8S19437C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C3__9S19437C16[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&_ZN8S19437C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19437C3D1Ev,_ZThn12_N8S19437C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19437C3D0Ev,_ZThn12_N8S19437C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C3__9S19437C16[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev),
};
static  VTT_ENTRY vtt_S19437C16[] = {
  {&(_ZTV9S19437C16[5]),  5,18},
  {&(_ZTV9S19437C16[11]),  11,18},
  {&(_ZTV9S19437C16[16]),  16,18},
  {&(_tg__ZTV8S19437C3__9S19437C16[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C3__9S19437C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19437C16[];
extern  VTBL_ENTRY _ZTV9S19437C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C16[];
static VTBL_ENTRY alt_thunk_names125[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C3D0Ev,_ZThn12_N8S19437C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C3D1Ev,_ZThn12_N8S19437C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C16D0Ev,_ZTv0_n12_N9S19437C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19437C16D0Ev,_ZThn20_N9S19437C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C16D1Ev,_ZTv0_n12_N9S19437C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19437C16D1Ev,_ZThn20_N9S19437C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19437C16D0Ev,_ZTv0_n16_N9S19437C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19437C16D0Ev,_ZThn8_N9S19437C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19437C16D1Ev,_ZTv0_n16_N9S19437C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19437C16D1Ev,_ZThn8_N9S19437C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19437C16 = {  "S19437C16", // class name
  bases_S19437C16, 4,
  &(vtc_S19437C16[0]), // expected_vtbl_contents
  &(vtt_S19437C16[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI9S19437C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19437C16),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19437C16),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names125,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19437C6  : virtual S19437C7 , S19437C14 , S19437C16 , S19437C10 {
  ~S19437C6(); // tgen
  S19437C6(); // tgen
};
//SIG(-1 S19437C6) C1{ VBC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 FL} BC4 Fi} vd Fl FC3} BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} BC14{ VBC3 VBC7 Fc:1} BC8}


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

static void Test_S19437C6()
{
  extern Class_Descriptor cd_S19437C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S19437C6, buf);
    S19437C6 *dp, &lv = *(dp=new (buf) S19437C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S19437C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C6)");
    /*is_ambiguous_... S19437C6::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(136,88), "S19437C6");
    check_base_class_offset(lv, (S19437C4*)(S19437C3*)(S19437C7*), ABISELECT(136,88), "S19437C6");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C10*), ABISELECT(136,88), "S19437C6");
    /*is_ambiguous_... S19437C6::S19437C3 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C3*), ABISELECT(136,88), "S19437C6");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C10*), ABISELECT(136,88), "S19437C6");
    check_base_class_offset(lv, (S19437C3*)(S19437C7*), ABISELECT(80,52), "S19437C6");
    /*is_ambiguous_... S19437C7::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19437C7*), 0, "S19437C6");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19437C10*), 0, "S19437C6");
    check_base_class_offset(lv, (S2014C28*)(S19437C15*)(S19437C14*), 0, "S19437C6");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19437C10*), 0, "S19437C6");
    /*is_ambiguous_... S19437C7::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19437C7*), ABISELECT(148,96), "S19437C6");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19437C10*), ABISELECT(148,96), "S19437C6");
    check_base_class_offset(lv, (S3222C8_nt*)(S19437C16*), ABISELECT(148,96), "S19437C6");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19437C10*), ABISELECT(148,96), "S19437C6");
    check_base_class_offset(lv, (S19437C10*)(S19437C7*), ABISELECT(152,100), "S19437C6");
    check_base_class_offset(lv, (S19437C10*)(S19437C14*), ABISELECT(152,100), "S19437C6");
    check_base_class_offset(lv, (S19437C10*)(S19437C15*)(S19437C14*), ABISELECT(152,100), "S19437C6");
    check_base_class_offset(lv, (S2014C28*)(S19437C13*)(S19437C12*), ABISELECT(176,112), "S19437C6");
    check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C13*)(S19437C12*), ABISELECT(176,112), "S19437C6");
    check_base_class_offset(lv, (S19437C4*)(S19437C13*)(S19437C12*), ABISELECT(176,112), "S19437C6");
    /*is_ambiguous_... S19437C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C13*)(S19437C12*), ABISELECT(185,117), "S19437C6");
    check_base_class_offset(lv, (S3222C8_nt*)(S19437C13*)(S19437C12*), ABISELECT(188,120), "S19437C6");
    check_base_class_offset(lv, (S19437C13*)(S19437C12*), ABISELECT(176,112), "S19437C6");
    /*is_ambiguous_... S19437C12::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C12*), ABISELECT(208,136), "S19437C6");
    /*is_ambiguous_... S19437C12::S19437C4 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C12*), ABISELECT(208,136), "S19437C6");
    check_base_class_offset(lv, (S19437C12*)(S19437C7*), ABISELECT(176,112), "S19437C6");
    check_base_class_offset(lv, (S19437C7*), ABISELECT(80,52), "S19437C6");
    /*is_ambiguous_... S19437C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C15*)(S19437C14*), ABISELECT(9,5), "S19437C6");
    /*is_ambiguous_... S19437C15::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C15*)(S19437C14*), 0, "S19437C6");
    /*is_ambiguous_... S19437C15::S19437C4 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C15*)(S19437C14*), 0, "S19437C6");
    check_base_class_offset(lv, (S19437C15*)(S19437C14*), 0, "S19437C6");
    /*is_ambiguous_... S19437C14::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C14*), ABISELECT(224,148), "S19437C6");
    check_base_class_offset(lv, (S19437C14*), 0, "S19437C6");
    check_base_class_offset(lv, (S19437C3*)(S19437C16*), ABISELECT(224,148), "S19437C6");
    check_base_class_offset(lv, (S19437C16*), ABISELECT(40,32), "S19437C6");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S19437C10*), ABISELECT(56,40), "S19437C6");
    test_class_info(&lv, &cd_S19437C6);
    dp->~S19437C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C6(Test_S19437C6, "S19437C6", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN8S19437C6C1Ev();
extern void _ZN8S19437C6D1Ev();
Name_Map name_map_S19437C6[] = {
  NSPAIR(_ZN8S19437C6C1Ev),
  NSPAIR(_ZN8S19437C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C3;
extern VTBL_ENTRY _ZTI8S19437C3[];
extern  VTBL_ENTRY _ZTV8S19437C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19437C10;
extern VTBL_ENTRY _ZTI9S19437C10[];
extern  VTBL_ENTRY _ZTV9S19437C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C10[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19437C13;
extern VTBL_ENTRY _ZTI9S19437C13[];
extern  VTBL_ENTRY _ZTV9S19437C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C12;
extern VTBL_ENTRY _ZTI9S19437C12[];
extern  VTBL_ENTRY _ZTV9S19437C12[];
extern Class_Descriptor cd_S19437C7;
extern VTBL_ENTRY _ZTI8S19437C7[];
extern  VTBL_ENTRY _ZTV8S19437C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C7[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C15;
extern VTBL_ENTRY _ZTI9S19437C15[];
extern  VTBL_ENTRY _ZTV9S19437C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C14;
extern VTBL_ENTRY _ZTI9S19437C14[];
extern  VTBL_ENTRY _ZTV9S19437C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C14[];
extern Class_Descriptor cd_S19437C3;
extern VTBL_ENTRY _ZTI8S19437C3[];
extern  VTBL_ENTRY _ZTV8S19437C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C3[];
extern Class_Descriptor cd_S19437C16;
extern VTBL_ENTRY _ZTI9S19437C16[];
extern  VTBL_ENTRY _ZTV9S19437C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C16[];
extern Class_Descriptor cd_S19437C10;
extern VTBL_ENTRY _ZTI9S19437C10[];
extern  VTBL_ENTRY _ZTV9S19437C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C10[];
static Base_Class bases_S19437C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(136,88), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19437C3,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(148,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19437C10,    ABISELECT(152,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(185,117), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(188,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
    11, //immediately_derived
  0, 0},
  {&cd_S19437C13,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(208,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(208,136), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19437C12,    ABISELECT(176,112), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19437C7,    ABISELECT(80,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19437C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19437C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(224,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19437C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19437C3,    ABISELECT(224,148), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19437C16,    ABISELECT(40,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19437C10,    ABISELECT(56,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19437C6[];
extern void _ZN8S19437C6D1Ev();
extern void _ZN8S19437C6D0Ev();
extern void ABISELECT(_ZThn40_N8S19437C6D1Ev,_ZThn32_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S19437C6D0Ev,_ZThn32_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn56_N8S19437C6D1Ev,_ZThn40_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S19437C6D0Ev,_ZThn40_N8S19437C6D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19437C6D1Ev,_ZTv0_n32_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S19437C6D1Ev,_ZThn52_N8S19437C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19437C6D0Ev,_ZTv0_n32_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn80_N8S19437C6D0Ev,_ZThn52_N8S19437C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn136_N8S19437C6D1Ev,_ZThn88_N8S19437C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn136_N8S19437C6D0Ev,_ZThn88_N8S19437C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19437C6D1Ev,_ZTv0_n24_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn152_N8S19437C6D1Ev,_ZThn100_N8S19437C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19437C6D0Ev,_ZTv0_n24_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn152_N8S19437C6D0Ev,_ZThn100_N8S19437C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S19437C6D1Ev,_ZThn112_N8S19437C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S19437C6D0Ev,_ZThn112_N8S19437C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19437C6D1Ev,_ZTvn24_n12_N8S19437C6D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19437C6D0Ev,_ZTvn24_n12_N8S19437C6D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19437C6D1Ev,_ZTv0_n16_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn224_N8S19437C6D1Ev,_ZThn148_N8S19437C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19437C6D0Ev,_ZTv0_n16_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn224_N8S19437C6D0Ev,_ZThn148_N8S19437C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19437C6[] = {
  ABISELECT(224,148),
  ABISELECT(176,112),
  ABISELECT(80,52),
  ABISELECT(224,148),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&_ZN8S19437C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C6D0Ev,
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,116),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19437C6D1Ev,_ZThn32_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19437C6D0Ev,_ZThn32_N8S19437C6D0Ev),
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19437C6D1Ev,_ZThn40_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19437C6D0Ev,_ZThn40_N8S19437C6D0Ev),
  ABISELECT(-80,-52),
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19437C6D1Ev,_ZTv0_n32_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19437C6D0Ev,_ZTv0_n32_N8S19437C6D0Ev),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev),
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C6D1Ev,_ZTv0_n24_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C6D0Ev,_ZTv0_n24_N8S19437C6D0Ev),
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C6D1Ev,_ZTvn24_n12_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C6D0Ev,_ZTvn24_n12_N8S19437C6D0Ev),
  ABISELECT(-224,-148),
  ABISELECT(-88,-60),
  ABISELECT(-224,-148),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19437C6D1Ev,_ZTv0_n16_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19437C6D0Ev,_ZTv0_n16_N8S19437C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19437C6[];
extern void _ZN9S19437C14D1Ev();
extern void _ZN9S19437C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C14__8S19437C6[] = {
  ABISELECT(224,148),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C14[0]),
  (VTBL_ENTRY)&_ZN9S19437C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C14D0Ev,
};
extern void _ZN9S19437C15D1Ev();
extern void _ZN9S19437C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C159S19437C14__8S19437C6[] = {
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&_ZN9S19437C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev)();
extern void ABISELECT(_ZThn152_N9S19437C15D1Ev,_ZThn100_N9S19437C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev)();
extern void ABISELECT(_ZThn152_N9S19437C15D0Ev,_ZThn100_N9S19437C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C10__9S19437C159S19437C14__8S19437C6[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev)();
extern void ABISELECT(_ZThn136_N9S19437C15D1Ev,_ZThn88_N9S19437C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev)();
extern void ABISELECT(_ZThn136_N9S19437C15D0Ev,_ZThn88_N9S19437C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__A1__9S19437C159S19437C14__8S19437C6[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19437C14D1Ev,_ZTv0_n24_N9S19437C14D1Ev)();
extern void ABISELECT(_ZThn152_N9S19437C14D1Ev,_ZThn100_N9S19437C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19437C14D0Ev,_ZTv0_n24_N9S19437C14D0Ev)();
extern void ABISELECT(_ZThn152_N9S19437C14D0Ev,_ZThn100_N9S19437C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C10__9S19437C14__8S19437C6[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19437C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C14D1Ev,_ZTv0_n24_N9S19437C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C14D0Ev,_ZTv0_n24_N9S19437C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19437C14D1Ev,_ZTv0_n12_N9S19437C14D1Ev)();
extern void ABISELECT(_ZThn136_N9S19437C14D1Ev,_ZThn88_N9S19437C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C14D0Ev,_ZTv0_n12_N9S19437C14D0Ev)();
extern void ABISELECT(_ZThn136_N9S19437C14D0Ev,_ZThn88_N9S19437C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C14__8S19437C6[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19437C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C14D1Ev,_ZTv0_n12_N9S19437C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C14D0Ev,_ZTv0_n12_N9S19437C14D0Ev),
};
extern void _ZN9S19437C16D1Ev();
extern void _ZN9S19437C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C16__8S19437C6[] = {
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C16[0]),
  (VTBL_ENTRY)&_ZN9S19437C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19437C16D1Ev,_ZTv0_n16_N9S19437C16D1Ev)();
extern void ABISELECT(_ZThn184_N9S19437C16D1Ev,_ZThn116_N9S19437C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19437C16D0Ev,_ZTv0_n16_N9S19437C16D0Ev)();
extern void ABISELECT(_ZThn184_N9S19437C16D0Ev,_ZThn116_N9S19437C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C3__9S19437C16__8S19437C6[] = {
  ABISELECT(-184,-116),
  ABISELECT(-88,-60),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S19437C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19437C16D1Ev,_ZTv0_n16_N9S19437C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19437C16D0Ev,_ZTv0_n16_N9S19437C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19437C16D1Ev,_ZTv0_n12_N9S19437C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19437C16D1Ev,_ZThn56_N9S19437C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C16D0Ev,_ZTv0_n12_N9S19437C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19437C16D0Ev,_ZThn56_N9S19437C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C16__8S19437C6[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19437C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C16D1Ev,_ZTv0_n12_N9S19437C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C16D0Ev,_ZTv0_n12_N9S19437C16D0Ev),
};
extern void _ZN9S19437C10D1Ev();
extern void _ZN9S19437C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C10__A__8S19437C6[] = {
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&_ZN9S19437C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev)();
extern void ABISELECT(_ZThn80_N9S19437C10D1Ev,_ZThn48_N9S19437C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev)();
extern void ABISELECT(_ZThn80_N9S19437C10D0Ev,_ZThn48_N9S19437C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C10__A__8S19437C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev),
};
extern void _ZN8S19437C7D1Ev();
extern void _ZN8S19437C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C7__8S19437C6[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&_ZN8S19437C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C7D0Ev,
};
extern void _ZN8S19437C3D1Ev();
extern void _ZN8S19437C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C38S19437C7__8S19437C6[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&_ZN8S19437C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S19437C3D1Ev,_ZThn36_N8S19437C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S19437C3D0Ev,_ZThn36_N8S19437C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C38S19437C7__8S19437C6[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S19437C7D1Ev,_ZThn36_N8S19437C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S19437C7D0Ev,_ZThn36_N8S19437C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C7__8S19437C6[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19437C7D1Ev,_ZTv0_n24_N8S19437C7D1Ev)();
extern void ABISELECT(_ZThn72_N8S19437C7D1Ev,_ZThn48_N8S19437C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19437C7D0Ev,_ZTv0_n24_N8S19437C7D0Ev)();
extern void ABISELECT(_ZThn72_N8S19437C7D0Ev,_ZThn48_N8S19437C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C10__8S19437C7__8S19437C6[] = {
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C7D1Ev,_ZTv0_n24_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C7D0Ev,_ZTv0_n24_N8S19437C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev)();
extern void ABISELECT(_ZThn96_N8S19437C7D1Ev,_ZThn60_N8S19437C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev)();
extern void ABISELECT(_ZThn96_N8S19437C7D0Ev,_ZThn60_N8S19437C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C12__8S19437C7__8S19437C6[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S19437C7D1Ev,_ZTvn24_n12_N8S19437C7D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19437C7D0Ev,_ZTvn24_n12_N8S19437C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C49S19437C12__A2__8S19437C7__8S19437C6[] = {
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C7D1Ev,_ZTvn24_n12_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C7D0Ev,_ZTvn24_n12_N8S19437C7D0Ev),
};
extern void _ZN9S19437C10D1Ev();
extern void _ZN9S19437C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C10__8S19437C6[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&_ZN9S19437C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C10__8S19437C6[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev),
};
extern void _ZN8S19437C3D1Ev();
extern void _ZN8S19437C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C3__A1__8S19437C6[] = {
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&_ZN8S19437C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C3__A1__8S19437C6[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev),
};
static  VTT_ENTRY vtt_S19437C6[] = {
  {&(_ZTV8S19437C6[10]),  10,64},
  {&(_tg__ZTV9S19437C14__8S19437C6[7]),  7,9},
  {&(_tg__ZTV9S19437C159S19437C14__8S19437C6[6]),  6,8},
  {&(_tg__ZTV9S19437C10__9S19437C159S19437C14__8S19437C6[6]),  6,8},
  {&(_tg__ZTV8S19437C4__A1__9S19437C159S19437C14__8S19437C6[3]),  3,5},
  {&(_tg__ZTV9S19437C10__9S19437C14__8S19437C6[6]),  6,8},
  {&(_tg__ZTV8S19437C4__9S19437C14__8S19437C6[3]),  3,5},
  {&(_tg__ZTV9S19437C16__8S19437C6[5]),  5,7},
  {&(_tg__ZTV8S19437C3__9S19437C16__8S19437C6[4]),  4,6},
  {&(_tg__ZTV8S19437C4__9S19437C16__8S19437C6[3]),  3,5},
  {&(_tg__ZTV9S19437C10__A__8S19437C6[5]),  5,7},
  {&(_tg__ZTV8S19437C4__9S19437C10__A__8S19437C6[3]),  3,5},
  {&(_ZTV8S19437C6[34]),  34,64},
  {&(_ZTV8S19437C6[39]),  39,64},
  {&(_ZTV8S19437C6[47]),  47,64},
  {&(_ZTV8S19437C6[52]),  52,64},
  {&(_ZTV8S19437C6[56]),  56,64},
  {&(_ZTV8S19437C6[17]),  17,64},
  {&(_ZTV8S19437C6[62]),  62,64},
  {&(_ZTV8S19437C6[24]),  24,64},
  {&(_tg__ZTV8S19437C7__8S19437C6[7]),  7,9},
  {&(_tg__ZTV8S19437C38S19437C7__8S19437C6[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C38S19437C7__8S19437C6[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C7__8S19437C6[3]),  3,5},
  {&(_tg__ZTV9S19437C10__8S19437C7__8S19437C6[6]),  6,8},
  {&(_tg__ZTV9S19437C12__8S19437C7__8S19437C6[3]),  3,5},
  {&(_tg__ZTV8S19437C49S19437C12__A2__8S19437C7__8S19437C6[2]),  2,4},
  {&(_tg__ZTV9S19437C10__8S19437C6[5]),  5,7},
  {&(_tg__ZTV8S19437C4__9S19437C10__8S19437C6[3]),  3,5},
  {&(_tg__ZTV8S19437C3__A1__8S19437C6[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C3__A1__8S19437C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19437C6[];
extern  VTBL_ENTRY _ZTV8S19437C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C6[];
static VTBL_ENTRY alt_thunk_names126[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C7D0Ev,_ZTv0_n24_N8S19437C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19437C7D0Ev,_ZThn48_N8S19437C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C7D1Ev,_ZTv0_n24_N8S19437C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19437C7D1Ev,_ZThn48_N8S19437C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19437C7D0Ev,_ZThn60_N8S19437C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19437C7D0Ev,_ZThn36_N8S19437C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19437C7D1Ev,_ZThn60_N8S19437C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19437C7D1Ev,_ZThn36_N8S19437C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19437C3D0Ev,_ZThn36_N8S19437C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19437C3D1Ev,_ZThn36_N8S19437C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19437C10D0Ev,_ZThn48_N9S19437C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19437C10D1Ev,_ZThn48_N9S19437C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C16D0Ev,_ZTv0_n12_N9S19437C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19437C16D0Ev,_ZThn56_N9S19437C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C16D1Ev,_ZTv0_n12_N9S19437C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19437C16D1Ev,_ZThn56_N9S19437C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19437C16D0Ev,_ZTv0_n16_N9S19437C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19437C16D0Ev,_ZThn116_N9S19437C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19437C16D1Ev,_ZTv0_n16_N9S19437C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19437C16D1Ev,_ZThn116_N9S19437C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C14D0Ev,_ZTv0_n12_N9S19437C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19437C14D0Ev,_ZThn88_N9S19437C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C14D1Ev,_ZTv0_n12_N9S19437C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19437C14D1Ev,_ZThn88_N9S19437C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C14D0Ev,_ZTv0_n24_N9S19437C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19437C14D0Ev,_ZThn100_N9S19437C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C14D1Ev,_ZTv0_n24_N9S19437C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19437C14D1Ev,_ZThn100_N9S19437C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19437C15D0Ev,_ZThn88_N9S19437C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19437C15D1Ev,_ZThn88_N9S19437C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19437C15D0Ev,_ZThn100_N9S19437C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19437C15D1Ev,_ZThn100_N9S19437C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19437C6D0Ev,_ZTv0_n16_N8S19437C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19437C6D0Ev,_ZThn148_N8S19437C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19437C6D1Ev,_ZTv0_n16_N8S19437C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19437C6D1Ev,_ZThn148_N8S19437C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C6D0Ev,_ZTv0_n24_N8S19437C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19437C6D0Ev,_ZThn100_N8S19437C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C6D1Ev,_ZTv0_n24_N8S19437C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19437C6D1Ev,_ZThn100_N8S19437C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19437C6D0Ev,_ZThn112_N8S19437C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19437C6D0Ev,_ZThn88_N8S19437C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19437C6D1Ev,_ZThn112_N8S19437C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19437C6D1Ev,_ZThn88_N8S19437C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19437C6D0Ev,_ZTv0_n32_N8S19437C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19437C6D0Ev,_ZThn52_N8S19437C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19437C6D1Ev,_ZTv0_n32_N8S19437C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19437C6D1Ev,_ZThn52_N8S19437C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19437C6 = {  "S19437C6", // class name
  bases_S19437C6, 25,
  &(vtc_S19437C6[0]), // expected_vtbl_contents
  &(vtt_S19437C6[0]), // expected_vtt_contents
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI8S19437C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19437C6),64, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19437C6),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names126,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19437C1  : virtual S19437C2 , virtual S2014C38 , virtual S19437C6 , virtual S19437C15 {
  void *s19437c1f0;
  virtual  ~S19437C1(); // _ZN8S19437C1D2Ev
  S19437C1(); // tgen
};
//SIG(1 S19437C1) C1{ VBC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} vd} VBC5 VBC6{ VBC7{ BC3 VBC8{ m} VBC9{ m Fi} VBC10{ VBC8 VBC4 VBC9 vd Fp FC11{}} VBC12{ BC13{ BC8 BC4 BC5 BC9 Fs:16 FL} BC4 Fi} vd Fl FC3} BC14{ VBC10 BC15{ BC5 BC4 VBC8 VBC10 vd} VBC5 vd FC9[6]} BC16{ VBC3 VBC9 Fc:1} BC10} VBC15 vd Fp}


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

static void Test_S19437C1()
{
  extern Class_Descriptor cd_S19437C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,48)];
    init_test(&cd_S19437C1, buf);
    S19437C1 *dp, &lv = *(dp=new (buf) S19437C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,188), "sizeof(S19437C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19437C1)");
    /*is_ambiguous_... S19437C1::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*), ABISELECT(32,20), "S19437C1");
    check_base_class_offset(lv, (S19437C4*)(S19437C3*)(S19437C2*), ABISELECT(32,20), "S19437C1");
    check_base_class_offset(lv, (S19437C4*)(S19437C3*)(S19437C7*), ABISELECT(32,20), "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C10 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C10*), ABISELECT(32,20), "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C3 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C3*), ABISELECT(32,20), "S19437C1");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C10*)(S19437C6*), ABISELECT(32,20), "S19437C1");
    check_base_class_offset(lv, (S19437C3*)(S19437C2*), ABISELECT(16,8), "S19437C1");
    check_base_class_offset(lv, (S19437C2*), ABISELECT(16,8), "S19437C1");
    /*is_ambiguous_... S19437C1::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), 0, "S19437C1");
    /*is_ambiguous_... S19437C14::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C14*)(S19437C6*), 0, "S19437C1");
    check_base_class_offset(lv, (S19437C3*)(S19437C7*), ABISELECT(128,80), "S19437C1");
    /*is_ambiguous_... S19437C7::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19437C7*), 0, "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C10 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19437C10*), 0, "S19437C1");
    check_base_class_offset(lv, (S2014C28*)(S19437C15*)(S19437C14*)(S19437C6*), 0, "S19437C1");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19437C10*)(S19437C6*), 0, "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C15 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19437C15*), 0, "S19437C1");
    /*is_ambiguous_... S19437C7::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19437C7*), ABISELECT(184,116), "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C10 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19437C10*), ABISELECT(184,116), "S19437C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19437C16*)(S19437C6*), ABISELECT(184,116), "S19437C1");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19437C10*)(S19437C6*), ABISELECT(184,116), "S19437C1");
    check_base_class_offset(lv, (S19437C10*)(S19437C7*), ABISELECT(192,120), "S19437C1");
    check_base_class_offset(lv, (S19437C10*)(S19437C14*)(S19437C6*), ABISELECT(192,120), "S19437C1");
    check_base_class_offset(lv, (S19437C10*)(S19437C15*)(S19437C14*)(S19437C6*), ABISELECT(192,120), "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C15 */ AMB_check_base_class_offset(lv, (S19437C10*)(S19437C15*), ABISELECT(192,120), "S19437C1");
    check_base_class_offset(lv, (S2014C28*)(S19437C13*)(S19437C12*), ABISELECT(216,132), "S19437C1");
    check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C13*)(S19437C12*), ABISELECT(216,132), "S19437C1");
    check_base_class_offset(lv, (S19437C4*)(S19437C13*)(S19437C12*), ABISELECT(216,132), "S19437C1");
    /*is_ambiguous_... S19437C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C13*)(S19437C12*), ABISELECT(225,137), "S19437C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19437C13*)(S19437C12*), ABISELECT(228,140), "S19437C1");
    check_base_class_offset(lv, (S19437C13*)(S19437C12*), ABISELECT(216,132), "S19437C1");
    /*is_ambiguous_... S19437C12::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C12*), ABISELECT(248,156), "S19437C1");
    /*is_ambiguous_... S19437C12::S19437C4 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C12*), ABISELECT(248,156), "S19437C1");
    check_base_class_offset(lv, (S19437C12*)(S19437C7*), ABISELECT(216,132), "S19437C1");
    check_base_class_offset(lv, (S19437C7*)(S19437C6*), ABISELECT(128,80), "S19437C1");
    /*is_ambiguous_... S19437C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C15*)(S19437C14*)(S19437C6*), ABISELECT(57,33), "S19437C1");
    /*is_ambiguous_... S19437C15::S19437C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C15*)(S19437C14*)(S19437C6*), ABISELECT(48,28), "S19437C1");
    /*is_ambiguous_... S19437C15::S19437C4 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C15*)(S19437C14*)(S19437C6*), ABISELECT(48,28), "S19437C1");
    check_base_class_offset(lv, (S19437C15*)(S19437C14*)(S19437C6*), ABISELECT(48,28), "S19437C1");
    check_base_class_offset(lv, (S19437C14*)(S19437C6*), ABISELECT(48,28), "S19437C1");
    check_base_class_offset(lv, (S19437C3*)(S19437C16*)(S19437C6*), ABISELECT(264,168), "S19437C1");
    check_base_class_offset(lv, (S19437C16*)(S19437C6*), ABISELECT(88,60), "S19437C1");
    /*is_ambiguous_... S19437C6::S19437C10 */ AMB_check_base_class_offset(lv, (S19437C10*)(S19437C6*), ABISELECT(104,68), "S19437C1");
    check_base_class_offset(lv, (S19437C6*), ABISELECT(48,28), "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C15 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C15*), ABISELECT(289,185), "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C15 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19437C4*)(S19437C15*), ABISELECT(280,180), "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C15 */ AMB_check_base_class_offset(lv, (S19437C4*)(S19437C15*), ABISELECT(280,180), "S19437C1");
    /*is_ambiguous_... S19437C1::S19437C15 */ AMB_check_base_class_offset(lv, (S19437C15*), ABISELECT(280,180), "S19437C1");
    check_field_offset(lv, s19437c1f0, ABISELECT(8,4), "S19437C1.s19437c1f0");
    test_class_info(&lv, &cd_S19437C1);
    dp->~S19437C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19437C1(Test_S19437C1, "S19437C1", ABISELECT(296,188));

#else // __cplusplus

extern void _ZN8S19437C1C1Ev();
extern void _ZN8S19437C1D2Ev();
Name_Map name_map_S19437C1[] = {
  NSPAIR(_ZN8S19437C1C1Ev),
  NSPAIR(_ZN8S19437C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C3;
extern VTBL_ENTRY _ZTI8S19437C3[];
extern  VTBL_ENTRY _ZTV8S19437C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C3[];
extern Class_Descriptor cd_S19437C2;
extern VTBL_ENTRY _ZTI8S19437C2[];
extern  VTBL_ENTRY _ZTV8S19437C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C3;
extern VTBL_ENTRY _ZTI8S19437C3[];
extern  VTBL_ENTRY _ZTV8S19437C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19437C10;
extern VTBL_ENTRY _ZTI9S19437C10[];
extern  VTBL_ENTRY _ZTV9S19437C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C10[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19437C13;
extern VTBL_ENTRY _ZTI9S19437C13[];
extern  VTBL_ENTRY _ZTV9S19437C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C12;
extern VTBL_ENTRY _ZTI9S19437C12[];
extern  VTBL_ENTRY _ZTV9S19437C12[];
extern Class_Descriptor cd_S19437C7;
extern VTBL_ENTRY _ZTI8S19437C7[];
extern  VTBL_ENTRY _ZTV8S19437C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C7[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C15;
extern VTBL_ENTRY _ZTI9S19437C15[];
extern  VTBL_ENTRY _ZTV9S19437C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C15[];
extern Class_Descriptor cd_S19437C14;
extern VTBL_ENTRY _ZTI9S19437C14[];
extern  VTBL_ENTRY _ZTV9S19437C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C14[];
extern Class_Descriptor cd_S19437C3;
extern VTBL_ENTRY _ZTI8S19437C3[];
extern  VTBL_ENTRY _ZTV8S19437C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C3[];
extern Class_Descriptor cd_S19437C16;
extern VTBL_ENTRY _ZTI9S19437C16[];
extern  VTBL_ENTRY _ZTV9S19437C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C16[];
extern Class_Descriptor cd_S19437C10;
extern VTBL_ENTRY _ZTI9S19437C10[];
extern  VTBL_ENTRY _ZTV9S19437C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C10[];
extern Class_Descriptor cd_S19437C6;
extern VTBL_ENTRY _ZTI8S19437C6[];
extern  VTBL_ENTRY _ZTV8S19437C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C6[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19437C4;
extern VTBL_ENTRY _ZTI8S19437C4[];
extern  VTBL_ENTRY _ZTV8S19437C4[];
extern Class_Descriptor cd_S19437C15;
extern VTBL_ENTRY _ZTI9S19437C15[];
extern  VTBL_ENTRY _ZTV9S19437C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19437C15[];
static Base_Class bases_S19437C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(32,20), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19437C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19437C2,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19437C3,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(184,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19437C10,    ABISELECT(192,120), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(216,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
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(216,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
    11, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(216,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
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(225,137), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(228,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19437C13,    ABISELECT(216,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(248,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(248,156), //bcp->offset
    76, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19437C12,    ABISELECT(216,132), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19437C7,    ABISELECT(128,80), //bcp->offset
    53, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(57,33), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19437C15,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19437C14,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19437C3,    ABISELECT(264,168), //bcp->offset
    80, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19437C16,    ABISELECT(88,60), //bcp->offset
    39, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19437C10,    ABISELECT(104,68), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19437C6,    ABISELECT(48,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(289,185), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(280,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19437C4,    ABISELECT(280,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19437C15,    ABISELECT(280,180), //bcp->offset
    86, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19437C1[];
extern void _ZN8S19437C1D1Ev();
extern void _ZN8S19437C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19437C1D1Ev,_ZTv0_n16_N8S19437C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19437C1D1Ev,_ZThn8_N8S19437C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19437C1D0Ev,_ZTv0_n16_N8S19437C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19437C1D0Ev,_ZThn8_N8S19437C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C1D1Ev,_ZTv0_n12_N8S19437C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19437C1D1Ev,_ZThn20_N8S19437C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C1D0Ev,_ZTv0_n12_N8S19437C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19437C1D0Ev,_ZThn20_N8S19437C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19437C1D1Ev,_ZTv0_n44_N8S19437C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19437C1D1Ev,_ZThn28_N8S19437C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19437C1D0Ev,_ZTv0_n44_N8S19437C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19437C1D0Ev,_ZThn28_N8S19437C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn40_n88_N8S19437C1D1Ev,_ZTvn32_n44_N8S19437C1D1Ev)();
extern void ABISELECT(_ZTvn40_n88_N8S19437C1D0Ev,_ZTvn32_n44_N8S19437C1D0Ev)();
extern void ABISELECT(_ZTvn56_n88_N8S19437C1D1Ev,_ZTvn40_n44_N8S19437C1D1Ev)();
extern void ABISELECT(_ZTvn56_n88_N8S19437C1D0Ev,_ZTvn40_n44_N8S19437C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19437C1D1Ev,_ZTv0_n32_N8S19437C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19437C1D1Ev,_ZThn80_N8S19437C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19437C1D0Ev,_ZTv0_n32_N8S19437C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19437C1D0Ev,_ZThn80_N8S19437C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19437C1D1Ev,_ZTv0_n24_N8S19437C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S19437C1D1Ev,_ZThn120_N8S19437C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19437C1D0Ev,_ZTv0_n24_N8S19437C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S19437C1D0Ev,_ZThn120_N8S19437C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C1D1Ev,_ZTv0_n12_N8S19437C1D1Ev)();
extern void ABISELECT(_ZThn216_N8S19437C1D1Ev,_ZThn132_N8S19437C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C1D0Ev,_ZTv0_n12_N8S19437C1D0Ev)();
extern void ABISELECT(_ZThn216_N8S19437C1D0Ev,_ZThn132_N8S19437C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19437C1D1Ev,_ZTvn24_n12_N8S19437C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19437C1D0Ev,_ZTvn24_n12_N8S19437C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19437C1D1Ev,_ZTv0_n16_N8S19437C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19437C1D1Ev,_ZThn168_N8S19437C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19437C1D0Ev,_ZTv0_n16_N8S19437C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19437C1D0Ev,_ZThn168_N8S19437C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19437C1D1Ev,_ZTv0_n28_N8S19437C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19437C1D1Ev,_ZThn180_N8S19437C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19437C1D0Ev,_ZTv0_n28_N8S19437C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19437C1D0Ev,_ZThn180_N8S19437C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19437C1[] = {
  ABISELECT(280,180),
  ABISELECT(264,168),
  ABISELECT(216,132),
  ABISELECT(192,120),
  ABISELECT(184,116),
  0,
  ABISELECT(128,80),
  ABISELECT(48,28),
  0,
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&_ZN8S19437C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19437C1D1Ev,_ZTv0_n16_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19437C1D0Ev,_ZTv0_n16_N8S19437C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C1D1Ev,_ZTv0_n12_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C1D0Ev,_ZTv0_n12_N8S19437C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(216,140),
  ABISELECT(168,104),
  ABISELECT(80,52),
  ABISELECT(-48,-28),
  ABISELECT(136,88),
  ABISELECT(-16,-8),
  ABISELECT(144,92),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19437C1D1Ev,_ZTv0_n44_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19437C1D0Ev,_ZTv0_n44_N8S19437C1D0Ev),
  ABISELECT(96,56),
  ABISELECT(-56,-40),
  ABISELECT(176,108),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n88_N8S19437C1D1Ev,_ZTvn32_n44_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n88_N8S19437C1D0Ev,_ZTvn32_n44_N8S19437C1D0Ev),
  ABISELECT(80,48),
  ABISELECT(-72,-48),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n88_N8S19437C1D1Ev,_ZTvn40_n44_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n88_N8S19437C1D0Ev,_ZTvn40_n44_N8S19437C1D0Ev),
  ABISELECT(-128,-80),
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-128,-80),
  ABISELECT(-96,-60),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19437C1D1Ev,_ZTv0_n32_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19437C1D0Ev,_ZTv0_n32_N8S19437C1D0Ev),
  ABISELECT(-192,-120),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C1D1Ev,_ZTv0_n24_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C1D0Ev,_ZTv0_n24_N8S19437C1D0Ev),
  ABISELECT(-216,-132),
  ABISELECT(-216,-132),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C1D1Ev,_ZTv0_n12_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C1D0Ev,_ZTv0_n12_N8S19437C1D0Ev),
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C1D1Ev,_ZTvn24_n12_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C1D0Ev,_ZTvn24_n12_N8S19437C1D0Ev),
  ABISELECT(-264,-168),
  ABISELECT(-232,-148),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19437C1D1Ev,_ZTv0_n16_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19437C1D0Ev,_ZTv0_n16_N8S19437C1D0Ev),
  ABISELECT(-280,-180),
  ABISELECT(-96,-64),
  ABISELECT(-248,-160),
  ABISELECT(-88,-60),
  ABISELECT(-280,-180),
  ABISELECT(-280,-180),
  (VTBL_ENTRY)&(_ZTI8S19437C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19437C1D1Ev,_ZTv0_n28_N8S19437C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19437C1D0Ev,_ZTv0_n28_N8S19437C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19437C1[];
extern void _ZN8S19437C2D1Ev();
extern void _ZN8S19437C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C2__8S19437C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C2[0]),
  (VTBL_ENTRY)&_ZN8S19437C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C2D0Ev,
};
extern void _ZN8S19437C3D1Ev();
extern void _ZN8S19437C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C38S19437C2__8S19437C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&_ZN8S19437C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19437C3D1Ev,_ZThn12_N8S19437C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19437C3D0Ev,_ZThn12_N8S19437C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C38S19437C2__8S19437C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19437C2D1Ev,_ZTv0_n12_N8S19437C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19437C2D1Ev,_ZThn12_N8S19437C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C2D0Ev,_ZTv0_n12_N8S19437C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19437C2D0Ev,_ZThn12_N8S19437C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C2__8S19437C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19437C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C2D1Ev,_ZTv0_n12_N8S19437C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C2D0Ev,_ZTv0_n12_N8S19437C2D0Ev),
};
extern void _ZN8S19437C6D1Ev();
extern void _ZN8S19437C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C6__8S19437C1[] = {
  ABISELECT(216,140),
  ABISELECT(168,104),
  ABISELECT(80,52),
  ABISELECT(-48,-28),
  ABISELECT(136,88),
  ABISELECT(-16,-8),
  ABISELECT(144,92),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&_ZN8S19437C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C6D0Ev,
};
extern void _ZN9S19437C14D1Ev();
extern void _ZN9S19437C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C148S19437C6__8S19437C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(136,88),
  ABISELECT(-16,-8),
  ABISELECT(144,92),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C14[0]),
  (VTBL_ENTRY)&_ZN9S19437C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C14D0Ev,
};
extern void _ZN9S19437C15D1Ev();
extern void _ZN9S19437C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C159S19437C148S19437C6__8S19437C1[] = {
  ABISELECT(136,88),
  ABISELECT(-16,-8),
  ABISELECT(144,92),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&_ZN9S19437C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev)();
extern void ABISELECT(_ZThn144_N9S19437C15D1Ev,_ZThn92_N9S19437C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev)();
extern void ABISELECT(_ZThn144_N9S19437C15D0Ev,_ZThn92_N9S19437C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C10__9S19437C159S19437C148S19437C6__8S19437C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__A1__9S19437C159S19437C148S19437C6__8S19437C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19437C14D1Ev,_ZTv0_n24_N9S19437C14D1Ev)();
extern void ABISELECT(_ZThn144_N9S19437C14D1Ev,_ZThn92_N9S19437C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19437C14D0Ev,_ZTv0_n24_N9S19437C14D0Ev)();
extern void ABISELECT(_ZThn144_N9S19437C14D0Ev,_ZThn92_N9S19437C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C10__9S19437C148S19437C6__8S19437C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI9S19437C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C14D1Ev,_ZTv0_n24_N9S19437C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C14D0Ev,_ZTv0_n24_N9S19437C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19437C14D1Ev,_ZTv0_n12_N9S19437C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19437C14D0Ev,_ZTv0_n12_N9S19437C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C148S19437C6__8S19437C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19437C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C14D1Ev,_ZTv0_n12_N9S19437C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C14D0Ev,_ZTv0_n12_N9S19437C14D0Ev),
};
extern void _ZN9S19437C16D1Ev();
extern void _ZN9S19437C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C168S19437C6__8S19437C1[] = {
  ABISELECT(96,56),
  ABISELECT(-56,-40),
  ABISELECT(176,108),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C16[0]),
  (VTBL_ENTRY)&_ZN9S19437C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19437C16D1Ev,_ZTv0_n16_N9S19437C16D1Ev)();
extern void ABISELECT(_ZThn176_N9S19437C16D1Ev,_ZThn108_N9S19437C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19437C16D0Ev,_ZTv0_n16_N9S19437C16D0Ev)();
extern void ABISELECT(_ZThn176_N9S19437C16D0Ev,_ZThn108_N9S19437C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C3__9S19437C168S19437C6__8S19437C1[] = {
  ABISELECT(-176,-108),
  ABISELECT(-232,-148),
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI9S19437C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19437C16D1Ev,_ZTv0_n16_N9S19437C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19437C16D0Ev,_ZTv0_n16_N9S19437C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19437C16D1Ev,_ZTv0_n12_N9S19437C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19437C16D0Ev,_ZTv0_n12_N9S19437C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C168S19437C6__8S19437C1[] = {
  ABISELECT(56,40),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI9S19437C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C16D1Ev,_ZTv0_n12_N9S19437C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C16D0Ev,_ZTv0_n12_N9S19437C16D0Ev),
};
extern void _ZN9S19437C10D1Ev();
extern void _ZN9S19437C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C108S19437C6__A1__8S19437C1[] = {
  ABISELECT(80,48),
  ABISELECT(-72,-48),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&_ZN9S19437C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C108S19437C6__A1__8S19437C1[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19437C6D1Ev,_ZTv0_n32_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S19437C6D1Ev,_ZThn52_N8S19437C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19437C6D0Ev,_ZTv0_n32_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn80_N8S19437C6D0Ev,_ZThn52_N8S19437C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C7__8S19437C6__8S19437C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-128,-80),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19437C6D1Ev,_ZTv0_n32_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19437C6D0Ev,_ZTv0_n32_N8S19437C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C6__8S19437C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19437C6D1Ev,_ZTv0_n24_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn144_N8S19437C6D1Ev,_ZThn92_N8S19437C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19437C6D0Ev,_ZTv0_n24_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn144_N8S19437C6D0Ev,_ZThn92_N8S19437C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C10__8S19437C6__8S19437C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C6D1Ev,_ZTv0_n24_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C6D0Ev,_ZTv0_n24_N8S19437C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn168_N8S19437C6D1Ev,_ZThn104_N8S19437C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn168_N8S19437C6D0Ev,_ZThn104_N8S19437C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C12__8S19437C6__8S19437C1[] = {
  ABISELECT(-168,-104),
  ABISELECT(-168,-104),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S19437C6D1Ev,_ZTvn24_n12_N8S19437C6D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19437C6D0Ev,_ZTvn24_n12_N8S19437C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C49S19437C12__A2__8S19437C6__8S19437C1[] = {
  ABISELECT(-200,-128),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C6D1Ev,_ZTvn24_n12_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C6D0Ev,_ZTvn24_n12_N8S19437C6D0Ev),
};
extern void ABISELECT(_ZThn40_N8S19437C6D1Ev,_ZThn32_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S19437C6D0Ev,_ZThn32_N8S19437C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19437C16__8S19437C6__8S19437C1[] = {
  ABISELECT(96,56),
  ABISELECT(-56,-40),
  ABISELECT(176,108),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19437C6D1Ev,_ZThn32_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19437C6D0Ev,_ZThn32_N8S19437C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19437C6D1Ev,_ZTv0_n16_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn216_N8S19437C6D1Ev,_ZThn140_N8S19437C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19437C6D0Ev,_ZTv0_n16_N8S19437C6D0Ev)();
extern void ABISELECT(_ZThn216_N8S19437C6D0Ev,_ZThn140_N8S19437C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19437C3__A1__8S19437C6__8S19437C1[] = {
  ABISELECT(-216,-140),
  ABISELECT(-232,-148),
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19437C6D1Ev,_ZTv0_n16_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19437C6D0Ev,_ZTv0_n16_N8S19437C6D0Ev),
};
extern void ABISELECT(_ZThn56_N8S19437C6D1Ev,_ZThn40_N8S19437C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S19437C6D0Ev,_ZThn40_N8S19437C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19437C10__A__8S19437C6__8S19437C1[] = {
  ABISELECT(80,48),
  ABISELECT(-72,-48),
  ABISELECT(-104,-68),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19437C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19437C6D1Ev,_ZThn40_N8S19437C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19437C6D0Ev,_ZThn40_N8S19437C6D0Ev),
};
extern void _ZN8S19437C7D1Ev();
extern void _ZN8S19437C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C7__8S19437C1[] = {
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-128,-80),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&_ZN8S19437C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C7D0Ev,
};
extern void _ZN8S19437C3D1Ev();
extern void _ZN8S19437C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C38S19437C7__A1__8S19437C1[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&_ZN8S19437C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C38S19437C7__A1__8S19437C1[] = {
  ABISELECT(96,60),
  ABISELECT(96,60),
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C7__8S19437C1[] = {
  ABISELECT(96,60),
  ABISELECT(96,60),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19437C7D1Ev,_ZTv0_n24_N8S19437C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S19437C7D1Ev,_ZThn40_N8S19437C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19437C7D0Ev,_ZTv0_n24_N8S19437C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S19437C7D0Ev,_ZThn40_N8S19437C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C10__8S19437C7__8S19437C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C7D1Ev,_ZTv0_n24_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19437C7D0Ev,_ZTv0_n24_N8S19437C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev)();
extern void ABISELECT(_ZThn88_N8S19437C7D1Ev,_ZThn52_N8S19437C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev)();
extern void ABISELECT(_ZThn88_N8S19437C7D0Ev,_ZThn52_N8S19437C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19437C12__8S19437C7__8S19437C1[] = {
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S19437C7D1Ev,_ZTvn24_n12_N8S19437C7D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19437C7D0Ev,_ZTvn24_n12_N8S19437C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C49S19437C12__A2__8S19437C7__8S19437C1[] = {
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S19437C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C7D1Ev,_ZTvn24_n12_N8S19437C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19437C7D0Ev,_ZTvn24_n12_N8S19437C7D0Ev),
};
extern void _ZN9S19437C10D1Ev();
extern void _ZN9S19437C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C10__8S19437C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&_ZN9S19437C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__9S19437C10__8S19437C1[] = {
  ABISELECT(160,100),
  ABISELECT(160,100),
  (VTBL_ENTRY)&(_ZTI9S19437C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D1Ev,_ZTv0_n12_N9S19437C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C10D0Ev,_ZTv0_n12_N9S19437C10D0Ev),
};
extern void _ZN8S19437C3D1Ev();
extern void _ZN8S19437C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19437C3__A2__8S19437C1[] = {
  ABISELECT(-232,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&_ZN8S19437C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19437C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__8S19437C3__A2__8S19437C1[] = {
  ABISELECT(232,148),
  ABISELECT(232,148),
  (VTBL_ENTRY)&(_ZTI8S19437C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev),
};
extern void _ZN9S19437C15D1Ev();
extern void _ZN9S19437C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19437C15__A1__8S19437C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-248,-160),
  ABISELECT(-88,-60),
  ABISELECT(-280,-180),
  0,
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&_ZN9S19437C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19437C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19437C10__9S19437C15__A1__8S19437C1[] = {
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19437C4__A1__9S19437C15__A1__8S19437C1[] = {
  ABISELECT(248,160),
  ABISELECT(248,160),
  (VTBL_ENTRY)&(_ZTI9S19437C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D1Ev,_ZTv0_n12_N9S19437C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19437C15D0Ev,_ZTv0_n12_N9S19437C15D0Ev),
};
static  VTT_ENTRY vtt_S19437C1[] = {
  {&(_ZTV8S19437C1[13]),  13,95},
  {&(_ZTV8S19437C1[19]),  19,95},
  {&(_ZTV8S19437C1[24]),  24,95},
  {&(_ZTV8S19437C1[37]),  37,95},
  {&(_ZTV8S19437C1[61]),  61,95},
  {&(_ZTV8S19437C1[69]),  69,95},
  {&(_ZTV8S19437C1[74]),  74,95},
  {&(_ZTV8S19437C1[78]),  78,95},
  {&(_ZTV8S19437C1[44]),  44,95},
  {&(_ZTV8S19437C1[84]),  84,95},
  {&(_ZTV8S19437C1[51]),  51,95},
  {&(_ZTV8S19437C1[93]),  93,95},
  {&(_tg__ZTV8S19437C2__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C38S19437C2__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C38S19437C2__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C2__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C6__8S19437C1[10]),  10,12},
  {&(_tg__ZTV9S19437C148S19437C6__8S19437C1[7]),  7,9},
  {&(_tg__ZTV9S19437C159S19437C148S19437C6__8S19437C1[6]),  6,8},
  {&(_tg__ZTV9S19437C10__9S19437C159S19437C148S19437C6__8S19437C1[6]),  6,8},
  {&(_tg__ZTV8S19437C4__A1__9S19437C159S19437C148S19437C6__8S19437C1[3]),  3,5},
  {&(_tg__ZTV9S19437C10__9S19437C148S19437C6__8S19437C1[6]),  6,8},
  {&(_tg__ZTV8S19437C4__9S19437C148S19437C6__8S19437C1[3]),  3,5},
  {&(_tg__ZTV9S19437C168S19437C6__8S19437C1[5]),  5,7},
  {&(_tg__ZTV8S19437C3__9S19437C168S19437C6__8S19437C1[4]),  4,6},
  {&(_tg__ZTV8S19437C4__9S19437C168S19437C6__8S19437C1[3]),  3,5},
  {&(_tg__ZTV9S19437C108S19437C6__A1__8S19437C1[5]),  5,7},
  {&(_tg__ZTV8S19437C4__9S19437C108S19437C6__A1__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C7__8S19437C6__8S19437C1[8]),  8,10},
  {&(_tg__ZTV8S19437C4__8S19437C6__8S19437C1[3]),  3,5},
  {&(_tg__ZTV9S19437C10__8S19437C6__8S19437C1[6]),  6,8},
  {&(_tg__ZTV9S19437C12__8S19437C6__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C49S19437C12__A2__8S19437C6__8S19437C1[2]),  2,4},
  {&(_tg__ZTV9S19437C16__8S19437C6__8S19437C1[5]),  5,7},
  {&(_tg__ZTV8S19437C3__A1__8S19437C6__8S19437C1[4]),  4,6},
  {&(_tg__ZTV9S19437C10__A__8S19437C6__8S19437C1[5]),  5,7},
  {&(_tg__ZTV8S19437C7__8S19437C1[7]),  7,9},
  {&(_tg__ZTV8S19437C38S19437C7__A1__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C38S19437C7__A1__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C7__8S19437C1[3]),  3,5},
  {&(_tg__ZTV9S19437C10__8S19437C7__8S19437C1[6]),  6,8},
  {&(_tg__ZTV9S19437C12__8S19437C7__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C49S19437C12__A2__8S19437C7__8S19437C1[2]),  2,4},
  {&(_tg__ZTV9S19437C10__8S19437C1[5]),  5,7},
  {&(_tg__ZTV8S19437C4__9S19437C10__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C3__A2__8S19437C1[3]),  3,5},
  {&(_tg__ZTV8S19437C4__8S19437C3__A2__8S19437C1[3]),  3,5},
  {&(_tg__ZTV9S19437C15__A1__8S19437C1[6]),  6,8},
  {&(_tg__ZTV9S19437C10__9S19437C15__A1__8S19437C1[6]),  6,8},
  {&(_tg__ZTV8S19437C4__A1__9S19437C15__A1__8S19437C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19437C1[];
extern  VTBL_ENTRY _ZTV8S19437C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19437C1[];
static VTBL_ENTRY alt_thunk_names127[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C7D0Ev,_ZTv0_n12_N8S19437C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19437C7D0Ev,_ZThn52_N8S19437C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C7D1Ev,_ZTv0_n12_N8S19437C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19437C7D1Ev,_ZThn52_N8S19437C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C7D0Ev,_ZTv0_n24_N8S19437C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19437C7D0Ev,_ZThn40_N8S19437C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C7D1Ev,_ZTv0_n24_N8S19437C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19437C7D1Ev,_ZThn40_N8S19437C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19437C6D0Ev,_ZTv0_n16_N8S19437C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19437C6D0Ev,_ZThn140_N8S19437C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19437C6D1Ev,_ZTv0_n16_N8S19437C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19437C6D1Ev,_ZThn140_N8S19437C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C6D0Ev,_ZTv0_n12_N8S19437C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19437C6D0Ev,_ZThn104_N8S19437C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C6D1Ev,_ZTv0_n12_N8S19437C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19437C6D1Ev,_ZThn104_N8S19437C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C6D0Ev,_ZTv0_n24_N8S19437C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19437C6D0Ev,_ZThn92_N8S19437C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C6D1Ev,_ZTv0_n24_N8S19437C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19437C6D1Ev,_ZThn92_N8S19437C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19437C6D0Ev,_ZTv0_n32_N8S19437C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19437C6D0Ev,_ZThn52_N8S19437C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19437C6D1Ev,_ZTv0_n32_N8S19437C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19437C6D1Ev,_ZThn52_N8S19437C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19437C16D0Ev,_ZTv0_n16_N9S19437C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19437C16D0Ev,_ZThn108_N9S19437C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19437C16D1Ev,_ZTv0_n16_N9S19437C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19437C16D1Ev,_ZThn108_N9S19437C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C14D0Ev,_ZTv0_n24_N9S19437C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19437C14D0Ev,_ZThn92_N9S19437C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C14D1Ev,_ZTv0_n24_N9S19437C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19437C14D1Ev,_ZThn92_N9S19437C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C15D0Ev,_ZTv0_n24_N9S19437C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19437C15D0Ev,_ZThn92_N9S19437C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19437C15D1Ev,_ZTv0_n24_N9S19437C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19437C15D1Ev,_ZThn92_N9S19437C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C2D0Ev,_ZTv0_n12_N8S19437C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C2D0Ev,_ZThn12_N8S19437C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C2D1Ev,_ZTv0_n12_N8S19437C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C2D1Ev,_ZThn12_N8S19437C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D0Ev,_ZTv0_n12_N8S19437C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C3D0Ev,_ZThn12_N8S19437C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C3D1Ev,_ZTv0_n12_N8S19437C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C3D1Ev,_ZThn12_N8S19437C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19437C1D0Ev,_ZTv0_n28_N8S19437C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19437C1D0Ev,_ZThn180_N8S19437C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19437C1D1Ev,_ZTv0_n28_N8S19437C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19437C1D1Ev,_ZThn180_N8S19437C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C1D0Ev,_ZTv0_n24_N8S19437C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19437C1D0Ev,_ZThn120_N8S19437C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19437C1D1Ev,_ZTv0_n24_N8S19437C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19437C1D1Ev,_ZThn120_N8S19437C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19437C1D0Ev,_ZTv0_n32_N8S19437C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19437C1D0Ev,_ZThn80_N8S19437C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19437C1D1Ev,_ZTv0_n32_N8S19437C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19437C1D1Ev,_ZThn80_N8S19437C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19437C1D0Ev,_ZTv0_n44_N8S19437C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19437C1D0Ev,_ZThn28_N8S19437C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19437C1D1Ev,_ZTv0_n44_N8S19437C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19437C1D1Ev,_ZThn28_N8S19437C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C1D0Ev,_ZTv0_n12_N8S19437C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19437C1D0Ev,_ZThn132_N8S19437C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19437C1D0Ev,_ZThn20_N8S19437C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19437C1D1Ev,_ZTv0_n12_N8S19437C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19437C1D1Ev,_ZThn132_N8S19437C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19437C1D1Ev,_ZThn20_N8S19437C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19437C1D0Ev,_ZTv0_n16_N8S19437C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19437C1D0Ev,_ZThn168_N8S19437C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C1D0Ev,_ZThn8_N8S19437C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19437C1D1Ev,_ZTv0_n16_N8S19437C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19437C1D1Ev,_ZThn168_N8S19437C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19437C1D1Ev,_ZThn8_N8S19437C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19437C1 = {  "S19437C1", // class name
  bases_S19437C1, 32,
  &(vtc_S19437C1[0]), // expected_vtbl_contents
  &(vtt_S19437C1[0]), // expected_vtt_contents
  ABISELECT(296,188), // object size
  NSPAIRA(_ZTI8S19437C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19437C1),95, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19437C1),50, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names127,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19436C4  : S2014C38 {
  ::S2014C38 s19436c4f0;
  virtual  ~S19436C4(); // _ZN8S19436C4D1Ev
  S19436C4(); // tgen
};
//SIG(-1 S19436C4) C1{ BC2{ m} vd FC2}


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

static void Test_S19436C4()
{
  extern Class_Descriptor cd_S19436C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19436C4, buf);
    S19436C4 *dp, &lv = *(dp=new (buf) S19436C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19436C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C4)");
    check_base_class_offset(lv, (S2014C38*), 0, "S19436C4");
    check_field_offset(lv, s19436c4f0, ABISELECT(8,4), "S19436C4.s19436c4f0");
    test_class_info(&lv, &cd_S19436C4);
    dp->~S19436C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C4(Test_S19436C4, "S19436C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19436C4C1Ev();
extern void _ZN8S19436C4D1Ev();
Name_Map name_map_S19436C4[] = {
  NSPAIR(_ZN8S19436C4C1Ev),
  NSPAIR(_ZN8S19436C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S19436C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19436C4[];
extern void _ZN8S19436C4D1Ev();
extern void _ZN8S19436C4D0Ev();
static  VTBL_ENTRY vtc_S19436C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C4[0]),
  (VTBL_ENTRY)&_ZN8S19436C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C4D0Ev,
};
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
Class_Descriptor cd_S19436C4 = {  "S19436C4", // class name
  bases_S19436C4, 1,
  &(vtc_S19436C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19436C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19436C4),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  S19436C3  : virtual S19436C4 {
  __tsi64 s19436c3f0;
  ~S19436C3(); // tgen
  S19436C3(); // tgen
};
//SIG(-1 S19436C3) C1{ VBC2{ BC3{ m} vd FC3} FL}


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

static void Test_S19436C3()
{
  extern Class_Descriptor cd_S19436C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19436C3, buf);
    S19436C3 *dp, &lv = *(dp=new (buf) S19436C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19436C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C3)");
    check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(16,12), "S19436C3");
    check_base_class_offset(lv, (S19436C4*), ABISELECT(16,12), "S19436C3");
    check_field_offset(lv, s19436c3f0, ABISELECT(8,4), "S19436C3.s19436c3f0");
    test_class_info(&lv, &cd_S19436C3);
    dp->~S19436C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C3(Test_S19436C3, "S19436C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19436C3C1Ev();
extern void _ZN8S19436C3D1Ev();
Name_Map name_map_S19436C3[] = {
  NSPAIR(_ZN8S19436C3C1Ev),
  NSPAIR(_ZN8S19436C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
static Base_Class bases_S19436C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19436C3[];
extern void _ZN8S19436C3D1Ev();
extern void _ZN8S19436C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19436C3D1Ev,_ZThn12_N8S19436C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19436C3D0Ev,_ZThn12_N8S19436C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19436C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&_ZN8S19436C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C3D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19436C3[];
static  VTT_ENTRY vtt_S19436C3[] = {
  {&(_ZTV8S19436C3[3]),  3,10},
  {&(_ZTV8S19436C3[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S19436C3[];
extern  VTBL_ENTRY _ZTV8S19436C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C3[];
static VTBL_ENTRY alt_thunk_names128[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C3D0Ev,_ZThn12_N8S19436C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C3D1Ev,_ZThn12_N8S19436C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19436C3 = {  "S19436C3", // class name
  bases_S19436C3, 2,
  &(vtc_S19436C3[0]), // expected_vtbl_contents
  &(vtt_S19436C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19436C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19436C3),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19436C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names128,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19436C2  : S19436C3 {
  virtual  ~S19436C2(); // _ZN8S19436C2D2Ev
  S19436C2(); // tgen
};
//SIG(-1 S19436C2) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} vd}


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

static void Test_S19436C2()
{
  extern Class_Descriptor cd_S19436C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19436C2, buf);
    S19436C2 *dp, &lv = *(dp=new (buf) S19436C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19436C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C2)");
    check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(16,12), "S19436C2");
    check_base_class_offset(lv, (S19436C4*)(S19436C3*), ABISELECT(16,12), "S19436C2");
    check_base_class_offset(lv, (S19436C3*), 0, "S19436C2");
    test_class_info(&lv, &cd_S19436C2);
    dp->~S19436C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C2(Test_S19436C2, "S19436C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19436C2C1Ev();
extern void _ZN8S19436C2D2Ev();
Name_Map name_map_S19436C2[] = {
  NSPAIR(_ZN8S19436C2C1Ev),
  NSPAIR(_ZN8S19436C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C3;
extern VTBL_ENTRY _ZTI8S19436C3[];
extern  VTBL_ENTRY _ZTV8S19436C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C3[];
static Base_Class bases_S19436C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19436C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19436C2[];
extern void _ZN8S19436C2D1Ev();
extern void _ZN8S19436C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19436C2D1Ev,_ZTv0_n12_N8S19436C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19436C2D1Ev,_ZThn12_N8S19436C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C2D0Ev,_ZTv0_n12_N8S19436C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19436C2D0Ev,_ZThn12_N8S19436C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19436C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C2[0]),
  (VTBL_ENTRY)&_ZN8S19436C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C2D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19436C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C2D1Ev,_ZTv0_n12_N8S19436C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C2D0Ev,_ZTv0_n12_N8S19436C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19436C2[];
extern void _ZN8S19436C3D1Ev();
extern void _ZN8S19436C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C3__8S19436C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&_ZN8S19436C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19436C3D1Ev,_ZThn12_N8S19436C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19436C3D0Ev,_ZThn12_N8S19436C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C3__8S19436C2[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev),
};
static  VTT_ENTRY vtt_S19436C2[] = {
  {&(_ZTV8S19436C2[3]),  3,10},
  {&(_tg__ZTV8S19436C3__8S19436C2[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C3__8S19436C2[3]),  3,5},
  {&(_ZTV8S19436C2[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S19436C2[];
extern  VTBL_ENTRY _ZTV8S19436C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C2[];
static VTBL_ENTRY alt_thunk_names129[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C3D0Ev,_ZThn12_N8S19436C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C3D1Ev,_ZThn12_N8S19436C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C2D0Ev,_ZTv0_n12_N8S19436C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C2D0Ev,_ZThn12_N8S19436C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C2D1Ev,_ZTv0_n12_N8S19436C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C2D1Ev,_ZThn12_N8S19436C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19436C2 = {  "S19436C2", // class name
  bases_S19436C2, 3,
  &(vtc_S19436C2[0]), // expected_vtbl_contents
  &(vtt_S19436C2[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19436C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19436C2),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19436C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names129,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19436C10  : virtual S2014C28 , virtual S19436C4 , virtual S3222C8_nt {
  void *s19436c10f0;
  ::S19762C18_nt s19436c10f1;
  virtual  ~S19436C10(); // _ZN9S19436C10D2Ev
  S19436C10(); // tgen
};
//SIG(-1 S19436C10) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S19436C10()
{
  extern Class_Descriptor cd_S19436C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19436C10, buf);
    S19436C10 *dp, &lv = *(dp=new (buf) S19436C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19436C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C10)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19436C10");
    check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(24,12), "S19436C10");
    check_base_class_offset(lv, (S19436C4*), ABISELECT(24,12), "S19436C10");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S19436C10");
    check_field_offset(lv, s19436c10f0, ABISELECT(8,4), "S19436C10.s19436c10f0");
    check_field_offset(lv, s19436c10f1, ABISELECT(16,8), "S19436C10.s19436c10f1");
    test_class_info(&lv, &cd_S19436C10);
    dp->~S19436C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C10(Test_S19436C10, "S19436C10", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19436C10C1Ev();
extern void _ZN9S19436C10D2Ev();
Name_Map name_map_S19436C10[] = {
  NSPAIR(_ZN9S19436C10C1Ev),
  NSPAIR(_ZN9S19436C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19436C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19436C10[];
extern void _ZN9S19436C10D1Ev();
extern void _ZN9S19436C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19436C10D1Ev,_ZThn12_N9S19436C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19436C10D0Ev,_ZThn12_N9S19436C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19436C10[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&_ZN9S19436C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C10D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19436C10[];
static  VTT_ENTRY vtt_S19436C10[] = {
  {&(_ZTV9S19436C10[5]),  5,12},
  {&(_ZTV9S19436C10[10]),  10,12},
};
extern VTBL_ENTRY _ZTI9S19436C10[];
extern  VTBL_ENTRY _ZTV9S19436C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C10[];
static VTBL_ENTRY alt_thunk_names130[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19436C10D0Ev,_ZThn12_N9S19436C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19436C10D1Ev,_ZThn12_N9S19436C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19436C10 = {  "S19436C10", // class name
  bases_S19436C10, 4,
  &(vtc_S19436C10[0]), // expected_vtbl_contents
  &(vtt_S19436C10[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19436C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19436C10),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19436C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names130,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19436C13  : S2014C28 , S19436C4 , S2014C38 , S3222C8_nt {
  short s19436c13f0:16;
  long s19436c13f1;
  ~S19436C13(); // tgen
  S19436C13(); // tgen
};
//SIG(-1 S19436C13) C1{ BC2{ m} BC3{ BC4{ m} vd FC4} BC4 BC5{ m Fi} Fs:16 Fl}


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

static void Test_S19436C13()
{
  extern Class_Descriptor cd_S19436C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19436C13, buf);
    S19436C13 *dp, &lv = *(dp=new (buf) S19436C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19436C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C13)");
    check_base_class_offset(lv, (S2014C28*), 0, "S19436C13");
    check_base_class_offset(lv, (S2014C38*)(S19436C4*), 0, "S19436C13");
    check_base_class_offset(lv, (S19436C4*), 0, "S19436C13");
    /*is_ambiguous_... S19436C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S19436C13");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(12,8), "S19436C13");
    set_bf_and_test(lv, s19436c13f0, ABISELECT(16,12), 0, 16, 1, "S19436C13");
    set_bf_and_test(lv, s19436c13f0, ABISELECT(16,12), 0, 16, hide_sll(1LL<<15), "S19436C13");
    check_field_offset(lv, s19436c13f1, ABISELECT(24,16), "S19436C13.s19436c13f1");
    test_class_info(&lv, &cd_S19436C13);
    dp->~S19436C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C13(Test_S19436C13, "S19436C13", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19436C13C1Ev();
extern void _ZN9S19436C13D1Ev();
Name_Map name_map_S19436C13[] = {
  NSPAIR(_ZN9S19436C13C1Ev),
  NSPAIR(_ZN9S19436C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19436C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19436C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_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, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19436C13[];
extern void _ZN9S19436C13D1Ev();
extern void _ZN9S19436C13D0Ev();
static  VTBL_ENTRY vtc_S19436C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C13[0]),
  (VTBL_ENTRY)&_ZN9S19436C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C13D0Ev,
};
extern VTBL_ENTRY _ZTI9S19436C13[];
extern  VTBL_ENTRY _ZTV9S19436C13[];
Class_Descriptor cd_S19436C13 = {  "S19436C13", // class name
  bases_S19436C13, 5,
  &(vtc_S19436C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19436C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19436C13),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  S19436C12  : S19436C13 , S19436C4 {
  int s19436c12f0;
  ~S19436C12(); // tgen
  S19436C12(); // tgen
};
//SIG(-1 S19436C12) C1{ BC2{ BC3{ m} BC4{ BC5{ m} vd FC5} BC5 BC6{ m Fi} Fs:16 Fl} BC4 Fi}


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

static void Test_S19436C12()
{
  extern Class_Descriptor cd_S19436C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S19436C12, buf);
    S19436C12 *dp, &lv = *(dp=new (buf) S19436C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S19436C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C12)");
    check_base_class_offset(lv, (S2014C28*)(S19436C13*), 0, "S19436C12");
    check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C13*), 0, "S19436C12");
    check_base_class_offset(lv, (S19436C4*)(S19436C13*), 0, "S19436C12");
    /*is_ambiguous_... S19436C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C13*), ABISELECT(9,5), "S19436C12");
    check_base_class_offset(lv, (S3222C8_nt*)(S19436C13*), ABISELECT(12,8), "S19436C12");
    check_base_class_offset(lv, (S19436C13*), 0, "S19436C12");
    /*is_ambiguous_... S19436C12::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(32,20), "S19436C12");
    /*is_ambiguous_... S19436C12::S19436C4 */ AMB_check_base_class_offset(lv, (S19436C4*), ABISELECT(32,20), "S19436C12");
    check_field_offset(lv, s19436c12f0, ABISELECT(44,28), "S19436C12.s19436c12f0");
    test_class_info(&lv, &cd_S19436C12);
    dp->~S19436C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C12(Test_S19436C12, "S19436C12", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN9S19436C12C1Ev();
extern void _ZN9S19436C12D1Ev();
Name_Map name_map_S19436C12[] = {
  NSPAIR(_ZN9S19436C12C1Ev),
  NSPAIR(_ZN9S19436C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19436C13;
extern VTBL_ENTRY _ZTI9S19436C13[];
extern  VTBL_ENTRY _ZTV9S19436C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
static Base_Class bases_S19436C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19436C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_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
    5, //immediately_derived
  0, 0},
  {&cd_S19436C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(32,20), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19436C12[];
extern void _ZN9S19436C12D1Ev();
extern void _ZN9S19436C12D0Ev();
extern void ABISELECT(_ZThn32_N9S19436C12D1Ev,_ZThn20_N9S19436C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19436C12D0Ev,_ZThn20_N9S19436C12D0Ev)();
static  VTBL_ENTRY vtc_S19436C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C12[0]),
  (VTBL_ENTRY)&_ZN9S19436C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C12D0Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19436C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19436C12D1Ev,_ZThn20_N9S19436C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S19436C12D0Ev,_ZThn20_N9S19436C12D0Ev),
};
extern VTBL_ENTRY _ZTI9S19436C12[];
extern  VTBL_ENTRY _ZTV9S19436C12[];
Class_Descriptor cd_S19436C12 = {  "S19436C12", // class name
  bases_S19436C12, 8,
  &(vtc_S19436C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI9S19436C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19436C12),8, //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  S19436C7  : S19436C3 , virtual S2014C28 , virtual S3222C8_nt , virtual S19436C10 , virtual S19436C12 {
  long s19436c7f0;
  ::S19436C3 s19436c7f1;
  virtual  ~S19436C7(); // _ZN8S19436C7D2Ev
  S19436C7(); // tgen
};
//SIG(-1 S19436C7) C1{ BC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m} VBC6{ m Fi} VBC7{ VBC5 VBC3 VBC6 vd Fp FC8{}} VBC9{ BC10{ BC5 BC3 BC4 BC6 Fs:16 Fl} BC3 Fi} vd Fl FC2}


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

static void Test_S19436C7()
{
  extern Class_Descriptor cd_S19436C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S19436C7, buf);
    S19436C7 *dp, &lv = *(dp=new (buf) S19436C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S19436C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C7)");
    /*is_ambiguous_... S19436C7::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(56,36), "S19436C7");
    check_base_class_offset(lv, (S19436C4*)(S19436C3*), ABISELECT(56,36), "S19436C7");
    check_base_class_offset(lv, (S19436C4*)(S19436C10*), ABISELECT(56,36), "S19436C7");
    check_base_class_offset(lv, (S19436C3*), 0, "S19436C7");
    /*is_ambiguous_... S19436C7::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*), 0, "S19436C7");
    check_base_class_offset(lv, (S2014C28*)(S19436C10*), 0, "S19436C7");
    /*is_ambiguous_... S19436C7::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(68,44), "S19436C7");
    check_base_class_offset(lv, (S3222C8_nt*)(S19436C10*), ABISELECT(68,44), "S19436C7");
    check_base_class_offset(lv, (S19436C10*), ABISELECT(72,48), "S19436C7");
    check_base_class_offset(lv, (S2014C28*)(S19436C13*)(S19436C12*), ABISELECT(96,60), "S19436C7");
    check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C13*)(S19436C12*), ABISELECT(96,60), "S19436C7");
    check_base_class_offset(lv, (S19436C4*)(S19436C13*)(S19436C12*), ABISELECT(96,60), "S19436C7");
    /*is_ambiguous_... S19436C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C13*)(S19436C12*), ABISELECT(105,65), "S19436C7");
    check_base_class_offset(lv, (S3222C8_nt*)(S19436C13*)(S19436C12*), ABISELECT(108,68), "S19436C7");
    check_base_class_offset(lv, (S19436C13*)(S19436C12*), ABISELECT(96,60), "S19436C7");
    /*is_ambiguous_... S19436C12::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C12*), ABISELECT(128,80), "S19436C7");
    /*is_ambiguous_... S19436C12::S19436C4 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C12*), ABISELECT(128,80), "S19436C7");
    check_base_class_offset(lv, (S19436C12*), ABISELECT(96,60), "S19436C7");
    check_field_offset(lv, s19436c7f0, ABISELECT(16,12), "S19436C7.s19436c7f0");
    check_field_offset(lv, s19436c7f1, ABISELECT(24,16), "S19436C7.s19436c7f1");
    test_class_info(&lv, &cd_S19436C7);
    dp->~S19436C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C7(Test_S19436C7, "S19436C7", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN8S19436C7C1Ev();
extern void _ZN8S19436C7D2Ev();
Name_Map name_map_S19436C7[] = {
  NSPAIR(_ZN8S19436C7C1Ev),
  NSPAIR(_ZN8S19436C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C3;
extern VTBL_ENTRY _ZTI8S19436C3[];
extern  VTBL_ENTRY _ZTV8S19436C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19436C10;
extern VTBL_ENTRY _ZTI9S19436C10[];
extern  VTBL_ENTRY _ZTV9S19436C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C10[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19436C13;
extern VTBL_ENTRY _ZTI9S19436C13[];
extern  VTBL_ENTRY _ZTV9S19436C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C12;
extern VTBL_ENTRY _ZTI9S19436C12[];
extern  VTBL_ENTRY _ZTV9S19436C12[];
static Base_Class bases_S19436C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19436C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3222C8_nt,    ABISELECT(68,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19436C10,    ABISELECT(72,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(105,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(108,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19436C13,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(128,80), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19436C12,    ABISELECT(96,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19436C7[];
extern void _ZN8S19436C7D1Ev();
extern void _ZN8S19436C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S19436C7D1Ev,_ZThn36_N8S19436C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S19436C7D0Ev,_ZThn36_N8S19436C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19436C7D1Ev,_ZTv0_n24_N8S19436C7D1Ev)();
extern void ABISELECT(_ZThn72_N8S19436C7D1Ev,_ZThn48_N8S19436C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19436C7D0Ev,_ZTv0_n24_N8S19436C7D0Ev)();
extern void ABISELECT(_ZThn72_N8S19436C7D0Ev,_ZThn48_N8S19436C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev)();
extern void ABISELECT(_ZThn96_N8S19436C7D1Ev,_ZThn60_N8S19436C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev)();
extern void ABISELECT(_ZThn96_N8S19436C7D0Ev,_ZThn60_N8S19436C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19436C7D1Ev,_ZTvn20_n12_N8S19436C7D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19436C7D0Ev,_ZTvn20_n12_N8S19436C7D0Ev)();
static  VTBL_ENTRY vtc_S19436C7[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&_ZN8S19436C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C7D0Ev,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev),
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C7D1Ev,_ZTv0_n24_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C7D0Ev,_ZTv0_n24_N8S19436C7D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C7D1Ev,_ZTvn20_n12_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C7D0Ev,_ZTvn20_n12_N8S19436C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19436C7[];
extern void _ZN8S19436C3D1Ev();
extern void _ZN8S19436C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C3__8S19436C7[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&_ZN8S19436C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S19436C3D1Ev,_ZThn36_N8S19436C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S19436C3D0Ev,_ZThn36_N8S19436C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C3__8S19436C7[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev),
};
extern void _ZN9S19436C10D1Ev();
extern void _ZN9S19436C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C10__8S19436C7[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&_ZN9S19436C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C10__8S19436C7[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev),
};
static  VTT_ENTRY vtt_S19436C7[] = {
  {&(_ZTV8S19436C7[7]),  7,31},
  {&(_tg__ZTV8S19436C3__8S19436C7[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C3__8S19436C7[3]),  3,5},
  {&(_ZTV8S19436C7[12]),  12,31},
  {&(_ZTV8S19436C7[20]),  20,31},
  {&(_ZTV8S19436C7[25]),  25,31},
  {&(_ZTV8S19436C7[29]),  29,31},
  {&(_tg__ZTV9S19436C10__8S19436C7[5]),  5,7},
  {&(_tg__ZTV8S19436C4__9S19436C10__8S19436C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19436C7[];
extern  VTBL_ENTRY _ZTV8S19436C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C7[];
static VTBL_ENTRY alt_thunk_names131[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19436C3D0Ev,_ZThn36_N8S19436C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19436C3D1Ev,_ZThn36_N8S19436C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C7D0Ev,_ZTv0_n24_N8S19436C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19436C7D0Ev,_ZThn48_N8S19436C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C7D1Ev,_ZTv0_n24_N8S19436C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19436C7D1Ev,_ZThn48_N8S19436C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19436C7D0Ev,_ZThn60_N8S19436C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19436C7D0Ev,_ZThn36_N8S19436C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19436C7D1Ev,_ZThn60_N8S19436C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19436C7D1Ev,_ZThn36_N8S19436C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19436C7 = {  "S19436C7", // class name
  bases_S19436C7, 15,
  &(vtc_S19436C7[0]), // expected_vtbl_contents
  &(vtt_S19436C7[0]), // expected_vtt_contents
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI8S19436C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19436C7),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19436C7),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names131,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19436C15  : S2014C38 , S19436C4 , virtual S2014C28 , virtual S19436C10 {
  virtual  ~S19436C15(); // _ZN9S19436C15D2Ev
  S19436C15(); // tgen
};
//SIG(-1 S19436C15) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S19436C15()
{
  extern Class_Descriptor cd_S19436C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S19436C15, buf);
    S19436C15 *dp, &lv = *(dp=new (buf) S19436C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S19436C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C15)");
    /*is_ambiguous_... S19436C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(9,5), "S19436C15");
    /*is_ambiguous_... S19436C15::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*), 0, "S19436C15");
    /*is_ambiguous_... S19436C15::S19436C4 */ AMB_check_base_class_offset(lv, (S19436C4*), 0, "S19436C15");
    check_base_class_offset(lv, (S2014C28*), 0, "S19436C15");
    check_base_class_offset(lv, (S2014C28*)(S19436C10*), 0, "S19436C15");
    /*is_ambiguous_... S19436C15::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(40,20), "S19436C15");
    check_base_class_offset(lv, (S19436C4*)(S19436C10*), ABISELECT(40,20), "S19436C15");
    check_base_class_offset(lv, (S3222C8_nt*)(S19436C10*), ABISELECT(52,28), "S19436C15");
    check_base_class_offset(lv, (S19436C10*), ABISELECT(16,8), "S19436C15");
    test_class_info(&lv, &cd_S19436C15);
    dp->~S19436C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C15(Test_S19436C15, "S19436C15", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN9S19436C15C1Ev();
extern void _ZN9S19436C15D2Ev();
Name_Map name_map_S19436C15[] = {
  NSPAIR(_ZN9S19436C15C1Ev),
  NSPAIR(_ZN9S19436C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19436C10;
extern VTBL_ENTRY _ZTI9S19436C10[];
extern  VTBL_ENTRY _ZTV9S19436C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C10[];
static Base_Class bases_S19436C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19436C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19436C10,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19436C15[];
extern void _ZN9S19436C15D1Ev();
extern void _ZN9S19436C15D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S19436C15D1Ev,_ZThn8_N9S19436C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S19436C15D0Ev,_ZThn8_N9S19436C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19436C15D1Ev,_ZThn20_N9S19436C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19436C15D0Ev,_ZThn20_N9S19436C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19436C15[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&_ZN9S19436C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C15D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19436C15[];
extern void _ZN9S19436C10D1Ev();
extern void _ZN9S19436C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C10__9S19436C15[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&_ZN9S19436C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19436C10D1Ev,_ZThn12_N9S19436C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19436C10D0Ev,_ZThn12_N9S19436C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C10__9S19436C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev),
};
static  VTT_ENTRY vtt_S19436C15[] = {
  {&(_ZTV9S19436C15[6]),  6,21},
  {&(_ZTV9S19436C15[14]),  14,21},
  {&(_ZTV9S19436C15[19]),  19,21},
  {&(_tg__ZTV9S19436C10__9S19436C15[5]),  5,7},
  {&(_tg__ZTV8S19436C4__9S19436C10__9S19436C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19436C15[];
extern  VTBL_ENTRY _ZTV9S19436C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C15[];
static VTBL_ENTRY alt_thunk_names132[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19436C10D0Ev,_ZThn12_N9S19436C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19436C10D1Ev,_ZThn12_N9S19436C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19436C15D0Ev,_ZThn20_N9S19436C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19436C15D1Ev,_ZThn20_N9S19436C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19436C15D0Ev,_ZThn8_N9S19436C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19436C15D1Ev,_ZThn8_N9S19436C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19436C15 = {  "S19436C15", // class name
  bases_S19436C15, 8,
  &(vtc_S19436C15[0]), // expected_vtbl_contents
  &(vtt_S19436C15[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI9S19436C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19436C15),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19436C15),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names132,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19436C14  : virtual S19436C10 , S19436C15 , virtual S2014C38 {
  ::S3222C8_nt s19436c14f0[6];
  virtual  ~S19436C14(); // _ZN9S19436C14D2Ev
  S19436C14(); // tgen
};
//SIG(-1 S19436C14) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd FC5} VBC6{ m Fi} vd Fp FC7{}} BC8{ BC5 BC4 VBC3 VBC2 vd} VBC5 vd FC6[6]}


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

static void Test_S19436C14()
{
  extern Class_Descriptor cd_S19436C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S19436C14, buf);
    S19436C14 *dp, &lv = *(dp=new (buf) S19436C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S19436C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C14)");
    check_base_class_offset(lv, (S2014C28*)(S19436C10*), 0, "S19436C14");
    check_base_class_offset(lv, (S2014C28*)(S19436C15*), 0, "S19436C14");
    /*is_ambiguous_... S19436C14::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(64,44), "S19436C14");
    check_base_class_offset(lv, (S19436C4*)(S19436C10*), ABISELECT(64,44), "S19436C14");
    check_base_class_offset(lv, (S3222C8_nt*)(S19436C10*), ABISELECT(76,52), "S19436C14");
    check_base_class_offset(lv, (S19436C10*), ABISELECT(40,32), "S19436C14");
    check_base_class_offset(lv, (S19436C10*)(S19436C15*), ABISELECT(40,32), "S19436C14");
    /*is_ambiguous_... S19436C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C15*), ABISELECT(9,5), "S19436C14");
    /*is_ambiguous_... S19436C15::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C15*), 0, "S19436C14");
    /*is_ambiguous_... S19436C15::S19436C4 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C15*), 0, "S19436C14");
    check_base_class_offset(lv, (S19436C15*), 0, "S19436C14");
    /*is_ambiguous_... S19436C14::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), ABISELECT(80,56), "S19436C14");
    check_field_offset(lv, s19436c14f0, ABISELECT(12,8), "S19436C14.s19436c14f0");
    test_class_info(&lv, &cd_S19436C14);
    dp->~S19436C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C14(Test_S19436C14, "S19436C14", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN9S19436C14C1Ev();
extern void _ZN9S19436C14D2Ev();
Name_Map name_map_S19436C14[] = {
  NSPAIR(_ZN9S19436C14C1Ev),
  NSPAIR(_ZN9S19436C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19436C10;
extern VTBL_ENTRY _ZTI9S19436C10[];
extern  VTBL_ENTRY _ZTV9S19436C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C10[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C15;
extern VTBL_ENTRY _ZTI9S19436C15[];
extern  VTBL_ENTRY _ZTV9S19436C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S19436C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(64,44), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(76,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19436C10,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19436C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19436C15,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19436C14[];
extern void _ZN9S19436C14D1Ev();
extern void _ZN9S19436C14D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19436C14D1Ev,_ZTv0_n24_N9S19436C14D1Ev)();
extern void ABISELECT(_ZThn40_N9S19436C14D1Ev,_ZThn32_N9S19436C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19436C14D0Ev,_ZTv0_n24_N9S19436C14D0Ev)();
extern void ABISELECT(_ZThn40_N9S19436C14D0Ev,_ZThn32_N9S19436C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C14D1Ev,_ZTv0_n12_N9S19436C14D1Ev)();
extern void ABISELECT(_ZThn64_N9S19436C14D1Ev,_ZThn44_N9S19436C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C14D0Ev,_ZTv0_n12_N9S19436C14D0Ev)();
extern void ABISELECT(_ZThn64_N9S19436C14D0Ev,_ZThn44_N9S19436C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19436C14[] = {
  ABISELECT(80,56),
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C14[0]),
  (VTBL_ENTRY)&_ZN9S19436C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C14D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19436C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C14D1Ev,_ZTv0_n24_N9S19436C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C14D0Ev,_ZTv0_n24_N9S19436C14D0Ev),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19436C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C14D1Ev,_ZTv0_n12_N9S19436C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C14D0Ev,_ZTv0_n12_N9S19436C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19436C14[];
extern void _ZN9S19436C15D1Ev();
extern void _ZN9S19436C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C15__9S19436C14[] = {
  ABISELECT(76,52),
  ABISELECT(64,44),
  ABISELECT(40,32),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&_ZN9S19436C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19436C15D1Ev,_ZThn32_N9S19436C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19436C15D0Ev,_ZThn32_N9S19436C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C10__9S19436C15__9S19436C14[] = {
  ABISELECT(-40,-32),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S19436C15D1Ev,_ZThn44_N9S19436C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S19436C15D0Ev,_ZThn44_N9S19436C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__A1__9S19436C15__9S19436C14[] = {
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev),
};
extern void _ZN9S19436C10D1Ev();
extern void _ZN9S19436C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C10__9S19436C14[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&_ZN9S19436C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19436C10D1Ev,_ZThn12_N9S19436C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19436C10D0Ev,_ZThn12_N9S19436C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C10__9S19436C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev),
};
static  VTT_ENTRY vtt_S19436C14[] = {
  {&(_ZTV9S19436C14[7]),  7,22},
  {&(_tg__ZTV9S19436C15__9S19436C14[6]),  6,8},
  {&(_tg__ZTV9S19436C10__9S19436C15__9S19436C14[6]),  6,8},
  {&(_tg__ZTV8S19436C4__A1__9S19436C15__9S19436C14[3]),  3,5},
  {&(_ZTV9S19436C14[15]),  15,22},
  {&(_ZTV9S19436C14[20]),  20,22},
  {&(_tg__ZTV9S19436C10__9S19436C14[5]),  5,7},
  {&(_tg__ZTV8S19436C4__9S19436C10__9S19436C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19436C14[];
extern  VTBL_ENTRY _ZTV9S19436C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C14[];
static VTBL_ENTRY alt_thunk_names133[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19436C10D0Ev,_ZThn12_N9S19436C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19436C10D1Ev,_ZThn12_N9S19436C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19436C15D0Ev,_ZThn44_N9S19436C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19436C15D1Ev,_ZThn44_N9S19436C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19436C15D0Ev,_ZThn32_N9S19436C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19436C15D1Ev,_ZThn32_N9S19436C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C14D0Ev,_ZTv0_n12_N9S19436C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19436C14D0Ev,_ZThn44_N9S19436C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C14D1Ev,_ZTv0_n12_N9S19436C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19436C14D1Ev,_ZThn44_N9S19436C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C14D0Ev,_ZTv0_n24_N9S19436C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19436C14D0Ev,_ZThn32_N9S19436C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C14D1Ev,_ZTv0_n24_N9S19436C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19436C14D1Ev,_ZThn32_N9S19436C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19436C14 = {  "S19436C14", // class name
  bases_S19436C14, 10,
  &(vtc_S19436C14[0]), // expected_vtbl_contents
  &(vtt_S19436C14[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI9S19436C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19436C14),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19436C14),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names133,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19436C16  : virtual S19436C3 , virtual S3222C8_nt {
  unsigned char s19436c16f0:1;
  ~S19436C16(); // tgen
  S19436C16(); // tgen
};
//SIG(-1 S19436C16) C1{ VBC2{ VBC3{ BC4{ m} vd FC4} FL} VBC5{ m Fi} Fc:1}


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

static void Test_S19436C16()
{
  extern Class_Descriptor cd_S19436C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S19436C16, buf);
    S19436C16 *dp, &lv = *(dp=new (buf) S19436C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S19436C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C16)");
    check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(32,20), "S19436C16");
    check_base_class_offset(lv, (S19436C4*)(S19436C3*), ABISELECT(32,20), "S19436C16");
    check_base_class_offset(lv, (S19436C3*), ABISELECT(16,8), "S19436C16");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(44,28), "S19436C16");
    set_bf_and_test(lv, s19436c16f0, ABISELECT(8,4), 0, 1, 1, "S19436C16");
    test_class_info(&lv, &cd_S19436C16);
    dp->~S19436C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C16(Test_S19436C16, "S19436C16", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN9S19436C16C1Ev();
extern void _ZN9S19436C16D1Ev();
Name_Map name_map_S19436C16[] = {
  NSPAIR(_ZN9S19436C16C1Ev),
  NSPAIR(_ZN9S19436C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C3;
extern VTBL_ENTRY _ZTI8S19436C3[];
extern  VTBL_ENTRY _ZTV8S19436C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C3[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S19436C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19436C3,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(44,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19436C16[];
extern void _ZN9S19436C16D1Ev();
extern void _ZN9S19436C16D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19436C16D1Ev,_ZTv0_n16_N9S19436C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19436C16D1Ev,_ZThn8_N9S19436C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19436C16D0Ev,_ZTv0_n16_N9S19436C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19436C16D0Ev,_ZThn8_N9S19436C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C16D1Ev,_ZTv0_n12_N9S19436C16D1Ev)();
extern void ABISELECT(_ZThn32_N9S19436C16D1Ev,_ZThn20_N9S19436C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C16D0Ev,_ZTv0_n12_N9S19436C16D0Ev)();
extern void ABISELECT(_ZThn32_N9S19436C16D0Ev,_ZThn20_N9S19436C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19436C16[] = {
  ABISELECT(44,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C16[0]),
  (VTBL_ENTRY)&_ZN9S19436C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C16D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19436C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19436C16D1Ev,_ZTv0_n16_N9S19436C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19436C16D0Ev,_ZTv0_n16_N9S19436C16D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19436C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C16D1Ev,_ZTv0_n12_N9S19436C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C16D0Ev,_ZTv0_n12_N9S19436C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19436C16[];
extern void _ZN8S19436C3D1Ev();
extern void _ZN8S19436C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C3__9S19436C16[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&_ZN8S19436C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19436C3D1Ev,_ZThn12_N8S19436C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19436C3D0Ev,_ZThn12_N8S19436C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C3__9S19436C16[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev),
};
static  VTT_ENTRY vtt_S19436C16[] = {
  {&(_ZTV9S19436C16[5]),  5,18},
  {&(_ZTV9S19436C16[11]),  11,18},
  {&(_ZTV9S19436C16[16]),  16,18},
  {&(_tg__ZTV8S19436C3__9S19436C16[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C3__9S19436C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19436C16[];
extern  VTBL_ENTRY _ZTV9S19436C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C16[];
static VTBL_ENTRY alt_thunk_names134[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C3D0Ev,_ZThn12_N8S19436C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C3D1Ev,_ZThn12_N8S19436C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C16D0Ev,_ZTv0_n12_N9S19436C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19436C16D0Ev,_ZThn20_N9S19436C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C16D1Ev,_ZTv0_n12_N9S19436C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19436C16D1Ev,_ZThn20_N9S19436C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19436C16D0Ev,_ZTv0_n16_N9S19436C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19436C16D0Ev,_ZThn8_N9S19436C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19436C16D1Ev,_ZTv0_n16_N9S19436C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19436C16D1Ev,_ZThn8_N9S19436C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19436C16 = {  "S19436C16", // class name
  bases_S19436C16, 4,
  &(vtc_S19436C16[0]), // expected_vtbl_contents
  &(vtt_S19436C16[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI9S19436C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19436C16),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19436C16),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names134,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19436C6  : virtual S19436C7 , S19436C14 , S19436C16 , S19436C10 {
  ~S19436C6(); // tgen
  S19436C6(); // tgen
};
//SIG(-1 S19436C6) C1{ VBC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} VBC6{ m} VBC7{ m Fi} VBC8{ VBC6 VBC4 VBC7 vd Fp FC9{}} VBC10{ BC11{ BC6 BC4 BC5 BC7 Fs:16 Fl} BC4 Fi} vd Fl FC3} BC12{ VBC8 BC13{ BC5 BC4 VBC6 VBC8 vd} VBC5 vd FC7[6]} BC14{ VBC3 VBC7 Fc:1} BC8}


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

static void Test_S19436C6()
{
  extern Class_Descriptor cd_S19436C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,40)];
    init_test(&cd_S19436C6, buf);
    S19436C6 *dp, &lv = *(dp=new (buf) S19436C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,156), "sizeof(S19436C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C6)");
    /*is_ambiguous_... S19436C6::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(136,88), "S19436C6");
    check_base_class_offset(lv, (S19436C4*)(S19436C3*)(S19436C7*), ABISELECT(136,88), "S19436C6");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C10*), ABISELECT(136,88), "S19436C6");
    /*is_ambiguous_... S19436C6::S19436C3 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C3*), ABISELECT(136,88), "S19436C6");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C10*), ABISELECT(136,88), "S19436C6");
    check_base_class_offset(lv, (S19436C3*)(S19436C7*), ABISELECT(80,52), "S19436C6");
    /*is_ambiguous_... S19436C7::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19436C7*), 0, "S19436C6");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19436C10*), 0, "S19436C6");
    check_base_class_offset(lv, (S2014C28*)(S19436C15*)(S19436C14*), 0, "S19436C6");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19436C10*), 0, "S19436C6");
    /*is_ambiguous_... S19436C7::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19436C7*), ABISELECT(148,96), "S19436C6");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19436C10*), ABISELECT(148,96), "S19436C6");
    check_base_class_offset(lv, (S3222C8_nt*)(S19436C16*), ABISELECT(148,96), "S19436C6");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19436C10*), ABISELECT(148,96), "S19436C6");
    check_base_class_offset(lv, (S19436C10*)(S19436C7*), ABISELECT(152,100), "S19436C6");
    check_base_class_offset(lv, (S19436C10*)(S19436C14*), ABISELECT(152,100), "S19436C6");
    check_base_class_offset(lv, (S19436C10*)(S19436C15*)(S19436C14*), ABISELECT(152,100), "S19436C6");
    check_base_class_offset(lv, (S2014C28*)(S19436C13*)(S19436C12*), ABISELECT(176,112), "S19436C6");
    check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C13*)(S19436C12*), ABISELECT(176,112), "S19436C6");
    check_base_class_offset(lv, (S19436C4*)(S19436C13*)(S19436C12*), ABISELECT(176,112), "S19436C6");
    /*is_ambiguous_... S19436C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C13*)(S19436C12*), ABISELECT(185,117), "S19436C6");
    check_base_class_offset(lv, (S3222C8_nt*)(S19436C13*)(S19436C12*), ABISELECT(188,120), "S19436C6");
    check_base_class_offset(lv, (S19436C13*)(S19436C12*), ABISELECT(176,112), "S19436C6");
    /*is_ambiguous_... S19436C12::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C12*), ABISELECT(208,132), "S19436C6");
    /*is_ambiguous_... S19436C12::S19436C4 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C12*), ABISELECT(208,132), "S19436C6");
    check_base_class_offset(lv, (S19436C12*)(S19436C7*), ABISELECT(176,112), "S19436C6");
    check_base_class_offset(lv, (S19436C7*), ABISELECT(80,52), "S19436C6");
    /*is_ambiguous_... S19436C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C15*)(S19436C14*), ABISELECT(9,5), "S19436C6");
    /*is_ambiguous_... S19436C15::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C15*)(S19436C14*), 0, "S19436C6");
    /*is_ambiguous_... S19436C15::S19436C4 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C15*)(S19436C14*), 0, "S19436C6");
    check_base_class_offset(lv, (S19436C15*)(S19436C14*), 0, "S19436C6");
    /*is_ambiguous_... S19436C14::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C14*), ABISELECT(224,144), "S19436C6");
    check_base_class_offset(lv, (S19436C14*), 0, "S19436C6");
    check_base_class_offset(lv, (S19436C3*)(S19436C16*), ABISELECT(224,144), "S19436C6");
    check_base_class_offset(lv, (S19436C16*), ABISELECT(40,32), "S19436C6");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S19436C10*), ABISELECT(56,40), "S19436C6");
    test_class_info(&lv, &cd_S19436C6);
    dp->~S19436C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C6(Test_S19436C6, "S19436C6", ABISELECT(240,156));

#else // __cplusplus

extern void _ZN8S19436C6C1Ev();
extern void _ZN8S19436C6D1Ev();
Name_Map name_map_S19436C6[] = {
  NSPAIR(_ZN8S19436C6C1Ev),
  NSPAIR(_ZN8S19436C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C3;
extern VTBL_ENTRY _ZTI8S19436C3[];
extern  VTBL_ENTRY _ZTV8S19436C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19436C10;
extern VTBL_ENTRY _ZTI9S19436C10[];
extern  VTBL_ENTRY _ZTV9S19436C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C10[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19436C13;
extern VTBL_ENTRY _ZTI9S19436C13[];
extern  VTBL_ENTRY _ZTV9S19436C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C12;
extern VTBL_ENTRY _ZTI9S19436C12[];
extern  VTBL_ENTRY _ZTV9S19436C12[];
extern Class_Descriptor cd_S19436C7;
extern VTBL_ENTRY _ZTI8S19436C7[];
extern  VTBL_ENTRY _ZTV8S19436C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C7[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C15;
extern VTBL_ENTRY _ZTI9S19436C15[];
extern  VTBL_ENTRY _ZTV9S19436C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C15[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C14;
extern VTBL_ENTRY _ZTI9S19436C14[];
extern  VTBL_ENTRY _ZTV9S19436C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C14[];
extern Class_Descriptor cd_S19436C3;
extern VTBL_ENTRY _ZTI8S19436C3[];
extern  VTBL_ENTRY _ZTV8S19436C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C3[];
extern Class_Descriptor cd_S19436C16;
extern VTBL_ENTRY _ZTI9S19436C16[];
extern  VTBL_ENTRY _ZTV9S19436C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C16[];
extern Class_Descriptor cd_S19436C10;
extern VTBL_ENTRY _ZTI9S19436C10[];
extern  VTBL_ENTRY _ZTV9S19436C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C10[];
static Base_Class bases_S19436C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(136,88), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19436C3,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(148,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19436C10,    ABISELECT(152,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(185,117), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(188,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
    11, //immediately_derived
  0, 0},
  {&cd_S19436C13,    ABISELECT(176,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(208,132), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19436C12,    ABISELECT(176,112), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19436C7,    ABISELECT(80,52), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19436C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19436C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19436C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19436C3,    ABISELECT(224,144), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19436C16,    ABISELECT(40,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19436C10,    ABISELECT(56,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19436C6[];
extern void _ZN8S19436C6D1Ev();
extern void _ZN8S19436C6D0Ev();
extern void ABISELECT(_ZThn40_N8S19436C6D1Ev,_ZThn32_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S19436C6D0Ev,_ZThn32_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn56_N8S19436C6D1Ev,_ZThn40_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S19436C6D0Ev,_ZThn40_N8S19436C6D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19436C6D1Ev,_ZTv0_n32_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S19436C6D1Ev,_ZThn52_N8S19436C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19436C6D0Ev,_ZTv0_n32_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn80_N8S19436C6D0Ev,_ZThn52_N8S19436C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn136_N8S19436C6D1Ev,_ZThn88_N8S19436C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn136_N8S19436C6D0Ev,_ZThn88_N8S19436C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19436C6D1Ev,_ZTv0_n24_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn152_N8S19436C6D1Ev,_ZThn100_N8S19436C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19436C6D0Ev,_ZTv0_n24_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn152_N8S19436C6D0Ev,_ZThn100_N8S19436C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn176_N8S19436C6D1Ev,_ZThn112_N8S19436C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn176_N8S19436C6D0Ev,_ZThn112_N8S19436C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19436C6D1Ev,_ZTvn20_n12_N8S19436C6D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19436C6D0Ev,_ZTvn20_n12_N8S19436C6D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19436C6D1Ev,_ZTv0_n16_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn224_N8S19436C6D1Ev,_ZThn144_N8S19436C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19436C6D0Ev,_ZTv0_n16_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn224_N8S19436C6D0Ev,_ZThn144_N8S19436C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19436C6[] = {
  ABISELECT(224,144),
  ABISELECT(176,112),
  ABISELECT(80,52),
  ABISELECT(224,144),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&_ZN8S19436C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C6D0Ev,
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,112),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19436C6D1Ev,_ZThn32_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19436C6D0Ev,_ZThn32_N8S19436C6D0Ev),
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19436C6D1Ev,_ZThn40_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19436C6D0Ev,_ZThn40_N8S19436C6D0Ev),
  ABISELECT(-80,-52),
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19436C6D1Ev,_ZTv0_n32_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19436C6D0Ev,_ZTv0_n32_N8S19436C6D0Ev),
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev),
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C6D1Ev,_ZTv0_n24_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C6D0Ev,_ZTv0_n24_N8S19436C6D0Ev),
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C6D1Ev,_ZTvn20_n12_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C6D0Ev,_ZTvn20_n12_N8S19436C6D0Ev),
  ABISELECT(-224,-144),
  ABISELECT(-88,-56),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19436C6D1Ev,_ZTv0_n16_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19436C6D0Ev,_ZTv0_n16_N8S19436C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19436C6[];
extern void _ZN9S19436C14D1Ev();
extern void _ZN9S19436C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C14__8S19436C6[] = {
  ABISELECT(224,144),
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C14[0]),
  (VTBL_ENTRY)&_ZN9S19436C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C14D0Ev,
};
extern void _ZN9S19436C15D1Ev();
extern void _ZN9S19436C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C159S19436C14__8S19436C6[] = {
  ABISELECT(148,96),
  ABISELECT(136,88),
  ABISELECT(152,100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&_ZN9S19436C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev)();
extern void ABISELECT(_ZThn152_N9S19436C15D1Ev,_ZThn100_N9S19436C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev)();
extern void ABISELECT(_ZThn152_N9S19436C15D0Ev,_ZThn100_N9S19436C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C10__9S19436C159S19436C14__8S19436C6[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev)();
extern void ABISELECT(_ZThn136_N9S19436C15D1Ev,_ZThn88_N9S19436C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev)();
extern void ABISELECT(_ZThn136_N9S19436C15D0Ev,_ZThn88_N9S19436C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__A1__9S19436C159S19436C14__8S19436C6[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19436C14D1Ev,_ZTv0_n24_N9S19436C14D1Ev)();
extern void ABISELECT(_ZThn152_N9S19436C14D1Ev,_ZThn100_N9S19436C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19436C14D0Ev,_ZTv0_n24_N9S19436C14D0Ev)();
extern void ABISELECT(_ZThn152_N9S19436C14D0Ev,_ZThn100_N9S19436C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C10__9S19436C14__8S19436C6[] = {
  ABISELECT(-152,-100),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19436C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C14D1Ev,_ZTv0_n24_N9S19436C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C14D0Ev,_ZTv0_n24_N9S19436C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19436C14D1Ev,_ZTv0_n12_N9S19436C14D1Ev)();
extern void ABISELECT(_ZThn136_N9S19436C14D1Ev,_ZThn88_N9S19436C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C14D0Ev,_ZTv0_n12_N9S19436C14D0Ev)();
extern void ABISELECT(_ZThn136_N9S19436C14D0Ev,_ZThn88_N9S19436C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C14__8S19436C6[] = {
  ABISELECT(-136,-88),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19436C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C14D1Ev,_ZTv0_n12_N9S19436C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C14D0Ev,_ZTv0_n12_N9S19436C14D0Ev),
};
extern void _ZN9S19436C16D1Ev();
extern void _ZN9S19436C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C16__8S19436C6[] = {
  ABISELECT(108,64),
  ABISELECT(96,56),
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C16[0]),
  (VTBL_ENTRY)&_ZN9S19436C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19436C16D1Ev,_ZTv0_n16_N9S19436C16D1Ev)();
extern void ABISELECT(_ZThn184_N9S19436C16D1Ev,_ZThn112_N9S19436C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19436C16D0Ev,_ZTv0_n16_N9S19436C16D0Ev)();
extern void ABISELECT(_ZThn184_N9S19436C16D0Ev,_ZThn112_N9S19436C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C3__9S19436C16__8S19436C6[] = {
  ABISELECT(-184,-112),
  ABISELECT(-88,-56),
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI9S19436C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19436C16D1Ev,_ZTv0_n16_N9S19436C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19436C16D0Ev,_ZTv0_n16_N9S19436C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19436C16D1Ev,_ZTv0_n12_N9S19436C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19436C16D1Ev,_ZThn56_N9S19436C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C16D0Ev,_ZTv0_n12_N9S19436C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19436C16D0Ev,_ZThn56_N9S19436C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C16__8S19436C6[] = {
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S19436C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C16D1Ev,_ZTv0_n12_N9S19436C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C16D0Ev,_ZTv0_n12_N9S19436C16D0Ev),
};
extern void _ZN9S19436C10D1Ev();
extern void _ZN9S19436C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C10__A__8S19436C6[] = {
  ABISELECT(92,56),
  ABISELECT(80,48),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&_ZN9S19436C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev)();
extern void ABISELECT(_ZThn80_N9S19436C10D1Ev,_ZThn48_N9S19436C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev)();
extern void ABISELECT(_ZThn80_N9S19436C10D0Ev,_ZThn48_N9S19436C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C10__A__8S19436C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev),
};
extern void _ZN8S19436C7D1Ev();
extern void _ZN8S19436C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C7__8S19436C6[] = {
  ABISELECT(96,60),
  ABISELECT(72,48),
  ABISELECT(68,44),
  ABISELECT(-80,-52),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&_ZN8S19436C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C7D0Ev,
};
extern void _ZN8S19436C3D1Ev();
extern void _ZN8S19436C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C38S19436C7__8S19436C6[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&_ZN8S19436C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S19436C3D1Ev,_ZThn36_N8S19436C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S19436C3D0Ev,_ZThn36_N8S19436C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C38S19436C7__8S19436C6[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S19436C7D1Ev,_ZThn36_N8S19436C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S19436C7D0Ev,_ZThn36_N8S19436C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C7__8S19436C6[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19436C7D1Ev,_ZTv0_n24_N8S19436C7D1Ev)();
extern void ABISELECT(_ZThn72_N8S19436C7D1Ev,_ZThn48_N8S19436C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19436C7D0Ev,_ZTv0_n24_N8S19436C7D0Ev)();
extern void ABISELECT(_ZThn72_N8S19436C7D0Ev,_ZThn48_N8S19436C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C10__8S19436C7__8S19436C6[] = {
  ABISELECT(-72,-48),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C7D1Ev,_ZTv0_n24_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C7D0Ev,_ZTv0_n24_N8S19436C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev)();
extern void ABISELECT(_ZThn96_N8S19436C7D1Ev,_ZThn60_N8S19436C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev)();
extern void ABISELECT(_ZThn96_N8S19436C7D0Ev,_ZThn60_N8S19436C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C12__8S19436C7__8S19436C6[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S19436C7D1Ev,_ZTvn20_n12_N8S19436C7D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19436C7D0Ev,_ZTvn20_n12_N8S19436C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C49S19436C12__A2__8S19436C7__8S19436C6[] = {
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C7D1Ev,_ZTvn20_n12_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C7D0Ev,_ZTvn20_n12_N8S19436C7D0Ev),
};
extern void _ZN9S19436C10D1Ev();
extern void _ZN9S19436C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C10__8S19436C6[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&_ZN9S19436C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C10__8S19436C6[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev),
};
extern void _ZN8S19436C3D1Ev();
extern void _ZN8S19436C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C3__A1__8S19436C6[] = {
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&_ZN8S19436C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C3__A1__8S19436C6[] = {
  ABISELECT(88,56),
  ABISELECT(88,56),
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev),
};
static  VTT_ENTRY vtt_S19436C6[] = {
  {&(_ZTV8S19436C6[10]),  10,64},
  {&(_tg__ZTV9S19436C14__8S19436C6[7]),  7,9},
  {&(_tg__ZTV9S19436C159S19436C14__8S19436C6[6]),  6,8},
  {&(_tg__ZTV9S19436C10__9S19436C159S19436C14__8S19436C6[6]),  6,8},
  {&(_tg__ZTV8S19436C4__A1__9S19436C159S19436C14__8S19436C6[3]),  3,5},
  {&(_tg__ZTV9S19436C10__9S19436C14__8S19436C6[6]),  6,8},
  {&(_tg__ZTV8S19436C4__9S19436C14__8S19436C6[3]),  3,5},
  {&(_tg__ZTV9S19436C16__8S19436C6[5]),  5,7},
  {&(_tg__ZTV8S19436C3__9S19436C16__8S19436C6[4]),  4,6},
  {&(_tg__ZTV8S19436C4__9S19436C16__8S19436C6[3]),  3,5},
  {&(_tg__ZTV9S19436C10__A__8S19436C6[5]),  5,7},
  {&(_tg__ZTV8S19436C4__9S19436C10__A__8S19436C6[3]),  3,5},
  {&(_ZTV8S19436C6[34]),  34,64},
  {&(_ZTV8S19436C6[39]),  39,64},
  {&(_ZTV8S19436C6[47]),  47,64},
  {&(_ZTV8S19436C6[52]),  52,64},
  {&(_ZTV8S19436C6[56]),  56,64},
  {&(_ZTV8S19436C6[17]),  17,64},
  {&(_ZTV8S19436C6[62]),  62,64},
  {&(_ZTV8S19436C6[24]),  24,64},
  {&(_tg__ZTV8S19436C7__8S19436C6[7]),  7,9},
  {&(_tg__ZTV8S19436C38S19436C7__8S19436C6[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C38S19436C7__8S19436C6[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C7__8S19436C6[3]),  3,5},
  {&(_tg__ZTV9S19436C10__8S19436C7__8S19436C6[6]),  6,8},
  {&(_tg__ZTV9S19436C12__8S19436C7__8S19436C6[3]),  3,5},
  {&(_tg__ZTV8S19436C49S19436C12__A2__8S19436C7__8S19436C6[2]),  2,4},
  {&(_tg__ZTV9S19436C10__8S19436C6[5]),  5,7},
  {&(_tg__ZTV8S19436C4__9S19436C10__8S19436C6[3]),  3,5},
  {&(_tg__ZTV8S19436C3__A1__8S19436C6[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C3__A1__8S19436C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19436C6[];
extern  VTBL_ENTRY _ZTV8S19436C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C6[];
static VTBL_ENTRY alt_thunk_names135[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C7D0Ev,_ZTv0_n24_N8S19436C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19436C7D0Ev,_ZThn48_N8S19436C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C7D1Ev,_ZTv0_n24_N8S19436C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19436C7D1Ev,_ZThn48_N8S19436C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19436C7D0Ev,_ZThn60_N8S19436C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19436C7D0Ev,_ZThn36_N8S19436C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19436C7D1Ev,_ZThn60_N8S19436C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19436C7D1Ev,_ZThn36_N8S19436C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19436C3D0Ev,_ZThn36_N8S19436C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19436C3D1Ev,_ZThn36_N8S19436C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19436C10D0Ev,_ZThn48_N9S19436C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19436C10D1Ev,_ZThn48_N9S19436C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C16D0Ev,_ZTv0_n12_N9S19436C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19436C16D0Ev,_ZThn56_N9S19436C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C16D1Ev,_ZTv0_n12_N9S19436C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19436C16D1Ev,_ZThn56_N9S19436C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19436C16D0Ev,_ZTv0_n16_N9S19436C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19436C16D0Ev,_ZThn112_N9S19436C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19436C16D1Ev,_ZTv0_n16_N9S19436C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19436C16D1Ev,_ZThn112_N9S19436C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C14D0Ev,_ZTv0_n12_N9S19436C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19436C14D0Ev,_ZThn88_N9S19436C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C14D1Ev,_ZTv0_n12_N9S19436C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19436C14D1Ev,_ZThn88_N9S19436C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C14D0Ev,_ZTv0_n24_N9S19436C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19436C14D0Ev,_ZThn100_N9S19436C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C14D1Ev,_ZTv0_n24_N9S19436C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19436C14D1Ev,_ZThn100_N9S19436C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19436C15D0Ev,_ZThn88_N9S19436C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19436C15D1Ev,_ZThn88_N9S19436C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19436C15D0Ev,_ZThn100_N9S19436C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S19436C15D1Ev,_ZThn100_N9S19436C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19436C6D0Ev,_ZTv0_n16_N8S19436C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19436C6D0Ev,_ZThn144_N8S19436C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19436C6D1Ev,_ZTv0_n16_N8S19436C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19436C6D1Ev,_ZThn144_N8S19436C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C6D0Ev,_ZTv0_n24_N8S19436C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19436C6D0Ev,_ZThn100_N8S19436C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C6D1Ev,_ZTv0_n24_N8S19436C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19436C6D1Ev,_ZThn100_N8S19436C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19436C6D0Ev,_ZThn112_N8S19436C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19436C6D0Ev,_ZThn88_N8S19436C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19436C6D1Ev,_ZThn112_N8S19436C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19436C6D1Ev,_ZThn88_N8S19436C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19436C6D0Ev,_ZTv0_n32_N8S19436C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19436C6D0Ev,_ZThn52_N8S19436C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19436C6D1Ev,_ZTv0_n32_N8S19436C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19436C6D1Ev,_ZThn52_N8S19436C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19436C6 = {  "S19436C6", // class name
  bases_S19436C6, 25,
  &(vtc_S19436C6[0]), // expected_vtbl_contents
  &(vtt_S19436C6[0]), // expected_vtt_contents
  ABISELECT(240,156), // object size
  NSPAIRA(_ZTI8S19436C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19436C6),64, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19436C6),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names135,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19436C1  : virtual S19436C2 , virtual S2014C38 , virtual S19436C6 , virtual S19436C15 {
  void *s19436c1f0;
  virtual  ~S19436C1(); // _ZN8S19436C1D2Ev
  S19436C1(); // tgen
};
//SIG(1 S19436C1) C1{ VBC2{ BC3{ VBC4{ BC5{ m} vd FC5} FL} vd} VBC5 VBC6{ VBC7{ BC3 VBC8{ m} VBC9{ m Fi} VBC10{ VBC8 VBC4 VBC9 vd Fp FC11{}} VBC12{ BC13{ BC8 BC4 BC5 BC9 Fs:16 Fl} BC4 Fi} vd Fl FC3} BC14{ VBC10 BC15{ BC5 BC4 VBC8 VBC10 vd} VBC5 vd FC9[6]} BC16{ VBC3 VBC9 Fc:1} BC10} VBC15 vd Fp}


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

static void Test_S19436C1()
{
  extern Class_Descriptor cd_S19436C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,47)];
    init_test(&cd_S19436C1, buf);
    S19436C1 *dp, &lv = *(dp=new (buf) S19436C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,184), "sizeof(S19436C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19436C1)");
    /*is_ambiguous_... S19436C1::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*), ABISELECT(32,20), "S19436C1");
    check_base_class_offset(lv, (S19436C4*)(S19436C3*)(S19436C2*), ABISELECT(32,20), "S19436C1");
    check_base_class_offset(lv, (S19436C4*)(S19436C3*)(S19436C7*), ABISELECT(32,20), "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C10 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C10*), ABISELECT(32,20), "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C3 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C3*), ABISELECT(32,20), "S19436C1");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C10*)(S19436C6*), ABISELECT(32,20), "S19436C1");
    check_base_class_offset(lv, (S19436C3*)(S19436C2*), ABISELECT(16,8), "S19436C1");
    check_base_class_offset(lv, (S19436C2*), ABISELECT(16,8), "S19436C1");
    /*is_ambiguous_... S19436C1::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), 0, "S19436C1");
    /*is_ambiguous_... S19436C14::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C14*)(S19436C6*), 0, "S19436C1");
    check_base_class_offset(lv, (S19436C3*)(S19436C7*), ABISELECT(128,80), "S19436C1");
    /*is_ambiguous_... S19436C7::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19436C7*), 0, "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C10 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19436C10*), 0, "S19436C1");
    check_base_class_offset(lv, (S2014C28*)(S19436C15*)(S19436C14*)(S19436C6*), 0, "S19436C1");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19436C10*)(S19436C6*), 0, "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C15 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19436C15*), 0, "S19436C1");
    /*is_ambiguous_... S19436C7::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19436C7*), ABISELECT(184,116), "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C10 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19436C10*), ABISELECT(184,116), "S19436C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19436C16*)(S19436C6*), ABISELECT(184,116), "S19436C1");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S19436C10*)(S19436C6*), ABISELECT(184,116), "S19436C1");
    check_base_class_offset(lv, (S19436C10*)(S19436C7*), ABISELECT(192,120), "S19436C1");
    check_base_class_offset(lv, (S19436C10*)(S19436C14*)(S19436C6*), ABISELECT(192,120), "S19436C1");
    check_base_class_offset(lv, (S19436C10*)(S19436C15*)(S19436C14*)(S19436C6*), ABISELECT(192,120), "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C15 */ AMB_check_base_class_offset(lv, (S19436C10*)(S19436C15*), ABISELECT(192,120), "S19436C1");
    check_base_class_offset(lv, (S2014C28*)(S19436C13*)(S19436C12*), ABISELECT(216,132), "S19436C1");
    check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C13*)(S19436C12*), ABISELECT(216,132), "S19436C1");
    check_base_class_offset(lv, (S19436C4*)(S19436C13*)(S19436C12*), ABISELECT(216,132), "S19436C1");
    /*is_ambiguous_... S19436C13::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C13*)(S19436C12*), ABISELECT(225,137), "S19436C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19436C13*)(S19436C12*), ABISELECT(228,140), "S19436C1");
    check_base_class_offset(lv, (S19436C13*)(S19436C12*), ABISELECT(216,132), "S19436C1");
    /*is_ambiguous_... S19436C12::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C12*), ABISELECT(248,152), "S19436C1");
    /*is_ambiguous_... S19436C12::S19436C4 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C12*), ABISELECT(248,152), "S19436C1");
    check_base_class_offset(lv, (S19436C12*)(S19436C7*), ABISELECT(216,132), "S19436C1");
    check_base_class_offset(lv, (S19436C7*)(S19436C6*), ABISELECT(128,80), "S19436C1");
    /*is_ambiguous_... S19436C15::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C15*)(S19436C14*)(S19436C6*), ABISELECT(57,33), "S19436C1");
    /*is_ambiguous_... S19436C15::S19436C4 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C15*)(S19436C14*)(S19436C6*), ABISELECT(48,28), "S19436C1");
    /*is_ambiguous_... S19436C15::S19436C4 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C15*)(S19436C14*)(S19436C6*), ABISELECT(48,28), "S19436C1");
    check_base_class_offset(lv, (S19436C15*)(S19436C14*)(S19436C6*), ABISELECT(48,28), "S19436C1");
    check_base_class_offset(lv, (S19436C14*)(S19436C6*), ABISELECT(48,28), "S19436C1");
    check_base_class_offset(lv, (S19436C3*)(S19436C16*)(S19436C6*), ABISELECT(264,164), "S19436C1");
    check_base_class_offset(lv, (S19436C16*)(S19436C6*), ABISELECT(88,60), "S19436C1");
    /*is_ambiguous_... S19436C6::S19436C10 */ AMB_check_base_class_offset(lv, (S19436C10*)(S19436C6*), ABISELECT(104,68), "S19436C1");
    check_base_class_offset(lv, (S19436C6*), ABISELECT(48,28), "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C15 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C15*), ABISELECT(289,181), "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C15 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19436C4*)(S19436C15*), ABISELECT(280,176), "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C15 */ AMB_check_base_class_offset(lv, (S19436C4*)(S19436C15*), ABISELECT(280,176), "S19436C1");
    /*is_ambiguous_... S19436C1::S19436C15 */ AMB_check_base_class_offset(lv, (S19436C15*), ABISELECT(280,176), "S19436C1");
    check_field_offset(lv, s19436c1f0, ABISELECT(8,4), "S19436C1.s19436c1f0");
    test_class_info(&lv, &cd_S19436C1);
    dp->~S19436C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19436C1(Test_S19436C1, "S19436C1", ABISELECT(296,184));

#else // __cplusplus

extern void _ZN8S19436C1C1Ev();
extern void _ZN8S19436C1D2Ev();
Name_Map name_map_S19436C1[] = {
  NSPAIR(_ZN8S19436C1C1Ev),
  NSPAIR(_ZN8S19436C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C3;
extern VTBL_ENTRY _ZTI8S19436C3[];
extern  VTBL_ENTRY _ZTV8S19436C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C3[];
extern Class_Descriptor cd_S19436C2;
extern VTBL_ENTRY _ZTI8S19436C2[];
extern  VTBL_ENTRY _ZTV8S19436C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C3;
extern VTBL_ENTRY _ZTI8S19436C3[];
extern  VTBL_ENTRY _ZTV8S19436C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C3[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19436C10;
extern VTBL_ENTRY _ZTI9S19436C10[];
extern  VTBL_ENTRY _ZTV9S19436C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C10[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19436C13;
extern VTBL_ENTRY _ZTI9S19436C13[];
extern  VTBL_ENTRY _ZTV9S19436C13[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C12;
extern VTBL_ENTRY _ZTI9S19436C12[];
extern  VTBL_ENTRY _ZTV9S19436C12[];
extern Class_Descriptor cd_S19436C7;
extern VTBL_ENTRY _ZTI8S19436C7[];
extern  VTBL_ENTRY _ZTV8S19436C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C7[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C15;
extern VTBL_ENTRY _ZTI9S19436C15[];
extern  VTBL_ENTRY _ZTV9S19436C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C15[];
extern Class_Descriptor cd_S19436C14;
extern VTBL_ENTRY _ZTI9S19436C14[];
extern  VTBL_ENTRY _ZTV9S19436C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C14[];
extern Class_Descriptor cd_S19436C3;
extern VTBL_ENTRY _ZTI8S19436C3[];
extern  VTBL_ENTRY _ZTV8S19436C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C3[];
extern Class_Descriptor cd_S19436C16;
extern VTBL_ENTRY _ZTI9S19436C16[];
extern  VTBL_ENTRY _ZTV9S19436C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C16[];
extern Class_Descriptor cd_S19436C10;
extern VTBL_ENTRY _ZTI9S19436C10[];
extern  VTBL_ENTRY _ZTV9S19436C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C10[];
extern Class_Descriptor cd_S19436C6;
extern VTBL_ENTRY _ZTI8S19436C6[];
extern  VTBL_ENTRY _ZTV8S19436C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C6[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19436C4;
extern VTBL_ENTRY _ZTI8S19436C4[];
extern  VTBL_ENTRY _ZTV8S19436C4[];
extern Class_Descriptor cd_S19436C15;
extern VTBL_ENTRY _ZTI9S19436C15[];
extern  VTBL_ENTRY _ZTV9S19436C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19436C15[];
static Base_Class bases_S19436C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(32,20), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19436C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19436C2,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19436C3,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(184,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19436C10,    ABISELECT(192,120), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(216,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
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(216,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
    11, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(216,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
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(225,137), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3222C8_nt,    ABISELECT(228,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19436C13,    ABISELECT(216,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2014C38,    ABISELECT(248,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(248,152), //bcp->offset
    76, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19436C12,    ABISELECT(216,132), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19436C7,    ABISELECT(128,80), //bcp->offset
    53, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(57,33), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19436C15,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19436C14,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19436C3,    ABISELECT(264,164), //bcp->offset
    80, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19436C16,    ABISELECT(88,60), //bcp->offset
    39, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19436C10,    ABISELECT(104,68), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19436C6,    ABISELECT(48,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    ABISELECT(289,181), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    ABISELECT(280,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19436C4,    ABISELECT(280,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19436C15,    ABISELECT(280,176), //bcp->offset
    86, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19436C1[];
extern void _ZN8S19436C1D1Ev();
extern void _ZN8S19436C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19436C1D1Ev,_ZTv0_n16_N8S19436C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19436C1D1Ev,_ZThn8_N8S19436C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19436C1D0Ev,_ZTv0_n16_N8S19436C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19436C1D0Ev,_ZThn8_N8S19436C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C1D1Ev,_ZTv0_n12_N8S19436C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19436C1D1Ev,_ZThn20_N8S19436C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C1D0Ev,_ZTv0_n12_N8S19436C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19436C1D0Ev,_ZThn20_N8S19436C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19436C1D1Ev,_ZTv0_n44_N8S19436C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19436C1D1Ev,_ZThn28_N8S19436C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19436C1D0Ev,_ZTv0_n44_N8S19436C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19436C1D0Ev,_ZThn28_N8S19436C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn40_n88_N8S19436C1D1Ev,_ZTvn32_n44_N8S19436C1D1Ev)();
extern void ABISELECT(_ZTvn40_n88_N8S19436C1D0Ev,_ZTvn32_n44_N8S19436C1D0Ev)();
extern void ABISELECT(_ZTvn56_n88_N8S19436C1D1Ev,_ZTvn40_n44_N8S19436C1D1Ev)();
extern void ABISELECT(_ZTvn56_n88_N8S19436C1D0Ev,_ZTvn40_n44_N8S19436C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19436C1D1Ev,_ZTv0_n32_N8S19436C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19436C1D1Ev,_ZThn80_N8S19436C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19436C1D0Ev,_ZTv0_n32_N8S19436C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19436C1D0Ev,_ZThn80_N8S19436C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19436C1D1Ev,_ZTv0_n24_N8S19436C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S19436C1D1Ev,_ZThn120_N8S19436C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19436C1D0Ev,_ZTv0_n24_N8S19436C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S19436C1D0Ev,_ZThn120_N8S19436C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C1D1Ev,_ZTv0_n12_N8S19436C1D1Ev)();
extern void ABISELECT(_ZThn216_N8S19436C1D1Ev,_ZThn132_N8S19436C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C1D0Ev,_ZTv0_n12_N8S19436C1D0Ev)();
extern void ABISELECT(_ZThn216_N8S19436C1D0Ev,_ZThn132_N8S19436C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n24_N8S19436C1D1Ev,_ZTvn20_n12_N8S19436C1D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19436C1D0Ev,_ZTvn20_n12_N8S19436C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19436C1D1Ev,_ZTv0_n16_N8S19436C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19436C1D1Ev,_ZThn164_N8S19436C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19436C1D0Ev,_ZTv0_n16_N8S19436C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19436C1D0Ev,_ZThn164_N8S19436C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19436C1D1Ev,_ZTv0_n28_N8S19436C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19436C1D1Ev,_ZThn176_N8S19436C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19436C1D0Ev,_ZTv0_n28_N8S19436C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19436C1D0Ev,_ZThn176_N8S19436C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19436C1[] = {
  ABISELECT(280,176),
  ABISELECT(264,164),
  ABISELECT(216,132),
  ABISELECT(192,120),
  ABISELECT(184,116),
  0,
  ABISELECT(128,80),
  ABISELECT(48,28),
  0,
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&_ZN8S19436C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19436C1D1Ev,_ZTv0_n16_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19436C1D0Ev,_ZTv0_n16_N8S19436C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C1D1Ev,_ZTv0_n12_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C1D0Ev,_ZTv0_n12_N8S19436C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(216,136),
  ABISELECT(168,104),
  ABISELECT(80,52),
  ABISELECT(-48,-28),
  ABISELECT(136,88),
  ABISELECT(-16,-8),
  ABISELECT(144,92),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19436C1D1Ev,_ZTv0_n44_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19436C1D0Ev,_ZTv0_n44_N8S19436C1D0Ev),
  ABISELECT(96,56),
  ABISELECT(-56,-40),
  ABISELECT(176,104),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n88_N8S19436C1D1Ev,_ZTvn32_n44_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n88_N8S19436C1D0Ev,_ZTvn32_n44_N8S19436C1D0Ev),
  ABISELECT(80,48),
  ABISELECT(-72,-48),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n88_N8S19436C1D1Ev,_ZTvn40_n44_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n88_N8S19436C1D0Ev,_ZTvn40_n44_N8S19436C1D0Ev),
  ABISELECT(-128,-80),
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-128,-80),
  ABISELECT(-96,-60),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19436C1D1Ev,_ZTv0_n32_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19436C1D0Ev,_ZTv0_n32_N8S19436C1D0Ev),
  ABISELECT(-192,-120),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C1D1Ev,_ZTv0_n24_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C1D0Ev,_ZTv0_n24_N8S19436C1D0Ev),
  ABISELECT(-216,-132),
  ABISELECT(-216,-132),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C1D1Ev,_ZTv0_n12_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C1D0Ev,_ZTv0_n12_N8S19436C1D0Ev),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C1D1Ev,_ZTvn20_n12_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C1D0Ev,_ZTvn20_n12_N8S19436C1D0Ev),
  ABISELECT(-264,-164),
  ABISELECT(-232,-144),
  ABISELECT(-264,-164),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19436C1D1Ev,_ZTv0_n16_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19436C1D0Ev,_ZTv0_n16_N8S19436C1D0Ev),
  ABISELECT(-280,-176),
  ABISELECT(-96,-60),
  ABISELECT(-248,-156),
  ABISELECT(-88,-56),
  ABISELECT(-280,-176),
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI8S19436C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19436C1D1Ev,_ZTv0_n28_N8S19436C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19436C1D0Ev,_ZTv0_n28_N8S19436C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19436C1[];
extern void _ZN8S19436C2D1Ev();
extern void _ZN8S19436C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C2__8S19436C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C2[0]),
  (VTBL_ENTRY)&_ZN8S19436C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C2D0Ev,
};
extern void _ZN8S19436C3D1Ev();
extern void _ZN8S19436C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C38S19436C2__8S19436C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&_ZN8S19436C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19436C3D1Ev,_ZThn12_N8S19436C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19436C3D0Ev,_ZThn12_N8S19436C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C38S19436C2__8S19436C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19436C2D1Ev,_ZTv0_n12_N8S19436C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19436C2D1Ev,_ZThn12_N8S19436C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C2D0Ev,_ZTv0_n12_N8S19436C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19436C2D0Ev,_ZThn12_N8S19436C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C2__8S19436C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19436C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C2D1Ev,_ZTv0_n12_N8S19436C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C2D0Ev,_ZTv0_n12_N8S19436C2D0Ev),
};
extern void _ZN8S19436C6D1Ev();
extern void _ZN8S19436C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C6__8S19436C1[] = {
  ABISELECT(216,136),
  ABISELECT(168,104),
  ABISELECT(80,52),
  ABISELECT(-48,-28),
  ABISELECT(136,88),
  ABISELECT(-16,-8),
  ABISELECT(144,92),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&_ZN8S19436C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C6D0Ev,
};
extern void _ZN9S19436C14D1Ev();
extern void _ZN9S19436C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C148S19436C6__8S19436C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(136,88),
  ABISELECT(-16,-8),
  ABISELECT(144,92),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C14[0]),
  (VTBL_ENTRY)&_ZN9S19436C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C14D0Ev,
};
extern void _ZN9S19436C15D1Ev();
extern void _ZN9S19436C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C159S19436C148S19436C6__8S19436C1[] = {
  ABISELECT(136,88),
  ABISELECT(-16,-8),
  ABISELECT(144,92),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&_ZN9S19436C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev)();
extern void ABISELECT(_ZThn144_N9S19436C15D1Ev,_ZThn92_N9S19436C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev)();
extern void ABISELECT(_ZThn144_N9S19436C15D0Ev,_ZThn92_N9S19436C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C10__9S19436C159S19436C148S19436C6__8S19436C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__A1__9S19436C159S19436C148S19436C6__8S19436C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19436C14D1Ev,_ZTv0_n24_N9S19436C14D1Ev)();
extern void ABISELECT(_ZThn144_N9S19436C14D1Ev,_ZThn92_N9S19436C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19436C14D0Ev,_ZTv0_n24_N9S19436C14D0Ev)();
extern void ABISELECT(_ZThn144_N9S19436C14D0Ev,_ZThn92_N9S19436C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C10__9S19436C148S19436C6__8S19436C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI9S19436C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C14D1Ev,_ZTv0_n24_N9S19436C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C14D0Ev,_ZTv0_n24_N9S19436C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19436C14D1Ev,_ZTv0_n12_N9S19436C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19436C14D0Ev,_ZTv0_n12_N9S19436C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C148S19436C6__8S19436C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19436C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C14D1Ev,_ZTv0_n12_N9S19436C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C14D0Ev,_ZTv0_n12_N9S19436C14D0Ev),
};
extern void _ZN9S19436C16D1Ev();
extern void _ZN9S19436C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C168S19436C6__8S19436C1[] = {
  ABISELECT(96,56),
  ABISELECT(-56,-40),
  ABISELECT(176,104),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C16[0]),
  (VTBL_ENTRY)&_ZN9S19436C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19436C16D1Ev,_ZTv0_n16_N9S19436C16D1Ev)();
extern void ABISELECT(_ZThn176_N9S19436C16D1Ev,_ZThn104_N9S19436C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19436C16D0Ev,_ZTv0_n16_N9S19436C16D0Ev)();
extern void ABISELECT(_ZThn176_N9S19436C16D0Ev,_ZThn104_N9S19436C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C3__9S19436C168S19436C6__8S19436C1[] = {
  ABISELECT(-176,-104),
  ABISELECT(-232,-144),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S19436C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19436C16D1Ev,_ZTv0_n16_N9S19436C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19436C16D0Ev,_ZTv0_n16_N9S19436C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19436C16D1Ev,_ZTv0_n12_N9S19436C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19436C16D0Ev,_ZTv0_n12_N9S19436C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C168S19436C6__8S19436C1[] = {
  ABISELECT(56,40),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI9S19436C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C16D1Ev,_ZTv0_n12_N9S19436C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C16D0Ev,_ZTv0_n12_N9S19436C16D0Ev),
};
extern void _ZN9S19436C10D1Ev();
extern void _ZN9S19436C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C108S19436C6__A1__8S19436C1[] = {
  ABISELECT(80,48),
  ABISELECT(-72,-48),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&_ZN9S19436C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C108S19436C6__A1__8S19436C1[] = {
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19436C6D1Ev,_ZTv0_n32_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S19436C6D1Ev,_ZThn52_N8S19436C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19436C6D0Ev,_ZTv0_n32_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn80_N8S19436C6D0Ev,_ZThn52_N8S19436C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C7__8S19436C6__8S19436C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-128,-80),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19436C6D1Ev,_ZTv0_n32_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19436C6D0Ev,_ZTv0_n32_N8S19436C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C6__8S19436C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19436C6D1Ev,_ZTv0_n24_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn144_N8S19436C6D1Ev,_ZThn92_N8S19436C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19436C6D0Ev,_ZTv0_n24_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn144_N8S19436C6D0Ev,_ZThn92_N8S19436C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C10__8S19436C6__8S19436C1[] = {
  ABISELECT(-144,-92),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C6D1Ev,_ZTv0_n24_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C6D0Ev,_ZTv0_n24_N8S19436C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn168_N8S19436C6D1Ev,_ZThn104_N8S19436C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn168_N8S19436C6D0Ev,_ZThn104_N8S19436C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C12__8S19436C6__8S19436C1[] = {
  ABISELECT(-168,-104),
  ABISELECT(-168,-104),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S19436C6D1Ev,_ZTvn20_n12_N8S19436C6D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19436C6D0Ev,_ZTvn20_n12_N8S19436C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C49S19436C12__A2__8S19436C6__8S19436C1[] = {
  ABISELECT(-200,-124),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C6D1Ev,_ZTvn20_n12_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C6D0Ev,_ZTvn20_n12_N8S19436C6D0Ev),
};
extern void ABISELECT(_ZThn40_N8S19436C6D1Ev,_ZThn32_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S19436C6D0Ev,_ZThn32_N8S19436C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19436C16__8S19436C6__8S19436C1[] = {
  ABISELECT(96,56),
  ABISELECT(-56,-40),
  ABISELECT(176,104),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19436C6D1Ev,_ZThn32_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19436C6D0Ev,_ZThn32_N8S19436C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19436C6D1Ev,_ZTv0_n16_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn216_N8S19436C6D1Ev,_ZThn136_N8S19436C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19436C6D0Ev,_ZTv0_n16_N8S19436C6D0Ev)();
extern void ABISELECT(_ZThn216_N8S19436C6D0Ev,_ZThn136_N8S19436C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19436C3__A1__8S19436C6__8S19436C1[] = {
  ABISELECT(-216,-136),
  ABISELECT(-232,-144),
  ABISELECT(-216,-136),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19436C6D1Ev,_ZTv0_n16_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19436C6D0Ev,_ZTv0_n16_N8S19436C6D0Ev),
};
extern void ABISELECT(_ZThn56_N8S19436C6D1Ev,_ZThn40_N8S19436C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S19436C6D0Ev,_ZThn40_N8S19436C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19436C10__A__8S19436C6__8S19436C1[] = {
  ABISELECT(80,48),
  ABISELECT(-72,-48),
  ABISELECT(-104,-68),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19436C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19436C6D1Ev,_ZThn40_N8S19436C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19436C6D0Ev,_ZThn40_N8S19436C6D0Ev),
};
extern void _ZN8S19436C7D1Ev();
extern void _ZN8S19436C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C7__8S19436C1[] = {
  ABISELECT(88,52),
  ABISELECT(64,40),
  ABISELECT(56,36),
  ABISELECT(-128,-80),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&_ZN8S19436C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C7D0Ev,
};
extern void _ZN8S19436C3D1Ev();
extern void _ZN8S19436C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C38S19436C7__A1__8S19436C1[] = {
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&_ZN8S19436C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C38S19436C7__A1__8S19436C1[] = {
  ABISELECT(96,60),
  ABISELECT(96,60),
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C7__8S19436C1[] = {
  ABISELECT(96,60),
  ABISELECT(96,60),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19436C7D1Ev,_ZTv0_n24_N8S19436C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S19436C7D1Ev,_ZThn40_N8S19436C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19436C7D0Ev,_ZTv0_n24_N8S19436C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S19436C7D0Ev,_ZThn40_N8S19436C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C10__8S19436C7__8S19436C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C7D1Ev,_ZTv0_n24_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19436C7D0Ev,_ZTv0_n24_N8S19436C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev)();
extern void ABISELECT(_ZThn88_N8S19436C7D1Ev,_ZThn52_N8S19436C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev)();
extern void ABISELECT(_ZThn88_N8S19436C7D0Ev,_ZThn52_N8S19436C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19436C12__8S19436C7__8S19436C1[] = {
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev),
};
extern void ABISELECT(_ZTvn32_n24_N8S19436C7D1Ev,_ZTvn20_n12_N8S19436C7D1Ev)();
extern void ABISELECT(_ZTvn32_n24_N8S19436C7D0Ev,_ZTvn20_n12_N8S19436C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C49S19436C12__A2__8S19436C7__8S19436C1[] = {
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S19436C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C7D1Ev,_ZTvn20_n12_N8S19436C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n24_N8S19436C7D0Ev,_ZTvn20_n12_N8S19436C7D0Ev),
};
extern void _ZN9S19436C10D1Ev();
extern void _ZN9S19436C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C10__8S19436C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&_ZN9S19436C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__9S19436C10__8S19436C1[] = {
  ABISELECT(160,100),
  ABISELECT(160,100),
  (VTBL_ENTRY)&(_ZTI9S19436C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D1Ev,_ZTv0_n12_N9S19436C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C10D0Ev,_ZTv0_n12_N9S19436C10D0Ev),
};
extern void _ZN8S19436C3D1Ev();
extern void _ZN8S19436C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19436C3__A2__8S19436C1[] = {
  ABISELECT(-232,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&_ZN8S19436C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19436C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__8S19436C3__A2__8S19436C1[] = {
  ABISELECT(232,144),
  ABISELECT(232,144),
  (VTBL_ENTRY)&(_ZTI8S19436C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev),
};
extern void _ZN9S19436C15D1Ev();
extern void _ZN9S19436C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19436C15__A1__8S19436C1[] = {
  ABISELECT(-96,-60),
  ABISELECT(-248,-156),
  ABISELECT(-88,-56),
  ABISELECT(-280,-176),
  0,
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&_ZN9S19436C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19436C15D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19436C10__9S19436C15__A1__8S19436C1[] = {
  ABISELECT(88,56),
  ABISELECT(-8,-4),
  ABISELECT(-160,-100),
  ABISELECT(-192,-120),
  ABISELECT(88,56),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19436C4__A1__9S19436C15__A1__8S19436C1[] = {
  ABISELECT(248,156),
  ABISELECT(248,156),
  (VTBL_ENTRY)&(_ZTI9S19436C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D1Ev,_ZTv0_n12_N9S19436C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19436C15D0Ev,_ZTv0_n12_N9S19436C15D0Ev),
};
static  VTT_ENTRY vtt_S19436C1[] = {
  {&(_ZTV8S19436C1[13]),  13,95},
  {&(_ZTV8S19436C1[19]),  19,95},
  {&(_ZTV8S19436C1[24]),  24,95},
  {&(_ZTV8S19436C1[37]),  37,95},
  {&(_ZTV8S19436C1[61]),  61,95},
  {&(_ZTV8S19436C1[69]),  69,95},
  {&(_ZTV8S19436C1[74]),  74,95},
  {&(_ZTV8S19436C1[78]),  78,95},
  {&(_ZTV8S19436C1[44]),  44,95},
  {&(_ZTV8S19436C1[84]),  84,95},
  {&(_ZTV8S19436C1[51]),  51,95},
  {&(_ZTV8S19436C1[93]),  93,95},
  {&(_tg__ZTV8S19436C2__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C38S19436C2__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C38S19436C2__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C2__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C6__8S19436C1[10]),  10,12},
  {&(_tg__ZTV9S19436C148S19436C6__8S19436C1[7]),  7,9},
  {&(_tg__ZTV9S19436C159S19436C148S19436C6__8S19436C1[6]),  6,8},
  {&(_tg__ZTV9S19436C10__9S19436C159S19436C148S19436C6__8S19436C1[6]),  6,8},
  {&(_tg__ZTV8S19436C4__A1__9S19436C159S19436C148S19436C6__8S19436C1[3]),  3,5},
  {&(_tg__ZTV9S19436C10__9S19436C148S19436C6__8S19436C1[6]),  6,8},
  {&(_tg__ZTV8S19436C4__9S19436C148S19436C6__8S19436C1[3]),  3,5},
  {&(_tg__ZTV9S19436C168S19436C6__8S19436C1[5]),  5,7},
  {&(_tg__ZTV8S19436C3__9S19436C168S19436C6__8S19436C1[4]),  4,6},
  {&(_tg__ZTV8S19436C4__9S19436C168S19436C6__8S19436C1[3]),  3,5},
  {&(_tg__ZTV9S19436C108S19436C6__A1__8S19436C1[5]),  5,7},
  {&(_tg__ZTV8S19436C4__9S19436C108S19436C6__A1__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C7__8S19436C6__8S19436C1[8]),  8,10},
  {&(_tg__ZTV8S19436C4__8S19436C6__8S19436C1[3]),  3,5},
  {&(_tg__ZTV9S19436C10__8S19436C6__8S19436C1[6]),  6,8},
  {&(_tg__ZTV9S19436C12__8S19436C6__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C49S19436C12__A2__8S19436C6__8S19436C1[2]),  2,4},
  {&(_tg__ZTV9S19436C16__8S19436C6__8S19436C1[5]),  5,7},
  {&(_tg__ZTV8S19436C3__A1__8S19436C6__8S19436C1[4]),  4,6},
  {&(_tg__ZTV9S19436C10__A__8S19436C6__8S19436C1[5]),  5,7},
  {&(_tg__ZTV8S19436C7__8S19436C1[7]),  7,9},
  {&(_tg__ZTV8S19436C38S19436C7__A1__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C38S19436C7__A1__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C7__8S19436C1[3]),  3,5},
  {&(_tg__ZTV9S19436C10__8S19436C7__8S19436C1[6]),  6,8},
  {&(_tg__ZTV9S19436C12__8S19436C7__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C49S19436C12__A2__8S19436C7__8S19436C1[2]),  2,4},
  {&(_tg__ZTV9S19436C10__8S19436C1[5]),  5,7},
  {&(_tg__ZTV8S19436C4__9S19436C10__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C3__A2__8S19436C1[3]),  3,5},
  {&(_tg__ZTV8S19436C4__8S19436C3__A2__8S19436C1[3]),  3,5},
  {&(_tg__ZTV9S19436C15__A1__8S19436C1[6]),  6,8},
  {&(_tg__ZTV9S19436C10__9S19436C15__A1__8S19436C1[6]),  6,8},
  {&(_tg__ZTV8S19436C4__A1__9S19436C15__A1__8S19436C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19436C1[];
extern  VTBL_ENTRY _ZTV8S19436C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19436C1[];
static VTBL_ENTRY alt_thunk_names136[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C7D0Ev,_ZTv0_n12_N8S19436C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19436C7D0Ev,_ZThn52_N8S19436C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C7D1Ev,_ZTv0_n12_N8S19436C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19436C7D1Ev,_ZThn52_N8S19436C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C7D0Ev,_ZTv0_n24_N8S19436C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19436C7D0Ev,_ZThn40_N8S19436C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C7D1Ev,_ZTv0_n24_N8S19436C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19436C7D1Ev,_ZThn40_N8S19436C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19436C6D0Ev,_ZTv0_n16_N8S19436C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19436C6D0Ev,_ZThn136_N8S19436C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19436C6D1Ev,_ZTv0_n16_N8S19436C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19436C6D1Ev,_ZThn136_N8S19436C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C6D0Ev,_ZTv0_n12_N8S19436C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19436C6D0Ev,_ZThn104_N8S19436C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C6D1Ev,_ZTv0_n12_N8S19436C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19436C6D1Ev,_ZThn104_N8S19436C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C6D0Ev,_ZTv0_n24_N8S19436C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19436C6D0Ev,_ZThn92_N8S19436C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C6D1Ev,_ZTv0_n24_N8S19436C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19436C6D1Ev,_ZThn92_N8S19436C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19436C6D0Ev,_ZTv0_n32_N8S19436C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19436C6D0Ev,_ZThn52_N8S19436C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19436C6D1Ev,_ZTv0_n32_N8S19436C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19436C6D1Ev,_ZThn52_N8S19436C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19436C16D0Ev,_ZTv0_n16_N9S19436C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19436C16D0Ev,_ZThn104_N9S19436C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19436C16D1Ev,_ZTv0_n16_N9S19436C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S19436C16D1Ev,_ZThn104_N9S19436C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C14D0Ev,_ZTv0_n24_N9S19436C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19436C14D0Ev,_ZThn92_N9S19436C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C14D1Ev,_ZTv0_n24_N9S19436C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19436C14D1Ev,_ZThn92_N9S19436C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C15D0Ev,_ZTv0_n24_N9S19436C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19436C15D0Ev,_ZThn92_N9S19436C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19436C15D1Ev,_ZTv0_n24_N9S19436C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S19436C15D1Ev,_ZThn92_N9S19436C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C2D0Ev,_ZTv0_n12_N8S19436C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C2D0Ev,_ZThn12_N8S19436C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C2D1Ev,_ZTv0_n12_N8S19436C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C2D1Ev,_ZThn12_N8S19436C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D0Ev,_ZTv0_n12_N8S19436C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C3D0Ev,_ZThn12_N8S19436C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C3D1Ev,_ZTv0_n12_N8S19436C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C3D1Ev,_ZThn12_N8S19436C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19436C1D0Ev,_ZTv0_n28_N8S19436C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19436C1D0Ev,_ZThn176_N8S19436C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19436C1D1Ev,_ZTv0_n28_N8S19436C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19436C1D1Ev,_ZThn176_N8S19436C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C1D0Ev,_ZTv0_n24_N8S19436C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19436C1D0Ev,_ZThn120_N8S19436C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19436C1D1Ev,_ZTv0_n24_N8S19436C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19436C1D1Ev,_ZThn120_N8S19436C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19436C1D0Ev,_ZTv0_n32_N8S19436C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19436C1D0Ev,_ZThn80_N8S19436C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19436C1D1Ev,_ZTv0_n32_N8S19436C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19436C1D1Ev,_ZThn80_N8S19436C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19436C1D0Ev,_ZTv0_n44_N8S19436C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19436C1D0Ev,_ZThn28_N8S19436C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19436C1D1Ev,_ZTv0_n44_N8S19436C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19436C1D1Ev,_ZThn28_N8S19436C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C1D0Ev,_ZTv0_n12_N8S19436C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19436C1D0Ev,_ZThn132_N8S19436C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19436C1D0Ev,_ZThn20_N8S19436C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19436C1D1Ev,_ZTv0_n12_N8S19436C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19436C1D1Ev,_ZThn132_N8S19436C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19436C1D1Ev,_ZThn20_N8S19436C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19436C1D0Ev,_ZTv0_n16_N8S19436C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19436C1D0Ev,_ZThn164_N8S19436C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C1D0Ev,_ZThn8_N8S19436C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19436C1D1Ev,_ZTv0_n16_N8S19436C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19436C1D1Ev,_ZThn164_N8S19436C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19436C1D1Ev,_ZThn8_N8S19436C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19436C1 = {  "S19436C1", // class name
  bases_S19436C1, 32,
  &(vtc_S19436C1[0]), // expected_vtbl_contents
  &(vtt_S19436C1[0]), // expected_vtt_contents
  ABISELECT(296,184), // object size
  NSPAIRA(_ZTI8S19436C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19436C1),95, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19436C1),50, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names136,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7631C3  {
  long s7631c3f0[5];
  void *s7631c3f1;
  virtual void  v6(); // _ZN7S7631C32v6Ev
  virtual void  v7(); // _ZN7S7631C32v7Ev
  ~S7631C3(); // tgen
  S7631C3(); // tgen
};
//SIG(-1 S7631C3) C1{ v1 v2 Fl[5] Fp}


void  S7631C3 ::v6(){vfunc_called(this, "_ZN7S7631C32v6Ev");}
void  S7631C3 ::v7(){vfunc_called(this, "_ZN7S7631C32v7Ev");}
S7631C3 ::~S7631C3(){ note_dtor("S7631C3", this);} // tgen
S7631C3 ::S7631C3(){ note_ctor("S7631C3", this);} // tgen

static void Test_S7631C3()
{
  extern Class_Descriptor cd_S7631C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7631C3, buf);
    S7631C3 *dp, &lv = *(dp=new (buf) S7631C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7631C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7631C3)");
    check_field_offset(lv, s7631c3f0, ABISELECT(8,4), "S7631C3.s7631c3f0");
    check_field_offset(lv, s7631c3f1, ABISELECT(48,24), "S7631C3.s7631c3f1");
    test_class_info(&lv, &cd_S7631C3);
    dp->~S7631C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7631C3(Test_S7631C3, "S7631C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7631C3C1Ev();
extern void _ZN7S7631C3D1Ev();
Name_Map name_map_S7631C3[] = {
  NSPAIR(_ZN7S7631C3C1Ev),
  NSPAIR(_ZN7S7631C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7631C3[];
extern void _ZN7S7631C32v6Ev();
extern void _ZN7S7631C32v7Ev();
static  VTBL_ENTRY vtc_S7631C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C3[0]),
  (VTBL_ENTRY)&_ZN7S7631C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7631C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S7631C3[];
extern  VTBL_ENTRY _ZTV7S7631C3[];
Class_Descriptor cd_S7631C3 = {  "S7631C3", // class name
  0,0,//no base classes
  &(vtc_S7631C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7631C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7631C3),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  S7631C8  {
  virtual void  v8(); // _ZN7S7631C82v8Ev
  virtual void  v9(); // _ZN7S7631C82v9Ev
  virtual void  v10(); // _ZN7S7631C83v10Ev
  virtual void  v11(); // _ZN7S7631C83v11Ev
  virtual void  v12(); // _ZN7S7631C83v12Ev
  ~S7631C8(); // tgen
  S7631C8(); // tgen
};
//SIG(-1 S7631C8) C1{ v1 v2 v3 v4 v5}


void  S7631C8 ::v8(){vfunc_called(this, "_ZN7S7631C82v8Ev");}
void  S7631C8 ::v9(){vfunc_called(this, "_ZN7S7631C82v9Ev");}
void  S7631C8 ::v10(){vfunc_called(this, "_ZN7S7631C83v10Ev");}
void  S7631C8 ::v11(){vfunc_called(this, "_ZN7S7631C83v11Ev");}
void  S7631C8 ::v12(){vfunc_called(this, "_ZN7S7631C83v12Ev");}
S7631C8 ::~S7631C8(){ note_dtor("S7631C8", this);} // tgen
S7631C8 ::S7631C8(){ note_ctor("S7631C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7631C8C1Ev();
extern void _ZN7S7631C8D1Ev();
Name_Map name_map_S7631C8[] = {
  NSPAIR(_ZN7S7631C8C1Ev),
  NSPAIR(_ZN7S7631C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7631C8[];
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
static  VTBL_ENTRY vtc_S7631C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C8[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
};
extern VTBL_ENTRY _ZTI7S7631C8[];
extern  VTBL_ENTRY _ZTV7S7631C8[];
Class_Descriptor cd_S7631C8 = {  "S7631C8", // class name
  0,0,//no base classes
  &(vtc_S7631C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7631C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7631C8),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  S7631C7  : S7631C8 {
  ::S7631C8 s7631c7f0;
  virtual void  v13(); // _ZN7S7631C73v13Ev
  virtual void  v14(); // _ZN7S7631C73v14Ev
  virtual void  v15(); // _ZN7S7631C73v15Ev
  virtual void  v16(); // _ZN7S7631C73v16Ev
  ~S7631C7(); // tgen
  S7631C7(); // tgen
};
//SIG(-1 S7631C7) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S7631C7 ::v13(){vfunc_called(this, "_ZN7S7631C73v13Ev");}
void  S7631C7 ::v14(){vfunc_called(this, "_ZN7S7631C73v14Ev");}
void  S7631C7 ::v15(){vfunc_called(this, "_ZN7S7631C73v15Ev");}
void  S7631C7 ::v16(){vfunc_called(this, "_ZN7S7631C73v16Ev");}
S7631C7 ::~S7631C7(){ note_dtor("S7631C7", this);} // tgen
S7631C7 ::S7631C7(){ note_ctor("S7631C7", this);} // tgen

static void Test_S7631C7()
{
  extern Class_Descriptor cd_S7631C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7631C7, buf);
    S7631C7 *dp, &lv = *(dp=new (buf) S7631C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7631C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7631C7)");
    check_base_class_offset(lv, (S7631C8*), 0, "S7631C7");
    check_field_offset(lv, s7631c7f0, ABISELECT(8,4), "S7631C7.s7631c7f0");
    test_class_info(&lv, &cd_S7631C7);
    dp->~S7631C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7631C7(Test_S7631C7, "S7631C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7631C7C1Ev();
extern void _ZN7S7631C7D1Ev();
Name_Map name_map_S7631C7[] = {
  NSPAIR(_ZN7S7631C7C1Ev),
  NSPAIR(_ZN7S7631C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7631C8;
extern VTBL_ENTRY _ZTI7S7631C8[];
extern  VTBL_ENTRY _ZTV7S7631C8[];
static Base_Class bases_S7631C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7631C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7631C7[];
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
static  VTBL_ENTRY vtc_S7631C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C7[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
};
extern VTBL_ENTRY _ZTI7S7631C7[];
extern  VTBL_ENTRY _ZTV7S7631C7[];
Class_Descriptor cd_S7631C7 = {  "S7631C7", // class name
  bases_S7631C7, 1,
  &(vtc_S7631C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7631C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7631C7),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7631C6  : S7631C7 {
  virtual void  v17(); // _ZN7S7631C63v17Ev
  virtual void  v18(); // _ZN7S7631C63v18Ev
  virtual void  v19(); // _ZN7S7631C63v19Ev
  virtual void  v20(); // _ZN7S7631C63v20Ev
  virtual void  v21(); // _ZN7S7631C63v21Ev
  virtual void  v22(); // _ZN7S7631C63v22Ev
  ~S7631C6(); // tgen
  S7631C6(); // tgen
};
//SIG(-1 S7631C6) C1{ BC2{ BC3{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 v6}


void  S7631C6 ::v17(){vfunc_called(this, "_ZN7S7631C63v17Ev");}
void  S7631C6 ::v18(){vfunc_called(this, "_ZN7S7631C63v18Ev");}
void  S7631C6 ::v19(){vfunc_called(this, "_ZN7S7631C63v19Ev");}
void  S7631C6 ::v20(){vfunc_called(this, "_ZN7S7631C63v20Ev");}
void  S7631C6 ::v21(){vfunc_called(this, "_ZN7S7631C63v21Ev");}
void  S7631C6 ::v22(){vfunc_called(this, "_ZN7S7631C63v22Ev");}
S7631C6 ::~S7631C6(){ note_dtor("S7631C6", this);} // tgen
S7631C6 ::S7631C6(){ note_ctor("S7631C6", this);} // tgen

static void Test_S7631C6()
{
  extern Class_Descriptor cd_S7631C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7631C6, buf);
    S7631C6 *dp, &lv = *(dp=new (buf) S7631C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7631C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7631C6)");
    check_base_class_offset(lv, (S7631C8*)(S7631C7*), 0, "S7631C6");
    check_base_class_offset(lv, (S7631C7*), 0, "S7631C6");
    test_class_info(&lv, &cd_S7631C6);
    dp->~S7631C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7631C6(Test_S7631C6, "S7631C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7631C6C1Ev();
extern void _ZN7S7631C6D1Ev();
Name_Map name_map_S7631C6[] = {
  NSPAIR(_ZN7S7631C6C1Ev),
  NSPAIR(_ZN7S7631C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7631C8;
extern VTBL_ENTRY _ZTI7S7631C8[];
extern  VTBL_ENTRY _ZTV7S7631C8[];
extern Class_Descriptor cd_S7631C7;
extern VTBL_ENTRY _ZTI7S7631C7[];
extern  VTBL_ENTRY _ZTV7S7631C7[];
static Base_Class bases_S7631C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7631C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7631C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7631C6[];
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY vtc_S7631C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C6[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
extern VTBL_ENTRY _ZTI7S7631C6[];
extern  VTBL_ENTRY _ZTV7S7631C6[];
Class_Descriptor cd_S7631C6 = {  "S7631C6", // class name
  bases_S7631C6, 2,
  &(vtc_S7631C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7631C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7631C6),17, //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  S7631C5  : virtual S7631C6 {
  virtual void  v23(); // _ZN7S7631C53v23Ev
  virtual void  v24(); // _ZN7S7631C53v24Ev
  virtual void  v25(); // _ZN7S7631C53v25Ev
  ~S7631C5(); // tgen
  S7631C5(); // tgen
};
//SIG(-1 S7631C5) C1{ VBC2{ BC3{ BC4{ v4 v5 v6 v7 v8} v9 v10 v11 v12 FC4} v13 v14 v15 v16 v17 v18} v1 v2 v3}


void  S7631C5 ::v23(){vfunc_called(this, "_ZN7S7631C53v23Ev");}
void  S7631C5 ::v24(){vfunc_called(this, "_ZN7S7631C53v24Ev");}
void  S7631C5 ::v25(){vfunc_called(this, "_ZN7S7631C53v25Ev");}
S7631C5 ::~S7631C5(){ note_dtor("S7631C5", this);} // tgen
S7631C5 ::S7631C5(){ note_ctor("S7631C5", this);} // tgen

static void Test_S7631C5()
{
  extern Class_Descriptor cd_S7631C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7631C5, buf);
    S7631C5 *dp, &lv = *(dp=new (buf) S7631C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7631C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7631C5)");
    check_base_class_offset(lv, (S7631C8*)(S7631C7*)(S7631C6*), ABISELECT(8,4), "S7631C5");
    check_base_class_offset(lv, (S7631C7*)(S7631C6*), ABISELECT(8,4), "S7631C5");
    check_base_class_offset(lv, (S7631C6*), ABISELECT(8,4), "S7631C5");
    test_class_info(&lv, &cd_S7631C5);
    dp->~S7631C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7631C5(Test_S7631C5, "S7631C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7631C5C1Ev();
extern void _ZN7S7631C5D1Ev();
Name_Map name_map_S7631C5[] = {
  NSPAIR(_ZN7S7631C5C1Ev),
  NSPAIR(_ZN7S7631C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7631C8;
extern VTBL_ENTRY _ZTI7S7631C8[];
extern  VTBL_ENTRY _ZTV7S7631C8[];
extern Class_Descriptor cd_S7631C7;
extern VTBL_ENTRY _ZTI7S7631C7[];
extern  VTBL_ENTRY _ZTV7S7631C7[];
extern Class_Descriptor cd_S7631C6;
extern VTBL_ENTRY _ZTI7S7631C6[];
extern  VTBL_ENTRY _ZTV7S7631C6[];
static Base_Class bases_S7631C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7631C8,    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_S7631C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7631C6,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7631C5[];
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY vtc_S7631C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C5[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7631C5[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
extern VTBL_ENTRY _ZTV7S7631C5[];
static  VTT_ENTRY vtt_S7631C5[] = {
  {&(_ZTV7S7631C5[3]),  3,38},
  {&(_ZTV7S7631C5[23]),  23,38},
};
extern VTBL_ENTRY _ZTI7S7631C5[];
extern  VTBL_ENTRY _ZTV7S7631C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C5[];
Class_Descriptor cd_S7631C5 = {  "S7631C5", // class name
  bases_S7631C5, 3,
  &(vtc_S7631C5[0]), // expected_vtbl_contents
  &(vtt_S7631C5[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7631C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7631C5),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7631C5),2, //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  S7631C4  : S7631C5 {
  virtual  ~S7631C4(); // _ZN7S7631C4D2Ev
  virtual void  v26(); // _ZN7S7631C43v26Ev
  virtual void  v27(); // _ZN7S7631C43v27Ev
  virtual void  v28(); // _ZN7S7631C43v28Ev
  virtual void  v29(); // _ZN7S7631C43v29Ev
  virtual void  v30(); // _ZN7S7631C43v30Ev
  virtual void  v31(); // _ZN7S7631C43v31Ev
  virtual void  v32(); // _ZN7S7631C43v32Ev
  S7631C4(); // tgen
};
//SIG(-1 S7631C4) C1{ BC2{ VBC3{ BC4{ BC5{ v8 v9 v10 v11 v12} v13 v14 v15 v16 FC5} v17 v18 v19 v20 v21 v22} v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7}


 S7631C4 ::~S7631C4(){ note_dtor("S7631C4", this);}
void  S7631C4 ::v26(){vfunc_called(this, "_ZN7S7631C43v26Ev");}
void  S7631C4 ::v27(){vfunc_called(this, "_ZN7S7631C43v27Ev");}
void  S7631C4 ::v28(){vfunc_called(this, "_ZN7S7631C43v28Ev");}
void  S7631C4 ::v29(){vfunc_called(this, "_ZN7S7631C43v29Ev");}
void  S7631C4 ::v30(){vfunc_called(this, "_ZN7S7631C43v30Ev");}
void  S7631C4 ::v31(){vfunc_called(this, "_ZN7S7631C43v31Ev");}
void  S7631C4 ::v32(){vfunc_called(this, "_ZN7S7631C43v32Ev");}
S7631C4 ::S7631C4(){ note_ctor("S7631C4", this);} // tgen

static void Test_S7631C4()
{
  extern Class_Descriptor cd_S7631C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7631C4, buf);
    S7631C4 *dp, &lv = *(dp=new (buf) S7631C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7631C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7631C4)");
    check_base_class_offset(lv, (S7631C8*)(S7631C7*)(S7631C6*), ABISELECT(8,4), "S7631C4");
    check_base_class_offset(lv, (S7631C7*)(S7631C6*), ABISELECT(8,4), "S7631C4");
    check_base_class_offset(lv, (S7631C6*)(S7631C5*), ABISELECT(8,4), "S7631C4");
    check_base_class_offset(lv, (S7631C5*), 0, "S7631C4");
    test_class_info(&lv, &cd_S7631C4);
    dp->~S7631C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7631C4(Test_S7631C4, "S7631C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7631C4C1Ev();
extern void _ZN7S7631C4D2Ev();
Name_Map name_map_S7631C4[] = {
  NSPAIR(_ZN7S7631C4C1Ev),
  NSPAIR(_ZN7S7631C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7631C8;
extern VTBL_ENTRY _ZTI7S7631C8[];
extern  VTBL_ENTRY _ZTV7S7631C8[];
extern Class_Descriptor cd_S7631C7;
extern VTBL_ENTRY _ZTI7S7631C7[];
extern  VTBL_ENTRY _ZTV7S7631C7[];
extern Class_Descriptor cd_S7631C6;
extern VTBL_ENTRY _ZTI7S7631C6[];
extern  VTBL_ENTRY _ZTV7S7631C6[];
extern Class_Descriptor cd_S7631C5;
extern VTBL_ENTRY _ZTI7S7631C5[];
extern  VTBL_ENTRY _ZTV7S7631C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C5[];
static Base_Class bases_S7631C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7631C8,    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_S7631C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7631C6,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7631C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7631C4[];
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
extern void _ZN7S7631C4D1Ev();
extern void _ZN7S7631C4D0Ev();
extern void _ZN7S7631C43v26Ev();
extern void _ZN7S7631C43v27Ev();
extern void _ZN7S7631C43v28Ev();
extern void _ZN7S7631C43v29Ev();
extern void _ZN7S7631C43v30Ev();
extern void _ZN7S7631C43v31Ev();
extern void _ZN7S7631C43v32Ev();
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY vtc_S7631C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C4[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7631C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7631C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v26Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v27Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v28Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v29Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v30Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v31Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v32Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7631C4[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
extern VTBL_ENTRY _ZTV7S7631C4[];
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C5__7S7631C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C5[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
};
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C6__7S7631C5__7S7631C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7631C5[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
static  VTT_ENTRY vtt_S7631C4[] = {
  {&(_ZTV7S7631C4[3]),  3,47},
  {&(_tg__ZTV7S7631C5__7S7631C4[3]),  3,6},
  {&(_tg__ZTV7S7631C6__7S7631C5__7S7631C4[17]),  17,32},
  {&(_ZTV7S7631C4[32]),  32,47},
};
extern VTBL_ENTRY _ZTI7S7631C4[];
extern  VTBL_ENTRY _ZTV7S7631C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C4[];
Class_Descriptor cd_S7631C4 = {  "S7631C4", // class name
  bases_S7631C4, 4,
  &(vtc_S7631C4[0]), // expected_vtbl_contents
  &(vtt_S7631C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7631C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7631C4),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7631C4),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7631C2  : virtual S7631C3 , S7631C4 {
  int s7631c2f0;
  __tsi64 s7631c2f1[7];
  virtual  ~S7631C2(); // _ZN7S7631C2D2Ev
  S7631C2(); // tgen
};
//SIG(-1 S7631C2) C1{ VBC2{ v1 v2 Fl[5] Fp} BC3{ BC4{ VBC5{ BC6{ BC7{ v3 v4 v5 v6 v7} v8 v9 v10 v11 FC7} v12 v13 v14 v15 v16 v17} v18 v19 v20} vd v21 v22 v23 v24 v25 v26 v27} vd Fi FL[7]}


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

static void Test_S7631C2()
{
  extern Class_Descriptor cd_S7631C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,26)];
    init_test(&cd_S7631C2, buf);
    S7631C2 *dp, &lv = *(dp=new (buf) S7631C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S7631C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7631C2)");
    check_base_class_offset(lv, (S7631C3*), ABISELECT(72,64), "S7631C2");
    check_base_class_offset(lv, (S7631C8*)(S7631C7*)(S7631C6*), ABISELECT(128,92), "S7631C2");
    check_base_class_offset(lv, (S7631C7*)(S7631C6*), ABISELECT(128,92), "S7631C2");
    check_base_class_offset(lv, (S7631C6*)(S7631C5*)(S7631C4*), ABISELECT(128,92), "S7631C2");
    check_base_class_offset(lv, (S7631C5*)(S7631C4*), 0, "S7631C2");
    check_base_class_offset(lv, (S7631C4*), 0, "S7631C2");
    check_field_offset(lv, s7631c2f0, ABISELECT(8,4), "S7631C2.s7631c2f0");
    check_field_offset(lv, s7631c2f1, ABISELECT(16,8), "S7631C2.s7631c2f1");
    test_class_info(&lv, &cd_S7631C2);
    dp->~S7631C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7631C2(Test_S7631C2, "S7631C2", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN7S7631C2C1Ev();
extern void _ZN7S7631C2D2Ev();
Name_Map name_map_S7631C2[] = {
  NSPAIR(_ZN7S7631C2C1Ev),
  NSPAIR(_ZN7S7631C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7631C3;
extern VTBL_ENTRY _ZTI7S7631C3[];
extern  VTBL_ENTRY _ZTV7S7631C3[];
extern Class_Descriptor cd_S7631C8;
extern VTBL_ENTRY _ZTI7S7631C8[];
extern  VTBL_ENTRY _ZTV7S7631C8[];
extern Class_Descriptor cd_S7631C7;
extern VTBL_ENTRY _ZTI7S7631C7[];
extern  VTBL_ENTRY _ZTV7S7631C7[];
extern Class_Descriptor cd_S7631C6;
extern VTBL_ENTRY _ZTI7S7631C6[];
extern  VTBL_ENTRY _ZTV7S7631C6[];
extern Class_Descriptor cd_S7631C5;
extern VTBL_ENTRY _ZTI7S7631C5[];
extern  VTBL_ENTRY _ZTV7S7631C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C5[];
extern Class_Descriptor cd_S7631C4;
extern VTBL_ENTRY _ZTI7S7631C4[];
extern  VTBL_ENTRY _ZTV7S7631C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C4[];
static Base_Class bases_S7631C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7631C3,    ABISELECT(72,64), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7631C8,    ABISELECT(128,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7631C7,    ABISELECT(128,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7631C6,    ABISELECT(128,92), //bcp->offset
    22, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7631C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7631C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7631C2[];
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
extern void _ZN7S7631C2D1Ev();
extern void _ZN7S7631C2D0Ev();
extern void _ZN7S7631C43v26Ev();
extern void _ZN7S7631C43v27Ev();
extern void _ZN7S7631C43v28Ev();
extern void _ZN7S7631C43v29Ev();
extern void _ZN7S7631C43v30Ev();
extern void _ZN7S7631C43v31Ev();
extern void _ZN7S7631C43v32Ev();
extern void _ZN7S7631C32v6Ev();
extern void _ZN7S7631C32v7Ev();
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY vtc_S7631C2[] = {
  ABISELECT(72,64),
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C2[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7631C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7631C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v26Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v27Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v28Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v29Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v30Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v31Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v32Ev,
  0,
  0,
  ABISELECT(-72,-64),
  (VTBL_ENTRY)&(_ZTI7S7631C2[0]),
  (VTBL_ENTRY)&_ZN7S7631C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7631C32v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S7631C2[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
extern VTBL_ENTRY _ZTV7S7631C2[];
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
extern void _ZN7S7631C4D1Ev();
extern void _ZN7S7631C4D0Ev();
extern void _ZN7S7631C43v26Ev();
extern void _ZN7S7631C43v27Ev();
extern void _ZN7S7631C43v28Ev();
extern void _ZN7S7631C43v29Ev();
extern void _ZN7S7631C43v30Ev();
extern void _ZN7S7631C43v31Ev();
extern void _ZN7S7631C43v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C4__7S7631C2[] = {
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C4[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7631C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7631C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v26Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v27Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v28Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v29Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v30Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v31Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v32Ev,
};
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C57S7631C4__7S7631C2[] = {
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C5[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
};
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C6__7S7631C57S7631C4__7S7631C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S7631C5[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C6__7S7631C4__7S7631C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S7631C4[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
static  VTT_ENTRY vtt_S7631C2[] = {
  {&(_ZTV7S7631C2[4]),  4,54},
  {&(_tg__ZTV7S7631C4__7S7631C2[3]),  3,15},
  {&(_tg__ZTV7S7631C57S7631C4__7S7631C2[3]),  3,6},
  {&(_tg__ZTV7S7631C6__7S7631C57S7631C4__7S7631C2[17]),  17,32},
  {&(_tg__ZTV7S7631C6__7S7631C4__7S7631C2[17]),  17,32},
  {&(_ZTV7S7631C2[20]),  20,54},
  {&(_ZTV7S7631C2[39]),  39,54},
};
extern VTBL_ENTRY _ZTI7S7631C2[];
extern  VTBL_ENTRY _ZTV7S7631C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C2[];
Class_Descriptor cd_S7631C2 = {  "S7631C2", // class name
  bases_S7631C2, 6,
  &(vtc_S7631C2[0]), // expected_vtbl_contents
  &(vtt_S7631C2[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI7S7631C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7631C2),54, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7631C2),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7631C9  {
  char s7631c9f0;
  virtual void  v33(); // _ZN7S7631C93v33Ev
  virtual void  v34(); // _ZN7S7631C93v34Ev
  virtual void  v35(); // _ZN7S7631C93v35Ev
  virtual void  v36(); // _ZN7S7631C93v36Ev
  virtual void  v37(); // _ZN7S7631C93v37Ev
  virtual void  v38(); // _ZN7S7631C93v38Ev
  ~S7631C9(); // tgen
  S7631C9(); // tgen
};
//SIG(-1 S7631C9) C1{ v1 v2 v3 v4 v5 v6 Fc}


void  S7631C9 ::v33(){vfunc_called(this, "_ZN7S7631C93v33Ev");}
void  S7631C9 ::v34(){vfunc_called(this, "_ZN7S7631C93v34Ev");}
void  S7631C9 ::v35(){vfunc_called(this, "_ZN7S7631C93v35Ev");}
void  S7631C9 ::v36(){vfunc_called(this, "_ZN7S7631C93v36Ev");}
void  S7631C9 ::v37(){vfunc_called(this, "_ZN7S7631C93v37Ev");}
void  S7631C9 ::v38(){vfunc_called(this, "_ZN7S7631C93v38Ev");}
S7631C9 ::~S7631C9(){ note_dtor("S7631C9", this);} // tgen
S7631C9 ::S7631C9(){ note_ctor("S7631C9", this);} // tgen

static void Test_S7631C9()
{
  extern Class_Descriptor cd_S7631C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7631C9, buf);
    S7631C9 *dp, &lv = *(dp=new (buf) S7631C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7631C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7631C9)");
    check_field_offset(lv, s7631c9f0, ABISELECT(8,4), "S7631C9.s7631c9f0");
    test_class_info(&lv, &cd_S7631C9);
    dp->~S7631C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7631C9(Test_S7631C9, "S7631C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7631C9C1Ev();
extern void _ZN7S7631C9D1Ev();
Name_Map name_map_S7631C9[] = {
  NSPAIR(_ZN7S7631C9C1Ev),
  NSPAIR(_ZN7S7631C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7631C9[];
extern void _ZN7S7631C93v33Ev();
extern void _ZN7S7631C93v34Ev();
extern void _ZN7S7631C93v35Ev();
extern void _ZN7S7631C93v36Ev();
extern void _ZN7S7631C93v37Ev();
extern void _ZN7S7631C93v38Ev();
static  VTBL_ENTRY vtc_S7631C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C9[0]),
  (VTBL_ENTRY)&_ZN7S7631C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v38Ev,
};
extern VTBL_ENTRY _ZTI7S7631C9[];
extern  VTBL_ENTRY _ZTV7S7631C9[];
Class_Descriptor cd_S7631C9 = {  "S7631C9", // class name
  0,0,//no base classes
  &(vtc_S7631C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7631C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7631C9),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7631C10_nt  {
  void *s7631c10f0;
  virtual void  v39(); // _ZN11S7631C10_nt3v39Ev
  virtual void  v40(); // _ZN11S7631C10_nt3v40Ev
  virtual void  v41(); // _ZN11S7631C10_nt3v41Ev
  virtual void  v42(); // _ZN11S7631C10_nt3v42Ev
  ~S7631C10_nt(); // tgen
  S7631C10_nt(); // tgen
};
//SIG(1 S7631C10_nt) C1{ v1 v2 v3 v4 Fp}


void  S7631C10_nt ::v39(){vfunc_called(this, "_ZN11S7631C10_nt3v39Ev");}
void  S7631C10_nt ::v40(){vfunc_called(this, "_ZN11S7631C10_nt3v40Ev");}
void  S7631C10_nt ::v41(){vfunc_called(this, "_ZN11S7631C10_nt3v41Ev");}
void  S7631C10_nt ::v42(){vfunc_called(this, "_ZN11S7631C10_nt3v42Ev");}
S7631C10_nt ::~S7631C10_nt(){ note_dtor("S7631C10_nt", this);} // tgen
S7631C10_nt ::S7631C10_nt(){ note_ctor("S7631C10_nt", this);} // tgen

//skip512 S7631C10_nt

#else // __cplusplus

extern void _ZN11S7631C10_ntC1Ev();
extern void _ZN11S7631C10_ntD1Ev();
Name_Map name_map_S7631C10_nt[] = {
  NSPAIR(_ZN11S7631C10_ntC1Ev),
  NSPAIR(_ZN11S7631C10_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S7631C10_nt[];
extern void _ZN11S7631C10_nt3v39Ev();
extern void _ZN11S7631C10_nt3v40Ev();
extern void _ZN11S7631C10_nt3v41Ev();
extern void _ZN11S7631C10_nt3v42Ev();
static  VTBL_ENTRY vtc_S7631C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S7631C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S7631C10_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S7631C10_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S7631C10_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S7631C10_nt3v42Ev,
};
extern VTBL_ENTRY _ZTI11S7631C10_nt[];
VTBL_ENTRY *P__ZTI11S7631C10_nt = _ZTI11S7631C10_nt; 
extern  VTBL_ENTRY _ZTV11S7631C10_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7631C1  : S7631C2 , virtual S7631C9 {
  ::S7631C10_nt s7631c1f0[4];
  virtual void  v1(); // _ZN7S7631C12v1Ev
  virtual void  v2(); // _ZN7S7631C12v2Ev
  virtual void  v3(); // _ZN7S7631C12v3Ev
  virtual void  v4(); // _ZN7S7631C12v4Ev
  virtual void  v5(); // _ZN7S7631C12v5Ev
  ~S7631C1(); // tgen
  S7631C1(); // tgen
};
//SIG(1 S7631C1) C1{ BC2{ VBC3{ v6 v7 Fl[5] Fp} BC4{ BC5{ VBC6{ BC7{ BC8{ v8 v9 v10 v11 v12} v13 v14 v15 v16 FC8} v17 v18 v19 v20 v21 v22} v23 v24 v25} vd v26 v27 v28 v29 v30 v31 v32} vd Fi FL[7]} VBC9{ v33 v34 v35 v36 v37 v38 Fc} v1 v2 v3 v4 v5 FC10{ v39 v40 v41 v42 Fp}[4]}


void  S7631C1 ::v1(){vfunc_called(this, "_ZN7S7631C12v1Ev");}
void  S7631C1 ::v2(){vfunc_called(this, "_ZN7S7631C12v2Ev");}
void  S7631C1 ::v3(){vfunc_called(this, "_ZN7S7631C12v3Ev");}
void  S7631C1 ::v4(){vfunc_called(this, "_ZN7S7631C12v4Ev");}
void  S7631C1 ::v5(){vfunc_called(this, "_ZN7S7631C12v5Ev");}
S7631C1 ::~S7631C1(){ note_dtor("S7631C1", this);} // tgen
S7631C1 ::S7631C1(){ note_ctor("S7631C1", this);} // tgen

static void Test_S7631C1()
{
  extern Class_Descriptor cd_S7631C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,36)];
    init_test(&cd_S7631C1, buf);
    S7631C1 *dp, &lv = *(dp=new (buf) S7631C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S7631C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7631C1)");
    check_base_class_offset(lv, (S7631C3*)(S7631C2*), ABISELECT(136,96), "S7631C1");
    check_base_class_offset(lv, (S7631C8*)(S7631C7*)(S7631C6*), ABISELECT(192,124), "S7631C1");
    check_base_class_offset(lv, (S7631C7*)(S7631C6*), ABISELECT(192,124), "S7631C1");
    check_base_class_offset(lv, (S7631C6*)(S7631C5*)(S7631C4*)(S7631C2*), ABISELECT(192,124), "S7631C1");
    check_base_class_offset(lv, (S7631C5*)(S7631C4*)(S7631C2*), 0, "S7631C1");
    check_base_class_offset(lv, (S7631C4*)(S7631C2*), 0, "S7631C1");
    check_base_class_offset(lv, (S7631C2*), 0, "S7631C1");
    check_base_class_offset(lv, (S7631C9*), ABISELECT(208,132), "S7631C1");
    check_field_offset(lv, s7631c1f0, ABISELECT(72,64), "S7631C1.s7631c1f0");
    test_class_info(&lv, &cd_S7631C1);
    dp->~S7631C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7631C1(Test_S7631C1, "S7631C1", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN7S7631C1C1Ev();
extern void _ZN7S7631C1D1Ev();
Name_Map name_map_S7631C1[] = {
  NSPAIR(_ZN7S7631C1C1Ev),
  NSPAIR(_ZN7S7631C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7631C3;
extern VTBL_ENTRY _ZTI7S7631C3[];
extern  VTBL_ENTRY _ZTV7S7631C3[];
extern Class_Descriptor cd_S7631C8;
extern VTBL_ENTRY _ZTI7S7631C8[];
extern  VTBL_ENTRY _ZTV7S7631C8[];
extern Class_Descriptor cd_S7631C7;
extern VTBL_ENTRY _ZTI7S7631C7[];
extern  VTBL_ENTRY _ZTV7S7631C7[];
extern Class_Descriptor cd_S7631C6;
extern VTBL_ENTRY _ZTI7S7631C6[];
extern  VTBL_ENTRY _ZTV7S7631C6[];
extern Class_Descriptor cd_S7631C5;
extern VTBL_ENTRY _ZTI7S7631C5[];
extern  VTBL_ENTRY _ZTV7S7631C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C5[];
extern Class_Descriptor cd_S7631C4;
extern VTBL_ENTRY _ZTI7S7631C4[];
extern  VTBL_ENTRY _ZTV7S7631C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C4[];
extern Class_Descriptor cd_S7631C2;
extern VTBL_ENTRY _ZTI7S7631C2[];
extern  VTBL_ENTRY _ZTV7S7631C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C2[];
extern Class_Descriptor cd_S7631C9;
extern VTBL_ENTRY _ZTI7S7631C9[];
extern  VTBL_ENTRY _ZTV7S7631C9[];
static Base_Class bases_S7631C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7631C3,    ABISELECT(136,96), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7631C8,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7631C7,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7631C6,    ABISELECT(192,124), //bcp->offset
    28, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7631C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7631C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7631C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7631C9,    ABISELECT(208,132), //bcp->offset
    60, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7631C1[];
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
extern void _ZN7S7631C1D1Ev();
extern void _ZN7S7631C1D0Ev();
extern void _ZN7S7631C43v26Ev();
extern void _ZN7S7631C43v27Ev();
extern void _ZN7S7631C43v28Ev();
extern void _ZN7S7631C43v29Ev();
extern void _ZN7S7631C43v30Ev();
extern void _ZN7S7631C43v31Ev();
extern void _ZN7S7631C43v32Ev();
extern void _ZN7S7631C12v1Ev();
extern void _ZN7S7631C12v2Ev();
extern void _ZN7S7631C12v3Ev();
extern void _ZN7S7631C12v4Ev();
extern void _ZN7S7631C12v5Ev();
extern void _ZN7S7631C32v6Ev();
extern void _ZN7S7631C32v7Ev();
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
extern void _ZN7S7631C93v33Ev();
extern void _ZN7S7631C93v34Ev();
extern void _ZN7S7631C93v35Ev();
extern void _ZN7S7631C93v36Ev();
extern void _ZN7S7631C93v37Ev();
extern void _ZN7S7631C93v38Ev();
static  VTBL_ENTRY vtc_S7631C1[] = {
  ABISELECT(208,132),
  ABISELECT(136,96),
  ABISELECT(192,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C1[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7631C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7631C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v26Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v27Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v28Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v29Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v30Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v31Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v32Ev,
  (VTBL_ENTRY)&_ZN7S7631C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7631C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7631C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7631C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7631C12v5Ev,
  0,
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI7S7631C1[0]),
  (VTBL_ENTRY)&_ZN7S7631C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7631C32v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI7S7631C1[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S7631C1[0]),
  (VTBL_ENTRY)&_ZN7S7631C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7631C93v38Ev,
};
extern VTBL_ENTRY _ZTV7S7631C1[];
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
extern void _ZN7S7631C2D1Ev();
extern void _ZN7S7631C2D0Ev();
extern void _ZN7S7631C43v26Ev();
extern void _ZN7S7631C43v27Ev();
extern void _ZN7S7631C43v28Ev();
extern void _ZN7S7631C43v29Ev();
extern void _ZN7S7631C43v30Ev();
extern void _ZN7S7631C43v31Ev();
extern void _ZN7S7631C43v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C2__7S7631C1[] = {
  ABISELECT(136,96),
  ABISELECT(192,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C2[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7631C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7631C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v26Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v27Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v28Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v29Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v30Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v31Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v32Ev,
};
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
extern void _ZN7S7631C4D1Ev();
extern void _ZN7S7631C4D0Ev();
extern void _ZN7S7631C43v26Ev();
extern void _ZN7S7631C43v27Ev();
extern void _ZN7S7631C43v28Ev();
extern void _ZN7S7631C43v29Ev();
extern void _ZN7S7631C43v30Ev();
extern void _ZN7S7631C43v31Ev();
extern void _ZN7S7631C43v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C47S7631C2__7S7631C1[] = {
  ABISELECT(192,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C4[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7631C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7631C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v26Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v27Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v28Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v29Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v30Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v31Ev,
  (VTBL_ENTRY)&_ZN7S7631C43v32Ev,
};
extern void _ZN7S7631C53v23Ev();
extern void _ZN7S7631C53v24Ev();
extern void _ZN7S7631C53v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C57S7631C47S7631C2__7S7631C1[] = {
  ABISELECT(192,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7631C5[0]),
  (VTBL_ENTRY)&_ZN7S7631C53v23Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7631C53v25Ev,
};
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C6__7S7631C57S7631C47S7631C2__7S7631C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI7S7631C5[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C6__7S7631C47S7631C2__7S7631C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI7S7631C4[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
extern void _ZN7S7631C32v6Ev();
extern void _ZN7S7631C32v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C3__7S7631C2__7S7631C1[] = {
  0,
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI7S7631C2[0]),
  (VTBL_ENTRY)&_ZN7S7631C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7631C32v7Ev,
};
extern void _ZN7S7631C82v8Ev();
extern void _ZN7S7631C82v9Ev();
extern void _ZN7S7631C83v10Ev();
extern void _ZN7S7631C83v11Ev();
extern void _ZN7S7631C83v12Ev();
extern void _ZN7S7631C73v13Ev();
extern void _ZN7S7631C73v14Ev();
extern void _ZN7S7631C73v15Ev();
extern void _ZN7S7631C73v16Ev();
extern void _ZN7S7631C63v17Ev();
extern void _ZN7S7631C63v18Ev();
extern void _ZN7S7631C63v19Ev();
extern void _ZN7S7631C63v20Ev();
extern void _ZN7S7631C63v21Ev();
extern void _ZN7S7631C63v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7631C6__7S7631C2__7S7631C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI7S7631C2[0]),
  (VTBL_ENTRY)&_ZN7S7631C82v8Ev,
  (VTBL_ENTRY)&_ZN7S7631C82v9Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7631C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7631C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7631C63v22Ev,
};
static  VTT_ENTRY vtt_S7631C1[] = {
  {&(_ZTV7S7631C1[5]),  5,74},
  {&(_tg__ZTV7S7631C2__7S7631C1[4]),  4,16},
  {&(_tg__ZTV7S7631C47S7631C2__7S7631C1[3]),  3,15},
  {&(_tg__ZTV7S7631C57S7631C47S7631C2__7S7631C1[3]),  3,6},
  {&(_tg__ZTV7S7631C6__7S7631C57S7631C47S7631C2__7S7631C1[17]),  17,32},
  {&(_tg__ZTV7S7631C6__7S7631C47S7631C2__7S7631C1[17]),  17,32},
  {&(_tg__ZTV7S7631C3__7S7631C2__7S7631C1[4]),  4,6},
  {&(_tg__ZTV7S7631C6__7S7631C2__7S7631C1[17]),  17,32},
  {&(_ZTV7S7631C1[26]),  26,74},
  {&(_ZTV7S7631C1[45]),  45,74},
  {&(_ZTV7S7631C1[68]),  68,74},
};
extern VTBL_ENTRY _ZTI7S7631C1[];
extern  VTBL_ENTRY _ZTV7S7631C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7631C1[];
Class_Descriptor cd_S7631C1 = {  "S7631C1", // class name
  bases_S7631C1, 8,
  &(vtc_S7631C1[0]), // expected_vtbl_contents
  &(vtt_S7631C1[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI7S7631C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7631C1),74, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7631C1),11, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19414C3  {
  short s19414c3f0[6];
  virtual void  v9(); // _ZN8S19414C32v9Ev
  virtual void  v10(); // _ZN8S19414C33v10Ev
  ~S19414C3(); // tgen
  S19414C3(); // tgen
};
//SIG(-1 S19414C3) C1{ v1 v2 Fs[6]}


void  S19414C3 ::v9(){vfunc_called(this, "_ZN8S19414C32v9Ev");}
void  S19414C3 ::v10(){vfunc_called(this, "_ZN8S19414C33v10Ev");}
S19414C3 ::~S19414C3(){ note_dtor("S19414C3", this);} // tgen
S19414C3 ::S19414C3(){ note_ctor("S19414C3", this);} // tgen

static void Test_S19414C3()
{
  extern Class_Descriptor cd_S19414C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19414C3, buf);
    S19414C3 *dp, &lv = *(dp=new (buf) S19414C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19414C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19414C3)");
    check_field_offset(lv, s19414c3f0, ABISELECT(8,4), "S19414C3.s19414c3f0");
    test_class_info(&lv, &cd_S19414C3);
    dp->~S19414C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19414C3(Test_S19414C3, "S19414C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S19414C3C1Ev();
extern void _ZN8S19414C3D1Ev();
Name_Map name_map_S19414C3[] = {
  NSPAIR(_ZN8S19414C3C1Ev),
  NSPAIR(_ZN8S19414C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19414C3[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
static  VTBL_ENTRY vtc_S19414C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C3[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
};
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
Class_Descriptor cd_S19414C3 = {  "S19414C3", // class name
  0,0,//no base classes
  &(vtc_S19414C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19414C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19414C3),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  S19414C2  : S19414C3 {
  short s19414c2f0[9];
  __tsi64 s19414c2f1;
  virtual void  v11(); // _ZN8S19414C23v11Ev
  virtual void  v12(); // _ZN8S19414C23v12Ev
  virtual void  v13(); // _ZN8S19414C23v13Ev
  virtual void  v14(); // _ZN8S19414C23v14Ev
  virtual void  v15(); // _ZN8S19414C23v15Ev
  virtual void  v16(); // _ZN8S19414C23v16Ev
  ~S19414C2(); // tgen
  S19414C2(); // tgen
};
//SIG(-1 S19414C2) C1{ BC2{ v7 v8 Fs[6]} v1 v2 v3 v4 v5 v6 Fs[9] FL}


void  S19414C2 ::v11(){vfunc_called(this, "_ZN8S19414C23v11Ev");}
void  S19414C2 ::v12(){vfunc_called(this, "_ZN8S19414C23v12Ev");}
void  S19414C2 ::v13(){vfunc_called(this, "_ZN8S19414C23v13Ev");}
void  S19414C2 ::v14(){vfunc_called(this, "_ZN8S19414C23v14Ev");}
void  S19414C2 ::v15(){vfunc_called(this, "_ZN8S19414C23v15Ev");}
void  S19414C2 ::v16(){vfunc_called(this, "_ZN8S19414C23v16Ev");}
S19414C2 ::~S19414C2(){ note_dtor("S19414C2", this);} // tgen
S19414C2 ::S19414C2(){ note_ctor("S19414C2", this);} // tgen

static void Test_S19414C2()
{
  extern Class_Descriptor cd_S19414C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S19414C2, buf);
    S19414C2 *dp, &lv = *(dp=new (buf) S19414C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S19414C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19414C2)");
    check_base_class_offset(lv, (S19414C3*), 0, "S19414C2");
    check_field_offset(lv, s19414c2f0, ABISELECT(20,16), "S19414C2.s19414c2f0");
    check_field_offset(lv, s19414c2f1, ABISELECT(40,36), "S19414C2.s19414c2f1");
    test_class_info(&lv, &cd_S19414C2);
    dp->~S19414C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19414C2(Test_S19414C2, "S19414C2", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN8S19414C2C1Ev();
extern void _ZN8S19414C2D1Ev();
Name_Map name_map_S19414C2[] = {
  NSPAIR(_ZN8S19414C2C1Ev),
  NSPAIR(_ZN8S19414C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
static Base_Class bases_S19414C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19414C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19414C2[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
static  VTBL_ENTRY vtc_S19414C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C2[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
};
extern VTBL_ENTRY _ZTI8S19414C2[];
extern  VTBL_ENTRY _ZTV8S19414C2[];
Class_Descriptor cd_S19414C2 = {  "S19414C2", // class name
  bases_S19414C2, 1,
  &(vtc_S19414C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI8S19414C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19414C2),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  S19414C6  : S19414C3 {
  void *s19414c6f0;
  virtual void  v17(); // _ZN8S19414C63v17Ev
  virtual void  v18(); // _ZN8S19414C63v18Ev
  ~S19414C6(); // tgen
  S19414C6(); // tgen
};
//SIG(-1 S19414C6) C1{ BC2{ v3 v4 Fs[6]} v1 v2 Fp}


void  S19414C6 ::v17(){vfunc_called(this, "_ZN8S19414C63v17Ev");}
void  S19414C6 ::v18(){vfunc_called(this, "_ZN8S19414C63v18Ev");}
S19414C6 ::~S19414C6(){ note_dtor("S19414C6", this);} // tgen
S19414C6 ::S19414C6(){ note_ctor("S19414C6", this);} // tgen

static void Test_S19414C6()
{
  extern Class_Descriptor cd_S19414C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19414C6, buf);
    S19414C6 *dp, &lv = *(dp=new (buf) S19414C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19414C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19414C6)");
    check_base_class_offset(lv, (S19414C3*), 0, "S19414C6");
    check_field_offset(lv, s19414c6f0, ABISELECT(24,16), "S19414C6.s19414c6f0");
    test_class_info(&lv, &cd_S19414C6);
    dp->~S19414C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19414C6(Test_S19414C6, "S19414C6", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19414C6C1Ev();
extern void _ZN8S19414C6D1Ev();
Name_Map name_map_S19414C6[] = {
  NSPAIR(_ZN8S19414C6C1Ev),
  NSPAIR(_ZN8S19414C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
static Base_Class bases_S19414C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19414C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19414C6[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
static  VTBL_ENTRY vtc_S19414C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C6[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
};
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
Class_Descriptor cd_S19414C6 = {  "S19414C6", // class name
  bases_S19414C6, 1,
  &(vtc_S19414C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19414C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19414C6),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  S19414C5  : S19414C6 , virtual S19414C2 , virtual S19414C3 {
  virtual void  v19(); // _ZN8S19414C53v19Ev
  virtual void  v20(); // _ZN8S19414C53v20Ev
  virtual void  v21(); // _ZN8S19414C53v21Ev
  virtual void  v22(); // _ZN8S19414C53v22Ev
  virtual void  v23(); // _ZN8S19414C53v23Ev
  ~S19414C5(); // tgen
  S19414C5(); // tgen
};
//SIG(-1 S19414C5) C1{ BC2{ BC3{ v6 v7 Fs[6]} v8 v9 Fp} VBC4{ BC3 v10 v11 v12 v13 v14 v15 Fs[9] FL} VBC3 v1 v2 v3 v4 v5}


void  S19414C5 ::v19(){vfunc_called(this, "_ZN8S19414C53v19Ev");}
void  S19414C5 ::v20(){vfunc_called(this, "_ZN8S19414C53v20Ev");}
void  S19414C5 ::v21(){vfunc_called(this, "_ZN8S19414C53v21Ev");}
void  S19414C5 ::v22(){vfunc_called(this, "_ZN8S19414C53v22Ev");}
void  S19414C5 ::v23(){vfunc_called(this, "_ZN8S19414C53v23Ev");}
S19414C5 ::~S19414C5(){ note_dtor("S19414C5", this);} // tgen
S19414C5 ::S19414C5(){ note_ctor("S19414C5", this);} // tgen

static void Test_S19414C5()
{
  extern Class_Descriptor cd_S19414C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,21)];
    init_test(&cd_S19414C5, buf);
    S19414C5 *dp, &lv = *(dp=new (buf) S19414C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S19414C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19414C5)");
    check_base_class_offset(lv, (S19414C3*)(S19414C6*), 0, "S19414C5");
    check_base_class_offset(lv, (S19414C6*), 0, "S19414C5");
    check_base_class_offset(lv, (S19414C3*)(S19414C2*), ABISELECT(32,20), "S19414C5");
    check_base_class_offset(lv, (S19414C2*), ABISELECT(32,20), "S19414C5");
    /*is_ambiguous_... S19414C5::S19414C3 */ AMB_check_base_class_offset(lv, (S19414C3*), ABISELECT(80,64), "S19414C5");
    test_class_info(&lv, &cd_S19414C5);
    dp->~S19414C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19414C5(Test_S19414C5, "S19414C5", ABISELECT(104,80));

#else // __cplusplus

extern void _ZN8S19414C5C1Ev();
extern void _ZN8S19414C5D1Ev();
Name_Map name_map_S19414C5[] = {
  NSPAIR(_ZN8S19414C5C1Ev),
  NSPAIR(_ZN8S19414C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C6;
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C2;
extern VTBL_ENTRY _ZTI8S19414C2[];
extern  VTBL_ENTRY _ZTV8S19414C2[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
static Base_Class bases_S19414C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19414C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19414C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19414C3,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19414C2,    ABISELECT(32,20), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19414C3,    ABISELECT(80,64), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19414C5[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
static  VTBL_ENTRY vtc_S19414C5[] = {
  ABISELECT(80,64),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  0,
  0,
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
};
extern VTBL_ENTRY _ZTV8S19414C5[];
static  VTT_ENTRY vtt_S19414C5[] = {
  {&(_ZTV8S19414C5[4]),  4,37},
  {&(_ZTV8S19414C5[23]),  23,37},
  {&(_ZTV8S19414C5[35]),  35,37},
};
extern VTBL_ENTRY _ZTI8S19414C5[];
extern  VTBL_ENTRY _ZTV8S19414C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C5[];
Class_Descriptor cd_S19414C5 = {  "S19414C5", // class name
  bases_S19414C5, 5,
  &(vtc_S19414C5[0]), // expected_vtbl_contents
  &(vtt_S19414C5[0]), // expected_vtt_contents
  ABISELECT(104,80), // object size
  NSPAIRA(_ZTI8S19414C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19414C5),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19414C5),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19414C7  : S19414C2 , virtual S19414C3 , virtual S19414C5 , virtual S19414C6 {
  int s19414c7f0;
  virtual  ~S19414C7(); // _ZN8S19414C7D2Ev
  virtual void  v24(); // _ZN8S19414C73v24Ev
  S19414C7(); // tgen
};
//SIG(-1 S19414C7) C1{ BC2{ BC3{ v2 v3 Fs[6]} v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC3 VBC4{ BC5{ BC3 v10 v11 Fp} VBC2 VBC3 v12 v13 v14 v15 v16} VBC5 vd v1 Fi}


 S19414C7 ::~S19414C7(){ note_dtor("S19414C7", this);}
void  S19414C7 ::v24(){vfunc_called(this, "_ZN8S19414C73v24Ev");}
S19414C7 ::S19414C7(){ note_ctor("S19414C7", this);} // tgen

static void Test_S19414C7()
{
  extern Class_Descriptor cd_S19414C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,38)];
    init_test(&cd_S19414C7, buf);
    S19414C7 *dp, &lv = *(dp=new (buf) S19414C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,148), "sizeof(S19414C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19414C7)");
    /*is_ambiguous_... S19414C7::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C2*), 0, "S19414C7");
    /*is_ambiguous_... S19414C7::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C2*), 0, "S19414C7");
    /*is_ambiguous_... S19414C7::S19414C3 */ AMB_check_base_class_offset(lv, (S19414C3*), ABISELECT(56,48), "S19414C7");
    /*is_ambiguous_... S19414C5::S19414C3 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C5*), ABISELECT(56,48), "S19414C7");
    check_base_class_offset(lv, (S19414C3*)(S19414C6*)(S19414C5*), ABISELECT(80,64), "S19414C7");
    check_base_class_offset(lv, (S19414C6*)(S19414C5*), ABISELECT(80,64), "S19414C7");
    /*is_ambiguous_... S19414C7::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C2*), ABISELECT(112,84), "S19414C7");
    check_base_class_offset(lv, (S19414C2*)(S19414C5*), ABISELECT(112,84), "S19414C7");
    check_base_class_offset(lv, (S19414C5*), ABISELECT(80,64), "S19414C7");
    /*is_ambiguous_... S19414C7::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C6*), ABISELECT(160,128), "S19414C7");
    /*is_ambiguous_... S19414C7::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C6*), ABISELECT(160,128), "S19414C7");
    check_field_offset(lv, s19414c7f0, ABISELECT(48,44), "S19414C7.s19414c7f0");
    test_class_info(&lv, &cd_S19414C7);
    dp->~S19414C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19414C7(Test_S19414C7, "S19414C7", ABISELECT(192,148));

#else // __cplusplus

extern void _ZN8S19414C7C1Ev();
extern void _ZN8S19414C7D2Ev();
Name_Map name_map_S19414C7[] = {
  NSPAIR(_ZN8S19414C7C1Ev),
  NSPAIR(_ZN8S19414C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C2;
extern VTBL_ENTRY _ZTI8S19414C2[];
extern  VTBL_ENTRY _ZTV8S19414C2[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C6;
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C2;
extern VTBL_ENTRY _ZTI8S19414C2[];
extern  VTBL_ENTRY _ZTV8S19414C2[];
extern Class_Descriptor cd_S19414C5;
extern VTBL_ENTRY _ZTI8S19414C5[];
extern  VTBL_ENTRY _ZTV8S19414C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C5[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C6;
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
static Base_Class bases_S19414C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19414C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19414C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19414C3,    ABISELECT(56,48), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19414C3,    ABISELECT(80,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19414C6,    ABISELECT(80,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19414C3,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19414C2,    ABISELECT(112,84), //bcp->offset
    45, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19414C5,    ABISELECT(80,64), //bcp->offset
    23, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19414C3,    ABISELECT(160,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19414C6,    ABISELECT(160,128), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19414C7[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void _ZN8S19414C7D1Ev();
extern void _ZN8S19414C7D0Ev();
extern void _ZN8S19414C73v24Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
static  VTBL_ENTRY vtc_S19414C7[] = {
  ABISELECT(160,128),
  ABISELECT(112,84),
  ABISELECT(80,64),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19414C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19414C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19414C73v24Ev,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,20),
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-128),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
};
extern VTBL_ENTRY _ZTV8S19414C7[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C5__8S19414C7[] = {
  ABISELECT(-24,-16),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C2__8S19414C5__8S19414C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C3__A2__8S19414C5__8S19414C7[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
};
static  VTT_ENTRY vtt_S19414C7[] = {
  {&(_ZTV8S19414C7[6]),  6,73},
  {&(_ZTV8S19414C7[21]),  21,73},
  {&(_ZTV8S19414C7[36]),  36,73},
  {&(_ZTV8S19414C7[55]),  55,73},
  {&(_ZTV8S19414C7[69]),  69,73},
  {&(_tg__ZTV8S19414C5__8S19414C7[4]),  4,13},
  {&(_tg__ZTV8S19414C2__8S19414C5__8S19414C7[10]),  10,18},
  {&(_tg__ZTV8S19414C3__A2__8S19414C5__8S19414C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19414C7[];
extern  VTBL_ENTRY _ZTV8S19414C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C7[];
Class_Descriptor cd_S19414C7 = {  "S19414C7", // class name
  bases_S19414C7, 10,
  &(vtc_S19414C7[0]), // expected_vtbl_contents
  &(vtt_S19414C7[0]), // expected_vtt_contents
  ABISELECT(192,148), // object size
  NSPAIRA(_ZTI8S19414C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19414C7),73, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19414C7),8, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19414C4  : S19414C3 , virtual S19414C2 , virtual S19414C5 , virtual S19414C7 , S19414C6 {
  virtual  ~S19414C4(); // _ZN8S19414C4D2Ev
  virtual void  v25(); // _ZN8S19414C43v25Ev
  S19414C4(); // tgen
};
//SIG(-1 S19414C4) C1{ BC2{ v2 v3 Fs[6]} VBC3{ BC2 v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC4{ BC5{ BC2 v10 v11 Fp} VBC3 VBC2 v12 v13 v14 v15 v16} VBC6{ BC3 VBC2 VBC4 VBC5 vd v17 Fi} BC5 vd v1}


 S19414C4 ::~S19414C4(){ note_dtor("S19414C4", this);}
void  S19414C4 ::v25(){vfunc_called(this, "_ZN8S19414C43v25Ev");}
S19414C4 ::S19414C4(){ note_ctor("S19414C4", this);} // tgen

static void Test_S19414C4()
{
  extern Class_Descriptor cd_S19414C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,47)];
    init_test(&cd_S19414C4, buf);
    S19414C4 *dp, &lv = *(dp=new (buf) S19414C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,184), "sizeof(S19414C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19414C4)");
    /*is_ambiguous_... S19414C4::S19414C3 */ AMB_check_base_class_offset(lv, (S19414C3*), 0, "S19414C4");
    /*is_ambiguous_... S19414C4::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C2*), ABISELECT(56,36), "S19414C4");
    /*is_ambiguous_... S19414C4::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C2*), ABISELECT(56,36), "S19414C4");
    check_base_class_offset(lv, (S19414C2*)(S19414C5*), ABISELECT(56,36), "S19414C4");
    check_base_class_offset(lv, (S19414C3*)(S19414C6*)(S19414C5*), ABISELECT(104,80), "S19414C4");
    check_base_class_offset(lv, (S19414C6*)(S19414C5*), ABISELECT(104,80), "S19414C4");
    /*is_ambiguous_... S19414C5::S19414C3 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C5*), ABISELECT(136,100), "S19414C4");
    /*is_ambiguous_... S19414C7::S19414C3 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C7*), ABISELECT(136,100), "S19414C4");
    check_base_class_offset(lv, (S19414C5*), ABISELECT(104,80), "S19414C4");
    check_base_class_offset(lv, (S19414C5*)(S19414C7*), ABISELECT(104,80), "S19414C4");
    /*is_ambiguous_... S19414C7::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C2*)(S19414C7*), ABISELECT(160,116), "S19414C4");
    /*is_ambiguous_... S19414C7::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C2*)(S19414C7*), ABISELECT(160,116), "S19414C4");
    /*is_ambiguous_... S19414C4::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C6*), ABISELECT(216,164), "S19414C4");
    /*is_ambiguous_... S19414C7::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C6*)(S19414C7*), ABISELECT(216,164), "S19414C4");
    check_base_class_offset(lv, (S19414C7*), ABISELECT(160,116), "S19414C4");
    /*is_ambiguous_... S19414C4::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C6*), ABISELECT(24,16), "S19414C4");
    /*is_ambiguous_... S19414C4::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C6*), ABISELECT(24,16), "S19414C4");
    test_class_info(&lv, &cd_S19414C4);
    dp->~S19414C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19414C4(Test_S19414C4, "S19414C4", ABISELECT(248,184));

#else // __cplusplus

extern void _ZN8S19414C4C1Ev();
extern void _ZN8S19414C4D2Ev();
Name_Map name_map_S19414C4[] = {
  NSPAIR(_ZN8S19414C4C1Ev),
  NSPAIR(_ZN8S19414C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C2;
extern VTBL_ENTRY _ZTI8S19414C2[];
extern  VTBL_ENTRY _ZTV8S19414C2[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C6;
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C5;
extern VTBL_ENTRY _ZTI8S19414C5[];
extern  VTBL_ENTRY _ZTV8S19414C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C5[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C2;
extern VTBL_ENTRY _ZTI8S19414C2[];
extern  VTBL_ENTRY _ZTV8S19414C2[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C6;
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
extern Class_Descriptor cd_S19414C7;
extern VTBL_ENTRY _ZTI8S19414C7[];
extern  VTBL_ENTRY _ZTV8S19414C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C7[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C6;
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
static Base_Class bases_S19414C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19414C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19414C3,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19414C2,    ABISELECT(56,36), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19414C3,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19414C6,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19414C3,    ABISELECT(136,100), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19414C5,    ABISELECT(104,80), //bcp->offset
    36, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19414C3,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19414C2,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19414C3,    ABISELECT(216,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19414C6,    ABISELECT(216,164), //bcp->offset
    91, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19414C7,    ABISELECT(160,116), //bcp->offset
    64, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19414C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19414C6,    ABISELECT(24,16), //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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19414C4[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C4D1Ev();
extern void _ZN8S19414C4D0Ev();
extern void _ZN8S19414C43v25Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void ABISELECT(_ZTv0_n120_N8S19414C4D1Ev,_ZTv0_n60_N8S19414C4D1Ev)();
extern void ABISELECT(_ZThn160_N8S19414C4D1Ev,_ZThn116_N8S19414C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19414C4D0Ev,_ZTv0_n60_N8S19414C4D0Ev)();
extern void ABISELECT(_ZThn160_N8S19414C4D0Ev,_ZThn116_N8S19414C4D0Ev)() __attribute__((weak));
extern void _ZN8S19414C73v24Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
static  VTBL_ENTRY vtc_S19414C4[] = {
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(136,100),
  ABISELECT(104,80),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19414C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19414C43v25Ev,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
  0,
  0,
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19414C4D1Ev,_ZTv0_n60_N8S19414C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19414C4D0Ev,_ZTv0_n60_N8S19414C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19414C73v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
};
extern VTBL_ENTRY _ZTV8S19414C4[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C5__8S19414C4[] = {
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C2__8S19414C5__8S19414C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C3__A2__8S19414C5__8S19414C4[] = {
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void _ZN8S19414C7D1Ev();
extern void _ZN8S19414C7D0Ev();
extern void _ZN8S19414C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C7__8S19414C4[] = {
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19414C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19414C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19414C73v24Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C3__A1__8S19414C7__8S19414C4[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C5__8S19414C7__8S19414C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C2__A1__8S19414C7__8S19414C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,80),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C6__A1__8S19414C7__8S19414C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
};
static  VTT_ENTRY vtt_S19414C4[] = {
  {&(_ZTV8S19414C4[7]),  7,101},
  {&(_ZTV8S19414C4[28]),  28,101},
  {&(_ZTV8S19414C4[49]),  49,101},
  {&(_ZTV8S19414C4[62]),  62,101},
  {&(_ZTV8S19414C4[80]),  80,101},
  {&(_ZTV8S19414C4[97]),  97,101},
  {&(_tg__ZTV8S19414C5__8S19414C4[4]),  4,13},
  {&(_tg__ZTV8S19414C2__8S19414C5__8S19414C4[10]),  10,18},
  {&(_tg__ZTV8S19414C3__A2__8S19414C5__8S19414C4[4]),  4,6},
  {&(_tg__ZTV8S19414C7__8S19414C4[6]),  6,17},
  {&(_tg__ZTV8S19414C3__A1__8S19414C7__8S19414C4[4]),  4,6},
  {&(_tg__ZTV8S19414C5__8S19414C7__8S19414C4[13]),  13,22},
  {&(_tg__ZTV8S19414C2__A1__8S19414C7__8S19414C4[10]),  10,18},
  {&(_tg__ZTV8S19414C6__A1__8S19414C7__8S19414C4[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19414C4[];
extern  VTBL_ENTRY _ZTV8S19414C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C4[];
static VTBL_ENTRY alt_thunk_names137[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19414C4D0Ev,_ZTv0_n60_N8S19414C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19414C4D0Ev,_ZThn116_N8S19414C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19414C4D1Ev,_ZTv0_n60_N8S19414C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19414C4D1Ev,_ZThn116_N8S19414C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19414C4 = {  "S19414C4", // class name
  bases_S19414C4, 14,
  &(vtc_S19414C4[0]), // expected_vtbl_contents
  &(vtt_S19414C4[0]), // expected_vtt_contents
  ABISELECT(248,184), // object size
  NSPAIRA(_ZTI8S19414C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19414C4),101, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19414C4),14, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names137,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19414C8  {
  void *s19414c8f0;
  virtual void  v26(); // _ZN8S19414C83v26Ev
  virtual void  v27(); // _ZN8S19414C83v27Ev
  virtual void  v28(); // _ZN8S19414C83v28Ev
  virtual void  v29(); // _ZN8S19414C83v29Ev
  ~S19414C8(); // tgen
  S19414C8(); // tgen
};
//SIG(-1 S19414C8) C1{ v1 v2 v3 v4 Fp}


void  S19414C8 ::v26(){vfunc_called(this, "_ZN8S19414C83v26Ev");}
void  S19414C8 ::v27(){vfunc_called(this, "_ZN8S19414C83v27Ev");}
void  S19414C8 ::v28(){vfunc_called(this, "_ZN8S19414C83v28Ev");}
void  S19414C8 ::v29(){vfunc_called(this, "_ZN8S19414C83v29Ev");}
S19414C8 ::~S19414C8(){ note_dtor("S19414C8", this);} // tgen
S19414C8 ::S19414C8(){ note_ctor("S19414C8", this);} // tgen

static void Test_S19414C8()
{
  extern Class_Descriptor cd_S19414C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19414C8, buf);
    S19414C8 *dp, &lv = *(dp=new (buf) S19414C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19414C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19414C8)");
    check_field_offset(lv, s19414c8f0, ABISELECT(8,4), "S19414C8.s19414c8f0");
    test_class_info(&lv, &cd_S19414C8);
    dp->~S19414C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19414C8(Test_S19414C8, "S19414C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19414C8C1Ev();
extern void _ZN8S19414C8D1Ev();
Name_Map name_map_S19414C8[] = {
  NSPAIR(_ZN8S19414C8C1Ev),
  NSPAIR(_ZN8S19414C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19414C8[];
extern void _ZN8S19414C83v26Ev();
extern void _ZN8S19414C83v27Ev();
extern void _ZN8S19414C83v28Ev();
extern void _ZN8S19414C83v29Ev();
static  VTBL_ENTRY vtc_S19414C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C8[0]),
  (VTBL_ENTRY)&_ZN8S19414C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19414C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19414C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19414C83v29Ev,
};
extern VTBL_ENTRY _ZTI8S19414C8[];
extern  VTBL_ENTRY _ZTV8S19414C8[];
Class_Descriptor cd_S19414C8 = {  "S19414C8", // class name
  0,0,//no base classes
  &(vtc_S19414C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19414C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19414C8),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  S19414C1  : virtual S19414C2 , S19414C4 , virtual S19414C8 {
  virtual  ~S19414C1(); // _ZN8S19414C1D2Ev
  virtual void  v1(); // _ZN8S19414C12v1Ev
  virtual void  v2(); // _ZN8S19414C12v2Ev
  virtual void  v3(); // _ZN8S19414C12v3Ev
  virtual void  v4(); // _ZN8S19414C12v4Ev
  virtual void  v5(); // _ZN8S19414C12v5Ev
  virtual void  v6(); // _ZN8S19414C12v6Ev
  virtual void  v7(); // _ZN8S19414C12v7Ev
  virtual void  v8(); // _ZN8S19414C12v8Ev
  S19414C1(); // tgen
};
//SIG(1 S19414C1) C1{ VBC2{ BC3{ v9 v10 Fs[6]} v11 v12 v13 v14 v15 v16 Fs[9] FL} BC4{ BC3 VBC2 VBC5{ BC6{ BC3 v17 v18 Fp} VBC2 VBC3 v19 v20 v21 v22 v23} VBC7{ BC2 VBC3 VBC5 VBC6 vd v24 Fi} BC6 vd v25} VBC8{ v26 v27 v28 v29 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S19414C1 ::~S19414C1(){ note_dtor("S19414C1", this);}
void  S19414C1 ::v1(){vfunc_called(this, "_ZN8S19414C12v1Ev");}
void  S19414C1 ::v2(){vfunc_called(this, "_ZN8S19414C12v2Ev");}
void  S19414C1 ::v3(){vfunc_called(this, "_ZN8S19414C12v3Ev");}
void  S19414C1 ::v4(){vfunc_called(this, "_ZN8S19414C12v4Ev");}
void  S19414C1 ::v5(){vfunc_called(this, "_ZN8S19414C12v5Ev");}
void  S19414C1 ::v6(){vfunc_called(this, "_ZN8S19414C12v6Ev");}
void  S19414C1 ::v7(){vfunc_called(this, "_ZN8S19414C12v7Ev");}
void  S19414C1 ::v8(){vfunc_called(this, "_ZN8S19414C12v8Ev");}
S19414C1 ::S19414C1(){ note_ctor("S19414C1", this);} // tgen

static void Test_S19414C1()
{
  extern Class_Descriptor cd_S19414C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,49)];
    init_test(&cd_S19414C1, buf);
    S19414C1 *dp, &lv = *(dp=new (buf) S19414C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,192), "sizeof(S19414C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19414C1)");
    /*is_ambiguous_... S19414C1::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C2*), ABISELECT(56,36), "S19414C1");
    /*is_ambiguous_... S19414C1::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C2*), ABISELECT(56,36), "S19414C1");
    /*is_ambiguous_... S19414C4::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C2*)(S19414C4*), ABISELECT(56,36), "S19414C1");
    check_base_class_offset(lv, (S19414C2*)(S19414C5*), ABISELECT(56,36), "S19414C1");
    /*is_ambiguous_... S19414C4::S19414C3 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C4*), 0, "S19414C1");
    check_base_class_offset(lv, (S19414C3*)(S19414C6*)(S19414C5*), ABISELECT(104,80), "S19414C1");
    check_base_class_offset(lv, (S19414C6*)(S19414C5*), ABISELECT(104,80), "S19414C1");
    /*is_ambiguous_... S19414C5::S19414C3 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C5*), ABISELECT(136,100), "S19414C1");
    /*is_ambiguous_... S19414C7::S19414C3 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C7*), ABISELECT(136,100), "S19414C1");
    check_base_class_offset(lv, (S19414C5*)(S19414C4*), ABISELECT(104,80), "S19414C1");
    check_base_class_offset(lv, (S19414C5*)(S19414C7*), ABISELECT(104,80), "S19414C1");
    /*is_ambiguous_... S19414C7::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C2*)(S19414C7*), ABISELECT(160,116), "S19414C1");
    /*is_ambiguous_... S19414C7::S19414C2 */ AMB_check_base_class_offset(lv, (S19414C2*)(S19414C7*), ABISELECT(160,116), "S19414C1");
    /*is_ambiguous_... S19414C1::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C6*), ABISELECT(216,164), "S19414C1");
    /*is_ambiguous_... S19414C7::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C6*)(S19414C7*), ABISELECT(216,164), "S19414C1");
    check_base_class_offset(lv, (S19414C7*)(S19414C4*), ABISELECT(160,116), "S19414C1");
    /*is_ambiguous_... S19414C4::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C3*)(S19414C6*)(S19414C4*), ABISELECT(24,16), "S19414C1");
    /*is_ambiguous_... S19414C4::S19414C6 */ AMB_check_base_class_offset(lv, (S19414C6*)(S19414C4*), ABISELECT(24,16), "S19414C1");
    check_base_class_offset(lv, (S19414C4*), 0, "S19414C1");
    check_base_class_offset(lv, (S19414C8*), ABISELECT(248,184), "S19414C1");
    test_class_info(&lv, &cd_S19414C1);
    dp->~S19414C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19414C1(Test_S19414C1, "S19414C1", ABISELECT(264,192));

#else // __cplusplus

extern void _ZN8S19414C1C1Ev();
extern void _ZN8S19414C1D2Ev();
Name_Map name_map_S19414C1[] = {
  NSPAIR(_ZN8S19414C1C1Ev),
  NSPAIR(_ZN8S19414C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C2;
extern VTBL_ENTRY _ZTI8S19414C2[];
extern  VTBL_ENTRY _ZTV8S19414C2[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C6;
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C5;
extern VTBL_ENTRY _ZTI8S19414C5[];
extern  VTBL_ENTRY _ZTV8S19414C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C5[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C2;
extern VTBL_ENTRY _ZTI8S19414C2[];
extern  VTBL_ENTRY _ZTV8S19414C2[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C6;
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
extern Class_Descriptor cd_S19414C7;
extern VTBL_ENTRY _ZTI8S19414C7[];
extern  VTBL_ENTRY _ZTV8S19414C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C7[];
extern Class_Descriptor cd_S19414C3;
extern VTBL_ENTRY _ZTI8S19414C3[];
extern  VTBL_ENTRY _ZTV8S19414C3[];
extern Class_Descriptor cd_S19414C6;
extern VTBL_ENTRY _ZTI8S19414C6[];
extern  VTBL_ENTRY _ZTV8S19414C6[];
extern Class_Descriptor cd_S19414C4;
extern VTBL_ENTRY _ZTI8S19414C4[];
extern  VTBL_ENTRY _ZTV8S19414C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C4[];
extern Class_Descriptor cd_S19414C8;
extern VTBL_ENTRY _ZTI8S19414C8[];
extern  VTBL_ENTRY _ZTV8S19414C8[];
static Base_Class bases_S19414C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19414C3,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19414C2,    ABISELECT(56,36), //bcp->offset
    27, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19414C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19414C3,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19414C6,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19414C3,    ABISELECT(136,100), //bcp->offset
    67, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19414C5,    ABISELECT(104,80), //bcp->offset
    45, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19414C3,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19414C2,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19414C3,    ABISELECT(216,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19414C6,    ABISELECT(216,164), //bcp->offset
    100, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19414C7,    ABISELECT(160,116), //bcp->offset
    73, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19414C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19414C6,    ABISELECT(24,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19414C4,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19414C8,    ABISELECT(248,184), //bcp->offset
    110, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19414C1[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C1D1Ev();
extern void _ZN8S19414C1D0Ev();
extern void _ZN8S19414C43v25Ev();
extern void _ZN8S19414C12v1Ev();
extern void _ZN8S19414C12v2Ev();
extern void _ZN8S19414C12v3Ev();
extern void _ZN8S19414C12v4Ev();
extern void _ZN8S19414C12v5Ev();
extern void _ZN8S19414C12v6Ev();
extern void _ZN8S19414C12v7Ev();
extern void _ZN8S19414C12v8Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void ABISELECT(_ZTv0_n120_N8S19414C1D1Ev,_ZTv0_n60_N8S19414C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S19414C1D1Ev,_ZThn116_N8S19414C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19414C1D0Ev,_ZTv0_n60_N8S19414C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S19414C1D0Ev,_ZThn116_N8S19414C1D0Ev)() __attribute__((weak));
extern void _ZN8S19414C73v24Ev();
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C83v26Ev();
extern void _ZN8S19414C83v27Ev();
extern void _ZN8S19414C83v28Ev();
extern void _ZN8S19414C83v29Ev();
static  VTBL_ENTRY vtc_S19414C1[] = {
  ABISELECT(248,184),
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(136,100),
  ABISELECT(104,80),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C1[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19414C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19414C43v25Ev,
  (VTBL_ENTRY)&_ZN8S19414C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19414C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19414C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19414C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19414C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19414C12v6Ev,
  (VTBL_ENTRY)&_ZN8S19414C12v7Ev,
  (VTBL_ENTRY)&_ZN8S19414C12v8Ev,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19414C1[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19414C1[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI8S19414C1[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
  0,
  0,
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S19414C1[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI8S19414C1[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19414C1D1Ev,_ZTv0_n60_N8S19414C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19414C1D0Ev,_ZTv0_n60_N8S19414C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19414C73v24Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI8S19414C1[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-248,-184),
  (VTBL_ENTRY)&(_ZTI8S19414C1[0]),
  (VTBL_ENTRY)&_ZN8S19414C83v26Ev,
  (VTBL_ENTRY)&_ZN8S19414C83v27Ev,
  (VTBL_ENTRY)&_ZN8S19414C83v28Ev,
  (VTBL_ENTRY)&_ZN8S19414C83v29Ev,
};
extern VTBL_ENTRY _ZTV8S19414C1[];
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C4D1Ev();
extern void _ZN8S19414C4D0Ev();
extern void _ZN8S19414C43v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C4__8S19414C1[] = {
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(136,100),
  ABISELECT(104,80),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19414C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19414C43v25Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C2__8S19414C4__8S19414C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C5__8S19414C4__8S19414C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C3__A3__8S19414C4__8S19414C1[] = {
  0,
  0,
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void ABISELECT(_ZTv0_n120_N8S19414C4D1Ev,_ZTv0_n60_N8S19414C4D1Ev)();
extern void ABISELECT(_ZThn160_N8S19414C4D1Ev,_ZThn116_N8S19414C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19414C4D0Ev,_ZTv0_n60_N8S19414C4D0Ev)();
extern void ABISELECT(_ZThn160_N8S19414C4D0Ev,_ZThn116_N8S19414C4D0Ev)() __attribute__((weak));
extern void _ZN8S19414C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C7__8S19414C4__8S19414C1[] = {
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19414C4D1Ev,_ZTv0_n60_N8S19414C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19414C4D0Ev,_ZTv0_n60_N8S19414C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19414C73v24Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C6__A1__8S19414C4__8S19414C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI8S19414C4[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C5__8S19414C1[] = {
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C2__8S19414C5__8S19414C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C3__A2__8S19414C5__8S19414C1[] = {
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19414C5[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
extern void _ZN8S19414C7D1Ev();
extern void _ZN8S19414C7D0Ev();
extern void _ZN8S19414C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C7__8S19414C1[] = {
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19414C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19414C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19414C73v24Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C3__A1__8S19414C7__8S19414C1[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
extern void _ZN8S19414C53v19Ev();
extern void _ZN8S19414C53v20Ev();
extern void _ZN8S19414C53v21Ev();
extern void _ZN8S19414C53v22Ev();
extern void _ZN8S19414C53v23Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C5__8S19414C7__8S19414C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v19Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v20Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v21Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19414C53v23Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C23v11Ev();
extern void _ZN8S19414C23v12Ev();
extern void _ZN8S19414C23v13Ev();
extern void _ZN8S19414C23v14Ev();
extern void _ZN8S19414C23v15Ev();
extern void _ZN8S19414C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C2__A1__8S19414C7__8S19414C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,80),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v14Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19414C23v16Ev,
};
extern void _ZN8S19414C32v9Ev();
extern void _ZN8S19414C33v10Ev();
extern void _ZN8S19414C63v17Ev();
extern void _ZN8S19414C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19414C6__A1__8S19414C7__8S19414C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S19414C7[0]),
  (VTBL_ENTRY)&_ZN8S19414C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19414C33v10Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19414C63v18Ev,
};
static  VTT_ENTRY vtt_S19414C1[] = {
  {&(_ZTV8S19414C1[8]),  8,120},
  {&(_tg__ZTV8S19414C4__8S19414C1[7]),  7,12},
  {&(_tg__ZTV8S19414C2__8S19414C4__8S19414C1[10]),  10,18},
  {&(_tg__ZTV8S19414C5__8S19414C4__8S19414C1[13]),  13,22},
  {&(_tg__ZTV8S19414C3__A3__8S19414C4__8S19414C1[4]),  4,6},
  {&(_tg__ZTV8S19414C7__8S19414C4__8S19414C1[16]),  16,27},
  {&(_tg__ZTV8S19414C6__A1__8S19414C4__8S19414C1[6]),  6,10},
  {&(_ZTV8S19414C1[37]),  37,120},
  {&(_ZTV8S19414C1[58]),  58,120},
  {&(_ZTV8S19414C1[71]),  71,120},
  {&(_ZTV8S19414C1[89]),  89,120},
  {&(_ZTV8S19414C1[106]),  106,120},
  {&(_ZTV8S19414C1[116]),  116,120},
  {&(_tg__ZTV8S19414C5__8S19414C1[4]),  4,13},
  {&(_tg__ZTV8S19414C2__8S19414C5__8S19414C1[10]),  10,18},
  {&(_tg__ZTV8S19414C3__A2__8S19414C5__8S19414C1[4]),  4,6},
  {&(_tg__ZTV8S19414C7__8S19414C1[6]),  6,17},
  {&(_tg__ZTV8S19414C3__A1__8S19414C7__8S19414C1[4]),  4,6},
  {&(_tg__ZTV8S19414C5__8S19414C7__8S19414C1[13]),  13,22},
  {&(_tg__ZTV8S19414C2__A1__8S19414C7__8S19414C1[10]),  10,18},
  {&(_tg__ZTV8S19414C6__A1__8S19414C7__8S19414C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19414C1[];
extern  VTBL_ENTRY _ZTV8S19414C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19414C1[];
static VTBL_ENTRY alt_thunk_names138[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19414C4D0Ev,_ZTv0_n60_N8S19414C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19414C4D0Ev,_ZThn116_N8S19414C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19414C4D1Ev,_ZTv0_n60_N8S19414C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19414C4D1Ev,_ZThn116_N8S19414C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19414C1D0Ev,_ZTv0_n60_N8S19414C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19414C1D0Ev,_ZThn116_N8S19414C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19414C1D1Ev,_ZTv0_n60_N8S19414C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19414C1D1Ev,_ZThn116_N8S19414C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19414C1 = {  "S19414C1", // class name
  bases_S19414C1, 16,
  &(vtc_S19414C1[0]), // expected_vtbl_contents
  &(vtt_S19414C1[0]), // expected_vtt_contents
  ABISELECT(264,192), // object size
  NSPAIRA(_ZTI8S19414C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19414C1),120, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19414C1),21, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names138,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1446C4  {
  short s1446c4f0[6];
  virtual void  v5(); // _ZN7S1446C42v5Ev
  virtual void  v6(); // _ZN7S1446C42v6Ev
  ~S1446C4(); // tgen
  S1446C4(); // tgen
};
//SIG(-1 S1446C4) C1{ v1 v2 Fs[6]}


void  S1446C4 ::v5(){vfunc_called(this, "_ZN7S1446C42v5Ev");}
void  S1446C4 ::v6(){vfunc_called(this, "_ZN7S1446C42v6Ev");}
S1446C4 ::~S1446C4(){ note_dtor("S1446C4", this);} // tgen
S1446C4 ::S1446C4(){ note_ctor("S1446C4", this);} // tgen

static void Test_S1446C4()
{
  extern Class_Descriptor cd_S1446C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1446C4, buf);
    S1446C4 *dp, &lv = *(dp=new (buf) S1446C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1446C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1446C4)");
    check_field_offset(lv, s1446c4f0, ABISELECT(8,4), "S1446C4.s1446c4f0");
    test_class_info(&lv, &cd_S1446C4);
    dp->~S1446C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1446C4(Test_S1446C4, "S1446C4", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S1446C4C1Ev();
extern void _ZN7S1446C4D1Ev();
Name_Map name_map_S1446C4[] = {
  NSPAIR(_ZN7S1446C4C1Ev),
  NSPAIR(_ZN7S1446C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1446C4[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
static  VTBL_ENTRY vtc_S1446C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C4[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
Class_Descriptor cd_S1446C4 = {  "S1446C4", // class name
  0,0,//no base classes
  &(vtc_S1446C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S1446C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1446C4),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  S1446C3  : S1446C4 {
  void *s1446c3f0;
  virtual void  v7(); // _ZN7S1446C32v7Ev
  virtual void  v8(); // _ZN7S1446C32v8Ev
  ~S1446C3(); // tgen
  S1446C3(); // tgen
};
//SIG(-1 S1446C3) C1{ BC2{ v3 v4 Fs[6]} v1 v2 Fp}


void  S1446C3 ::v7(){vfunc_called(this, "_ZN7S1446C32v7Ev");}
void  S1446C3 ::v8(){vfunc_called(this, "_ZN7S1446C32v8Ev");}
S1446C3 ::~S1446C3(){ note_dtor("S1446C3", this);} // tgen
S1446C3 ::S1446C3(){ note_ctor("S1446C3", this);} // tgen

static void Test_S1446C3()
{
  extern Class_Descriptor cd_S1446C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1446C3, buf);
    S1446C3 *dp, &lv = *(dp=new (buf) S1446C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1446C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1446C3)");
    check_base_class_offset(lv, (S1446C4*), 0, "S1446C3");
    check_field_offset(lv, s1446c3f0, ABISELECT(24,16), "S1446C3.s1446c3f0");
    test_class_info(&lv, &cd_S1446C3);
    dp->~S1446C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1446C3(Test_S1446C3, "S1446C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1446C3C1Ev();
extern void _ZN7S1446C3D1Ev();
Name_Map name_map_S1446C3[] = {
  NSPAIR(_ZN7S1446C3C1Ev),
  NSPAIR(_ZN7S1446C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
static Base_Class bases_S1446C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1446C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1446C3[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
static  VTBL_ENTRY vtc_S1446C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C3[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
Class_Descriptor cd_S1446C3 = {  "S1446C3", // class name
  bases_S1446C3, 1,
  &(vtc_S1446C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1446C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1446C3),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  S1446C5  : S1446C4 {
  short s1446c5f0[9];
  __tsi64 s1446c5f1;
  virtual void  v9(); // _ZN7S1446C52v9Ev
  virtual void  v10(); // _ZN7S1446C53v10Ev
  virtual void  v11(); // _ZN7S1446C53v11Ev
  virtual void  v12(); // _ZN7S1446C53v12Ev
  virtual void  v13(); // _ZN7S1446C53v13Ev
  virtual void  v14(); // _ZN7S1446C53v14Ev
  ~S1446C5(); // tgen
  S1446C5(); // tgen
};
//SIG(-1 S1446C5) C1{ BC2{ v7 v8 Fs[6]} v1 v2 v3 v4 v5 v6 Fs[9] FL}


void  S1446C5 ::v9(){vfunc_called(this, "_ZN7S1446C52v9Ev");}
void  S1446C5 ::v10(){vfunc_called(this, "_ZN7S1446C53v10Ev");}
void  S1446C5 ::v11(){vfunc_called(this, "_ZN7S1446C53v11Ev");}
void  S1446C5 ::v12(){vfunc_called(this, "_ZN7S1446C53v12Ev");}
void  S1446C5 ::v13(){vfunc_called(this, "_ZN7S1446C53v13Ev");}
void  S1446C5 ::v14(){vfunc_called(this, "_ZN7S1446C53v14Ev");}
S1446C5 ::~S1446C5(){ note_dtor("S1446C5", this);} // tgen
S1446C5 ::S1446C5(){ note_ctor("S1446C5", this);} // tgen

static void Test_S1446C5()
{
  extern Class_Descriptor cd_S1446C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S1446C5, buf);
    S1446C5 *dp, &lv = *(dp=new (buf) S1446C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S1446C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1446C5)");
    check_base_class_offset(lv, (S1446C4*), 0, "S1446C5");
    check_field_offset(lv, s1446c5f0, ABISELECT(20,16), "S1446C5.s1446c5f0");
    check_field_offset(lv, s1446c5f1, ABISELECT(40,36), "S1446C5.s1446c5f1");
    test_class_info(&lv, &cd_S1446C5);
    dp->~S1446C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1446C5(Test_S1446C5, "S1446C5", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN7S1446C5C1Ev();
extern void _ZN7S1446C5D1Ev();
Name_Map name_map_S1446C5[] = {
  NSPAIR(_ZN7S1446C5C1Ev),
  NSPAIR(_ZN7S1446C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
static Base_Class bases_S1446C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1446C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1446C5[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
static  VTBL_ENTRY vtc_S1446C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C5[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S1446C5[];
extern  VTBL_ENTRY _ZTV7S1446C5[];
Class_Descriptor cd_S1446C5 = {  "S1446C5", // class name
  bases_S1446C5, 1,
  &(vtc_S1446C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI7S1446C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1446C5),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  S1446C2  : S1446C3 , virtual S1446C5 , virtual S1446C4 {
  virtual void  v15(); // _ZN7S1446C23v15Ev
  virtual void  v16(); // _ZN7S1446C23v16Ev
  virtual void  v17(); // _ZN7S1446C23v17Ev
  virtual void  v18(); // _ZN7S1446C23v18Ev
  virtual void  v19(); // _ZN7S1446C23v19Ev
  ~S1446C2(); // tgen
  S1446C2(); // tgen
};
//SIG(-1 S1446C2) C1{ BC2{ BC3{ v6 v7 Fs[6]} v8 v9 Fp} VBC4{ BC3 v10 v11 v12 v13 v14 v15 Fs[9] FL} VBC3 v1 v2 v3 v4 v5}


void  S1446C2 ::v15(){vfunc_called(this, "_ZN7S1446C23v15Ev");}
void  S1446C2 ::v16(){vfunc_called(this, "_ZN7S1446C23v16Ev");}
void  S1446C2 ::v17(){vfunc_called(this, "_ZN7S1446C23v17Ev");}
void  S1446C2 ::v18(){vfunc_called(this, "_ZN7S1446C23v18Ev");}
void  S1446C2 ::v19(){vfunc_called(this, "_ZN7S1446C23v19Ev");}
S1446C2 ::~S1446C2(){ note_dtor("S1446C2", this);} // tgen
S1446C2 ::S1446C2(){ note_ctor("S1446C2", this);} // tgen

static void Test_S1446C2()
{
  extern Class_Descriptor cd_S1446C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,21)];
    init_test(&cd_S1446C2, buf);
    S1446C2 *dp, &lv = *(dp=new (buf) S1446C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S1446C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1446C2)");
    check_base_class_offset(lv, (S1446C4*)(S1446C3*), 0, "S1446C2");
    check_base_class_offset(lv, (S1446C3*), 0, "S1446C2");
    check_base_class_offset(lv, (S1446C4*)(S1446C5*), ABISELECT(32,20), "S1446C2");
    check_base_class_offset(lv, (S1446C5*), ABISELECT(32,20), "S1446C2");
    /*is_ambiguous_... S1446C2::S1446C4 */ AMB_check_base_class_offset(lv, (S1446C4*), ABISELECT(80,64), "S1446C2");
    test_class_info(&lv, &cd_S1446C2);
    dp->~S1446C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1446C2(Test_S1446C2, "S1446C2", ABISELECT(104,80));

#else // __cplusplus

extern void _ZN7S1446C2C1Ev();
extern void _ZN7S1446C2D1Ev();
Name_Map name_map_S1446C2[] = {
  NSPAIR(_ZN7S1446C2C1Ev),
  NSPAIR(_ZN7S1446C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C5;
extern VTBL_ENTRY _ZTI7S1446C5[];
extern  VTBL_ENTRY _ZTV7S1446C5[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
static Base_Class bases_S1446C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1446C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1446C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1446C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1446C5,    ABISELECT(32,20), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1446C4,    ABISELECT(80,64), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1446C2[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
static  VTBL_ENTRY vtc_S1446C2[] = {
  ABISELECT(80,64),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  0,
  0,
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S1446C2[];
static  VTT_ENTRY vtt_S1446C2[] = {
  {&(_ZTV7S1446C2[4]),  4,37},
  {&(_ZTV7S1446C2[23]),  23,37},
  {&(_ZTV7S1446C2[35]),  35,37},
};
extern VTBL_ENTRY _ZTI7S1446C2[];
extern  VTBL_ENTRY _ZTV7S1446C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C2[];
Class_Descriptor cd_S1446C2 = {  "S1446C2", // class name
  bases_S1446C2, 5,
  &(vtc_S1446C2[0]), // expected_vtbl_contents
  &(vtt_S1446C2[0]), // expected_vtt_contents
  ABISELECT(104,80), // object size
  NSPAIRA(_ZTI7S1446C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1446C2),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1446C2),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1446C6  : S1446C5 , virtual S1446C4 , virtual S1446C2 , virtual S1446C3 {
  int s1446c6f0;
  virtual  ~S1446C6(); // _ZN7S1446C6D2Ev
  virtual void  v20(); // _ZN7S1446C63v20Ev
  S1446C6(); // tgen
};
//SIG(-1 S1446C6) C1{ BC2{ BC3{ v2 v3 Fs[6]} v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC3 VBC4{ BC5{ BC3 v10 v11 Fp} VBC2 VBC3 v12 v13 v14 v15 v16} VBC5 vd v1 Fi}


 S1446C6 ::~S1446C6(){ note_dtor("S1446C6", this);}
void  S1446C6 ::v20(){vfunc_called(this, "_ZN7S1446C63v20Ev");}
S1446C6 ::S1446C6(){ note_ctor("S1446C6", this);} // tgen

static void Test_S1446C6()
{
  extern Class_Descriptor cd_S1446C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,38)];
    init_test(&cd_S1446C6, buf);
    S1446C6 *dp, &lv = *(dp=new (buf) S1446C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,148), "sizeof(S1446C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1446C6)");
    /*is_ambiguous_... S1446C6::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C5*), 0, "S1446C6");
    /*is_ambiguous_... S1446C6::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C5*), 0, "S1446C6");
    /*is_ambiguous_... S1446C6::S1446C4 */ AMB_check_base_class_offset(lv, (S1446C4*), ABISELECT(56,48), "S1446C6");
    /*is_ambiguous_... S1446C2::S1446C4 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C2*), ABISELECT(56,48), "S1446C6");
    check_base_class_offset(lv, (S1446C4*)(S1446C3*)(S1446C2*), ABISELECT(80,64), "S1446C6");
    check_base_class_offset(lv, (S1446C3*)(S1446C2*), ABISELECT(80,64), "S1446C6");
    /*is_ambiguous_... S1446C6::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C5*), ABISELECT(112,84), "S1446C6");
    check_base_class_offset(lv, (S1446C5*)(S1446C2*), ABISELECT(112,84), "S1446C6");
    check_base_class_offset(lv, (S1446C2*), ABISELECT(80,64), "S1446C6");
    /*is_ambiguous_... S1446C6::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C3*), ABISELECT(160,128), "S1446C6");
    /*is_ambiguous_... S1446C6::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C3*), ABISELECT(160,128), "S1446C6");
    check_field_offset(lv, s1446c6f0, ABISELECT(48,44), "S1446C6.s1446c6f0");
    test_class_info(&lv, &cd_S1446C6);
    dp->~S1446C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1446C6(Test_S1446C6, "S1446C6", ABISELECT(192,148));

#else // __cplusplus

extern void _ZN7S1446C6C1Ev();
extern void _ZN7S1446C6D2Ev();
Name_Map name_map_S1446C6[] = {
  NSPAIR(_ZN7S1446C6C1Ev),
  NSPAIR(_ZN7S1446C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C5;
extern VTBL_ENTRY _ZTI7S1446C5[];
extern  VTBL_ENTRY _ZTV7S1446C5[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C5;
extern VTBL_ENTRY _ZTI7S1446C5[];
extern  VTBL_ENTRY _ZTV7S1446C5[];
extern Class_Descriptor cd_S1446C2;
extern VTBL_ENTRY _ZTI7S1446C2[];
extern  VTBL_ENTRY _ZTV7S1446C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C2[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
static Base_Class bases_S1446C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1446C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1446C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1446C4,    ABISELECT(56,48), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1446C4,    ABISELECT(80,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1446C3,    ABISELECT(80,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1446C4,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1446C5,    ABISELECT(112,84), //bcp->offset
    45, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1446C2,    ABISELECT(80,64), //bcp->offset
    23, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1446C4,    ABISELECT(160,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1446C3,    ABISELECT(160,128), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1446C6[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void _ZN7S1446C6D1Ev();
extern void _ZN7S1446C6D0Ev();
extern void _ZN7S1446C63v20Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
static  VTBL_ENTRY vtc_S1446C6[] = {
  ABISELECT(160,128),
  ABISELECT(112,84),
  ABISELECT(80,64),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1446C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1446C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1446C63v20Ev,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,20),
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-128),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S1446C6[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C2__7S1446C6[] = {
  ABISELECT(-24,-16),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C5__7S1446C2__7S1446C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C4__A2__7S1446C2__7S1446C6[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
};
static  VTT_ENTRY vtt_S1446C6[] = {
  {&(_ZTV7S1446C6[6]),  6,73},
  {&(_ZTV7S1446C6[21]),  21,73},
  {&(_ZTV7S1446C6[36]),  36,73},
  {&(_ZTV7S1446C6[55]),  55,73},
  {&(_ZTV7S1446C6[69]),  69,73},
  {&(_tg__ZTV7S1446C2__7S1446C6[4]),  4,13},
  {&(_tg__ZTV7S1446C5__7S1446C2__7S1446C6[10]),  10,18},
  {&(_tg__ZTV7S1446C4__A2__7S1446C2__7S1446C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S1446C6[];
extern  VTBL_ENTRY _ZTV7S1446C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C6[];
Class_Descriptor cd_S1446C6 = {  "S1446C6", // class name
  bases_S1446C6, 10,
  &(vtc_S1446C6[0]), // expected_vtbl_contents
  &(vtt_S1446C6[0]), // expected_vtt_contents
  ABISELECT(192,148), // object size
  NSPAIRA(_ZTI7S1446C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1446C6),73, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1446C6),8, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1446C7  {
  void *s1446c7f0;
  virtual void  v21(); // _ZN7S1446C73v21Ev
  virtual void  v22(); // _ZN7S1446C73v22Ev
  virtual void  v23(); // _ZN7S1446C73v23Ev
  virtual void  v24(); // _ZN7S1446C73v24Ev
  ~S1446C7(); // tgen
  S1446C7(); // tgen
};
//SIG(-1 S1446C7) C1{ v1 v2 v3 v4 Fp}


void  S1446C7 ::v21(){vfunc_called(this, "_ZN7S1446C73v21Ev");}
void  S1446C7 ::v22(){vfunc_called(this, "_ZN7S1446C73v22Ev");}
void  S1446C7 ::v23(){vfunc_called(this, "_ZN7S1446C73v23Ev");}
void  S1446C7 ::v24(){vfunc_called(this, "_ZN7S1446C73v24Ev");}
S1446C7 ::~S1446C7(){ note_dtor("S1446C7", this);} // tgen
S1446C7 ::S1446C7(){ note_ctor("S1446C7", this);} // tgen

static void Test_S1446C7()
{
  extern Class_Descriptor cd_S1446C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1446C7, buf);
    S1446C7 *dp, &lv = *(dp=new (buf) S1446C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1446C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1446C7)");
    check_field_offset(lv, s1446c7f0, ABISELECT(8,4), "S1446C7.s1446c7f0");
    test_class_info(&lv, &cd_S1446C7);
    dp->~S1446C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1446C7(Test_S1446C7, "S1446C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1446C7C1Ev();
extern void _ZN7S1446C7D1Ev();
Name_Map name_map_S1446C7[] = {
  NSPAIR(_ZN7S1446C7C1Ev),
  NSPAIR(_ZN7S1446C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1446C7[];
extern void _ZN7S1446C73v21Ev();
extern void _ZN7S1446C73v22Ev();
extern void _ZN7S1446C73v23Ev();
extern void _ZN7S1446C73v24Ev();
static  VTBL_ENTRY vtc_S1446C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C7[0]),
  (VTBL_ENTRY)&_ZN7S1446C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1446C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1446C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1446C73v24Ev,
};
extern VTBL_ENTRY _ZTI7S1446C7[];
extern  VTBL_ENTRY _ZTV7S1446C7[];
Class_Descriptor cd_S1446C7 = {  "S1446C7", // class name
  0,0,//no base classes
  &(vtc_S1446C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1446C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1446C7),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  S1446C8  : S1446C4 , virtual S1446C5 , virtual S1446C2 , virtual S1446C6 , S1446C3 {
  virtual  ~S1446C8(); // _ZN7S1446C8D2Ev
  virtual void  v25(); // _ZN7S1446C83v25Ev
  S1446C8(); // tgen
};
//SIG(-1 S1446C8) C1{ BC2{ v2 v3 Fs[6]} VBC3{ BC2 v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC4{ BC5{ BC2 v10 v11 Fp} VBC3 VBC2 v12 v13 v14 v15 v16} VBC6{ BC3 VBC2 VBC4 VBC5 vd v17 Fi} BC5 vd v1}


 S1446C8 ::~S1446C8(){ note_dtor("S1446C8", this);}
void  S1446C8 ::v25(){vfunc_called(this, "_ZN7S1446C83v25Ev");}
S1446C8 ::S1446C8(){ note_ctor("S1446C8", this);} // tgen

static void Test_S1446C8()
{
  extern Class_Descriptor cd_S1446C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,47)];
    init_test(&cd_S1446C8, buf);
    S1446C8 *dp, &lv = *(dp=new (buf) S1446C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,184), "sizeof(S1446C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1446C8)");
    /*is_ambiguous_... S1446C8::S1446C4 */ AMB_check_base_class_offset(lv, (S1446C4*), 0, "S1446C8");
    /*is_ambiguous_... S1446C8::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C5*), ABISELECT(56,36), "S1446C8");
    /*is_ambiguous_... S1446C8::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C5*), ABISELECT(56,36), "S1446C8");
    check_base_class_offset(lv, (S1446C5*)(S1446C2*), ABISELECT(56,36), "S1446C8");
    check_base_class_offset(lv, (S1446C4*)(S1446C3*)(S1446C2*), ABISELECT(104,80), "S1446C8");
    check_base_class_offset(lv, (S1446C3*)(S1446C2*), ABISELECT(104,80), "S1446C8");
    /*is_ambiguous_... S1446C2::S1446C4 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C2*), ABISELECT(136,100), "S1446C8");
    /*is_ambiguous_... S1446C6::S1446C4 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C6*), ABISELECT(136,100), "S1446C8");
    check_base_class_offset(lv, (S1446C2*), ABISELECT(104,80), "S1446C8");
    check_base_class_offset(lv, (S1446C2*)(S1446C6*), ABISELECT(104,80), "S1446C8");
    /*is_ambiguous_... S1446C6::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C5*)(S1446C6*), ABISELECT(160,116), "S1446C8");
    /*is_ambiguous_... S1446C6::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C5*)(S1446C6*), ABISELECT(160,116), "S1446C8");
    /*is_ambiguous_... S1446C8::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C3*), ABISELECT(216,164), "S1446C8");
    /*is_ambiguous_... S1446C6::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C3*)(S1446C6*), ABISELECT(216,164), "S1446C8");
    check_base_class_offset(lv, (S1446C6*), ABISELECT(160,116), "S1446C8");
    /*is_ambiguous_... S1446C8::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C3*), ABISELECT(24,16), "S1446C8");
    /*is_ambiguous_... S1446C8::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C3*), ABISELECT(24,16), "S1446C8");
    test_class_info(&lv, &cd_S1446C8);
    dp->~S1446C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1446C8(Test_S1446C8, "S1446C8", ABISELECT(248,184));

#else // __cplusplus

extern void _ZN7S1446C8C1Ev();
extern void _ZN7S1446C8D2Ev();
Name_Map name_map_S1446C8[] = {
  NSPAIR(_ZN7S1446C8C1Ev),
  NSPAIR(_ZN7S1446C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C5;
extern VTBL_ENTRY _ZTI7S1446C5[];
extern  VTBL_ENTRY _ZTV7S1446C5[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C2;
extern VTBL_ENTRY _ZTI7S1446C2[];
extern  VTBL_ENTRY _ZTV7S1446C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C2[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C5;
extern VTBL_ENTRY _ZTI7S1446C5[];
extern  VTBL_ENTRY _ZTV7S1446C5[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
extern Class_Descriptor cd_S1446C6;
extern VTBL_ENTRY _ZTI7S1446C6[];
extern  VTBL_ENTRY _ZTV7S1446C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C6[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
static Base_Class bases_S1446C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1446C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1446C4,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1446C5,    ABISELECT(56,36), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1446C4,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1446C3,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1446C4,    ABISELECT(136,100), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1446C2,    ABISELECT(104,80), //bcp->offset
    36, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1446C4,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1446C5,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S1446C4,    ABISELECT(216,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1446C3,    ABISELECT(216,164), //bcp->offset
    91, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S1446C6,    ABISELECT(160,116), //bcp->offset
    64, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1446C4,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S1446C3,    ABISELECT(24,16), //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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1446C8[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C8D1Ev();
extern void _ZN7S1446C8D0Ev();
extern void _ZN7S1446C83v25Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void ABISELECT(_ZTv0_n120_N7S1446C8D1Ev,_ZTv0_n60_N7S1446C8D1Ev)();
extern void ABISELECT(_ZThn160_N7S1446C8D1Ev,_ZThn116_N7S1446C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S1446C8D0Ev,_ZTv0_n60_N7S1446C8D0Ev)();
extern void ABISELECT(_ZThn160_N7S1446C8D0Ev,_ZThn116_N7S1446C8D0Ev)() __attribute__((weak));
extern void _ZN7S1446C63v20Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
static  VTBL_ENTRY vtc_S1446C8[] = {
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(136,100),
  ABISELECT(104,80),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1446C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1446C83v25Ev,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
  0,
  0,
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S1446C8D1Ev,_ZTv0_n60_N7S1446C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S1446C8D0Ev,_ZTv0_n60_N7S1446C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1446C63v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S1446C8[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C2__7S1446C8[] = {
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C5__7S1446C2__7S1446C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C4__A2__7S1446C2__7S1446C8[] = {
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void _ZN7S1446C6D1Ev();
extern void _ZN7S1446C6D0Ev();
extern void _ZN7S1446C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C6__7S1446C8[] = {
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1446C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1446C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1446C63v20Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C4__A1__7S1446C6__7S1446C8[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C2__7S1446C6__7S1446C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C5__A1__7S1446C6__7S1446C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,80),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C3__A1__7S1446C6__7S1446C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
};
static  VTT_ENTRY vtt_S1446C8[] = {
  {&(_ZTV7S1446C8[7]),  7,101},
  {&(_ZTV7S1446C8[28]),  28,101},
  {&(_ZTV7S1446C8[49]),  49,101},
  {&(_ZTV7S1446C8[62]),  62,101},
  {&(_ZTV7S1446C8[80]),  80,101},
  {&(_ZTV7S1446C8[97]),  97,101},
  {&(_tg__ZTV7S1446C2__7S1446C8[4]),  4,13},
  {&(_tg__ZTV7S1446C5__7S1446C2__7S1446C8[10]),  10,18},
  {&(_tg__ZTV7S1446C4__A2__7S1446C2__7S1446C8[4]),  4,6},
  {&(_tg__ZTV7S1446C6__7S1446C8[6]),  6,17},
  {&(_tg__ZTV7S1446C4__A1__7S1446C6__7S1446C8[4]),  4,6},
  {&(_tg__ZTV7S1446C2__7S1446C6__7S1446C8[13]),  13,22},
  {&(_tg__ZTV7S1446C5__A1__7S1446C6__7S1446C8[10]),  10,18},
  {&(_tg__ZTV7S1446C3__A1__7S1446C6__7S1446C8[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S1446C8[];
extern  VTBL_ENTRY _ZTV7S1446C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C8[];
static VTBL_ENTRY alt_thunk_names139[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S1446C8D0Ev,_ZTv0_n60_N7S1446C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1446C8D0Ev,_ZThn116_N7S1446C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S1446C8D1Ev,_ZTv0_n60_N7S1446C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1446C8D1Ev,_ZThn116_N7S1446C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1446C8 = {  "S1446C8", // class name
  bases_S1446C8, 14,
  &(vtc_S1446C8[0]), // expected_vtbl_contents
  &(vtt_S1446C8[0]), // expected_vtt_contents
  ABISELECT(248,184), // object size
  NSPAIRA(_ZTI7S1446C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1446C8),101, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1446C8),14, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names139,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1446C1  : S1446C2 , virtual S1446C6 , S1446C7 , S1446C8 {
  int s1446c1f0;
  virtual  ~S1446C1(); // _ZN7S1446C1D2Ev
  virtual void  v1(); // _ZN7S1446C12v1Ev
  virtual void  v2(); // _ZN7S1446C12v2Ev
  virtual void  v3(); // _ZN7S1446C12v3Ev
  virtual void  v4(); // _ZN7S1446C12v4Ev
  S1446C1(); // tgen
};
//SIG(1 S1446C1) C1{ BC2{ BC3{ BC4{ v5 v6 Fs[6]} v7 v8 Fp} VBC5{ BC4 v9 v10 v11 v12 v13 v14 Fs[9] FL} VBC4 v15 v16 v17 v18 v19} VBC6{ BC5 VBC4 VBC2 VBC3 vd v20 Fi} BC7{ v21 v22 v23 v24 Fp} BC8{ BC4 VBC5 VBC2 VBC6 BC3 vd v25} vd v1 v2 v3 v4 Fi}


 S1446C1 ::~S1446C1(){ note_dtor("S1446C1", this);}
void  S1446C1 ::v1(){vfunc_called(this, "_ZN7S1446C12v1Ev");}
void  S1446C1 ::v2(){vfunc_called(this, "_ZN7S1446C12v2Ev");}
void  S1446C1 ::v3(){vfunc_called(this, "_ZN7S1446C12v3Ev");}
void  S1446C1 ::v4(){vfunc_called(this, "_ZN7S1446C12v4Ev");}
S1446C1 ::S1446C1(){ note_ctor("S1446C1", this);} // tgen

static void Test_S1446C1()
{
  extern Class_Descriptor cd_S1446C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,55)];
    init_test(&cd_S1446C1, buf);
    S1446C1 *dp, &lv = *(dp=new (buf) S1446C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,216), "sizeof(S1446C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1446C1)");
    /*is_ambiguous_... S1446C1::S1446C2 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C3*)(S1446C2*), 0, "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C2 */ AMB_check_base_class_offset(lv, (S1446C3*)(S1446C2*), 0, "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C5*), ABISELECT(112,68), "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C2 */ AMB_check_base_class_offset(lv, (S1446C5*)(S1446C2*), ABISELECT(112,68), "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C2 */ AMB_check_base_class_offset(lv, (S1446C5*)(S1446C2*), ABISELECT(112,68), "S1446C1");
    /*is_ambiguous_... S1446C8::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C5*)(S1446C8*), ABISELECT(112,68), "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C2 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C2*), ABISELECT(160,112), "S1446C1");
    /*is_ambiguous_... S1446C6::S1446C4 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C6*), ABISELECT(160,112), "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C2 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C2*), ABISELECT(160,112), "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C2 */ AMB_check_base_class_offset(lv, (S1446C2*), 0, "S1446C1");
    /*is_ambiguous_... S1446C6::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C5*)(S1446C6*), ABISELECT(184,128), "S1446C1");
    /*is_ambiguous_... S1446C6::S1446C5 */ AMB_check_base_class_offset(lv, (S1446C5*)(S1446C6*), ABISELECT(184,128), "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C2 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C3*)(S1446C2*), ABISELECT(240,176), "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C2 */ AMB_check_base_class_offset(lv, (S1446C3*)(S1446C2*), ABISELECT(240,176), "S1446C1");
    check_base_class_offset(lv, (S1446C2*)(S1446C6*), ABISELECT(240,176), "S1446C1");
    check_base_class_offset(lv, (S1446C2*)(S1446C8*), ABISELECT(240,176), "S1446C1");
    /*is_ambiguous_... S1446C1::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C3*), ABISELECT(272,196), "S1446C1");
    /*is_ambiguous_... S1446C6::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C3*)(S1446C6*), ABISELECT(272,196), "S1446C1");
    check_base_class_offset(lv, (S1446C6*), ABISELECT(184,128), "S1446C1");
    check_base_class_offset(lv, (S1446C6*)(S1446C8*), ABISELECT(184,128), "S1446C1");
    check_base_class_offset(lv, (S1446C7*), ABISELECT(32,20), "S1446C1");
    /*is_ambiguous_... S1446C8::S1446C4 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C8*), ABISELECT(48,28), "S1446C1");
    /*is_ambiguous_... S1446C8::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C4*)(S1446C3*)(S1446C8*), ABISELECT(72,44), "S1446C1");
    /*is_ambiguous_... S1446C8::S1446C3 */ AMB_check_base_class_offset(lv, (S1446C3*)(S1446C8*), ABISELECT(72,44), "S1446C1");
    check_base_class_offset(lv, (S1446C8*), ABISELECT(48,28), "S1446C1");
    check_field_offset(lv, s1446c1f0, ABISELECT(104,64), "S1446C1.s1446c1f0");
    test_class_info(&lv, &cd_S1446C1);
    dp->~S1446C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1446C1(Test_S1446C1, "S1446C1", ABISELECT(304,216));

#else // __cplusplus

extern void _ZN7S1446C1C1Ev();
extern void _ZN7S1446C1D2Ev();
Name_Map name_map_S1446C1[] = {
  NSPAIR(_ZN7S1446C1C1Ev),
  NSPAIR(_ZN7S1446C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C5;
extern VTBL_ENTRY _ZTI7S1446C5[];
extern  VTBL_ENTRY _ZTV7S1446C5[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C2;
extern VTBL_ENTRY _ZTI7S1446C2[];
extern  VTBL_ENTRY _ZTV7S1446C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C2[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C5;
extern VTBL_ENTRY _ZTI7S1446C5[];
extern  VTBL_ENTRY _ZTV7S1446C5[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
extern Class_Descriptor cd_S1446C2;
extern VTBL_ENTRY _ZTI7S1446C2[];
extern  VTBL_ENTRY _ZTV7S1446C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C2[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
extern Class_Descriptor cd_S1446C6;
extern VTBL_ENTRY _ZTI7S1446C6[];
extern  VTBL_ENTRY _ZTV7S1446C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C6[];
extern Class_Descriptor cd_S1446C7;
extern VTBL_ENTRY _ZTI7S1446C7[];
extern  VTBL_ENTRY _ZTV7S1446C7[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C4;
extern VTBL_ENTRY _ZTI7S1446C4[];
extern  VTBL_ENTRY _ZTV7S1446C4[];
extern Class_Descriptor cd_S1446C3;
extern VTBL_ENTRY _ZTI7S1446C3[];
extern  VTBL_ENTRY _ZTV7S1446C3[];
extern Class_Descriptor cd_S1446C8;
extern VTBL_ENTRY _ZTI7S1446C8[];
extern  VTBL_ENTRY _ZTV7S1446C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C8[];
static Base_Class bases_S1446C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1446C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1446C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1446C4,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1446C5,    ABISELECT(112,68), //bcp->offset
    46, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1446C4,    ABISELECT(160,112), //bcp->offset
    64, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1446C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1446C4,    ABISELECT(184,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1446C5,    ABISELECT(184,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S1446C4,    ABISELECT(240,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1446C3,    ABISELECT(240,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1446C2,    ABISELECT(240,176), //bcp->offset
    97, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S1446C4,    ABISELECT(272,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1446C3,    ABISELECT(272,196), //bcp->offset
    119, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S1446C6,    ABISELECT(184,128), //bcp->offset
    70, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1446C7,    ABISELECT(32,20), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1446C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1446C4,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S1446C3,    ABISELECT(72,44), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1446C8,    ABISELECT(48,28), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1446C1[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
extern void _ZN7S1446C1D1Ev();
extern void _ZN7S1446C1D0Ev();
extern void _ZN7S1446C12v1Ev();
extern void _ZN7S1446C12v2Ev();
extern void _ZN7S1446C12v3Ev();
extern void _ZN7S1446C12v4Ev();
extern void _ZN7S1446C73v21Ev();
extern void _ZN7S1446C73v22Ev();
extern void _ZN7S1446C73v23Ev();
extern void _ZN7S1446C73v24Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void ABISELECT(_ZThn48_N7S1446C1D1Ev,_ZThn28_N7S1446C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S1446C1D0Ev,_ZThn28_N7S1446C1D0Ev)();
extern void _ZN7S1446C83v25Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void ABISELECT(_ZTv0_n120_N7S1446C1D1Ev,_ZTv0_n60_N7S1446C1D1Ev)();
extern void ABISELECT(_ZThn184_N7S1446C1D1Ev,_ZThn128_N7S1446C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S1446C1D0Ev,_ZTv0_n60_N7S1446C1D0Ev)();
extern void ABISELECT(_ZThn184_N7S1446C1D0Ev,_ZThn128_N7S1446C1D0Ev)() __attribute__((weak));
extern void _ZN7S1446C63v20Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
static  VTBL_ENTRY vtc_S1446C1[] = {
  ABISELECT(272,196),
  ABISELECT(240,176),
  ABISELECT(184,128),
  ABISELECT(160,112),
  ABISELECT(112,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C1[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1446C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1446C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1446C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1446C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1446C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1446C12v4Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1446C1[0]),
  (VTBL_ENTRY)&_ZN7S1446C73v21Ev,
  (VTBL_ENTRY)&_ZN7S1446C73v22Ev,
  (VTBL_ENTRY)&_ZN7S1446C73v23Ev,
  (VTBL_ENTRY)&_ZN7S1446C73v24Ev,
  ABISELECT(224,168),
  ABISELECT(136,100),
  ABISELECT(112,84),
  ABISELECT(192,148),
  ABISELECT(64,40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1446C1[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1446C1D1Ev,_ZThn28_N7S1446C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S1446C1D0Ev,_ZThn28_N7S1446C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1446C83v25Ev,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S1446C1[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI7S1446C1[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  0,
  0,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S1446C1[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  0,
  ABISELECT(-184,-128),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,68),
  ABISELECT(-72,-60),
  ABISELECT(56,48),
  ABISELECT(-24,-16),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI7S1446C1[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S1446C1D1Ev,_ZTv0_n60_N7S1446C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S1446C1D0Ev,_ZTv0_n60_N7S1446C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1446C63v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-64),
  ABISELECT(-128,-108),
  ABISELECT(-240,-176),
  (VTBL_ENTRY)&(_ZTI7S1446C1[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-196),
  (VTBL_ENTRY)&(_ZTI7S1446C1[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S1446C1[];
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C2__A__7S1446C1[] = {
  ABISELECT(160,112),
  ABISELECT(112,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C5__7S1446C2__A__7S1446C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C4__A2__7S1446C2__A__7S1446C1[] = {
  0,
  0,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C8D1Ev();
extern void _ZN7S1446C8D0Ev();
extern void _ZN7S1446C83v25Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C8__7S1446C1[] = {
  ABISELECT(224,168),
  ABISELECT(136,100),
  ABISELECT(112,84),
  ABISELECT(192,148),
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1446C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1446C83v25Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C5__7S1446C8__7S1446C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C2__7S1446C8__7S1446C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-64),
  ABISELECT(-128,-108),
  ABISELECT(-192,-148),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C4__A3__7S1446C8__7S1446C1[] = {
  0,
  0,
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void ABISELECT(_ZTv0_n120_N7S1446C8D1Ev,_ZTv0_n60_N7S1446C8D1Ev)();
extern void ABISELECT(_ZThn136_N7S1446C8D1Ev,_ZThn100_N7S1446C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S1446C8D0Ev,_ZTv0_n60_N7S1446C8D0Ev)();
extern void ABISELECT(_ZThn136_N7S1446C8D0Ev,_ZThn100_N7S1446C8D0Ev)() __attribute__((weak));
extern void _ZN7S1446C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C6__7S1446C8__7S1446C1[] = {
  0,
  ABISELECT(-136,-100),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,68),
  ABISELECT(-72,-60),
  ABISELECT(56,48),
  ABISELECT(-24,-16),
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S1446C8D1Ev,_ZTv0_n60_N7S1446C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S1446C8D0Ev,_ZTv0_n60_N7S1446C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1446C63v20Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C3__A1__7S1446C8__7S1446C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-168),
  (VTBL_ENTRY)&(_ZTI7S1446C8[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
extern void _ZN7S1446C6D1Ev();
extern void _ZN7S1446C6D0Ev();
extern void _ZN7S1446C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C6__7S1446C1[] = {
  ABISELECT(88,68),
  ABISELECT(-72,-60),
  ABISELECT(56,48),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
  (VTBL_ENTRY)&_ZN7S1446C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1446C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1446C63v20Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C4__A1__7S1446C6__7S1446C1[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C2__7S1446C6__7S1446C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-64),
  ABISELECT(-128,-108),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C5__A1__7S1446C6__7S1446C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,60),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C3__A1__7S1446C6__7S1446C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-68),
  (VTBL_ENTRY)&(_ZTI7S1446C6[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C32v7Ev();
extern void _ZN7S1446C32v8Ev();
extern void _ZN7S1446C23v15Ev();
extern void _ZN7S1446C23v16Ev();
extern void _ZN7S1446C23v17Ev();
extern void _ZN7S1446C23v18Ev();
extern void _ZN7S1446C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C2__A1__7S1446C1[] = {
  ABISELECT(-80,-64),
  ABISELECT(-128,-108),
  0,
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1446C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1446C23v19Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
extern void _ZN7S1446C52v9Ev();
extern void _ZN7S1446C53v10Ev();
extern void _ZN7S1446C53v11Ev();
extern void _ZN7S1446C53v12Ev();
extern void _ZN7S1446C53v13Ev();
extern void _ZN7S1446C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C5__7S1446C2__A1__7S1446C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(128,108),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1446C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1446C53v14Ev,
};
extern void _ZN7S1446C42v5Ev();
extern void _ZN7S1446C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S1446C4__A2__7S1446C2__A1__7S1446C1[] = {
  0,
  0,
  ABISELECT(80,64),
  (VTBL_ENTRY)&(_ZTI7S1446C2[0]),
  (VTBL_ENTRY)&_ZN7S1446C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1446C42v6Ev,
};
static  VTT_ENTRY vtt_S1446C1[] = {
  {&(_ZTV7S1446C1[7]),  7,129},
  {&(_tg__ZTV7S1446C2__A__7S1446C1[4]),  4,13},
  {&(_tg__ZTV7S1446C5__7S1446C2__A__7S1446C1[10]),  10,18},
  {&(_tg__ZTV7S1446C4__A2__7S1446C2__A__7S1446C1[4]),  4,6},
  {&(_tg__ZTV7S1446C8__7S1446C1[7]),  7,12},
  {&(_tg__ZTV7S1446C5__7S1446C8__7S1446C1[10]),  10,18},
  {&(_tg__ZTV7S1446C2__7S1446C8__7S1446C1[13]),  13,22},
  {&(_tg__ZTV7S1446C4__A3__7S1446C8__7S1446C1[4]),  4,6},
  {&(_tg__ZTV7S1446C6__7S1446C8__7S1446C1[16]),  16,27},
  {&(_tg__ZTV7S1446C3__A1__7S1446C8__7S1446C1[6]),  6,10},
  {&(_ZTV7S1446C1[56]),  56,129},
  {&(_ZTV7S1446C1[68]),  68,129},
  {&(_ZTV7S1446C1[86]),  86,129},
  {&(_ZTV7S1446C1[110]),  110,129},
  {&(_ZTV7S1446C1[125]),  125,129},
  {&(_ZTV7S1446C1[35]),  35,129},
  {&(_tg__ZTV7S1446C6__7S1446C1[6]),  6,17},
  {&(_tg__ZTV7S1446C4__A1__7S1446C6__7S1446C1[4]),  4,6},
  {&(_tg__ZTV7S1446C2__7S1446C6__7S1446C1[13]),  13,22},
  {&(_tg__ZTV7S1446C5__A1__7S1446C6__7S1446C1[10]),  10,18},
  {&(_tg__ZTV7S1446C3__A1__7S1446C6__7S1446C1[6]),  6,10},
  {&(_tg__ZTV7S1446C2__A1__7S1446C1[4]),  4,13},
  {&(_tg__ZTV7S1446C5__7S1446C2__A1__7S1446C1[10]),  10,18},
  {&(_tg__ZTV7S1446C4__A2__7S1446C2__A1__7S1446C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S1446C1[];
extern  VTBL_ENTRY _ZTV7S1446C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1446C1[];
static VTBL_ENTRY alt_thunk_names140[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S1446C8D0Ev,_ZTv0_n60_N7S1446C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S1446C8D0Ev,_ZThn100_N7S1446C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S1446C8D1Ev,_ZTv0_n60_N7S1446C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S1446C8D1Ev,_ZThn100_N7S1446C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S1446C1D0Ev,_ZTv0_n60_N7S1446C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1446C1D0Ev,_ZThn128_N7S1446C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S1446C1D1Ev,_ZTv0_n60_N7S1446C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1446C1D1Ev,_ZThn128_N7S1446C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1446C1 = {  "S1446C1", // class name
  bases_S1446C1, 19,
  &(vtc_S1446C1[0]), // expected_vtbl_contents
  &(vtt_S1446C1[0]), // expected_vtt_contents
  ABISELECT(304,216), // object size
  NSPAIRA(_ZTI7S1446C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1446C1),129, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1446C1),24, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names140,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C4_nt  {
  void *s4531c4f0[3];
  void  mf4531c4(); // _ZN10S4531C4_nt8mf4531c4Ev
};
//SIG(-1 S4531C4_nt) C1{ m Fp[3]}


void  S4531C4_nt ::mf4531c4(){}

//skip512 S4531C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C3_nt  {
  ::S4531C4_nt s4531c3f0;
  unsigned int s4531c3f1:1;
  virtual  ~S4531C3_nt(); // _ZN10S4531C3_ntD1Ev
  virtual void  v2(); // _ZN10S4531C3_nt2v2Ev
  virtual void  v3(); // _ZN10S4531C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4531C3_nt2v4Ev
  virtual void  v5(); // _ZN10S4531C3_nt2v5Ev
  virtual void  v6(); // _ZN10S4531C3_nt2v6Ev
  virtual void  v7(); // _ZN10S4531C3_nt2v7Ev
  virtual void  v8(); // _ZN10S4531C3_nt2v8Ev
  S4531C3_nt(); // tgen
};
//SIG(-1 S4531C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fp[3]} Fi:1}


 S4531C3_nt ::~S4531C3_nt(){ note_dtor("S4531C3_nt", this);}
void  S4531C3_nt ::v2(){vfunc_called(this, "_ZN10S4531C3_nt2v2Ev");}
void  S4531C3_nt ::v3(){vfunc_called(this, "_ZN10S4531C3_nt2v3Ev");}
void  S4531C3_nt ::v4(){vfunc_called(this, "_ZN10S4531C3_nt2v4Ev");}
void  S4531C3_nt ::v5(){vfunc_called(this, "_ZN10S4531C3_nt2v5Ev");}
void  S4531C3_nt ::v6(){vfunc_called(this, "_ZN10S4531C3_nt2v6Ev");}
void  S4531C3_nt ::v7(){vfunc_called(this, "_ZN10S4531C3_nt2v7Ev");}
void  S4531C3_nt ::v8(){vfunc_called(this, "_ZN10S4531C3_nt2v8Ev");}
S4531C3_nt ::S4531C3_nt(){ note_ctor("S4531C3_nt", this);} // tgen

//skip512 S4531C3_nt

#else // __cplusplus

extern void _ZN10S4531C3_ntC1Ev();
extern void _ZN10S4531C3_ntD1Ev();
Name_Map name_map_S4531C3_nt[] = {
  NSPAIR(_ZN10S4531C3_ntC1Ev),
  NSPAIR(_ZN10S4531C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4531C3_nt[];
extern void _ZN10S4531C3_ntD1Ev();
extern void _ZN10S4531C3_ntD0Ev();
extern void _ZN10S4531C3_nt2v2Ev();
extern void _ZN10S4531C3_nt2v3Ev();
extern void _ZN10S4531C3_nt2v4Ev();
extern void _ZN10S4531C3_nt2v5Ev();
extern void _ZN10S4531C3_nt2v6Ev();
extern void _ZN10S4531C3_nt2v7Ev();
extern void _ZN10S4531C3_nt2v8Ev();
static  VTBL_ENTRY vtc_S4531C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4531C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4531C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S4531C3_nt[];
VTBL_ENTRY *P__ZTI10S4531C3_nt = _ZTI10S4531C3_nt; 
extern  VTBL_ENTRY _ZTV10S4531C3_nt[];
Class_Descriptor cd_S4531C3_nt = {  "S4531C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4531C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI10S4531C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4531C3_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C5_nt  {
  virtual void  v9(); // _ZN10S4531C5_nt2v9Ev
  ~S4531C5_nt(); // tgen
  S4531C5_nt(); // tgen
};
//SIG(-1 S4531C5_nt) C1{ v1}


void  S4531C5_nt ::v9(){vfunc_called(this, "_ZN10S4531C5_nt2v9Ev");}
S4531C5_nt ::~S4531C5_nt(){ note_dtor("S4531C5_nt", this);} // tgen
S4531C5_nt ::S4531C5_nt(){ note_ctor("S4531C5_nt", this);} // tgen

//skip512 S4531C5_nt

#else // __cplusplus

extern void _ZN10S4531C5_ntC1Ev();
extern void _ZN10S4531C5_ntD1Ev();
Name_Map name_map_S4531C5_nt[] = {
  NSPAIR(_ZN10S4531C5_ntC1Ev),
  NSPAIR(_ZN10S4531C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4531C5_nt[];
extern void _ZN10S4531C5_nt2v9Ev();
static  VTBL_ENTRY vtc_S4531C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4531C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S4531C5_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S4531C5_nt[];
VTBL_ENTRY *P__ZTI10S4531C5_nt = _ZTI10S4531C5_nt; 
extern  VTBL_ENTRY _ZTV10S4531C5_nt[];
Class_Descriptor cd_S4531C5_nt = {  "S4531C5_nt", // class name
  0,0,//no base classes
  &(vtc_S4531C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4531C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4531C5_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C6_nt  {
  ::S3222C18 s4531c6f0;
  int s4531c6f1;
  void  mf4531c6(); // _ZN10S4531C6_nt8mf4531c6Ev
};
//SIG(-1 S4531C6_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fi}


void  S4531C6_nt ::mf4531c6(){}

//skip512 S4531C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C9_nt  {
  unsigned int s4531c9f0:1;
  int s4531c9f1:3;
};
//SIG(-1 S4531C9_nt) C1{ Fi:1 Fi:3}



//skip512 S4531C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C10_nt  {
  void *s4531c10f0;
  void  mf4531c10(); // _ZN11S4531C10_nt9mf4531c10Ev
};
//SIG(-1 S4531C10_nt) C1{ m Fp}


void  S4531C10_nt ::mf4531c10(){}

//skip512 S4531C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C12_nt  {
  int s4531c12f0[4];
  void  mf4531c12(); // _ZN11S4531C12_nt9mf4531c12Ev
};
//SIG(-1 S4531C12_nt) C1{ m Fi[4]}


void  S4531C12_nt ::mf4531c12(){}

//skip512 S4531C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C2_nt  : S4531C3_nt , S4531C5_nt {
  ::S4531C6_nt s4531c2f0;
  ::S4531C9_nt s4531c2f1;
  ::S4531C10_nt s4531c2f2;
  ::S4531C10_nt s4531c2f3;
  void *s4531c2f4;
  ::S4531C12_nt s4531c2f5;
  int s4531c2f6;
  void *s4531c2f7;
  int s4531c2f8[2];
  virtual  ~S4531C2_nt(); // _ZN10S4531C2_ntD1Ev
  virtual void  v10(); // _ZN10S4531C2_nt3v10Ev
  virtual void  v11(); // _ZN10S4531C2_nt3v11Ev
  virtual void  v12(); // _ZN10S4531C2_nt3v12Ev
  virtual void  v13(); // _ZN10S4531C2_nt3v13Ev
  virtual void  v14(); // _ZN10S4531C2_nt3v14Ev
  S4531C2_nt(); // tgen
};
//SIG(-1 S4531C2_nt) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 FC3{ m Fp[3]} Fi:1} BC4{ v13} vd v1 v2 v3 v4 v5 FC5{ m FC6{ BC7{ m Fp Fi[2]}} Fi} FC8{ Fi:1 Fi:3} FC9{ m Fp} FC9 Fp FC10{ m Fi[4]} Fi Fp Fi[2]}


 S4531C2_nt ::~S4531C2_nt(){ note_dtor("S4531C2_nt", this);}
void  S4531C2_nt ::v10(){vfunc_called(this, "_ZN10S4531C2_nt3v10Ev");}
void  S4531C2_nt ::v11(){vfunc_called(this, "_ZN10S4531C2_nt3v11Ev");}
void  S4531C2_nt ::v12(){vfunc_called(this, "_ZN10S4531C2_nt3v12Ev");}
void  S4531C2_nt ::v13(){vfunc_called(this, "_ZN10S4531C2_nt3v13Ev");}
void  S4531C2_nt ::v14(){vfunc_called(this, "_ZN10S4531C2_nt3v14Ev");}
S4531C2_nt ::S4531C2_nt(){ note_ctor("S4531C2_nt", this);} // tgen

//skip512 S4531C2_nt

#else // __cplusplus

extern void _ZN10S4531C2_ntC1Ev();
extern void _ZN10S4531C2_ntD1Ev();
Name_Map name_map_S4531C2_nt[] = {
  NSPAIR(_ZN10S4531C2_ntC1Ev),
  NSPAIR(_ZN10S4531C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4531C3_nt;
extern VTBL_ENTRY _ZTI10S4531C3_nt[];
extern  VTBL_ENTRY _ZTV10S4531C3_nt[];
extern Class_Descriptor cd_S4531C5_nt;
extern VTBL_ENTRY _ZTI10S4531C5_nt[];
extern  VTBL_ENTRY _ZTV10S4531C5_nt[];
static Base_Class bases_S4531C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4531C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S4531C5_nt,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4531C2_nt[];
extern void _ZN10S4531C2_ntD1Ev();
extern void _ZN10S4531C2_ntD0Ev();
extern void _ZN10S4531C3_nt2v2Ev();
extern void _ZN10S4531C3_nt2v3Ev();
extern void _ZN10S4531C3_nt2v4Ev();
extern void _ZN10S4531C3_nt2v5Ev();
extern void _ZN10S4531C3_nt2v6Ev();
extern void _ZN10S4531C3_nt2v7Ev();
extern void _ZN10S4531C3_nt2v8Ev();
extern void _ZN10S4531C2_nt3v10Ev();
extern void _ZN10S4531C2_nt3v11Ev();
extern void _ZN10S4531C2_nt3v12Ev();
extern void _ZN10S4531C2_nt3v13Ev();
extern void _ZN10S4531C2_nt3v14Ev();
extern void _ZN10S4531C5_nt2v9Ev();
static  VTBL_ENTRY vtc_S4531C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4531C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4531C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v14Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI10S4531C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4531C5_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S4531C2_nt[];
VTBL_ENTRY *P__ZTI10S4531C2_nt = _ZTI10S4531C2_nt; 
extern  VTBL_ENTRY _ZTV10S4531C2_nt[];
Class_Descriptor cd_S4531C2_nt = {  "S4531C2_nt", // class name
  bases_S4531C2_nt, 2,
  &(vtc_S4531C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI10S4531C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S4531C2_nt),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C14_nt  {
  short s4531c14f0[3];
  void  mf4531c14(); // _ZN11S4531C14_nt9mf4531c14Ev
};
//SIG(-1 S4531C14_nt) C1{ m Fs[3]}


void  S4531C14_nt ::mf4531c14(){}

//skip512 S4531C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4531C1  : S4531C2_nt {
  ::S3639C14_nt s4531c1f0;
  ::S4531C14_nt s4531c1f1;
  ::S4531C14_nt s4531c1f2;
  virtual void  v1(); // _ZN7S4531C12v1Ev
  ~S4531C1(); // tgen
  S4531C1(); // tgen
};
//SIG(1 S4531C1) C1{ BC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 FC4{ m Fp[3]} Fi:1} BC5{ v9} vd v10 v11 v12 v13 v14 FC6{ m FC7{ BC8{ m Fp Fi[2]}} Fi} FC9{ Fi:1 Fi:3} FC10{ m Fp} FC10 Fp FC11{ m Fi[4]} Fi Fp Fi[2]} v1 FC12{ m Fp[2]} FC13{ m Fs[3]} FC13}


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

static void Test_S4531C1()
{
  extern Class_Descriptor cd_S4531C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,28)];
    init_test(&cd_S4531C1, buf);
    S4531C1 *dp, &lv = *(dp=new (buf) S4531C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,108), "sizeof(S4531C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4531C1)");
    check_base_class_offset(lv, (S4531C3_nt*)(S4531C2_nt*), 0, "S4531C1");
    check_base_class_offset(lv, (S4531C5_nt*)(S4531C2_nt*), ABISELECT(40,20), "S4531C1");
    check_base_class_offset(lv, (S4531C2_nt*), 0, "S4531C1");
    check_field_offset(lv, s4531c1f0, ABISELECT(144,88), "S4531C1.s4531c1f0");
    check_field_offset(lv, s4531c1f1, ABISELECT(160,96), "S4531C1.s4531c1f1");
    check_field_offset(lv, s4531c1f2, ABISELECT(166,102), "S4531C1.s4531c1f2");
    test_class_info(&lv, &cd_S4531C1);
    dp->~S4531C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4531C1(Test_S4531C1, "S4531C1", ABISELECT(176,108));

#else // __cplusplus

extern void _ZN7S4531C1C1Ev();
extern void _ZN7S4531C1D1Ev();
Name_Map name_map_S4531C1[] = {
  NSPAIR(_ZN7S4531C1C1Ev),
  NSPAIR(_ZN7S4531C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4531C3_nt;
extern VTBL_ENTRY _ZTI10S4531C3_nt[];
extern  VTBL_ENTRY _ZTV10S4531C3_nt[];
extern Class_Descriptor cd_S4531C5_nt;
extern VTBL_ENTRY _ZTI10S4531C5_nt[];
extern  VTBL_ENTRY _ZTV10S4531C5_nt[];
extern Class_Descriptor cd_S4531C2_nt;
extern VTBL_ENTRY _ZTI10S4531C2_nt[];
extern  VTBL_ENTRY _ZTV10S4531C2_nt[];
static Base_Class bases_S4531C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4531C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4531C5_nt,    ABISELECT(40,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4531C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4531C1[];
extern void _ZN7S4531C1D1Ev();
extern void _ZN7S4531C1D0Ev();
extern void _ZN10S4531C3_nt2v2Ev();
extern void _ZN10S4531C3_nt2v3Ev();
extern void _ZN10S4531C3_nt2v4Ev();
extern void _ZN10S4531C3_nt2v5Ev();
extern void _ZN10S4531C3_nt2v6Ev();
extern void _ZN10S4531C3_nt2v7Ev();
extern void _ZN10S4531C3_nt2v8Ev();
extern void _ZN10S4531C2_nt3v10Ev();
extern void _ZN10S4531C2_nt3v11Ev();
extern void _ZN10S4531C2_nt3v12Ev();
extern void _ZN10S4531C2_nt3v13Ev();
extern void _ZN10S4531C2_nt3v14Ev();
extern void _ZN7S4531C12v1Ev();
extern void _ZN10S4531C5_nt2v9Ev();
static  VTBL_ENTRY vtc_S4531C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4531C1[0]),
  (VTBL_ENTRY)&_ZN7S4531C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4531C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4531C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4531C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S4531C12v1Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S4531C1[0]),
  (VTBL_ENTRY)&_ZN10S4531C5_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI7S4531C1[];
extern  VTBL_ENTRY _ZTV7S4531C1[];
Class_Descriptor cd_S4531C1 = {  "S4531C1", // class name
  bases_S4531C1, 3,
  &(vtc_S4531C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,108), // object size
  NSPAIRA(_ZTI7S4531C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4531C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7577C3  {
  char s7577c3f0;
  long s7577c3f1[8];
  virtual void  v3(); // _ZN7S7577C32v3Ev
  virtual void  v4(); // _ZN7S7577C32v4Ev
  virtual void  v5(); // _ZN7S7577C32v5Ev
  ~S7577C3(); // tgen
  S7577C3(); // tgen
};
//SIG(-1 S7577C3) C1{ v1 v2 v3 Fc Fl[8]}


void  S7577C3 ::v3(){vfunc_called(this, "_ZN7S7577C32v3Ev");}
void  S7577C3 ::v4(){vfunc_called(this, "_ZN7S7577C32v4Ev");}
void  S7577C3 ::v5(){vfunc_called(this, "_ZN7S7577C32v5Ev");}
S7577C3 ::~S7577C3(){ note_dtor("S7577C3", this);} // tgen
S7577C3 ::S7577C3(){ note_ctor("S7577C3", this);} // tgen

static void Test_S7577C3()
{
  extern Class_Descriptor cd_S7577C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S7577C3, buf);
    S7577C3 *dp, &lv = *(dp=new (buf) S7577C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S7577C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7577C3)");
    check_field_offset(lv, s7577c3f0, ABISELECT(8,4), "S7577C3.s7577c3f0");
    check_field_offset(lv, s7577c3f1, ABISELECT(16,8), "S7577C3.s7577c3f1");
    test_class_info(&lv, &cd_S7577C3);
    dp->~S7577C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7577C3(Test_S7577C3, "S7577C3", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S7577C3C1Ev();
extern void _ZN7S7577C3D1Ev();
Name_Map name_map_S7577C3[] = {
  NSPAIR(_ZN7S7577C3C1Ev),
  NSPAIR(_ZN7S7577C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7577C3[];
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
static  VTBL_ENTRY vtc_S7577C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C3[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
Class_Descriptor cd_S7577C3 = {  "S7577C3", // class name
  0,0,//no base classes
  &(vtc_S7577C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S7577C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7577C3),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  S7577C2  : virtual S7577C3 {
  short s7577c2f0;
  void *s7577c2f1[2];
  short s7577c2f2[4];
  virtual void  v6(); // _ZN7S7577C22v6Ev
  ~S7577C2(); // tgen
  S7577C2(); // tgen
};
//SIG(-1 S7577C2) C1{ VBC2{ v2 v3 v4 Fc Fl[8]} v1 Fs Fp[2] Fs[4]}


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

static void Test_S7577C2()
{
  extern Class_Descriptor cd_S7577C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S7577C2, buf);
    S7577C2 *dp, &lv = *(dp=new (buf) S7577C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S7577C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7577C2)");
    check_base_class_offset(lv, (S7577C3*), ABISELECT(40,24), "S7577C2");
    check_field_offset(lv, s7577c2f0, ABISELECT(8,4), "S7577C2.s7577c2f0");
    check_field_offset(lv, s7577c2f1, ABISELECT(16,8), "S7577C2.s7577c2f1");
    check_field_offset(lv, s7577c2f2, ABISELECT(32,16), "S7577C2.s7577c2f2");
    test_class_info(&lv, &cd_S7577C2);
    dp->~S7577C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7577C2(Test_S7577C2, "S7577C2", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN7S7577C2C1Ev();
extern void _ZN7S7577C2D1Ev();
Name_Map name_map_S7577C2[] = {
  NSPAIR(_ZN7S7577C2C1Ev),
  NSPAIR(_ZN7S7577C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
static Base_Class bases_S7577C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7577C3,    ABISELECT(40,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7577C2[];
extern void _ZN7S7577C22v6Ev();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
static  VTBL_ENTRY vtc_S7577C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C2[0]),
  (VTBL_ENTRY)&_ZN7S7577C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7577C2[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
};
extern VTBL_ENTRY _ZTV7S7577C2[];
static  VTT_ENTRY vtt_S7577C2[] = {
  {&(_ZTV7S7577C2[3]),  3,12},
  {&(_ZTV7S7577C2[9]),  9,12},
};
extern VTBL_ENTRY _ZTI7S7577C2[];
extern  VTBL_ENTRY _ZTV7S7577C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C2[];
Class_Descriptor cd_S7577C2 = {  "S7577C2", // class name
  bases_S7577C2, 1,
  &(vtc_S7577C2[0]), // expected_vtbl_contents
  &(vtt_S7577C2[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI7S7577C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7577C2),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7577C2),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  S7577C4  : S7577C3 {
  ::S7577C3 s7577c4f0;
  long double s7577c4f1;
  ::S7577C3 s7577c4f2;
  virtual  ~S7577C4(); // _ZN7S7577C4D1Ev
  virtual void  v7(); // _ZN7S7577C42v7Ev
  virtual void  v8(); // _ZN7S7577C42v8Ev
  S7577C4(); // tgen
};
//SIG(-1 S7577C4) C1{ BC2{ v3 v4 v5 Fc Fl[8]} vd v1 v2 FC2 FD FC2}


 S7577C4 ::~S7577C4(){ note_dtor("S7577C4", this);}
void  S7577C4 ::v7(){vfunc_called(this, "_ZN7S7577C42v7Ev");}
void  S7577C4 ::v8(){vfunc_called(this, "_ZN7S7577C42v8Ev");}
S7577C4 ::S7577C4(){ note_ctor("S7577C4", this);} // tgen

static void Test_S7577C4()
{
  extern Class_Descriptor cd_S7577C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,34)];
    init_test(&cd_S7577C4, buf);
    S7577C4 *dp, &lv = *(dp=new (buf) S7577C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,132), "sizeof(S7577C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7577C4)");
    check_base_class_offset(lv, (S7577C3*), 0, "S7577C4");
    check_field_offset(lv, s7577c4f0, ABISELECT(80,40), "S7577C4.s7577c4f0");
    check_field_offset(lv, s7577c4f1, ABISELECT(160,80), "S7577C4.s7577c4f1");
    check_field_offset(lv, s7577c4f2, ABISELECT(176,92), "S7577C4.s7577c4f2");
    test_class_info(&lv, &cd_S7577C4);
    dp->~S7577C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7577C4(Test_S7577C4, "S7577C4", ABISELECT(256,132));

#else // __cplusplus

extern void _ZN7S7577C4C1Ev();
extern void _ZN7S7577C4D1Ev();
Name_Map name_map_S7577C4[] = {
  NSPAIR(_ZN7S7577C4C1Ev),
  NSPAIR(_ZN7S7577C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
static Base_Class bases_S7577C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7577C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7577C4[];
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C4D1Ev();
extern void _ZN7S7577C4D0Ev();
extern void _ZN7S7577C42v7Ev();
extern void _ZN7S7577C42v8Ev();
static  VTBL_ENTRY vtc_S7577C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C4[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7577C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7577C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7577C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S7577C4[];
extern  VTBL_ENTRY _ZTV7S7577C4[];
Class_Descriptor cd_S7577C4 = {  "S7577C4", // class name
  bases_S7577C4, 1,
  &(vtc_S7577C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,132), // object size
  NSPAIRA(_ZTI7S7577C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7577C4),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  S7577C7  : S7577C3 {
  int s7577c7f0;
  virtual void  v9(); // _ZN7S7577C72v9Ev
  virtual void  v10(); // _ZN7S7577C73v10Ev
  virtual void  v11(); // _ZN7S7577C73v11Ev
  ~S7577C7(); // tgen
  S7577C7(); // tgen
};
//SIG(-1 S7577C7) C1{ BC2{ v4 v5 v6 Fc Fl[8]} v1 v2 v3 Fi}


void  S7577C7 ::v9(){vfunc_called(this, "_ZN7S7577C72v9Ev");}
void  S7577C7 ::v10(){vfunc_called(this, "_ZN7S7577C73v10Ev");}
void  S7577C7 ::v11(){vfunc_called(this, "_ZN7S7577C73v11Ev");}
S7577C7 ::~S7577C7(){ note_dtor("S7577C7", this);} // tgen
S7577C7 ::S7577C7(){ note_ctor("S7577C7", this);} // tgen

static void Test_S7577C7()
{
  extern Class_Descriptor cd_S7577C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S7577C7, buf);
    S7577C7 *dp, &lv = *(dp=new (buf) S7577C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S7577C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7577C7)");
    check_base_class_offset(lv, (S7577C3*), 0, "S7577C7");
    check_field_offset(lv, s7577c7f0, ABISELECT(80,40), "S7577C7.s7577c7f0");
    test_class_info(&lv, &cd_S7577C7);
    dp->~S7577C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7577C7(Test_S7577C7, "S7577C7", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN7S7577C7C1Ev();
extern void _ZN7S7577C7D1Ev();
Name_Map name_map_S7577C7[] = {
  NSPAIR(_ZN7S7577C7C1Ev),
  NSPAIR(_ZN7S7577C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
static Base_Class bases_S7577C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7577C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7577C7[];
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY vtc_S7577C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C7[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
extern VTBL_ENTRY _ZTI7S7577C7[];
extern  VTBL_ENTRY _ZTV7S7577C7[];
Class_Descriptor cd_S7577C7 = {  "S7577C7", // class name
  bases_S7577C7, 1,
  &(vtc_S7577C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI7S7577C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7577C7),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  S7577C6  : S7577C7 {
  long double s7577c6f0[7];
  void *s7577c6f1[2];
  virtual void  v12(); // _ZN7S7577C63v12Ev
  ~S7577C6(); // tgen
  S7577C6(); // tgen
};
//SIG(-1 S7577C6) C1{ BC2{ BC3{ v2 v3 v4 Fc Fl[8]} v5 v6 v7 Fi} v1 FD[7] Fp[2]}


void  S7577C6 ::v12(){vfunc_called(this, "_ZN7S7577C63v12Ev");}
S7577C6 ::~S7577C6(){ note_dtor("S7577C6", this);} // tgen
S7577C6 ::S7577C6(){ note_ctor("S7577C6", this);} // tgen

static void Test_S7577C6()
{
  extern Class_Descriptor cd_S7577C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,35)];
    init_test(&cd_S7577C6, buf);
    S7577C6 *dp, &lv = *(dp=new (buf) S7577C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S7577C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7577C6)");
    check_base_class_offset(lv, (S7577C3*)(S7577C7*), 0, "S7577C6");
    check_base_class_offset(lv, (S7577C7*), 0, "S7577C6");
    check_field_offset(lv, s7577c6f0, ABISELECT(96,44), "S7577C6.s7577c6f0");
    check_field_offset(lv, s7577c6f1, ABISELECT(208,128), "S7577C6.s7577c6f1");
    test_class_info(&lv, &cd_S7577C6);
    dp->~S7577C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7577C6(Test_S7577C6, "S7577C6", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN7S7577C6C1Ev();
extern void _ZN7S7577C6D1Ev();
Name_Map name_map_S7577C6[] = {
  NSPAIR(_ZN7S7577C6C1Ev),
  NSPAIR(_ZN7S7577C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C7;
extern VTBL_ENTRY _ZTI7S7577C7[];
extern  VTBL_ENTRY _ZTV7S7577C7[];
static Base_Class bases_S7577C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7577C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7577C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7577C6[];
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
extern void _ZN7S7577C63v12Ev();
static  VTBL_ENTRY vtc_S7577C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C6[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
  (VTBL_ENTRY)&_ZN7S7577C63v12Ev,
};
extern VTBL_ENTRY _ZTI7S7577C6[];
extern  VTBL_ENTRY _ZTV7S7577C6[];
Class_Descriptor cd_S7577C6 = {  "S7577C6", // class name
  bases_S7577C6, 2,
  &(vtc_S7577C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI7S7577C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7577C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7577C9  : virtual S7577C7 {
  ::S7577C7 s7577c9f0;
  int s7577c9f1;
  ::S19762C18_nt s7577c9f2;
  void *s7577c9f3;
  ~S7577C9(); // tgen
  S7577C9(); // tgen
};
//SIG(-1 S7577C9) C1{ VBC2{ BC3{ v1 v2 v3 Fc Fl[8]} v4 v5 v6 Fi} FC2 Fi FC4{} Fp}


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

static void Test_S7577C9()
{
  extern Class_Descriptor cd_S7577C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,27)];
    init_test(&cd_S7577C9, buf);
    S7577C9 *dp, &lv = *(dp=new (buf) S7577C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,104), "sizeof(S7577C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7577C9)");
    check_base_class_offset(lv, (S7577C3*)(S7577C7*), ABISELECT(112,60), "S7577C9");
    check_base_class_offset(lv, (S7577C7*), ABISELECT(112,60), "S7577C9");
    check_field_offset(lv, s7577c9f0, ABISELECT(8,4), "S7577C9.s7577c9f0");
    check_field_offset(lv, s7577c9f1, ABISELECT(96,48), "S7577C9.s7577c9f1");
    check_field_offset(lv, s7577c9f2, ABISELECT(100,52), "S7577C9.s7577c9f2");
    check_field_offset(lv, s7577c9f3, ABISELECT(104,56), "S7577C9.s7577c9f3");
    test_class_info(&lv, &cd_S7577C9);
    dp->~S7577C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7577C9(Test_S7577C9, "S7577C9", ABISELECT(200,104));

#else // __cplusplus

extern void _ZN7S7577C9C1Ev();
extern void _ZN7S7577C9D1Ev();
Name_Map name_map_S7577C9[] = {
  NSPAIR(_ZN7S7577C9C1Ev),
  NSPAIR(_ZN7S7577C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C7;
extern VTBL_ENTRY _ZTI7S7577C7[];
extern  VTBL_ENTRY _ZTV7S7577C7[];
static Base_Class bases_S7577C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7577C3,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7577C7,    ABISELECT(112,60), //bcp->offset
    3, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7577C9[];
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY vtc_S7577C9[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C9[0]),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7577C9[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
extern VTBL_ENTRY _ZTV7S7577C9[];
static  VTT_ENTRY vtt_S7577C9[] = {
  {&(_ZTV7S7577C9[3]),  3,17},
  {&(_ZTV7S7577C9[11]),  11,17},
};
extern VTBL_ENTRY _ZTI7S7577C9[];
extern  VTBL_ENTRY _ZTV7S7577C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C9[];
Class_Descriptor cd_S7577C9 = {  "S7577C9", // class name
  bases_S7577C9, 2,
  &(vtc_S7577C9[0]), // expected_vtbl_contents
  &(vtt_S7577C9[0]), // expected_vtt_contents
  ABISELECT(200,104), // object size
  NSPAIRA(_ZTI7S7577C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7577C9),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7577C9),2, //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  S7577C8  : virtual S7577C4 , S7577C9 {
  long s7577c8f0;
  virtual  ~S7577C8(); // _ZN7S7577C8D2Ev
  S7577C8(); // tgen
};
//SIG(-1 S7577C8) C1{ VBC2{ BC3{ v1 v2 v3 Fc Fl[8]} vd v4 v5 FC3 FD FC3} BC4{ VBC5{ BC3 v6 v7 v8 Fi} FC5 Fi FC6{} Fp} vd Fl}


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

static void Test_S7577C8()
{
  extern Class_Descriptor cd_S7577C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(31,61)];
    init_test(&cd_S7577C8, buf);
    S7577C8 *dp, &lv = *(dp=new (buf) S7577C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,240), "sizeof(S7577C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7577C8)");
    check_base_class_offset(lv, (S7577C3*)(S7577C4*), ABISELECT(128,64), "S7577C8");
    check_base_class_offset(lv, (S7577C4*), ABISELECT(128,64), "S7577C8");
    check_base_class_offset(lv, (S7577C3*)(S7577C7*), ABISELECT(384,196), "S7577C8");
    check_base_class_offset(lv, (S7577C7*)(S7577C9*), ABISELECT(384,196), "S7577C8");
    check_base_class_offset(lv, (S7577C9*), 0, "S7577C8");
    check_field_offset(lv, s7577c8f0, ABISELECT(112,60), "S7577C8.s7577c8f0");
    test_class_info(&lv, &cd_S7577C8);
    dp->~S7577C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7577C8(Test_S7577C8, "S7577C8", ABISELECT(480,240));

#else // __cplusplus

extern void _ZN7S7577C8C1Ev();
extern void _ZN7S7577C8D2Ev();
Name_Map name_map_S7577C8[] = {
  NSPAIR(_ZN7S7577C8C1Ev),
  NSPAIR(_ZN7S7577C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C4;
extern VTBL_ENTRY _ZTI7S7577C4[];
extern  VTBL_ENTRY _ZTV7S7577C4[];
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C7;
extern VTBL_ENTRY _ZTI7S7577C7[];
extern  VTBL_ENTRY _ZTV7S7577C7[];
extern Class_Descriptor cd_S7577C9;
extern VTBL_ENTRY _ZTI7S7577C9[];
extern  VTBL_ENTRY _ZTV7S7577C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C9[];
static Base_Class bases_S7577C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7577C3,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7577C4,    ABISELECT(128,64), //bcp->offset
    6, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7577C3,    ABISELECT(384,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7577C7,    ABISELECT(384,196), //bcp->offset
    21, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7577C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7577C8[];
extern void _ZN7S7577C8D1Ev();
extern void _ZN7S7577C8D0Ev();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7577C8D1Ev,_ZTv0_n24_N7S7577C8D1Ev)();
extern void ABISELECT(_ZThn128_N7S7577C8D1Ev,_ZThn64_N7S7577C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7577C8D0Ev,_ZTv0_n24_N7S7577C8D0Ev)();
extern void ABISELECT(_ZThn128_N7S7577C8D0Ev,_ZThn64_N7S7577C8D0Ev)() __attribute__((weak));
extern void _ZN7S7577C42v7Ev();
extern void _ZN7S7577C42v8Ev();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY vtc_S7577C8[] = {
  ABISELECT(128,64),
  ABISELECT(384,196),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C8[0]),
  (VTBL_ENTRY)&_ZN7S7577C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7577C8D0Ev,
  0,
  0,
  ABISELECT(-128,-64),
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7577C8[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C8D1Ev,_ZTv0_n24_N7S7577C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C8D0Ev,_ZTv0_n24_N7S7577C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7577C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7577C42v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-196),
  (VTBL_ENTRY)&(_ZTI7S7577C8[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
extern VTBL_ENTRY _ZTV7S7577C8[];
static  VTBL_ENTRY _tg__ZTV7S7577C9__7S7577C8[] = {
  ABISELECT(384,196),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C9[0]),
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C7__7S7577C9__7S7577C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-196),
  (VTBL_ENTRY)&(_ZTI7S7577C9[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
static  VTT_ENTRY vtt_S7577C8[] = {
  {&(_ZTV7S7577C8[4]),  4,35},
  {&(_tg__ZTV7S7577C9__7S7577C8[3]),  3,3},
  {&(_tg__ZTV7S7577C7__7S7577C9__7S7577C8[8]),  8,14},
  {&(_ZTV7S7577C8[14]),  14,35},
  {&(_ZTV7S7577C8[29]),  29,35},
};
extern VTBL_ENTRY _ZTI7S7577C8[];
extern  VTBL_ENTRY _ZTV7S7577C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C8[];
static VTBL_ENTRY alt_thunk_names141[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7577C8D0Ev,_ZTv0_n24_N7S7577C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7577C8D0Ev,_ZThn64_N7S7577C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7577C8D1Ev,_ZTv0_n24_N7S7577C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7577C8D1Ev,_ZThn64_N7S7577C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7577C8 = {  "S7577C8", // class name
  bases_S7577C8, 5,
  &(vtc_S7577C8[0]), // expected_vtbl_contents
  &(vtt_S7577C8[0]), // expected_vtt_contents
  ABISELECT(480,240), // object size
  NSPAIRA(_ZTI7S7577C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7577C8),35, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7577C8),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names141,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7577C5  : S7577C3 , S7577C6 , virtual S7577C2 , virtual S7577C4 , virtual S7577C8 {
  void *s7577c5f0;
  virtual void  v13(); // _ZN7S7577C53v13Ev
  virtual void  v14(); // _ZN7S7577C53v14Ev
  ~S7577C5(); // tgen
  S7577C5(); // tgen
};
//SIG(-1 S7577C5) C1{ BC2{ v3 v4 v5 Fc Fl[8]} BC3{ BC4{ BC2 v6 v7 v8 Fi} v9 FD[7] Fp[2]} VBC5{ VBC2 v10 Fs Fp[2] Fs[4]} VBC6{ BC2 vd v11 v12 FC2 FD FC2} VBC7{ VBC6 BC8{ VBC4 FC4 Fi FC9{} Fp} vd Fl} v1 v2 Fp}


void  S7577C5 ::v13(){vfunc_called(this, "_ZN7S7577C53v13Ev");}
void  S7577C5 ::v14(){vfunc_called(this, "_ZN7S7577C53v14Ev");}
S7577C5 ::~S7577C5(){ note_dtor("S7577C5", this);} // tgen
S7577C5 ::S7577C5(){ note_ctor("S7577C5", this);} // tgen

static void Test_S7577C5()
{
  extern Class_Descriptor cd_S7577C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(57,122)];
    init_test(&cd_S7577C5, buf);
    S7577C5 *dp, &lv = *(dp=new (buf) S7577C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(896,484), "sizeof(S7577C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7577C5)");
    /*is_ambiguous_... S7577C5::S7577C3 */ AMB_check_base_class_offset(lv, (S7577C3*), 0, "S7577C5");
    check_base_class_offset(lv, (S7577C3*)(S7577C7*)(S7577C6*), ABISELECT(80,40), "S7577C5");
    check_base_class_offset(lv, (S7577C7*)(S7577C6*), ABISELECT(80,40), "S7577C5");
    check_base_class_offset(lv, (S7577C6*), ABISELECT(80,40), "S7577C5");
    check_base_class_offset(lv, (S7577C3*)(S7577C2*), ABISELECT(352,204), "S7577C5");
    check_base_class_offset(lv, (S7577C2*), ABISELECT(312,180), "S7577C5");
    check_base_class_offset(lv, (S7577C3*)(S7577C4*), ABISELECT(432,244), "S7577C5");
    check_base_class_offset(lv, (S7577C4*), ABISELECT(432,244), "S7577C5");
    check_base_class_offset(lv, (S7577C4*)(S7577C8*), ABISELECT(432,244), "S7577C5");
    /*is_ambiguous_... S7577C5::S7577C7 */ AMB_check_base_class_offset(lv, (S7577C3*)(S7577C7*), ABISELECT(808,440), "S7577C5");
    check_base_class_offset(lv, (S7577C7*)(S7577C9*)(S7577C8*), ABISELECT(808,440), "S7577C5");
    check_base_class_offset(lv, (S7577C9*)(S7577C8*), ABISELECT(688,376), "S7577C5");
    check_base_class_offset(lv, (S7577C8*), ABISELECT(688,376), "S7577C5");
    check_field_offset(lv, s7577c5f0, ABISELECT(304,176), "S7577C5.s7577c5f0");
    test_class_info(&lv, &cd_S7577C5);
    dp->~S7577C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7577C5(Test_S7577C5, "S7577C5", ABISELECT(896,484));

#else // __cplusplus

extern void _ZN7S7577C5C1Ev();
extern void _ZN7S7577C5D1Ev();
Name_Map name_map_S7577C5[] = {
  NSPAIR(_ZN7S7577C5C1Ev),
  NSPAIR(_ZN7S7577C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C7;
extern VTBL_ENTRY _ZTI7S7577C7[];
extern  VTBL_ENTRY _ZTV7S7577C7[];
extern Class_Descriptor cd_S7577C6;
extern VTBL_ENTRY _ZTI7S7577C6[];
extern  VTBL_ENTRY _ZTV7S7577C6[];
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C2;
extern VTBL_ENTRY _ZTI7S7577C2[];
extern  VTBL_ENTRY _ZTV7S7577C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C2[];
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C4;
extern VTBL_ENTRY _ZTI7S7577C4[];
extern  VTBL_ENTRY _ZTV7S7577C4[];
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C7;
extern VTBL_ENTRY _ZTI7S7577C7[];
extern  VTBL_ENTRY _ZTV7S7577C7[];
extern Class_Descriptor cd_S7577C9;
extern VTBL_ENTRY _ZTI7S7577C9[];
extern  VTBL_ENTRY _ZTV7S7577C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C9[];
extern Class_Descriptor cd_S7577C8;
extern VTBL_ENTRY _ZTI7S7577C8[];
extern  VTBL_ENTRY _ZTV7S7577C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C8[];
static Base_Class bases_S7577C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7577C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7577C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7577C7,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7577C6,    ABISELECT(80,40), //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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7577C3,    ABISELECT(352,204), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7577C2,    ABISELECT(312,180), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7577C3,    ABISELECT(432,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7577C4,    ABISELECT(432,244), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7577C3,    ABISELECT(808,440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7577C7,    ABISELECT(808,440), //bcp->offset
    58, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7577C9,    ABISELECT(688,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7577C8,    ABISELECT(688,376), //bcp->offset
    51, //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
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7577C5[];
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C53v13Ev();
extern void _ZN7S7577C53v14Ev();
extern void _ZN7S7577C5D1Ev();
extern void _ZN7S7577C5D0Ev();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
extern void _ZN7S7577C63v12Ev();
extern void _ZN7S7577C22v6Ev();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7577C5D1Ev,_ZTv0_n24_N7S7577C5D1Ev)();
extern void ABISELECT(_ZThn432_N7S7577C5D1Ev,_ZThn244_N7S7577C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7577C5D0Ev,_ZTv0_n24_N7S7577C5D0Ev)();
extern void ABISELECT(_ZThn432_N7S7577C5D0Ev,_ZThn244_N7S7577C5D0Ev)() __attribute__((weak));
extern void _ZN7S7577C42v7Ev();
extern void _ZN7S7577C42v8Ev();
extern void ABISELECT(_ZTv0_n40_N7S7577C5D1Ev,_ZTv0_n20_N7S7577C5D1Ev)();
extern void ABISELECT(_ZThn688_N7S7577C5D1Ev,_ZThn376_N7S7577C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7577C5D0Ev,_ZTv0_n20_N7S7577C5D0Ev)();
extern void ABISELECT(_ZThn688_N7S7577C5D0Ev,_ZThn376_N7S7577C5D0Ev)() __attribute__((weak));
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY vtc_S7577C5[] = {
  ABISELECT(808,440),
  ABISELECT(688,376),
  ABISELECT(432,244),
  ABISELECT(352,204),
  ABISELECT(312,180),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7577C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7577C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7577C5D0Ev,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
  (VTBL_ENTRY)&_ZN7S7577C63v12Ev,
  0,
  ABISELECT(40,24),
  ABISELECT(-312,-180),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  0,
  0,
  ABISELECT(-432,-244),
  0,
  0,
  0,
  ABISELECT(-432,-244),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C5D1Ev,_ZTv0_n24_N7S7577C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C5D0Ev,_ZTv0_n24_N7S7577C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7577C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7577C42v8Ev,
  ABISELECT(-688,-376),
  ABISELECT(-256,-132),
  ABISELECT(120,64),
  ABISELECT(-688,-376),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7577C5D1Ev,_ZTv0_n20_N7S7577C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7577C5D0Ev,_ZTv0_n20_N7S7577C5D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-808,-440),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
extern VTBL_ENTRY _ZTV7S7577C5[];
extern void _ZN7S7577C22v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C2__7S7577C5[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C2[0]),
  (VTBL_ENTRY)&_ZN7S7577C22v6Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C3__7S7577C2__7S7577C5[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7577C2[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
};
extern void _ZN7S7577C8D1Ev();
extern void _ZN7S7577C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C8__7S7577C5[] = {
  ABISELECT(-256,-132),
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C8[0]),
  (VTBL_ENTRY)&_ZN7S7577C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7577C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7577C97S7577C8__7S7577C5[] = {
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C9[0]),
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C7__7S7577C97S7577C8__7S7577C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7577C9[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7577C8D1Ev,_ZTv0_n24_N7S7577C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7577C8D0Ev,_ZTv0_n24_N7S7577C8D0Ev)();
extern void _ZN7S7577C42v7Ev();
extern void _ZN7S7577C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C4__7S7577C8__7S7577C5[] = {
  0,
  0,
  ABISELECT(256,132),
  0,
  0,
  0,
  ABISELECT(256,132),
  (VTBL_ENTRY)&(_ZTI7S7577C8[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C8D1Ev,_ZTv0_n24_N7S7577C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C8D0Ev,_ZTv0_n24_N7S7577C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7577C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7577C42v8Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C7__7S7577C8__7S7577C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7577C8[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
static  VTT_ENTRY vtt_S7577C5[] = {
  {&(_ZTV7S7577C5[7]),  7,72},
  {&(_ZTV7S7577C5[27]),  27,72},
  {&(_ZTV7S7577C5[33]),  33,72},
  {&(_ZTV7S7577C5[44]),  44,72},
  {&(_ZTV7S7577C5[56]),  56,72},
  {&(_ZTV7S7577C5[66]),  66,72},
  {&(_tg__ZTV7S7577C2__7S7577C5[3]),  3,4},
  {&(_tg__ZTV7S7577C3__7S7577C2__7S7577C5[5]),  5,8},
  {&(_tg__ZTV7S7577C8__7S7577C5[4]),  4,6},
  {&(_tg__ZTV7S7577C97S7577C8__7S7577C5[3]),  3,3},
  {&(_tg__ZTV7S7577C7__7S7577C97S7577C8__7S7577C5[8]),  8,14},
  {&(_tg__ZTV7S7577C4__7S7577C8__7S7577C5[8]),  8,15},
  {&(_tg__ZTV7S7577C7__7S7577C8__7S7577C5[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S7577C5[];
extern  VTBL_ENTRY _ZTV7S7577C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C5[];
static VTBL_ENTRY alt_thunk_names142[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7577C5D0Ev,_ZTv0_n20_N7S7577C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N7S7577C5D0Ev,_ZThn376_N7S7577C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7577C5D1Ev,_ZTv0_n20_N7S7577C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N7S7577C5D1Ev,_ZThn376_N7S7577C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7577C5D0Ev,_ZTv0_n24_N7S7577C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S7577C5D0Ev,_ZThn244_N7S7577C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7577C5D1Ev,_ZTv0_n24_N7S7577C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S7577C5D1Ev,_ZThn244_N7S7577C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7577C5 = {  "S7577C5", // class name
  bases_S7577C5, 12,
  &(vtc_S7577C5[0]), // expected_vtbl_contents
  &(vtt_S7577C5[0]), // expected_vtt_contents
  ABISELECT(896,484), // object size
  NSPAIRA(_ZTI7S7577C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7577C5),72, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7577C5),13, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names142,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7577C1  : S7577C2 , virtual S7577C4 , S7577C5 {
  ::S7577C9 s7577c1f0[4];
  virtual void  v1(); // _ZN7S7577C12v1Ev
  virtual void  v2(); // _ZN7S7577C12v2Ev
  ~S7577C1(); // tgen
  S7577C1(); // tgen
};
//SIG(1 S7577C1) C1{ BC2{ VBC3{ v3 v4 v5 Fc Fl[8]} v6 Fs Fp[2] Fs[4]} VBC4{ BC3 vd v7 v8 FC3 FD FC3} BC5{ BC3 BC6{ BC7{ BC3 v9 v10 v11 Fi} v12 FD[7] Fp[2]} VBC2 VBC4 VBC8{ VBC4 BC9{ VBC7 FC7 Fi FC10{} Fp} vd Fl} v13 v14 Fp} v1 v2 FC9[4]}


void  S7577C1 ::v1(){vfunc_called(this, "_ZN7S7577C12v1Ev");}
void  S7577C1 ::v2(){vfunc_called(this, "_ZN7S7577C12v2Ev");}
S7577C1 ::~S7577C1(){ note_dtor("S7577C1", this);} // tgen
S7577C1 ::S7577C1(){ note_ctor("S7577C1", this);} // tgen

static void Test_S7577C1()
{
  extern Class_Descriptor cd_S7577C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(111,232)];
    init_test(&cd_S7577C1, buf);
    S7577C1 *dp, &lv = *(dp=new (buf) S7577C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1760,924), "sizeof(S7577C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7577C1)");
    /*is_ambiguous_... S7577C1::S7577C2 */ AMB_check_base_class_offset(lv, (S7577C3*)(S7577C2*), ABISELECT(1160,620), "S7577C1");
    /*is_ambiguous_... S7577C1::S7577C2 */ AMB_check_base_class_offset(lv, (S7577C3*)(S7577C2*), ABISELECT(1160,620), "S7577C1");
    /*is_ambiguous_... S7577C1::S7577C2 */ AMB_check_base_class_offset(lv, (S7577C2*), 0, "S7577C1");
    check_base_class_offset(lv, (S7577C3*)(S7577C4*), ABISELECT(1248,660), "S7577C1");
    check_base_class_offset(lv, (S7577C4*), ABISELECT(1248,660), "S7577C1");
    check_base_class_offset(lv, (S7577C4*)(S7577C5*), ABISELECT(1248,660), "S7577C1");
    check_base_class_offset(lv, (S7577C4*)(S7577C8*), ABISELECT(1248,660), "S7577C1");
    /*is_ambiguous_... S7577C5::S7577C3 */ AMB_check_base_class_offset(lv, (S7577C3*)(S7577C5*), ABISELECT(48,24), "S7577C1");
    check_base_class_offset(lv, (S7577C3*)(S7577C7*)(S7577C6*)(S7577C5*), ABISELECT(128,64), "S7577C1");
    check_base_class_offset(lv, (S7577C7*)(S7577C6*)(S7577C5*), ABISELECT(128,64), "S7577C1");
    check_base_class_offset(lv, (S7577C6*)(S7577C5*), ABISELECT(128,64), "S7577C1");
    check_base_class_offset(lv, (S7577C2*)(S7577C5*), ABISELECT(1504,792), "S7577C1");
    /*is_ambiguous_... S7577C1::S7577C7 */ AMB_check_base_class_offset(lv, (S7577C3*)(S7577C7*), ABISELECT(1664,880), "S7577C1");
    check_base_class_offset(lv, (S7577C7*)(S7577C9*)(S7577C8*), ABISELECT(1664,880), "S7577C1");
    check_base_class_offset(lv, (S7577C9*)(S7577C8*), ABISELECT(1544,816), "S7577C1");
    check_base_class_offset(lv, (S7577C8*)(S7577C5*), ABISELECT(1544,816), "S7577C1");
    check_base_class_offset(lv, (S7577C5*), ABISELECT(48,24), "S7577C1");
    check_field_offset(lv, s7577c1f0, ABISELECT(360,204), "S7577C1.s7577c1f0");
    test_class_info(&lv, &cd_S7577C1);
    dp->~S7577C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7577C1(Test_S7577C1, "S7577C1", ABISELECT(1760,924));

#else // __cplusplus

extern void _ZN7S7577C1C1Ev();
extern void _ZN7S7577C1D1Ev();
Name_Map name_map_S7577C1[] = {
  NSPAIR(_ZN7S7577C1C1Ev),
  NSPAIR(_ZN7S7577C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C2;
extern VTBL_ENTRY _ZTI7S7577C2[];
extern  VTBL_ENTRY _ZTV7S7577C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C2[];
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C4;
extern VTBL_ENTRY _ZTI7S7577C4[];
extern  VTBL_ENTRY _ZTV7S7577C4[];
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C7;
extern VTBL_ENTRY _ZTI7S7577C7[];
extern  VTBL_ENTRY _ZTV7S7577C7[];
extern Class_Descriptor cd_S7577C6;
extern VTBL_ENTRY _ZTI7S7577C6[];
extern  VTBL_ENTRY _ZTV7S7577C6[];
extern Class_Descriptor cd_S7577C2;
extern VTBL_ENTRY _ZTI7S7577C2[];
extern  VTBL_ENTRY _ZTV7S7577C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C2[];
extern Class_Descriptor cd_S7577C3;
extern VTBL_ENTRY _ZTI7S7577C3[];
extern  VTBL_ENTRY _ZTV7S7577C3[];
extern Class_Descriptor cd_S7577C7;
extern VTBL_ENTRY _ZTI7S7577C7[];
extern  VTBL_ENTRY _ZTV7S7577C7[];
extern Class_Descriptor cd_S7577C9;
extern VTBL_ENTRY _ZTI7S7577C9[];
extern  VTBL_ENTRY _ZTV7S7577C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C9[];
extern Class_Descriptor cd_S7577C8;
extern VTBL_ENTRY _ZTI7S7577C8[];
extern  VTBL_ENTRY _ZTV7S7577C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C8[];
extern Class_Descriptor cd_S7577C5;
extern VTBL_ENTRY _ZTI7S7577C5[];
extern  VTBL_ENTRY _ZTV7S7577C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C5[];
static Base_Class bases_S7577C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7577C3,    ABISELECT(1160,620), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7577C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7577C3,    ABISELECT(1248,660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7577C4,    ABISELECT(1248,660), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7577C3,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7577C3,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7577C7,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7577C6,    ABISELECT(128,64), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7577C2,    ABISELECT(1504,792), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7577C3,    ABISELECT(1664,880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7577C7,    ABISELECT(1664,880), //bcp->offset
    70, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7577C9,    ABISELECT(1544,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7577C8,    ABISELECT(1544,816), //bcp->offset
    63, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7577C5,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7577C1[];
extern void _ZN7S7577C22v6Ev();
extern void _ZN7S7577C12v1Ev();
extern void _ZN7S7577C12v2Ev();
extern void _ZN7S7577C1D1Ev();
extern void _ZN7S7577C1D0Ev();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C53v13Ev();
extern void _ZN7S7577C53v14Ev();
extern void ABISELECT(_ZThn48_N7S7577C1D1Ev,_ZThn24_N7S7577C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7577C1D0Ev,_ZThn24_N7S7577C1D0Ev)();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
extern void _ZN7S7577C63v12Ev();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7577C1D1Ev,_ZTv0_n24_N7S7577C1D1Ev)();
extern void ABISELECT(_ZThn1248_N7S7577C1D1Ev,_ZThn660_N7S7577C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7577C1D0Ev,_ZTv0_n24_N7S7577C1D0Ev)();
extern void ABISELECT(_ZThn1248_N7S7577C1D0Ev,_ZThn660_N7S7577C1D0Ev)() __attribute__((weak));
extern void _ZN7S7577C42v7Ev();
extern void _ZN7S7577C42v8Ev();
extern void _ZN7S7577C22v6Ev();
extern void ABISELECT(_ZTv0_n40_N7S7577C1D1Ev,_ZTv0_n20_N7S7577C1D1Ev)();
extern void ABISELECT(_ZThn1544_N7S7577C1D1Ev,_ZThn816_N7S7577C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7577C1D0Ev,_ZTv0_n20_N7S7577C1D0Ev)();
extern void ABISELECT(_ZThn1544_N7S7577C1D0Ev,_ZThn816_N7S7577C1D0Ev)() __attribute__((weak));
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY vtc_S7577C1[] = {
  ABISELECT(1664,880),
  ABISELECT(1544,816),
  ABISELECT(1504,792),
  ABISELECT(1248,660),
  ABISELECT(1160,620),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C1[0]),
  (VTBL_ENTRY)&_ZN7S7577C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7577C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7577C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7577C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7577C1D0Ev,
  ABISELECT(1616,856),
  ABISELECT(1496,792),
  ABISELECT(1200,636),
  ABISELECT(1112,596),
  ABISELECT(1456,768),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7577C1[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7577C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7577C1D1Ev,_ZThn24_N7S7577C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7577C1D0Ev,_ZThn24_N7S7577C1D0Ev),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7577C1[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
  (VTBL_ENTRY)&_ZN7S7577C63v12Ev,
  0,
  0,
  0,
  ABISELECT(-1160,-620),
  (VTBL_ENTRY)&(_ZTI7S7577C1[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  0,
  0,
  ABISELECT(-1248,-660),
  0,
  0,
  0,
  ABISELECT(-1248,-660),
  (VTBL_ENTRY)&(_ZTI7S7577C1[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C1D1Ev,_ZTv0_n24_N7S7577C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C1D0Ev,_ZTv0_n24_N7S7577C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7577C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7577C42v8Ev,
  0,
  ABISELECT(-344,-172),
  ABISELECT(-1504,-792),
  (VTBL_ENTRY)&(_ZTI7S7577C1[0]),
  (VTBL_ENTRY)&_ZN7S7577C22v6Ev,
  ABISELECT(-1544,-816),
  ABISELECT(-296,-156),
  ABISELECT(120,64),
  ABISELECT(-1544,-816),
  (VTBL_ENTRY)&(_ZTI7S7577C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7577C1D1Ev,_ZTv0_n20_N7S7577C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7577C1D0Ev,_ZTv0_n20_N7S7577C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1664,-880),
  (VTBL_ENTRY)&(_ZTI7S7577C1[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
extern VTBL_ENTRY _ZTV7S7577C1[];
extern void _ZN7S7577C22v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C2__A__7S7577C1[] = {
  ABISELECT(1160,620),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C2[0]),
  (VTBL_ENTRY)&_ZN7S7577C22v6Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C3__7S7577C2__A__7S7577C1[] = {
  0,
  0,
  0,
  ABISELECT(-1160,-620),
  (VTBL_ENTRY)&(_ZTI7S7577C2[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C53v13Ev();
extern void _ZN7S7577C53v14Ev();
extern void _ZN7S7577C5D1Ev();
extern void _ZN7S7577C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C5__7S7577C1[] = {
  ABISELECT(1616,856),
  ABISELECT(1496,792),
  ABISELECT(1200,636),
  ABISELECT(1112,596),
  ABISELECT(1456,768),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7577C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7577C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7577C5D0Ev,
};
extern void _ZN7S7577C22v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C2__7S7577C5__7S7577C1[] = {
  0,
  ABISELECT(-344,-172),
  ABISELECT(-1456,-768),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C22v6Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C3__A2__7S7577C5__7S7577C1[] = {
  0,
  0,
  0,
  ABISELECT(-1112,-596),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7577C5D1Ev,_ZTv0_n24_N7S7577C5D1Ev)();
extern void ABISELECT(_ZThn1200_N7S7577C5D1Ev,_ZThn636_N7S7577C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7577C5D0Ev,_ZTv0_n24_N7S7577C5D0Ev)();
extern void ABISELECT(_ZThn1200_N7S7577C5D0Ev,_ZThn636_N7S7577C5D0Ev)() __attribute__((weak));
extern void _ZN7S7577C42v7Ev();
extern void _ZN7S7577C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C4__7S7577C5__7S7577C1[] = {
  0,
  0,
  ABISELECT(-1200,-636),
  0,
  0,
  0,
  ABISELECT(-1200,-636),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C5D1Ev,_ZTv0_n24_N7S7577C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C5D0Ev,_ZTv0_n24_N7S7577C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7577C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7577C42v8Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7577C5D1Ev,_ZTv0_n20_N7S7577C5D1Ev)();
extern void ABISELECT(_ZThn1496_N7S7577C5D1Ev,_ZThn792_N7S7577C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7577C5D0Ev,_ZTv0_n20_N7S7577C5D0Ev)();
extern void ABISELECT(_ZThn1496_N7S7577C5D0Ev,_ZThn792_N7S7577C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7577C8__7S7577C5__7S7577C1[] = {
  ABISELECT(-1496,-792),
  ABISELECT(-296,-156),
  ABISELECT(120,64),
  ABISELECT(-1496,-792),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7577C5D1Ev,_ZTv0_n20_N7S7577C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7577C5D0Ev,_ZTv0_n20_N7S7577C5D0Ev),
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C7__A1__7S7577C5__7S7577C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1616,-856),
  (VTBL_ENTRY)&(_ZTI7S7577C5[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
extern void _ZN7S7577C22v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C2__A1__7S7577C1[] = {
  ABISELECT(-344,-172),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C2[0]),
  (VTBL_ENTRY)&_ZN7S7577C22v6Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C3__7S7577C2__A1__7S7577C1[] = {
  0,
  0,
  0,
  ABISELECT(344,172),
  (VTBL_ENTRY)&(_ZTI7S7577C2[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
};
extern void _ZN7S7577C8D1Ev();
extern void _ZN7S7577C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C8__7S7577C1[] = {
  ABISELECT(-296,-156),
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C8[0]),
  (VTBL_ENTRY)&_ZN7S7577C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7577C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7577C97S7577C8__7S7577C1[] = {
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7577C9[0]),
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C7__7S7577C97S7577C8__7S7577C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7577C9[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7577C8D1Ev,_ZTv0_n24_N7S7577C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7577C8D0Ev,_ZTv0_n24_N7S7577C8D0Ev)();
extern void _ZN7S7577C42v7Ev();
extern void _ZN7S7577C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C4__7S7577C8__7S7577C1[] = {
  0,
  0,
  ABISELECT(296,156),
  0,
  0,
  0,
  ABISELECT(296,156),
  (VTBL_ENTRY)&(_ZTI7S7577C8[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C8D1Ev,_ZTv0_n24_N7S7577C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7577C8D0Ev,_ZTv0_n24_N7S7577C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7577C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7577C42v8Ev,
};
extern void _ZN7S7577C32v3Ev();
extern void _ZN7S7577C32v4Ev();
extern void _ZN7S7577C32v5Ev();
extern void _ZN7S7577C72v9Ev();
extern void _ZN7S7577C73v10Ev();
extern void _ZN7S7577C73v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7577C7__7S7577C8__7S7577C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7577C8[0]),
  (VTBL_ENTRY)&_ZN7S7577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7577C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7577C72v9Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v10Ev,
  (VTBL_ENTRY)&_ZN7S7577C73v11Ev,
};
static  VTT_ENTRY vtt_S7577C1[] = {
  {&(_ZTV7S7577C1[7]),  7,84},
  {&(_tg__ZTV7S7577C2__A__7S7577C1[3]),  3,4},
  {&(_tg__ZTV7S7577C3__7S7577C2__A__7S7577C1[5]),  5,8},
  {&(_tg__ZTV7S7577C5__7S7577C1[7]),  7,14},
  {&(_tg__ZTV7S7577C2__7S7577C5__7S7577C1[4]),  4,5},
  {&(_tg__ZTV7S7577C3__A2__7S7577C5__7S7577C1[5]),  5,8},
  {&(_tg__ZTV7S7577C4__7S7577C5__7S7577C1[8]),  8,15},
  {&(_tg__ZTV7S7577C8__7S7577C5__7S7577C1[5]),  5,7},
  {&(_tg__ZTV7S7577C7__A1__7S7577C5__7S7577C1[8]),  8,14},
  {&(_ZTV7S7577C1[40]),  40,84},
  {&(_ZTV7S7577C1[51]),  51,84},
  {&(_ZTV7S7577C1[19]),  19,84},
  {&(_ZTV7S7577C1[62]),  62,84},
  {&(_ZTV7S7577C1[68]),  68,84},
  {&(_ZTV7S7577C1[78]),  78,84},
  {&(_tg__ZTV7S7577C2__A1__7S7577C1[3]),  3,4},
  {&(_tg__ZTV7S7577C3__7S7577C2__A1__7S7577C1[5]),  5,8},
  {&(_tg__ZTV7S7577C8__7S7577C1[4]),  4,6},
  {&(_tg__ZTV7S7577C97S7577C8__7S7577C1[3]),  3,3},
  {&(_tg__ZTV7S7577C7__7S7577C97S7577C8__7S7577C1[8]),  8,14},
  {&(_tg__ZTV7S7577C4__7S7577C8__7S7577C1[8]),  8,15},
  {&(_tg__ZTV7S7577C7__7S7577C8__7S7577C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S7577C1[];
extern  VTBL_ENTRY _ZTV7S7577C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7577C1[];
static VTBL_ENTRY alt_thunk_names143[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7577C5D0Ev,_ZTv0_n20_N7S7577C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1496_N7S7577C5D0Ev,_ZThn792_N7S7577C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7577C5D1Ev,_ZTv0_n20_N7S7577C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1496_N7S7577C5D1Ev,_ZThn792_N7S7577C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7577C5D0Ev,_ZTv0_n24_N7S7577C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S7577C5D0Ev,_ZThn636_N7S7577C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7577C5D1Ev,_ZTv0_n24_N7S7577C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S7577C5D1Ev,_ZThn636_N7S7577C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7577C1D0Ev,_ZTv0_n20_N7S7577C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1544_N7S7577C1D0Ev,_ZThn816_N7S7577C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7577C1D1Ev,_ZTv0_n20_N7S7577C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1544_N7S7577C1D1Ev,_ZThn816_N7S7577C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7577C1D0Ev,_ZTv0_n24_N7S7577C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1248_N7S7577C1D0Ev,_ZThn660_N7S7577C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7577C1D1Ev,_ZTv0_n24_N7S7577C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1248_N7S7577C1D1Ev,_ZThn660_N7S7577C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7577C1 = {  "S7577C1", // class name
  bases_S7577C1, 14,
  &(vtc_S7577C1[0]), // expected_vtbl_contents
  &(vtt_S7577C1[0]), // expected_vtt_contents
  ABISELECT(1760,924), // object size
  NSPAIRA(_ZTI7S7577C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7577C1),84, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7577C1),22, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names143,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20975C5  {
  char s20975c5f0;
  virtual void  v5(); // _ZN8S20975C52v5Ev
  virtual void  v6(); // _ZN8S20975C52v6Ev
  virtual void  v7(); // _ZN8S20975C52v7Ev
  virtual void  v8(); // _ZN8S20975C52v8Ev
  virtual void  v9(); // _ZN8S20975C52v9Ev
  virtual void  v10(); // _ZN8S20975C53v10Ev
  ~S20975C5(); // tgen
  S20975C5(); // tgen
};
//SIG(-1 S20975C5) C1{ v1 v2 v3 v4 v5 v6 Fc}


void  S20975C5 ::v5(){vfunc_called(this, "_ZN8S20975C52v5Ev");}
void  S20975C5 ::v6(){vfunc_called(this, "_ZN8S20975C52v6Ev");}
void  S20975C5 ::v7(){vfunc_called(this, "_ZN8S20975C52v7Ev");}
void  S20975C5 ::v8(){vfunc_called(this, "_ZN8S20975C52v8Ev");}
void  S20975C5 ::v9(){vfunc_called(this, "_ZN8S20975C52v9Ev");}
void  S20975C5 ::v10(){vfunc_called(this, "_ZN8S20975C53v10Ev");}
S20975C5 ::~S20975C5(){ note_dtor("S20975C5", this);} // tgen
S20975C5 ::S20975C5(){ note_ctor("S20975C5", this);} // tgen

static void Test_S20975C5()
{
  extern Class_Descriptor cd_S20975C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20975C5, buf);
    S20975C5 *dp, &lv = *(dp=new (buf) S20975C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20975C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20975C5)");
    check_field_offset(lv, s20975c5f0, ABISELECT(8,4), "S20975C5.s20975c5f0");
    test_class_info(&lv, &cd_S20975C5);
    dp->~S20975C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20975C5(Test_S20975C5, "S20975C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20975C5C1Ev();
extern void _ZN8S20975C5D1Ev();
Name_Map name_map_S20975C5[] = {
  NSPAIR(_ZN8S20975C5C1Ev),
  NSPAIR(_ZN8S20975C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20975C5[];
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
static  VTBL_ENTRY vtc_S20975C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C5[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
};
extern VTBL_ENTRY _ZTI8S20975C5[];
extern  VTBL_ENTRY _ZTV8S20975C5[];
Class_Descriptor cd_S20975C5 = {  "S20975C5", // class name
  0,0,//no base classes
  &(vtc_S20975C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20975C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20975C5),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20975C4  : S20975C5 {
  int s20975c4f0;
  virtual void  v11(); // _ZN8S20975C43v11Ev
  virtual void  v12(); // _ZN8S20975C43v12Ev
  ~S20975C4(); // tgen
  S20975C4(); // tgen
};
//SIG(-1 S20975C4) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fc} v1 v2 Fi}


void  S20975C4 ::v11(){vfunc_called(this, "_ZN8S20975C43v11Ev");}
void  S20975C4 ::v12(){vfunc_called(this, "_ZN8S20975C43v12Ev");}
S20975C4 ::~S20975C4(){ note_dtor("S20975C4", this);} // tgen
S20975C4 ::S20975C4(){ note_ctor("S20975C4", this);} // tgen

static void Test_S20975C4()
{
  extern Class_Descriptor cd_S20975C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20975C4, buf);
    S20975C4 *dp, &lv = *(dp=new (buf) S20975C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20975C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20975C4)");
    check_base_class_offset(lv, (S20975C5*), 0, "S20975C4");
    check_field_offset(lv, s20975c4f0, ABISELECT(12,8), "S20975C4.s20975c4f0");
    test_class_info(&lv, &cd_S20975C4);
    dp->~S20975C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20975C4(Test_S20975C4, "S20975C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20975C4C1Ev();
extern void _ZN8S20975C4D1Ev();
Name_Map name_map_S20975C4[] = {
  NSPAIR(_ZN8S20975C4C1Ev),
  NSPAIR(_ZN8S20975C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20975C5;
extern VTBL_ENTRY _ZTI8S20975C5[];
extern  VTBL_ENTRY _ZTV8S20975C5[];
static Base_Class bases_S20975C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20975C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20975C4[];
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY vtc_S20975C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C4[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern VTBL_ENTRY _ZTI8S20975C4[];
extern  VTBL_ENTRY _ZTV8S20975C4[];
Class_Descriptor cd_S20975C4 = {  "S20975C4", // class name
  bases_S20975C4, 1,
  &(vtc_S20975C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20975C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20975C4),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  S20975C6  {
  virtual void  v13(); // _ZN8S20975C63v13Ev
  virtual void  v14(); // _ZN8S20975C63v14Ev
  virtual void  v15(); // _ZN8S20975C63v15Ev
  virtual void  v16(); // _ZN8S20975C63v16Ev
  virtual void  v17(); // _ZN8S20975C63v17Ev
  ~S20975C6(); // tgen
  S20975C6(); // tgen
};
//SIG(-1 S20975C6) C1{ v1 v2 v3 v4 v5}


void  S20975C6 ::v13(){vfunc_called(this, "_ZN8S20975C63v13Ev");}
void  S20975C6 ::v14(){vfunc_called(this, "_ZN8S20975C63v14Ev");}
void  S20975C6 ::v15(){vfunc_called(this, "_ZN8S20975C63v15Ev");}
void  S20975C6 ::v16(){vfunc_called(this, "_ZN8S20975C63v16Ev");}
void  S20975C6 ::v17(){vfunc_called(this, "_ZN8S20975C63v17Ev");}
S20975C6 ::~S20975C6(){ note_dtor("S20975C6", this);} // tgen
S20975C6 ::S20975C6(){ note_ctor("S20975C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20975C6C1Ev();
extern void _ZN8S20975C6D1Ev();
Name_Map name_map_S20975C6[] = {
  NSPAIR(_ZN8S20975C6C1Ev),
  NSPAIR(_ZN8S20975C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20975C6[];
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
static  VTBL_ENTRY vtc_S20975C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C6[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
};
extern VTBL_ENTRY _ZTI8S20975C6[];
extern  VTBL_ENTRY _ZTV8S20975C6[];
Class_Descriptor cd_S20975C6 = {  "S20975C6", // class name
  0,0,//no base classes
  &(vtc_S20975C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20975C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20975C6),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  S20975C3  : virtual S20975C4 , S20975C6 {
  int s20975c3f0;
  virtual void  v18(); // _ZN8S20975C33v18Ev
  ~S20975C3(); // tgen
  S20975C3(); // tgen
};
//SIG(-1 S20975C3) C1{ VBC2{ BC3{ v2 v3 v4 v5 v6 v7 Fc} v8 v9 Fi} BC4{ v10 v11 v12 v13 v14} v1 Fi}


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

static void Test_S20975C3()
{
  extern Class_Descriptor cd_S20975C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20975C3, buf);
    S20975C3 *dp, &lv = *(dp=new (buf) S20975C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20975C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20975C3)");
    check_base_class_offset(lv, (S20975C5*)(S20975C4*), ABISELECT(16,8), "S20975C3");
    check_base_class_offset(lv, (S20975C4*), ABISELECT(16,8), "S20975C3");
    check_base_class_offset(lv, (S20975C6*), 0, "S20975C3");
    check_field_offset(lv, s20975c3f0, ABISELECT(8,4), "S20975C3.s20975c3f0");
    test_class_info(&lv, &cd_S20975C3);
    dp->~S20975C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20975C3(Test_S20975C3, "S20975C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20975C3C1Ev();
extern void _ZN8S20975C3D1Ev();
Name_Map name_map_S20975C3[] = {
  NSPAIR(_ZN8S20975C3C1Ev),
  NSPAIR(_ZN8S20975C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20975C5;
extern VTBL_ENTRY _ZTI8S20975C5[];
extern  VTBL_ENTRY _ZTV8S20975C5[];
extern Class_Descriptor cd_S20975C4;
extern VTBL_ENTRY _ZTI8S20975C4[];
extern  VTBL_ENTRY _ZTV8S20975C4[];
extern Class_Descriptor cd_S20975C6;
extern VTBL_ENTRY _ZTI8S20975C6[];
extern  VTBL_ENTRY _ZTV8S20975C6[];
static Base_Class bases_S20975C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20975C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20975C4,    ABISELECT(16,8), //bcp->offset
    9, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20975C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20975C3[];
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY vtc_S20975C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern VTBL_ENTRY _ZTV8S20975C3[];
static  VTT_ENTRY vtt_S20975C3[] = {
  {&(_ZTV8S20975C3[3]),  3,27},
  {&(_ZTV8S20975C3[19]),  19,27},
};
extern VTBL_ENTRY _ZTI8S20975C3[];
extern  VTBL_ENTRY _ZTV8S20975C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C3[];
Class_Descriptor cd_S20975C3 = {  "S20975C3", // class name
  bases_S20975C3, 3,
  &(vtc_S20975C3[0]), // expected_vtbl_contents
  &(vtt_S20975C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20975C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20975C3),27, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20975C3),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20975C9  : virtual S20975C4 {
  __tsi64 s20975c9f0;
  ::S20975C5 s20975c9f1;
  virtual void  v19(); // _ZN8S20975C93v19Ev
  virtual void  v20(); // _ZN8S20975C93v20Ev
  virtual void  v21(); // _ZN8S20975C93v21Ev
  virtual void  v22(); // _ZN8S20975C93v22Ev
  ~S20975C9(); // tgen
  S20975C9(); // tgen
};
//SIG(-1 S20975C9) C1{ VBC2{ BC3{ v5 v6 v7 v8 v9 v10 Fc} v11 v12 Fi} v1 v2 v3 v4 FL FC3}


void  S20975C9 ::v19(){vfunc_called(this, "_ZN8S20975C93v19Ev");}
void  S20975C9 ::v20(){vfunc_called(this, "_ZN8S20975C93v20Ev");}
void  S20975C9 ::v21(){vfunc_called(this, "_ZN8S20975C93v21Ev");}
void  S20975C9 ::v22(){vfunc_called(this, "_ZN8S20975C93v22Ev");}
S20975C9 ::~S20975C9(){ note_dtor("S20975C9", this);} // tgen
S20975C9 ::S20975C9(){ note_ctor("S20975C9", this);} // tgen

static void Test_S20975C9()
{
  extern Class_Descriptor cd_S20975C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S20975C9, buf);
    S20975C9 *dp, &lv = *(dp=new (buf) S20975C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S20975C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20975C9)");
    check_base_class_offset(lv, (S20975C5*)(S20975C4*), ABISELECT(32,20), "S20975C9");
    check_base_class_offset(lv, (S20975C4*), ABISELECT(32,20), "S20975C9");
    check_field_offset(lv, s20975c9f0, ABISELECT(8,4), "S20975C9.s20975c9f0");
    check_field_offset(lv, s20975c9f1, ABISELECT(16,12), "S20975C9.s20975c9f1");
    test_class_info(&lv, &cd_S20975C9);
    dp->~S20975C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20975C9(Test_S20975C9, "S20975C9", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S20975C9C1Ev();
extern void _ZN8S20975C9D1Ev();
Name_Map name_map_S20975C9[] = {
  NSPAIR(_ZN8S20975C9C1Ev),
  NSPAIR(_ZN8S20975C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20975C5;
extern VTBL_ENTRY _ZTI8S20975C5[];
extern  VTBL_ENTRY _ZTV8S20975C5[];
extern Class_Descriptor cd_S20975C4;
extern VTBL_ENTRY _ZTI8S20975C4[];
extern  VTBL_ENTRY _ZTV8S20975C4[];
static Base_Class bases_S20975C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20975C5,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20975C4,    ABISELECT(32,20), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20975C9[];
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY vtc_S20975C9[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern VTBL_ENTRY _ZTV8S20975C9[];
static  VTT_ENTRY vtt_S20975C9[] = {
  {&(_ZTV8S20975C9[3]),  3,25},
  {&(_ZTV8S20975C9[17]),  17,25},
};
extern VTBL_ENTRY _ZTI8S20975C9[];
extern  VTBL_ENTRY _ZTV8S20975C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C9[];
Class_Descriptor cd_S20975C9 = {  "S20975C9", // class name
  bases_S20975C9, 2,
  &(vtc_S20975C9[0]), // expected_vtbl_contents
  &(vtt_S20975C9[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S20975C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20975C9),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20975C9),2, //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  S20975C8  : S20975C9 {
  ~S20975C8(); // tgen
  S20975C8(); // tgen
};
//SIG(-1 S20975C8) C1{ BC2{ VBC3{ BC4{ v1 v2 v3 v4 v5 v6 Fc} v7 v8 Fi} v9 v10 v11 v12 FL FC4}}


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

static void Test_S20975C8()
{
  extern Class_Descriptor cd_S20975C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S20975C8, buf);
    S20975C8 *dp, &lv = *(dp=new (buf) S20975C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S20975C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20975C8)");
    check_base_class_offset(lv, (S20975C5*)(S20975C4*), ABISELECT(32,20), "S20975C8");
    check_base_class_offset(lv, (S20975C4*)(S20975C9*), ABISELECT(32,20), "S20975C8");
    check_base_class_offset(lv, (S20975C9*), 0, "S20975C8");
    test_class_info(&lv, &cd_S20975C8);
    dp->~S20975C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20975C8(Test_S20975C8, "S20975C8", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S20975C8C1Ev();
extern void _ZN8S20975C8D1Ev();
Name_Map name_map_S20975C8[] = {
  NSPAIR(_ZN8S20975C8C1Ev),
  NSPAIR(_ZN8S20975C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20975C5;
extern VTBL_ENTRY _ZTI8S20975C5[];
extern  VTBL_ENTRY _ZTV8S20975C5[];
extern Class_Descriptor cd_S20975C4;
extern VTBL_ENTRY _ZTI8S20975C4[];
extern  VTBL_ENTRY _ZTV8S20975C4[];
extern Class_Descriptor cd_S20975C9;
extern VTBL_ENTRY _ZTI8S20975C9[];
extern  VTBL_ENTRY _ZTV8S20975C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C9[];
static Base_Class bases_S20975C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20975C5,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20975C4,    ABISELECT(32,20), //bcp->offset
    7, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20975C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20975C8[];
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY vtc_S20975C8[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C8[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20975C8[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern VTBL_ENTRY _ZTV8S20975C8[];
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C9__8S20975C8[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C9__8S20975C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
static  VTT_ENTRY vtt_S20975C8[] = {
  {&(_ZTV8S20975C8[3]),  3,25},
  {&(_tg__ZTV8S20975C9__8S20975C8[3]),  3,7},
  {&(_tg__ZTV8S20975C4__8S20975C9__8S20975C8[10]),  10,18},
  {&(_ZTV8S20975C8[17]),  17,25},
};
extern VTBL_ENTRY _ZTI8S20975C8[];
extern  VTBL_ENTRY _ZTV8S20975C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C8[];
Class_Descriptor cd_S20975C8 = {  "S20975C8", // class name
  bases_S20975C8, 3,
  &(vtc_S20975C8[0]), // expected_vtbl_contents
  &(vtt_S20975C8[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S20975C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20975C8),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20975C8),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20975C7  : S20975C8 , S20975C3 {
  __tsi64 s20975c7f0;
  int s20975c7f1;
  short s20975c7f2;
  int s20975c7f3;
  virtual  ~S20975C7(); // _ZN8S20975C7D2Ev
  virtual void  v23(); // _ZN8S20975C73v23Ev
  virtual void  v24(); // _ZN8S20975C73v24Ev
  virtual void  v25(); // _ZN8S20975C73v25Ev
  virtual void  v26(); // _ZN8S20975C73v26Ev
  S20975C7(); // tgen
};
//SIG(-1 S20975C7) C1{ BC2{ BC3{ VBC4{ BC5{ v5 v6 v7 v8 v9 v10 Fc} v11 v12 Fi} v13 v14 v15 v16 FL FC5}} BC6{ VBC4 BC7{ v17 v18 v19 v20 v21} v22 Fi} vd v1 v2 v3 v4 FL Fi Fs Fi}


 S20975C7 ::~S20975C7(){ note_dtor("S20975C7", this);}
void  S20975C7 ::v23(){vfunc_called(this, "_ZN8S20975C73v23Ev");}
void  S20975C7 ::v24(){vfunc_called(this, "_ZN8S20975C73v24Ev");}
void  S20975C7 ::v25(){vfunc_called(this, "_ZN8S20975C73v25Ev");}
void  S20975C7 ::v26(){vfunc_called(this, "_ZN8S20975C73v26Ev");}
S20975C7 ::S20975C7(){ note_ctor("S20975C7", this);} // tgen

static void Test_S20975C7()
{
  extern Class_Descriptor cd_S20975C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S20975C7, buf);
    S20975C7 *dp, &lv = *(dp=new (buf) S20975C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S20975C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20975C7)");
    check_base_class_offset(lv, (S20975C5*)(S20975C4*), ABISELECT(72,48), "S20975C7");
    check_base_class_offset(lv, (S20975C4*)(S20975C9*)(S20975C8*), ABISELECT(72,48), "S20975C7");
    check_base_class_offset(lv, (S20975C4*)(S20975C3*), ABISELECT(72,48), "S20975C7");
    check_base_class_offset(lv, (S20975C9*)(S20975C8*), 0, "S20975C7");
    check_base_class_offset(lv, (S20975C8*), 0, "S20975C7");
    check_base_class_offset(lv, (S20975C6*)(S20975C3*), ABISELECT(32,20), "S20975C7");
    check_base_class_offset(lv, (S20975C3*), ABISELECT(32,20), "S20975C7");
    check_field_offset(lv, s20975c7f0, ABISELECT(48,28), "S20975C7.s20975c7f0");
    check_field_offset(lv, s20975c7f1, ABISELECT(56,36), "S20975C7.s20975c7f1");
    check_field_offset(lv, s20975c7f2, ABISELECT(60,40), "S20975C7.s20975c7f2");
    check_field_offset(lv, s20975c7f3, ABISELECT(64,44), "S20975C7.s20975c7f3");
    test_class_info(&lv, &cd_S20975C7);
    dp->~S20975C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20975C7(Test_S20975C7, "S20975C7", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN8S20975C7C1Ev();
extern void _ZN8S20975C7D2Ev();
Name_Map name_map_S20975C7[] = {
  NSPAIR(_ZN8S20975C7C1Ev),
  NSPAIR(_ZN8S20975C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20975C5;
extern VTBL_ENTRY _ZTI8S20975C5[];
extern  VTBL_ENTRY _ZTV8S20975C5[];
extern Class_Descriptor cd_S20975C4;
extern VTBL_ENTRY _ZTI8S20975C4[];
extern  VTBL_ENTRY _ZTV8S20975C4[];
extern Class_Descriptor cd_S20975C9;
extern VTBL_ENTRY _ZTI8S20975C9[];
extern  VTBL_ENTRY _ZTV8S20975C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C9[];
extern Class_Descriptor cd_S20975C8;
extern VTBL_ENTRY _ZTI8S20975C8[];
extern  VTBL_ENTRY _ZTV8S20975C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C8[];
extern Class_Descriptor cd_S20975C6;
extern VTBL_ENTRY _ZTI8S20975C6[];
extern  VTBL_ENTRY _ZTV8S20975C6[];
extern Class_Descriptor cd_S20975C3;
extern VTBL_ENTRY _ZTI8S20975C3[];
extern  VTBL_ENTRY _ZTV8S20975C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C3[];
static Base_Class bases_S20975C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20975C5,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20975C4,    ABISELECT(72,48), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20975C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20975C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20975C6,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20975C3,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20975C7[];
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
extern void _ZN8S20975C7D1Ev();
extern void _ZN8S20975C7D0Ev();
extern void _ZN8S20975C73v23Ev();
extern void _ZN8S20975C73v24Ev();
extern void _ZN8S20975C73v25Ev();
extern void _ZN8S20975C73v26Ev();
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY vtc_S20975C7[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C7[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20975C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20975C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v26Ev,
  ABISELECT(40,28),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20975C7[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S20975C7[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern VTBL_ENTRY _ZTV8S20975C7[];
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C8__8S20975C7[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C8[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
};
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C98S20975C8__8S20975C7[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C98S20975C8__8S20975C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C8__8S20975C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S20975C8[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C3__8S20975C7[] = {
  ABISELECT(40,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C3__8S20975C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
static  VTT_ENTRY vtt_S20975C7[] = {
  {&(_ZTV8S20975C7[3]),  3,40},
  {&(_tg__ZTV8S20975C8__8S20975C7[3]),  3,7},
  {&(_tg__ZTV8S20975C98S20975C8__8S20975C7[3]),  3,7},
  {&(_tg__ZTV8S20975C4__8S20975C98S20975C8__8S20975C7[10]),  10,18},
  {&(_tg__ZTV8S20975C4__8S20975C8__8S20975C7[10]),  10,18},
  {&(_tg__ZTV8S20975C3__8S20975C7[3]),  3,9},
  {&(_tg__ZTV8S20975C4__8S20975C3__8S20975C7[10]),  10,18},
  {&(_ZTV8S20975C7[32]),  32,40},
  {&(_ZTV8S20975C7[16]),  16,40},
};
extern VTBL_ENTRY _ZTI8S20975C7[];
extern  VTBL_ENTRY _ZTV8S20975C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C7[];
Class_Descriptor cd_S20975C7 = {  "S20975C7", // class name
  bases_S20975C7, 6,
  &(vtc_S20975C7[0]), // expected_vtbl_contents
  &(vtt_S20975C7[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI8S20975C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20975C7),40, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20975C7),9, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20975C2  : virtual S20975C3 , S20975C7 {
  ::S20975C4 s20975c2f0;
  virtual  ~S20975C2(); // _ZN8S20975C2D2Ev
  virtual void  v27(); // _ZN8S20975C23v27Ev
  virtual void  v28(); // _ZN8S20975C23v28Ev
  virtual void  v29(); // _ZN8S20975C23v29Ev
  S20975C2(); // tgen
};
//SIG(-1 S20975C2) C1{ VBC2{ VBC3{ BC4{ v4 v5 v6 v7 v8 v9 Fc} v10 v11 Fi} BC5{ v12 v13 v14 v15 v16} v17 Fi} BC6{ BC7{ BC8{ VBC3 v18 v19 v20 v21 FL FC4}} BC2 vd v22 v23 v24 v25 FL Fi Fs Fi} vd v1 v2 v3 FC3}


 S20975C2 ::~S20975C2(){ note_dtor("S20975C2", this);}
void  S20975C2 ::v27(){vfunc_called(this, "_ZN8S20975C23v27Ev");}
void  S20975C2 ::v28(){vfunc_called(this, "_ZN8S20975C23v28Ev");}
void  S20975C2 ::v29(){vfunc_called(this, "_ZN8S20975C23v29Ev");}
S20975C2 ::S20975C2(){ note_ctor("S20975C2", this);} // tgen

static void Test_S20975C2()
{
  extern Class_Descriptor cd_S20975C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S20975C2, buf);
    S20975C2 *dp, &lv = *(dp=new (buf) S20975C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S20975C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20975C2)");
    check_base_class_offset(lv, (S20975C5*)(S20975C4*), ABISELECT(104,68), "S20975C2");
    /*is_ambiguous_... S20975C2::S20975C3 */ AMB_check_base_class_offset(lv, (S20975C4*)(S20975C3*), ABISELECT(104,68), "S20975C2");
    check_base_class_offset(lv, (S20975C4*)(S20975C9*)(S20975C8*)(S20975C7*), ABISELECT(104,68), "S20975C2");
    check_base_class_offset(lv, (S20975C4*)(S20975C3*)(S20975C7*), ABISELECT(104,68), "S20975C2");
    /*is_ambiguous_... S20975C2::S20975C3 */ AMB_check_base_class_offset(lv, (S20975C6*)(S20975C3*), ABISELECT(88,60), "S20975C2");
    /*is_ambiguous_... S20975C2::S20975C3 */ AMB_check_base_class_offset(lv, (S20975C3*), ABISELECT(88,60), "S20975C2");
    check_base_class_offset(lv, (S20975C9*)(S20975C8*)(S20975C7*), 0, "S20975C2");
    check_base_class_offset(lv, (S20975C8*)(S20975C7*), 0, "S20975C2");
    check_base_class_offset(lv, (S20975C6*)(S20975C3*)(S20975C7*), ABISELECT(32,20), "S20975C2");
    check_base_class_offset(lv, (S20975C3*)(S20975C7*), ABISELECT(32,20), "S20975C2");
    check_base_class_offset(lv, (S20975C7*), 0, "S20975C2");
    check_field_offset(lv, s20975c2f0, ABISELECT(72,48), "S20975C2.s20975c2f0");
    test_class_info(&lv, &cd_S20975C2);
    dp->~S20975C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20975C2(Test_S20975C2, "S20975C2", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN8S20975C2C1Ev();
extern void _ZN8S20975C2D2Ev();
Name_Map name_map_S20975C2[] = {
  NSPAIR(_ZN8S20975C2C1Ev),
  NSPAIR(_ZN8S20975C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20975C5;
extern VTBL_ENTRY _ZTI8S20975C5[];
extern  VTBL_ENTRY _ZTV8S20975C5[];
extern Class_Descriptor cd_S20975C4;
extern VTBL_ENTRY _ZTI8S20975C4[];
extern  VTBL_ENTRY _ZTV8S20975C4[];
extern Class_Descriptor cd_S20975C6;
extern VTBL_ENTRY _ZTI8S20975C6[];
extern  VTBL_ENTRY _ZTV8S20975C6[];
extern Class_Descriptor cd_S20975C3;
extern VTBL_ENTRY _ZTI8S20975C3[];
extern  VTBL_ENTRY _ZTV8S20975C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C3[];
extern Class_Descriptor cd_S20975C9;
extern VTBL_ENTRY _ZTI8S20975C9[];
extern  VTBL_ENTRY _ZTV8S20975C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C9[];
extern Class_Descriptor cd_S20975C8;
extern VTBL_ENTRY _ZTI8S20975C8[];
extern  VTBL_ENTRY _ZTV8S20975C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C8[];
extern Class_Descriptor cd_S20975C6;
extern VTBL_ENTRY _ZTI8S20975C6[];
extern  VTBL_ENTRY _ZTV8S20975C6[];
extern Class_Descriptor cd_S20975C3;
extern VTBL_ENTRY _ZTI8S20975C3[];
extern  VTBL_ENTRY _ZTV8S20975C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C3[];
extern Class_Descriptor cd_S20975C7;
extern VTBL_ENTRY _ZTI8S20975C7[];
extern  VTBL_ENTRY _ZTV8S20975C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C7[];
static Base_Class bases_S20975C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20975C5,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20975C4,    ABISELECT(104,68), //bcp->offset
    41, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20975C6,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20975C3,    ABISELECT(88,60), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20975C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20975C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20975C6,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20975C3,    ABISELECT(32,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20975C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20975C2[];
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
extern void _ZN8S20975C2D1Ev();
extern void _ZN8S20975C2D0Ev();
extern void _ZN8S20975C73v23Ev();
extern void _ZN8S20975C73v24Ev();
extern void _ZN8S20975C73v25Ev();
extern void _ZN8S20975C73v26Ev();
extern void _ZN8S20975C23v27Ev();
extern void _ZN8S20975C23v28Ev();
extern void _ZN8S20975C23v29Ev();
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY vtc_S20975C2[] = {
  ABISELECT(88,60),
  ABISELECT(104,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C2[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20975C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20975C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20975C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20975C23v28Ev,
  (VTBL_ENTRY)&_ZN8S20975C23v29Ev,
  ABISELECT(72,48),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20975C2[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S20975C2[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20975C2[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern VTBL_ENTRY _ZTV8S20975C2[];
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
extern void _ZN8S20975C7D1Ev();
extern void _ZN8S20975C7D0Ev();
extern void _ZN8S20975C73v23Ev();
extern void _ZN8S20975C73v24Ev();
extern void _ZN8S20975C73v25Ev();
extern void _ZN8S20975C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C7__8S20975C2[] = {
  ABISELECT(104,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C7[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20975C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20975C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v26Ev,
};
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C88S20975C7__8S20975C2[] = {
  ABISELECT(104,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C8[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
};
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C98S20975C88S20975C7__8S20975C2[] = {
  ABISELECT(104,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C98S20975C88S20975C7__8S20975C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C88S20975C7__8S20975C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20975C8[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C38S20975C7__A1__8S20975C2[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C38S20975C7__A1__8S20975C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C7__8S20975C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20975C7[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C3__8S20975C7__8S20975C2[] = {
  ABISELECT(72,48),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20975C7[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
};
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C3__8S20975C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C3__8S20975C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
static  VTT_ENTRY vtt_S20975C2[] = {
  {&(_ZTV8S20975C2[4]),  4,59},
  {&(_tg__ZTV8S20975C7__8S20975C2[3]),  3,13},
  {&(_tg__ZTV8S20975C88S20975C7__8S20975C2[3]),  3,7},
  {&(_tg__ZTV8S20975C98S20975C88S20975C7__8S20975C2[3]),  3,7},
  {&(_tg__ZTV8S20975C4__8S20975C98S20975C88S20975C7__8S20975C2[10]),  10,18},
  {&(_tg__ZTV8S20975C4__8S20975C88S20975C7__8S20975C2[10]),  10,18},
  {&(_tg__ZTV8S20975C38S20975C7__A1__8S20975C2[3]),  3,9},
  {&(_tg__ZTV8S20975C4__8S20975C38S20975C7__A1__8S20975C2[10]),  10,18},
  {&(_tg__ZTV8S20975C4__8S20975C7__8S20975C2[10]),  10,18},
  {&(_tg__ZTV8S20975C3__8S20975C7__8S20975C2[3]),  3,9},
  {&(_ZTV8S20975C2[35]),  35,59},
  {&(_ZTV8S20975C2[51]),  51,59},
  {&(_ZTV8S20975C2[20]),  20,59},
  {&(_tg__ZTV8S20975C3__8S20975C2[3]),  3,9},
  {&(_tg__ZTV8S20975C4__8S20975C3__8S20975C2[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20975C2[];
extern  VTBL_ENTRY _ZTV8S20975C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C2[];
Class_Descriptor cd_S20975C2 = {  "S20975C2", // class name
  bases_S20975C2, 9,
  &(vtc_S20975C2[0]), // expected_vtbl_contents
  &(vtt_S20975C2[0]), // expected_vtt_contents
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI8S20975C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20975C2),59, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20975C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20975C1  : virtual S20975C2 {
  __tsi64 s20975c1f0;
  virtual  ~S20975C1(); // _ZN8S20975C1D2Ev
  virtual void  v1(); // _ZN8S20975C12v1Ev
  virtual void  v2(); // _ZN8S20975C12v2Ev
  virtual void  v3(); // _ZN8S20975C12v3Ev
  virtual void  v4(); // _ZN8S20975C12v4Ev
  S20975C1(); // tgen
};
//SIG(1 S20975C1) C1{ VBC2{ VBC3{ VBC4{ BC5{ v5 v6 v7 v8 v9 v10 Fc} v11 v12 Fi} BC6{ v13 v14 v15 v16 v17} v18 Fi} BC7{ BC8{ BC9{ VBC4 v19 v20 v21 v22 FL FC5}} BC3 vd v23 v24 v25 v26 FL Fi Fs Fi} vd v27 v28 v29 FC4} vd v1 v2 v3 v4 FL}


 S20975C1 ::~S20975C1(){ note_dtor("S20975C1", this);}
void  S20975C1 ::v1(){vfunc_called(this, "_ZN8S20975C12v1Ev");}
void  S20975C1 ::v2(){vfunc_called(this, "_ZN8S20975C12v2Ev");}
void  S20975C1 ::v3(){vfunc_called(this, "_ZN8S20975C12v3Ev");}
void  S20975C1 ::v4(){vfunc_called(this, "_ZN8S20975C12v4Ev");}
S20975C1 ::S20975C1(){ note_ctor("S20975C1", this);} // tgen

static void Test_S20975C1()
{
  extern Class_Descriptor cd_S20975C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S20975C1, buf);
    S20975C1 *dp, &lv = *(dp=new (buf) S20975C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S20975C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20975C1)");
    check_base_class_offset(lv, (S20975C5*)(S20975C4*), ABISELECT(120,80), "S20975C1");
    /*is_ambiguous_... S20975C1::S20975C3 */ AMB_check_base_class_offset(lv, (S20975C4*)(S20975C3*), ABISELECT(120,80), "S20975C1");
    check_base_class_offset(lv, (S20975C4*)(S20975C9*)(S20975C8*)(S20975C7*)(S20975C2*), ABISELECT(120,80), "S20975C1");
    check_base_class_offset(lv, (S20975C4*)(S20975C3*)(S20975C7*)(S20975C2*), ABISELECT(120,80), "S20975C1");
    /*is_ambiguous_... S20975C1::S20975C3 */ AMB_check_base_class_offset(lv, (S20975C6*)(S20975C3*), ABISELECT(104,72), "S20975C1");
    /*is_ambiguous_... S20975C2::S20975C3 */ AMB_check_base_class_offset(lv, (S20975C3*)(S20975C2*), ABISELECT(104,72), "S20975C1");
    check_base_class_offset(lv, (S20975C9*)(S20975C8*)(S20975C7*)(S20975C2*), ABISELECT(16,12), "S20975C1");
    check_base_class_offset(lv, (S20975C8*)(S20975C7*)(S20975C2*), ABISELECT(16,12), "S20975C1");
    check_base_class_offset(lv, (S20975C6*)(S20975C3*)(S20975C7*)(S20975C2*), ABISELECT(48,32), "S20975C1");
    check_base_class_offset(lv, (S20975C3*)(S20975C7*)(S20975C2*), ABISELECT(48,32), "S20975C1");
    check_base_class_offset(lv, (S20975C7*)(S20975C2*), ABISELECT(16,12), "S20975C1");
    check_base_class_offset(lv, (S20975C2*), ABISELECT(16,12), "S20975C1");
    check_field_offset(lv, s20975c1f0, ABISELECT(8,4), "S20975C1.s20975c1f0");
    test_class_info(&lv, &cd_S20975C1);
    dp->~S20975C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20975C1(Test_S20975C1, "S20975C1", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN8S20975C1C1Ev();
extern void _ZN8S20975C1D2Ev();
Name_Map name_map_S20975C1[] = {
  NSPAIR(_ZN8S20975C1C1Ev),
  NSPAIR(_ZN8S20975C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20975C5;
extern VTBL_ENTRY _ZTI8S20975C5[];
extern  VTBL_ENTRY _ZTV8S20975C5[];
extern Class_Descriptor cd_S20975C4;
extern VTBL_ENTRY _ZTI8S20975C4[];
extern  VTBL_ENTRY _ZTV8S20975C4[];
extern Class_Descriptor cd_S20975C6;
extern VTBL_ENTRY _ZTI8S20975C6[];
extern  VTBL_ENTRY _ZTV8S20975C6[];
extern Class_Descriptor cd_S20975C3;
extern VTBL_ENTRY _ZTI8S20975C3[];
extern  VTBL_ENTRY _ZTV8S20975C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C3[];
extern Class_Descriptor cd_S20975C9;
extern VTBL_ENTRY _ZTI8S20975C9[];
extern  VTBL_ENTRY _ZTV8S20975C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C9[];
extern Class_Descriptor cd_S20975C8;
extern VTBL_ENTRY _ZTI8S20975C8[];
extern  VTBL_ENTRY _ZTV8S20975C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C8[];
extern Class_Descriptor cd_S20975C6;
extern VTBL_ENTRY _ZTI8S20975C6[];
extern  VTBL_ENTRY _ZTV8S20975C6[];
extern Class_Descriptor cd_S20975C3;
extern VTBL_ENTRY _ZTI8S20975C3[];
extern  VTBL_ENTRY _ZTV8S20975C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C3[];
extern Class_Descriptor cd_S20975C7;
extern VTBL_ENTRY _ZTI8S20975C7[];
extern  VTBL_ENTRY _ZTV8S20975C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C7[];
extern Class_Descriptor cd_S20975C2;
extern VTBL_ENTRY _ZTI8S20975C2[];
extern  VTBL_ENTRY _ZTV8S20975C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C2[];
static Base_Class bases_S20975C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20975C5,    ABISELECT(120,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20975C4,    ABISELECT(120,80), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20975C6,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20975C3,    ABISELECT(104,72), //bcp->offset
    55, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20975C9,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20975C8,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20975C6,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20975C3,    ABISELECT(48,32), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20975C7,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20975C2,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20975C1[];
extern void _ZN8S20975C1D1Ev();
extern void _ZN8S20975C1D0Ev();
extern void _ZN8S20975C12v1Ev();
extern void _ZN8S20975C12v2Ev();
extern void _ZN8S20975C12v3Ev();
extern void _ZN8S20975C12v4Ev();
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
extern void ABISELECT(_ZTv0_n72_N8S20975C1D1Ev,_ZTv0_n36_N8S20975C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20975C1D1Ev,_ZThn12_N8S20975C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20975C1D0Ev,_ZTv0_n36_N8S20975C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20975C1D0Ev,_ZThn12_N8S20975C1D0Ev)() __attribute__((weak));
extern void _ZN8S20975C73v23Ev();
extern void _ZN8S20975C73v24Ev();
extern void _ZN8S20975C73v25Ev();
extern void _ZN8S20975C73v26Ev();
extern void _ZN8S20975C23v27Ev();
extern void _ZN8S20975C23v28Ev();
extern void _ZN8S20975C23v29Ev();
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY vtc_S20975C1[] = {
  ABISELECT(120,80),
  ABISELECT(104,72),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C1[0]),
  (VTBL_ENTRY)&_ZN8S20975C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20975C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20975C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20975C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20975C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20975C12v4Ev,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  0,
  0,
  0,
  0,
  ABISELECT(88,60),
  ABISELECT(104,68),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20975C1[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20975C1D1Ev,_ZTv0_n36_N8S20975C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20975C1D0Ev,_ZTv0_n36_N8S20975C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20975C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20975C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20975C23v28Ev,
  (VTBL_ENTRY)&_ZN8S20975C23v29Ev,
  ABISELECT(72,48),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20975C1[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S20975C1[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI8S20975C1[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern VTBL_ENTRY _ZTV8S20975C1[];
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
extern void _ZN8S20975C2D1Ev();
extern void _ZN8S20975C2D0Ev();
extern void _ZN8S20975C73v23Ev();
extern void _ZN8S20975C73v24Ev();
extern void _ZN8S20975C73v25Ev();
extern void _ZN8S20975C73v26Ev();
extern void _ZN8S20975C23v27Ev();
extern void _ZN8S20975C23v28Ev();
extern void _ZN8S20975C23v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C2__8S20975C1[] = {
  ABISELECT(88,60),
  ABISELECT(104,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C2[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20975C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20975C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20975C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20975C23v28Ev,
  (VTBL_ENTRY)&_ZN8S20975C23v29Ev,
};
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
extern void _ZN8S20975C7D1Ev();
extern void _ZN8S20975C7D0Ev();
extern void _ZN8S20975C73v23Ev();
extern void _ZN8S20975C73v24Ev();
extern void _ZN8S20975C73v25Ev();
extern void _ZN8S20975C73v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C78S20975C2__8S20975C1[] = {
  ABISELECT(104,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C7[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20975C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20975C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20975C73v26Ev,
};
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C88S20975C78S20975C2__8S20975C1[] = {
  ABISELECT(104,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C8[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
};
extern void _ZN8S20975C93v19Ev();
extern void _ZN8S20975C93v20Ev();
extern void _ZN8S20975C93v21Ev();
extern void _ZN8S20975C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C98S20975C88S20975C78S20975C2__8S20975C1[] = {
  ABISELECT(104,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20975C93v22Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C98S20975C88S20975C78S20975C2__8S20975C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20975C9[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C88S20975C78S20975C2__8S20975C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20975C8[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C38S20975C78S20975C2__A1__8S20975C1[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C38S20975C78S20975C2__A1__8S20975C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C78S20975C2__8S20975C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20975C7[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C3__8S20975C78S20975C2__8S20975C1[] = {
  ABISELECT(72,48),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20975C7[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
};
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C3__8S20975C2__8S20975C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S20975C2[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C2__8S20975C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20975C2[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C38S20975C7__A1__8S20975C2__8S20975C1[] = {
  ABISELECT(72,48),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20975C2[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
};
extern void _ZN8S20975C63v13Ev();
extern void _ZN8S20975C63v14Ev();
extern void _ZN8S20975C63v15Ev();
extern void _ZN8S20975C63v16Ev();
extern void _ZN8S20975C63v17Ev();
extern void _ZN8S20975C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C3__8S20975C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20975C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20975C33v18Ev,
};
extern void _ZN8S20975C52v5Ev();
extern void _ZN8S20975C52v6Ev();
extern void _ZN8S20975C52v7Ev();
extern void _ZN8S20975C52v8Ev();
extern void _ZN8S20975C52v9Ev();
extern void _ZN8S20975C53v10Ev();
extern void _ZN8S20975C43v11Ev();
extern void _ZN8S20975C43v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20975C4__8S20975C3__8S20975C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20975C3[0]),
  (VTBL_ENTRY)&_ZN8S20975C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20975C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20975C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20975C43v12Ev,
};
static  VTT_ENTRY vtt_S20975C1[] = {
  {&(_ZTV8S20975C1[5]),  5,88},
  {&(_ZTV8S20975C1[33]),  33,88},
  {&(_ZTV8S20975C1[64]),  64,88},
  {&(_ZTV8S20975C1[80]),  80,88},
  {&(_ZTV8S20975C1[49]),  49,88},
  {&(_tg__ZTV8S20975C2__8S20975C1[4]),  4,17},
  {&(_tg__ZTV8S20975C78S20975C2__8S20975C1[3]),  3,13},
  {&(_tg__ZTV8S20975C88S20975C78S20975C2__8S20975C1[3]),  3,7},
  {&(_tg__ZTV8S20975C98S20975C88S20975C78S20975C2__8S20975C1[3]),  3,7},
  {&(_tg__ZTV8S20975C4__8S20975C98S20975C88S20975C78S20975C2__8S20975C1[10]),  10,18},
  {&(_tg__ZTV8S20975C4__8S20975C88S20975C78S20975C2__8S20975C1[10]),  10,18},
  {&(_tg__ZTV8S20975C38S20975C78S20975C2__A1__8S20975C1[3]),  3,9},
  {&(_tg__ZTV8S20975C4__8S20975C38S20975C78S20975C2__A1__8S20975C1[10]),  10,18},
  {&(_tg__ZTV8S20975C4__8S20975C78S20975C2__8S20975C1[10]),  10,18},
  {&(_tg__ZTV8S20975C3__8S20975C78S20975C2__8S20975C1[3]),  3,9},
  {&(_tg__ZTV8S20975C3__8S20975C2__8S20975C1[9]),  9,15},
  {&(_tg__ZTV8S20975C4__8S20975C2__8S20975C1[10]),  10,18},
  {&(_tg__ZTV8S20975C38S20975C7__A1__8S20975C2__8S20975C1[3]),  3,9},
  {&(_tg__ZTV8S20975C3__8S20975C1[3]),  3,9},
  {&(_tg__ZTV8S20975C4__8S20975C3__8S20975C1[10]),  10,18},
};
extern VTBL_ENTRY _ZTI8S20975C1[];
extern  VTBL_ENTRY _ZTV8S20975C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20975C1[];
static VTBL_ENTRY alt_thunk_names144[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20975C1D0Ev,_ZTv0_n36_N8S20975C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20975C1D0Ev,_ZThn12_N8S20975C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20975C1D1Ev,_ZTv0_n36_N8S20975C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20975C1D1Ev,_ZThn12_N8S20975C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20975C1 = {  "S20975C1", // class name
  bases_S20975C1, 10,
  &(vtc_S20975C1[0]), // expected_vtbl_contents
  &(vtt_S20975C1[0]), // expected_vtt_contents
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI8S20975C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20975C1),88, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20975C1),20, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names144,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19140C6  : virtual S19169C6_nt {
  ~S19140C6(); // tgen
  S19140C6(); // tgen
};
//SIG(-1 S19140C6) C1{ VBC2{ m Fp[6]}}


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

static void Test_S19140C6()
{
  extern Class_Descriptor cd_S19140C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19140C6, buf);
    S19140C6 *dp, &lv = *(dp=new (buf) S19140C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19140C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19140C6)");
    check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(8,4), "S19140C6");
    test_class_info(&lv, &cd_S19140C6);
    dp->~S19140C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19140C6(Test_S19140C6, "S19140C6", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19140C6C1Ev();
extern void _ZN8S19140C6D1Ev();
Name_Map name_map_S19140C6[] = {
  NSPAIR(_ZN8S19140C6C1Ev),
  NSPAIR(_ZN8S19140C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S19140C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_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 _ZTI8S19140C6[];
static  VTBL_ENTRY vtc_S19140C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C6[0]),
};
extern VTBL_ENTRY _ZTV8S19140C6[];
static  VTT_ENTRY vtt_S19140C6[] = {
  {&(_ZTV8S19140C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19140C6[];
extern  VTBL_ENTRY _ZTV8S19140C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C6[];
Class_Descriptor cd_S19140C6 = {  "S19140C6", // class name
  bases_S19140C6, 1,
  &(vtc_S19140C6[0]), // expected_vtbl_contents
  &(vtt_S19140C6[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19140C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19140C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19140C6),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  S19140C4  : virtual S19169C6_nt {
  __tsi64 s19140c4f0;
  ~S19140C4(); // tgen
  S19140C4(); // tgen
};
//SIG(-1 S19140C4) C1{ VBC2{ m Fp[6]} FL}


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

static void Test_S19140C4()
{
  extern Class_Descriptor cd_S19140C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19140C4, buf);
    S19140C4 *dp, &lv = *(dp=new (buf) S19140C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19140C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19140C4)");
    check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(16,12), "S19140C4");
    check_field_offset(lv, s19140c4f0, ABISELECT(8,4), "S19140C4.s19140c4f0");
    test_class_info(&lv, &cd_S19140C4);
    dp->~S19140C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19140C4(Test_S19140C4, "S19140C4", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19140C4C1Ev();
extern void _ZN8S19140C4D1Ev();
Name_Map name_map_S19140C4[] = {
  NSPAIR(_ZN8S19140C4C1Ev),
  NSPAIR(_ZN8S19140C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S19140C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19140C4[];
static  VTBL_ENTRY vtc_S19140C4[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
extern VTBL_ENTRY _ZTV8S19140C4[];
static  VTT_ENTRY vtt_S19140C4[] = {
  {&(_ZTV8S19140C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
Class_Descriptor cd_S19140C4 = {  "S19140C4", // class name
  bases_S19140C4, 1,
  &(vtc_S19140C4[0]), // expected_vtbl_contents
  &(vtt_S19140C4[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19140C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19140C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19140C4),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  S19140C9  : S19169C6_nt , S19140C4 , virtual S19140C6 {
  ~S19140C9(); // tgen
  S19140C9(); // tgen
};
//SIG(-1 S19140C9) C1{ BC2{ m Fp[6]} BC3{ VBC2 FL} VBC4{ VBC2}}


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

static void Test_S19140C9()
{
  extern Class_Descriptor cd_S19140C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S19140C9, buf);
    S19140C9 *dp, &lv = *(dp=new (buf) S19140C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S19140C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19140C9)");
    /*is_ambiguous_... S19140C9::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(16,12), "S19140C9");
    check_base_class_offset(lv, (S19169C6_nt*)(S19140C4*), ABISELECT(64,36), "S19140C9");
    check_base_class_offset(lv, (S19169C6_nt*)(S19140C6*), ABISELECT(64,36), "S19140C9");
    check_base_class_offset(lv, (S19140C4*), 0, "S19140C9");
    check_base_class_offset(lv, (S19140C6*), ABISELECT(112,60), "S19140C9");
    test_class_info(&lv, &cd_S19140C9);
    dp->~S19140C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19140C9(Test_S19140C9, "S19140C9", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN8S19140C9C1Ev();
extern void _ZN8S19140C9D1Ev();
Name_Map name_map_S19140C9[] = {
  NSPAIR(_ZN8S19140C9C1Ev),
  NSPAIR(_ZN8S19140C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C4;
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
extern Class_Descriptor cd_S19140C6;
extern VTBL_ENTRY _ZTI8S19140C6[];
extern  VTBL_ENTRY _ZTV8S19140C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C6[];
static Base_Class bases_S19140C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19140C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19140C6,    ABISELECT(112,60), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19140C9[];
static  VTBL_ENTRY vtc_S19140C9[] = {
  ABISELECT(112,60),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
  ABISELECT(-48,-24),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
extern VTBL_ENTRY _ZTV8S19140C9[];
static  VTBL_ENTRY _tg__ZTV8S19140C4__8S19140C9[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__8S19140C9[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C6[0]),
};
static  VTT_ENTRY vtt_S19140C9[] = {
  {&(_ZTV8S19140C9[4]),  4,7},
  {&(_tg__ZTV8S19140C4__8S19140C9[3]),  3,3},
  {&(_ZTV8S19140C9[7]),  7,7},
  {&(_tg__ZTV8S19140C6__8S19140C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19140C9[];
extern  VTBL_ENTRY _ZTV8S19140C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C9[];
Class_Descriptor cd_S19140C9 = {  "S19140C9", // class name
  bases_S19140C9, 4,
  &(vtc_S19140C9[0]), // expected_vtbl_contents
  &(vtt_S19140C9[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI8S19140C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19140C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19140C9),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19140C2  : S19169C16_nt , S19140C6 , S19169C3_nt , virtual S19169C11_nt , S19140C9 {
  virtual  ~S19140C2(); // _ZN8S19140C2D2Ev
  S19140C2(); // tgen
};
//SIG(-1 S19140C2) C1{ BC2{ m FC3{ VBC4{ m Fp[6]} FL}} BC5{ VBC4} BC6{ m Fl[10]} VBC7{ vd m} BC8{ BC4 BC9{ VBC4 FL} VBC5} vd}


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

static void Test_S19140C2()
{
  extern Class_Descriptor cd_S19140C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,38)];
    init_test(&cd_S19140C2, buf);
    S19140C2 *dp, &lv = *(dp=new (buf) S19140C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,148), "sizeof(S19140C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19140C2)");
    check_base_class_offset(lv, (S19169C16_nt*), ABISELECT(8,4), "S19140C2");
    /*is_ambiguous_... S19140C2::S19140C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C6*), ABISELECT(216,116), "S19140C2");
    check_base_class_offset(lv, (S19169C6_nt*)(S19140C4*)(S19140C9*), ABISELECT(216,116), "S19140C2");
    /*is_ambiguous_... S19140C2::S19140C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C6*), ABISELECT(216,116), "S19140C2");
    /*is_ambiguous_... S19140C2::S19140C6 */ AMB_check_base_class_offset(lv, (S19140C6*), 0, "S19140C2");
    check_base_class_offset(lv, (S19169C3_nt*), ABISELECT(72,40), "S19140C2");
    check_base_class_offset(lv, (S19169C11_nt*), ABISELECT(264,140), "S19140C2");
    /*is_ambiguous_... S19140C9::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C9*), ABISELECT(168,92), "S19140C2");
    check_base_class_offset(lv, (S19140C4*)(S19140C9*), ABISELECT(152,80), "S19140C2");
    check_base_class_offset(lv, (S19140C6*)(S19140C9*), ABISELECT(272,144), "S19140C2");
    check_base_class_offset(lv, (S19140C9*), ABISELECT(152,80), "S19140C2");
    test_class_info(&lv, &cd_S19140C2);
    dp->~S19140C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19140C2(Test_S19140C2, "S19140C2", ABISELECT(280,148));

#else // __cplusplus

extern void _ZN8S19140C2C1Ev();
extern void _ZN8S19140C2D2Ev();
Name_Map name_map_S19140C2[] = {
  NSPAIR(_ZN8S19140C2C1Ev),
  NSPAIR(_ZN8S19140C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C6;
extern VTBL_ENTRY _ZTI8S19140C6[];
extern  VTBL_ENTRY _ZTV8S19140C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C6[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C4;
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
extern Class_Descriptor cd_S19140C6;
extern VTBL_ENTRY _ZTI8S19140C6[];
extern  VTBL_ENTRY _ZTV8S19140C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C6[];
extern Class_Descriptor cd_S19140C9;
extern VTBL_ENTRY _ZTI8S19140C9[];
extern  VTBL_ENTRY _ZTV8S19140C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C9[];
static Base_Class bases_S19140C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C16_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_S19169C6_nt,    ABISELECT(216,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19140C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C3_nt,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C11_nt,    ABISELECT(264,140), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C6_nt,    ABISELECT(168,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19140C4,    ABISELECT(152,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19140C6,    ABISELECT(272,144), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19140C9,    ABISELECT(152,80), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19140C2[];
extern void _ZN8S19140C2D1Ev();
extern void _ZN8S19140C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev)();
extern void ABISELECT(_ZThn264_N8S19140C2D1Ev,_ZThn140_N8S19140C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev)();
extern void ABISELECT(_ZThn264_N8S19140C2D0Ev,_ZThn140_N8S19140C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19140C2[] = {
  ABISELECT(272,144),
  ABISELECT(264,140),
  ABISELECT(216,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
  (VTBL_ENTRY)&_ZN8S19140C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19140C2D0Ev,
  ABISELECT(120,64),
  ABISELECT(64,36),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
};
extern VTBL_ENTRY _ZTV8S19140C2[];
static  VTBL_ENTRY _tg__ZTV8S19140C6__A__8S19140C2[] = {
  ABISELECT(216,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C9__8S19140C2[] = {
  ABISELECT(120,64),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C48S19140C9__8S19140C2[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__8S19140C9__8S19140C2[] = {
  ABISELECT(-56,-28),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__A1__8S19140C2[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C6[0]),
};
static  VTT_ENTRY vtt_S19140C2[] = {
  {&(_ZTV8S19140C2[5]),  5,19},
  {&(_tg__ZTV8S19140C6__A__8S19140C2[3]),  3,3},
  {&(_tg__ZTV8S19140C9__8S19140C2[4]),  4,4},
  {&(_tg__ZTV8S19140C48S19140C9__8S19140C2[3]),  3,3},
  {&(_tg__ZTV8S19140C6__8S19140C9__8S19140C2[3]),  3,3},
  {&(_ZTV8S19140C2[14]),  14,19},
  {&(_ZTV8S19140C2[11]),  11,19},
  {&(_ZTV8S19140C2[19]),  19,19},
  {&(_tg__ZTV8S19140C6__A1__8S19140C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19140C2[];
extern  VTBL_ENTRY _ZTV8S19140C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C2[];
static VTBL_ENTRY alt_thunk_names145[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19140C2D0Ev,_ZThn140_N8S19140C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19140C2D1Ev,_ZThn140_N8S19140C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19140C2 = {  "S19140C2", // class name
  bases_S19140C2, 9,
  &(vtc_S19140C2[0]), // expected_vtbl_contents
  &(vtt_S19140C2[0]), // expected_vtt_contents
  ABISELECT(280,148), // object size
  NSPAIRA(_ZTI8S19140C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19140C2),19, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19140C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names145,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19140C12_nt  {
  void  mf19140c12(); // _ZN12S19140C12_nt10mf19140c12Ev
  virtual  ~S19140C12_nt(); // _ZN12S19140C12_ntD1Ev
  S19140C12_nt(); // tgen
};
//SIG(-1 S19140C12_nt) C1{ vd m}


void  S19140C12_nt ::mf19140c12(){}
 S19140C12_nt ::~S19140C12_nt(){ note_dtor("S19140C12_nt", this);}
S19140C12_nt ::S19140C12_nt(){ note_ctor("S19140C12_nt", this);} // tgen

//skip512 S19140C12_nt

#else // __cplusplus

extern void _ZN12S19140C12_ntC1Ev();
extern void _ZN12S19140C12_ntD1Ev();
Name_Map name_map_S19140C12_nt[] = {
  NSPAIR(_ZN12S19140C12_ntC1Ev),
  NSPAIR(_ZN12S19140C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S19140C12_nt[];
extern void _ZN12S19140C12_ntD1Ev();
extern void _ZN12S19140C12_ntD0Ev();
static  VTBL_ENTRY vtc_S19140C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S19140C12_nt[0]),
  (VTBL_ENTRY)&_ZN12S19140C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19140C12_ntD0Ev,
};
extern VTBL_ENTRY _ZTI12S19140C12_nt[];
VTBL_ENTRY *P__ZTI12S19140C12_nt = _ZTI12S19140C12_nt; 
extern  VTBL_ENTRY _ZTV12S19140C12_nt[];
Class_Descriptor cd_S19140C12_nt = {  "S19140C12_nt", // class name
  0,0,//no base classes
  &(vtc_S19140C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S19140C12_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S19140C12_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  S19140C11_nt  : virtual S19140C12_nt , S2014C28 {
  __tsi64 s19140c11f0:8;
  ~S19140C11_nt(); // tgen
  S19140C11_nt(); // tgen
};
//SIG(-1 S19140C11_nt) C1{ VBC2{ vd m} BC3{ m} FL:8}


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

//skip512 S19140C11_nt

#else // __cplusplus

extern void _ZN12S19140C11_ntC1Ev();
extern void _ZN12S19140C11_ntD1Ev();
Name_Map name_map_S19140C11_nt[] = {
  NSPAIR(_ZN12S19140C11_ntC1Ev),
  NSPAIR(_ZN12S19140C11_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19140C12_nt;
extern VTBL_ENTRY _ZTI12S19140C12_nt[];
extern  VTBL_ENTRY _ZTV12S19140C12_nt[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
static Base_Class bases_S19140C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19140C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S19140C11_nt[];
extern void _ZN12S19140C11_ntD1Ev();
extern void _ZN12S19140C11_ntD0Ev();
static  VTBL_ENTRY vtc_S19140C11_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S19140C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S19140C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19140C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTV12S19140C11_nt[];
static  VTT_ENTRY vtt_S19140C11_nt[] = {
  {&(_ZTV12S19140C11_nt[4]),  4,6},
  {&(_ZTV12S19140C11_nt[4]),  4,6},
};
extern VTBL_ENTRY _ZTI12S19140C11_nt[];
VTBL_ENTRY *P__ZTI12S19140C11_nt = _ZTI12S19140C11_nt; 
extern  VTBL_ENTRY _ZTV12S19140C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19140C11_nt[];
Class_Descriptor cd_S19140C11_nt = {  "S19140C11_nt", // class name
  bases_S19140C11_nt, 2,
  &(vtc_S19140C11_nt[0]), // expected_vtbl_contents
  &(vtt_S19140C11_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI12S19140C11_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV12S19140C11_nt),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S19140C11_nt),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19140C16  : S19169C16_nt , S19169C6_nt , virtual S19140C4 , virtual S19169C3_nt {
  int s19140c16f0;
  ~S19140C16(); // tgen
  S19140C16(); // tgen
};
//SIG(-1 S19140C16) C1{ BC2{ m FC3{ VBC4{ m Fp[6]} FL}} BC4 VBC5{ VBC4 FL} VBC6{ m Fl[10]} Fi}


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

static void Test_S19140C16()
{
  extern Class_Descriptor cd_S19140C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,37)];
    init_test(&cd_S19140C16, buf);
    S19140C16 *dp, &lv = *(dp=new (buf) S19140C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,144), "sizeof(S19140C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19140C16)");
    check_base_class_offset(lv, (S19169C16_nt*), ABISELECT(8,4), "S19140C16");
    /*is_ambiguous_... S19140C16::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(72,40), "S19140C16");
    check_base_class_offset(lv, (S19169C6_nt*)(S19140C4*), ABISELECT(144,80), "S19140C16");
    check_base_class_offset(lv, (S19140C4*), ABISELECT(128,68), "S19140C16");
    check_base_class_offset(lv, (S19169C3_nt*), ABISELECT(192,104), "S19140C16");
    check_field_offset(lv, s19140c16f0, ABISELECT(120,64), "S19140C16.s19140c16f0");
    test_class_info(&lv, &cd_S19140C16);
    dp->~S19140C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19140C16(Test_S19140C16, "S19140C16", ABISELECT(272,144));

#else // __cplusplus

extern void _ZN9S19140C16C1Ev();
extern void _ZN9S19140C16D1Ev();
Name_Map name_map_S19140C16[] = {
  NSPAIR(_ZN9S19140C16C1Ev),
  NSPAIR(_ZN9S19140C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C4;
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
static Base_Class bases_S19140C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C16_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_S19169C6_nt,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19140C4,    ABISELECT(128,68), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C3_nt,    ABISELECT(192,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},
  {0}};
extern VTBL_ENTRY _ZTI9S19140C16[];
static  VTBL_ENTRY vtc_S19140C16[] = {
  ABISELECT(192,104),
  ABISELECT(144,80),
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19140C16[0]),
  ABISELECT(16,12),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19140C16[0]),
};
extern VTBL_ENTRY _ZTV9S19140C16[];
static  VTBL_ENTRY _tg__ZTV8S19140C4__9S19140C16[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
static  VTT_ENTRY vtt_S19140C16[] = {
  {&(_ZTV9S19140C16[5]),  5,8},
  {&(_ZTV9S19140C16[8]),  8,8},
  {&(_tg__ZTV8S19140C4__9S19140C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19140C16[];
extern  VTBL_ENTRY _ZTV9S19140C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19140C16[];
Class_Descriptor cd_S19140C16 = {  "S19140C16", // class name
  bases_S19140C16, 5,
  &(vtc_S19140C16[0]), // expected_vtbl_contents
  &(vtt_S19140C16[0]), // expected_vtt_contents
  ABISELECT(272,144), // object size
  NSPAIRA(_ZTI9S19140C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19140C16),8, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19140C16),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19140C14  : S19140C2 , virtual S19140C12_nt , virtual S3222C8_nt , virtual S19140C16 {
  int s19140c14f0;
  ~S19140C14(); // tgen
  S19140C14(); // tgen
};
//SIG(-1 S19140C14) C1{ BC2{ BC3{ m FC4{ VBC5{ m Fp[6]} FL}} BC6{ VBC5} BC7{ m Fl[10]} VBC8{ vd m} BC9{ BC5 BC10{ VBC5 FL} VBC6} vd} VBC11{ vd m} VBC12{ m Fi} VBC13{ BC3 BC5 VBC10 VBC7 Fi} Fi}


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

static void Test_S19140C14()
{
  extern Class_Descriptor cd_S19140C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,71)];
    init_test(&cd_S19140C14, buf);
    S19140C14 *dp, &lv = *(dp=new (buf) S19140C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,280), "sizeof(S19140C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19140C14)");
    check_base_class_offset(lv, (S19169C16_nt*)(S19140C2*), ABISELECT(8,4), "S19140C14");
    /*is_ambiguous_... S19140C2::S19140C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C6*)(S19140C2*), ABISELECT(224,120), "S19140C14");
    check_base_class_offset(lv, (S19169C6_nt*)(S19140C4*)(S19140C9*)(S19140C2*), ABISELECT(224,120), "S19140C14");
    /*is_ambiguous_... S19140C14::S19140C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C6*), ABISELECT(224,120), "S19140C14");
    /*is_ambiguous_... S19140C14::S19140C4 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C4*), ABISELECT(224,120), "S19140C14");
    /*is_ambiguous_... S19140C2::S19140C6 */ AMB_check_base_class_offset(lv, (S19140C6*)(S19140C2*), 0, "S19140C14");
    check_base_class_offset(lv, (S19169C3_nt*)(S19140C2*), ABISELECT(72,40), "S19140C14");
    check_base_class_offset(lv, (S19169C11_nt*)(S19140C2*), ABISELECT(272,144), "S19140C14");
    /*is_ambiguous_... S19140C9::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C9*)(S19140C2*), ABISELECT(168,92), "S19140C14");
    check_base_class_offset(lv, (S19140C4*)(S19140C9*)(S19140C2*), ABISELECT(152,80), "S19140C14");
    check_base_class_offset(lv, (S19140C6*)(S19140C9*)(S19140C2*), ABISELECT(280,148), "S19140C14");
    check_base_class_offset(lv, (S19140C9*)(S19140C2*), ABISELECT(152,80), "S19140C14");
    check_base_class_offset(lv, (S19140C2*), 0, "S19140C14");
    check_base_class_offset(lv, (S19140C12_nt*), ABISELECT(288,152), "S19140C14");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(296,156), "S19140C14");
    check_base_class_offset(lv, (S19169C16_nt*)(S19140C16*), ABISELECT(312,164), "S19140C14");
    /*is_ambiguous_... S19140C16::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C16*), ABISELECT(376,200), "S19140C14");
    check_base_class_offset(lv, (S19140C4*)(S19140C16*), ABISELECT(432,228), "S19140C14");
    check_base_class_offset(lv, (S19169C3_nt*)(S19140C16*), ABISELECT(448,240), "S19140C14");
    check_base_class_offset(lv, (S19140C16*), ABISELECT(304,160), "S19140C14");
    check_field_offset(lv, s19140c14f0, ABISELECT(216,116), "S19140C14.s19140c14f0");
    test_class_info(&lv, &cd_S19140C14);
    dp->~S19140C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19140C14(Test_S19140C14, "S19140C14", ABISELECT(528,280));

#else // __cplusplus

extern void _ZN9S19140C14C1Ev();
extern void _ZN9S19140C14D1Ev();
Name_Map name_map_S19140C14[] = {
  NSPAIR(_ZN9S19140C14C1Ev),
  NSPAIR(_ZN9S19140C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C6;
extern VTBL_ENTRY _ZTI8S19140C6[];
extern  VTBL_ENTRY _ZTV8S19140C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C6[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C4;
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
extern Class_Descriptor cd_S19140C6;
extern VTBL_ENTRY _ZTI8S19140C6[];
extern  VTBL_ENTRY _ZTV8S19140C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C6[];
extern Class_Descriptor cd_S19140C9;
extern VTBL_ENTRY _ZTI8S19140C9[];
extern  VTBL_ENTRY _ZTV8S19140C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C9[];
extern Class_Descriptor cd_S19140C2;
extern VTBL_ENTRY _ZTI8S19140C2[];
extern  VTBL_ENTRY _ZTV8S19140C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C2[];
extern Class_Descriptor cd_S19140C12_nt;
extern VTBL_ENTRY _ZTI12S19140C12_nt[];
extern  VTBL_ENTRY _ZTV12S19140C12_nt[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C4;
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19140C16;
extern VTBL_ENTRY _ZTI9S19140C16[];
extern  VTBL_ENTRY _ZTV9S19140C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19140C16[];
static Base_Class bases_S19140C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C16_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
    9, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(224,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
    2, //immediately_derived
  0, 1},
  {&cd_S19140C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C11_nt,    ABISELECT(272,144), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19169C6_nt,    ABISELECT(168,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19140C4,    ABISELECT(152,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19140C6,    ABISELECT(280,148), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19140C9,    ABISELECT(152,80), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19140C2,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19140C12_nt,    ABISELECT(288,152), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(296,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C16_nt,    ABISELECT(312,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(376,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19140C4,    ABISELECT(432,228), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19169C3_nt,    ABISELECT(448,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19140C16,    ABISELECT(304,160), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19140C14[];
extern void _ZN9S19140C14D1Ev();
extern void _ZN9S19140C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev)();
extern void ABISELECT(_ZThn272_N9S19140C14D1Ev,_ZThn144_N9S19140C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev)();
extern void ABISELECT(_ZThn272_N9S19140C14D0Ev,_ZThn144_N9S19140C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev)();
extern void ABISELECT(_ZThn288_N9S19140C14D1Ev,_ZThn152_N9S19140C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev)();
extern void ABISELECT(_ZThn288_N9S19140C14D0Ev,_ZThn152_N9S19140C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19140C14[] = {
  ABISELECT(448,240),
  ABISELECT(432,228),
  ABISELECT(304,160),
  ABISELECT(296,156),
  ABISELECT(288,152),
  ABISELECT(280,148),
  ABISELECT(272,144),
  ABISELECT(224,120),
  0,
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
  (VTBL_ENTRY)&_ZN9S19140C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19140C14D0Ev,
  ABISELECT(128,68),
  ABISELECT(72,40),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
  ABISELECT(-272,-144),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
  ABISELECT(-288,-152),
  ABISELECT(-288,-152),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev),
  ABISELECT(144,80),
  ABISELECT(-80,-40),
  ABISELECT(128,68),
  ABISELECT(-304,-160),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
  ABISELECT(-208,-108),
  ABISELECT(-432,-228),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
};
extern VTBL_ENTRY _ZTV9S19140C14[];
extern void _ZN8S19140C2D1Ev();
extern void _ZN8S19140C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19140C2__9S19140C14[] = {
  ABISELECT(280,148),
  ABISELECT(272,144),
  ABISELECT(224,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
  (VTBL_ENTRY)&_ZN8S19140C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19140C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19140C68S19140C2__9S19140C14[] = {
  ABISELECT(224,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C98S19140C2__9S19140C14[] = {
  ABISELECT(128,68),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C48S19140C98S19140C2__9S19140C14[] = {
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__8S19140C98S19140C2__9S19140C14[] = {
  ABISELECT(-56,-28),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev)();
extern void ABISELECT(_ZThn272_N8S19140C2D1Ev,_ZThn144_N8S19140C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev)();
extern void ABISELECT(_ZThn272_N8S19140C2D0Ev,_ZThn144_N8S19140C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19169C11_nt__8S19140C2__9S19140C14[] = {
  ABISELECT(-272,-144),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19140C9__8S19140C2__9S19140C14[] = {
  ABISELECT(128,68),
  ABISELECT(72,40),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__A1__8S19140C2__9S19140C14[] = {
  ABISELECT(-56,-28),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__A1__9S19140C14[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19140C16__9S19140C14[] = {
  ABISELECT(144,80),
  ABISELECT(-80,-40),
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19140C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C4__9S19140C16__9S19140C14[] = {
  ABISELECT(-208,-108),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19140C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C4__A1__9S19140C14[] = {
  ABISELECT(-208,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
static  VTT_ENTRY vtt_S19140C14[] = {
  {&(_ZTV9S19140C14[10]),  10,37},
  {&(_tg__ZTV8S19140C2__9S19140C14[5]),  5,7},
  {&(_tg__ZTV8S19140C68S19140C2__9S19140C14[3]),  3,3},
  {&(_tg__ZTV8S19140C98S19140C2__9S19140C14[4]),  4,4},
  {&(_tg__ZTV8S19140C48S19140C98S19140C2__9S19140C14[3]),  3,3},
  {&(_tg__ZTV8S19140C6__8S19140C98S19140C2__9S19140C14[3]),  3,3},
  {&(_tg__ZTV12S19169C11_nt__8S19140C2__9S19140C14[3]),  3,5},
  {&(_tg__ZTV8S19140C9__8S19140C2__9S19140C14[4]),  4,4},
  {&(_tg__ZTV8S19140C6__A1__8S19140C2__9S19140C14[3]),  3,3},
  {&(_ZTV9S19140C14[19]),  19,37},
  {&(_ZTV9S19140C14[16]),  16,37},
  {&(_ZTV9S19140C14[24]),  24,37},
  {&(_ZTV9S19140C14[27]),  27,37},
  {&(_ZTV9S19140C14[34]),  34,37},
  {&(_ZTV9S19140C14[37]),  37,37},
  {&(_tg__ZTV8S19140C6__A1__9S19140C14[3]),  3,3},
  {&(_tg__ZTV9S19140C16__9S19140C14[5]),  5,5},
  {&(_tg__ZTV8S19140C4__9S19140C16__9S19140C14[3]),  3,3},
  {&(_tg__ZTV8S19140C4__A1__9S19140C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19140C14[];
extern  VTBL_ENTRY _ZTV9S19140C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19140C14[];
static VTBL_ENTRY alt_thunk_names146[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19140C2D0Ev,_ZThn144_N8S19140C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19140C2D1Ev,_ZThn144_N8S19140C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19140C14D0Ev,_ZThn152_N9S19140C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19140C14D0Ev,_ZThn144_N9S19140C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19140C14D1Ev,_ZThn152_N9S19140C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19140C14D1Ev,_ZThn144_N9S19140C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19140C14 = {  "S19140C14", // class name
  bases_S19140C14, 17,
  &(vtc_S19140C14[0]), // expected_vtbl_contents
  &(vtt_S19140C14[0]), // expected_vtt_contents
  ABISELECT(528,280), // object size
  NSPAIRA(_ZTI9S19140C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19140C14),37, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19140C14),19, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names146,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19140C17  : S19169C16_nt {
};
//SIG(1 S19140C17) C1{ BC2{ m FC3{ VBC4{ m Fp[6]} FL}}}



static void Test_S19140C17()
{
  extern Class_Descriptor cd_S19140C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19140C17, buf);
    S19140C17 &lv = *(new (buf) S19140C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19140C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19140C17)");
    check_base_class_offset(lv, (S19169C16_nt*), 0, "S19140C17");
    test_class_info(&lv, &cd_S19140C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19140C17(Test_S19140C17, "S19140C17", ABISELECT(64,36));

#else // __cplusplus

extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
static Base_Class bases_S19140C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S19140C17 = {  "S19140C17", // class name
  bases_S19140C17, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(64,36), // 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  S19140C1  : virtual S19140C2 , S2014C38 , virtual S19140C11_nt , S19140C9 , S19140C14 {
  ::S19140C17 s19140c1f0[5];
  virtual  ~S19140C1(); // _ZN8S19140C1D2Ev
  S19140C1(); // tgen
};
//SIG(1 S19140C1) C1{ VBC2{ BC3{ m FC4{ VBC5{ m Fp[6]} FL}} BC6{ VBC5} BC7{ m Fl[10]} VBC8{ vd m} BC9{ BC5 BC10{ VBC5 FL} VBC6} vd} BC11{ m} VBC12{ VBC13{ vd m} BC14{ m} FL:8} BC9 BC15{ BC2 VBC13 VBC16{ m Fi} VBC17{ BC3 BC5 VBC10 VBC7 Fi} Fi} vd FC18{ BC3}[5]}


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

static void Test_S19140C1()
{
  extern Class_Descriptor cd_S19140C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(142,155)];
    init_test(&cd_S19140C1, buf);
    S19140C1 *dp, &lv = *(dp=new (buf) S19140C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1128,616), "sizeof(S19140C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19140C1)");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19169C16_nt*)(S19140C2*), ABISELECT(616,340), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C6*)(S19140C2*), ABISELECT(824,452), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C4*)(S19140C9*)(S19140C2*), ABISELECT(824,452), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C6*), ABISELECT(824,452), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C9 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C4*)(S19140C9*), ABISELECT(824,452), "S19140C1");
    /*is_ambiguous_... S19140C2::S19140C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C6*)(S19140C2*)(S19140C14*), ABISELECT(824,452), "S19140C1");
    check_base_class_offset(lv, (S19169C6_nt*)(S19140C4*)(S19140C9*)(S19140C2*)(S19140C14*), ABISELECT(824,452), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C4 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C4*), ABISELECT(824,452), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19140C6*)(S19140C2*), ABISELECT(608,336), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19169C3_nt*)(S19140C2*), ABISELECT(680,376), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19169C11_nt*)(S19140C2*), ABISELECT(872,476), "S19140C1");
    check_base_class_offset(lv, (S19169C11_nt*)(S19140C2*)(S19140C14*), ABISELECT(872,476), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C9*)(S19140C2*), ABISELECT(776,428), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19140C4*)(S19140C9*)(S19140C2*), ABISELECT(760,416), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19140C6*)(S19140C9*)(S19140C2*), ABISELECT(880,480), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C9 */ AMB_check_base_class_offset(lv, (S19140C6*)(S19140C9*), ABISELECT(880,480), "S19140C1");
    check_base_class_offset(lv, (S19140C6*)(S19140C9*)(S19140C2*)(S19140C14*), ABISELECT(880,480), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19140C9*)(S19140C2*), ABISELECT(760,416), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C2 */ AMB_check_base_class_offset(lv, (S19140C2*), ABISELECT(608,336), "S19140C1");
    check_base_class_offset(lv, (S2014C38*), 0, "S19140C1");
    check_base_class_offset(lv, (S19140C12_nt*)(S19140C11_nt*), ABISELECT(888,484), "S19140C1");
    check_base_class_offset(lv, (S19140C12_nt*)(S19140C14*), ABISELECT(888,484), "S19140C1");
    check_base_class_offset(lv, (S2014C28*)(S19140C11_nt*), ABISELECT(888,484), "S19140C1");
    check_base_class_offset(lv, (S19140C11_nt*), ABISELECT(888,484), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C9 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C9*), ABISELECT(16,12), "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C9 */ AMB_check_base_class_offset(lv, (S19140C4*)(S19140C9*), 0, "S19140C1");
    /*is_ambiguous_... S19140C1::S19140C9 */ AMB_check_base_class_offset(lv, (S19140C9*), 0, "S19140C1");
    check_base_class_offset(lv, (S19169C16_nt*)(S19140C2*)(S19140C14*), ABISELECT(72,40), "S19140C1");
    /*is_ambiguous_... S19140C2::S19140C6 */ AMB_check_base_class_offset(lv, (S19140C6*)(S19140C2*)(S19140C14*), ABISELECT(64,36), "S19140C1");
    check_base_class_offset(lv, (S19169C3_nt*)(S19140C2*)(S19140C14*), ABISELECT(136,76), "S19140C1");
    /*is_ambiguous_... S19140C9::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C9*)(S19140C2*)(S19140C14*), ABISELECT(232,128), "S19140C1");
    check_base_class_offset(lv, (S19140C4*)(S19140C9*)(S19140C2*)(S19140C14*), ABISELECT(216,116), "S19140C1");
    check_base_class_offset(lv, (S19140C9*)(S19140C2*)(S19140C14*), ABISELECT(216,116), "S19140C1");
    check_base_class_offset(lv, (S19140C2*)(S19140C14*), ABISELECT(64,36), "S19140C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S19140C14*), ABISELECT(900,492), "S19140C1");
    check_base_class_offset(lv, (S19169C16_nt*)(S19140C16*), ABISELECT(912,500), "S19140C1");
    /*is_ambiguous_... S19140C16::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19140C16*), ABISELECT(976,536), "S19140C1");
    check_base_class_offset(lv, (S19140C4*)(S19140C16*), ABISELECT(1032,564), "S19140C1");
    check_base_class_offset(lv, (S19169C3_nt*)(S19140C16*), ABISELECT(1048,576), "S19140C1");
    check_base_class_offset(lv, (S19140C16*)(S19140C14*), ABISELECT(904,496), "S19140C1");
    check_base_class_offset(lv, (S19140C14*), ABISELECT(64,36), "S19140C1");
    check_field_offset(lv, s19140c1f0, ABISELECT(288,156), "S19140C1.s19140c1f0");
    test_class_info(&lv, &cd_S19140C1);
    dp->~S19140C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19140C1(Test_S19140C1, "S19140C1", ABISELECT(1128,616));

#else // __cplusplus

extern void _ZN8S19140C1C1Ev();
extern void _ZN8S19140C1D2Ev();
Name_Map name_map_S19140C1[] = {
  NSPAIR(_ZN8S19140C1C1Ev),
  NSPAIR(_ZN8S19140C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C6;
extern VTBL_ENTRY _ZTI8S19140C6[];
extern  VTBL_ENTRY _ZTV8S19140C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C6[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C4;
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
extern Class_Descriptor cd_S19140C6;
extern VTBL_ENTRY _ZTI8S19140C6[];
extern  VTBL_ENTRY _ZTV8S19140C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C6[];
extern Class_Descriptor cd_S19140C9;
extern VTBL_ENTRY _ZTI8S19140C9[];
extern  VTBL_ENTRY _ZTV8S19140C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C9[];
extern Class_Descriptor cd_S19140C2;
extern VTBL_ENTRY _ZTI8S19140C2[];
extern  VTBL_ENTRY _ZTV8S19140C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C2[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19140C12_nt;
extern VTBL_ENTRY _ZTI12S19140C12_nt[];
extern  VTBL_ENTRY _ZTV12S19140C12_nt[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19140C11_nt;
extern VTBL_ENTRY _ZTI12S19140C11_nt[];
extern  VTBL_ENTRY _ZTV12S19140C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19140C11_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C4;
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
extern Class_Descriptor cd_S19140C9;
extern VTBL_ENTRY _ZTI8S19140C9[];
extern  VTBL_ENTRY _ZTV8S19140C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C9[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19140C6;
extern VTBL_ENTRY _ZTI8S19140C6[];
extern  VTBL_ENTRY _ZTV8S19140C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C6[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C4;
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
extern Class_Descriptor cd_S19140C9;
extern VTBL_ENTRY _ZTI8S19140C9[];
extern  VTBL_ENTRY _ZTV8S19140C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C9[];
extern Class_Descriptor cd_S19140C2;
extern VTBL_ENTRY _ZTI8S19140C2[];
extern  VTBL_ENTRY _ZTV8S19140C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C2[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19140C4;
extern VTBL_ENTRY _ZTI8S19140C4[];
extern  VTBL_ENTRY _ZTV8S19140C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C4[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19140C16;
extern VTBL_ENTRY _ZTI9S19140C16[];
extern  VTBL_ENTRY _ZTV9S19140C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19140C16[];
extern Class_Descriptor cd_S19140C14;
extern VTBL_ENTRY _ZTI9S19140C14[];
extern  VTBL_ENTRY _ZTV9S19140C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19140C14[];
static Base_Class bases_S19140C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C16_nt,    ABISELECT(616,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(824,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19140C6,    ABISELECT(608,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(680,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19169C11_nt,    ABISELECT(872,476), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19169C6_nt,    ABISELECT(776,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19140C4,    ABISELECT(760,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19140C6,    ABISELECT(880,480), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19140C9,    ABISELECT(760,416), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19140C2,    ABISELECT(608,336), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19140C12_nt,    ABISELECT(888,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S2014C28,    ABISELECT(888,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19140C11_nt,    ABISELECT(888,484), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19140C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19140C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C16_nt,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19140C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(136,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(232,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19140C4,    ABISELECT(216,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19140C9,    ABISELECT(216,116), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19140C2,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(900,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S19169C16_nt,    ABISELECT(912,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(976,536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19140C4,    ABISELECT(1032,564), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19169C3_nt,    ABISELECT(1048,576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19140C16,    ABISELECT(904,496), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S19140C14,    ABISELECT(64,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19140C1[];
extern void _ZN8S19140C1D1Ev();
extern void _ZN8S19140C1D0Ev();
extern void ABISELECT(_ZThn64_N8S19140C1D1Ev,_ZThn36_N8S19140C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19140C1D0Ev,_ZThn36_N8S19140C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19140C1D1Ev,_ZTv0_n24_N8S19140C1D1Ev)();
extern void ABISELECT(_ZThn608_N8S19140C1D1Ev,_ZThn336_N8S19140C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19140C1D0Ev,_ZTv0_n24_N8S19140C1D0Ev)();
extern void ABISELECT(_ZThn608_N8S19140C1D0Ev,_ZThn336_N8S19140C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19140C1D1Ev,_ZTv0_n12_N8S19140C1D1Ev)();
extern void ABISELECT(_ZThn872_N8S19140C1D1Ev,_ZThn476_N8S19140C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19140C1D0Ev,_ZTv0_n12_N8S19140C1D0Ev)();
extern void ABISELECT(_ZThn872_N8S19140C1D0Ev,_ZThn476_N8S19140C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19140C1D1Ev,_ZTv0_n12_N8S19140C1D1Ev)();
extern void ABISELECT(_ZThn888_N8S19140C1D1Ev,_ZThn484_N8S19140C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19140C1D0Ev,_ZTv0_n12_N8S19140C1D0Ev)();
extern void ABISELECT(_ZThn888_N8S19140C1D0Ev,_ZThn484_N8S19140C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19140C1[] = {
  ABISELECT(1048,576),
  ABISELECT(1032,564),
  ABISELECT(904,496),
  ABISELECT(900,492),
  ABISELECT(888,484),
  ABISELECT(888,484),
  ABISELECT(872,476),
  ABISELECT(608,336),
  ABISELECT(880,480),
  ABISELECT(824,452),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
  (VTBL_ENTRY)&_ZN8S19140C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19140C1D0Ev,
  ABISELECT(984,540),
  ABISELECT(968,528),
  ABISELECT(840,460),
  ABISELECT(836,456),
  ABISELECT(824,448),
  ABISELECT(816,444),
  ABISELECT(808,440),
  ABISELECT(760,416),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19140C1D1Ev,_ZThn36_N8S19140C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19140C1D0Ev,_ZThn36_N8S19140C1D0Ev),
  ABISELECT(664,364),
  ABISELECT(608,336),
  ABISELECT(-216,-116),
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
  ABISELECT(-608,-336),
  ABISELECT(272,144),
  ABISELECT(264,140),
  ABISELECT(216,116),
  ABISELECT(-608,-336),
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19140C1D1Ev,_ZTv0_n24_N8S19140C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19140C1D0Ev,_ZTv0_n24_N8S19140C1D0Ev),
  ABISELECT(120,64),
  ABISELECT(64,36),
  ABISELECT(-760,-416),
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
  ABISELECT(-872,-476),
  ABISELECT(-872,-476),
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C1D1Ev,_ZTv0_n12_N8S19140C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C1D0Ev,_ZTv0_n12_N8S19140C1D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
  0,
  ABISELECT(-888,-484),
  ABISELECT(-888,-484),
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C1D1Ev,_ZTv0_n12_N8S19140C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C1D0Ev,_ZTv0_n12_N8S19140C1D0Ev),
  ABISELECT(144,80),
  ABISELECT(-80,-44),
  ABISELECT(128,68),
  ABISELECT(-904,-496),
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
  ABISELECT(-208,-112),
  ABISELECT(-1032,-564),
  (VTBL_ENTRY)&(_ZTI8S19140C1[0]),
};
extern VTBL_ENTRY _ZTV8S19140C1[];
static  VTBL_ENTRY _tg__ZTV8S19140C9__A1__8S19140C1[] = {
  ABISELECT(880,480),
  ABISELECT(824,452),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C48S19140C9__A1__8S19140C1[] = {
  ABISELECT(824,452),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__8S19140C9__A1__8S19140C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-880,-480),
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
extern void _ZN9S19140C14D1Ev();
extern void _ZN9S19140C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19140C14__8S19140C1[] = {
  ABISELECT(984,540),
  ABISELECT(968,528),
  ABISELECT(840,460),
  ABISELECT(836,456),
  ABISELECT(824,448),
  ABISELECT(816,444),
  ABISELECT(808,440),
  ABISELECT(760,416),
  0,
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
  (VTBL_ENTRY)&_ZN9S19140C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19140C14D0Ev,
};
extern void _ZN8S19140C2D1Ev();
extern void _ZN8S19140C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19140C29S19140C14__A1__8S19140C1[] = {
  ABISELECT(816,444),
  ABISELECT(808,440),
  ABISELECT(760,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
  (VTBL_ENTRY)&_ZN8S19140C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19140C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19140C68S19140C29S19140C14__A2__8S19140C1[] = {
  ABISELECT(760,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C98S19140C29S19140C14__A2__8S19140C1[] = {
  ABISELECT(664,364),
  ABISELECT(608,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C48S19140C98S19140C29S19140C14__A2__8S19140C1[] = {
  ABISELECT(608,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__8S19140C98S19140C29S19140C14__A2__8S19140C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-664,-364),
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev)();
extern void ABISELECT(_ZThn808_N8S19140C2D1Ev,_ZThn440_N8S19140C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev)();
extern void ABISELECT(_ZThn808_N8S19140C2D0Ev,_ZThn440_N8S19140C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19169C11_nt__8S19140C29S19140C14__A1__8S19140C1[] = {
  ABISELECT(-808,-440),
  ABISELECT(-808,-440),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19140C9__8S19140C29S19140C14__A1__8S19140C1[] = {
  ABISELECT(664,364),
  ABISELECT(608,336),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__A1__8S19140C29S19140C14__A1__8S19140C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-816,-444),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev)();
extern void ABISELECT(_ZThn808_N9S19140C14D1Ev,_ZThn440_N9S19140C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev)();
extern void ABISELECT(_ZThn808_N9S19140C14D0Ev,_ZThn440_N9S19140C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19169C11_nt__9S19140C14__8S19140C1[] = {
  ABISELECT(-808,-440),
  ABISELECT(-808,-440),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19140C98S19140C2__9S19140C14__8S19140C1[] = {
  ABISELECT(664,364),
  ABISELECT(608,336),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__A1__9S19140C14__8S19140C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-816,-444),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev)();
extern void ABISELECT(_ZThn824_N9S19140C14D1Ev,_ZThn448_N9S19140C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev)();
extern void ABISELECT(_ZThn824_N9S19140C14D0Ev,_ZThn448_N9S19140C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19140C12_nt__9S19140C14__8S19140C1[] = {
  ABISELECT(-824,-448),
  ABISELECT(-824,-448),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19140C16__9S19140C14__8S19140C1[] = {
  ABISELECT(144,80),
  ABISELECT(-80,-44),
  ABISELECT(128,68),
  ABISELECT(-840,-460),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C4__A1__9S19140C14__8S19140C1[] = {
  ABISELECT(-208,-112),
  ABISELECT(-968,-528),
  (VTBL_ENTRY)&(_ZTI9S19140C14[0]),
};
extern void _ZN8S19140C2D1Ev();
extern void _ZN8S19140C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19140C2__8S19140C1[] = {
  ABISELECT(272,144),
  ABISELECT(264,140),
  ABISELECT(216,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
  (VTBL_ENTRY)&_ZN8S19140C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19140C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19140C68S19140C2__8S19140C1[] = {
  ABISELECT(216,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C98S19140C2__8S19140C1[] = {
  ABISELECT(120,64),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C48S19140C98S19140C2__8S19140C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__8S19140C98S19140C2__8S19140C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19140C9[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev)();
extern void ABISELECT(_ZThn264_N8S19140C2D1Ev,_ZThn140_N8S19140C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev)();
extern void ABISELECT(_ZThn264_N8S19140C2D0Ev,_ZThn140_N8S19140C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19169C11_nt__8S19140C2__8S19140C1[] = {
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19140C9__8S19140C2__8S19140C1[] = {
  ABISELECT(120,64),
  ABISELECT(64,36),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__A1__8S19140C2__8S19140C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI8S19140C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C6__A1__8S19140C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S19140C11_ntD1Ev,_ZTv0_n12_N12S19140C11_ntD1Ev)();
extern void _ZN12S19140C11_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S19140C11_ntD0Ev,_ZTv0_n12_N12S19140C11_ntD0Ev)();
extern void _ZN12S19140C11_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19140C11_nt__8S19140C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S19140C11_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S19140C11_ntD1Ev,_ZTv0_n12_N12S19140C11_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S19140C11_ntD0Ev,_ZTv0_n12_N12S19140C11_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19140C16__8S19140C1[] = {
  ABISELECT(144,80),
  ABISELECT(-80,-44),
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19140C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C4__9S19140C16__8S19140C1[] = {
  ABISELECT(-208,-112),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19140C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19140C4__A3__8S19140C1[] = {
  ABISELECT(-208,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19140C4[0]),
};
static  VTT_ENTRY vtt_S19140C1[] = {
  {&(_ZTV8S19140C1[12]),  12,64},
  {&(_tg__ZTV8S19140C9__A1__8S19140C1[4]),  4,4},
  {&(_tg__ZTV8S19140C48S19140C9__A1__8S19140C1[3]),  3,3},
  {&(_tg__ZTV8S19140C6__8S19140C9__A1__8S19140C1[3]),  3,3},
  {&(_tg__ZTV9S19140C14__8S19140C1[10]),  10,12},
  {&(_tg__ZTV8S19140C29S19140C14__A1__8S19140C1[5]),  5,7},
  {&(_tg__ZTV8S19140C68S19140C29S19140C14__A2__8S19140C1[3]),  3,3},
  {&(_tg__ZTV8S19140C98S19140C29S19140C14__A2__8S19140C1[4]),  4,4},
  {&(_tg__ZTV8S19140C48S19140C98S19140C29S19140C14__A2__8S19140C1[3]),  3,3},
  {&(_tg__ZTV8S19140C6__8S19140C98S19140C29S19140C14__A2__8S19140C1[3]),  3,3},
  {&(_tg__ZTV12S19169C11_nt__8S19140C29S19140C14__A1__8S19140C1[3]),  3,5},
  {&(_tg__ZTV8S19140C9__8S19140C29S19140C14__A1__8S19140C1[4]),  4,4},
  {&(_tg__ZTV8S19140C6__A1__8S19140C29S19140C14__A1__8S19140C1[3]),  3,3},
  {&(_tg__ZTV12S19169C11_nt__9S19140C14__8S19140C1[3]),  3,5},
  {&(_tg__ZTV8S19140C98S19140C2__9S19140C14__8S19140C1[4]),  4,4},
  {&(_tg__ZTV8S19140C6__A1__9S19140C14__8S19140C1[3]),  3,3},
  {&(_tg__ZTV12S19140C12_nt__9S19140C14__8S19140C1[3]),  3,5},
  {&(_tg__ZTV9S19140C16__9S19140C14__8S19140C1[5]),  5,5},
  {&(_tg__ZTV8S19140C4__A1__9S19140C14__8S19140C1[3]),  3,3},
  {&(_ZTV8S19140C1[36]),  36,64},
  {&(_ZTV8S19140C1[45]),  45,64},
  {&(_ZTV8S19140C1[42]),  42,64},
  {&(_ZTV8S19140C1[50]),  50,64},
  {&(_ZTV8S19140C1[54]),  54,64},
  {&(_ZTV8S19140C1[54]),  54,64},
  {&(_ZTV8S19140C1[24]),  24,64},
  {&(_ZTV8S19140C1[30]),  30,64},
  {&(_ZTV8S19140C1[61]),  61,64},
  {&(_ZTV8S19140C1[64]),  64,64},
  {&(_tg__ZTV8S19140C2__8S19140C1[5]),  5,7},
  {&(_tg__ZTV8S19140C68S19140C2__8S19140C1[3]),  3,3},
  {&(_tg__ZTV8S19140C98S19140C2__8S19140C1[4]),  4,4},
  {&(_tg__ZTV8S19140C48S19140C98S19140C2__8S19140C1[3]),  3,3},
  {&(_tg__ZTV8S19140C6__8S19140C98S19140C2__8S19140C1[3]),  3,3},
  {&(_tg__ZTV12S19169C11_nt__8S19140C2__8S19140C1[3]),  3,5},
  {&(_tg__ZTV8S19140C9__8S19140C2__8S19140C1[4]),  4,4},
  {&(_tg__ZTV8S19140C6__A1__8S19140C2__8S19140C1[3]),  3,3},
  {&(_tg__ZTV8S19140C6__A1__8S19140C1[3]),  3,3},
  {&(_tg__ZTV12S19140C11_nt__8S19140C1[4]),  4,6},
  {&(_tg__ZTV12S19140C11_nt__8S19140C1[4]),  4,6},
  {&(_tg__ZTV9S19140C16__8S19140C1[5]),  5,5},
  {&(_tg__ZTV8S19140C4__9S19140C16__8S19140C1[3]),  3,3},
  {&(_tg__ZTV8S19140C4__A3__8S19140C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19140C1[];
extern  VTBL_ENTRY _ZTV8S19140C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19140C1[];
static VTBL_ENTRY alt_thunk_names147[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S19140C11_ntD0Ev,_ZTv0_n12_N12S19140C11_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S19140C11_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S19140C11_ntD1Ev,_ZTv0_n12_N12S19140C11_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S19140C11_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19140C14D0Ev,_ZTv0_n12_N9S19140C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn824_N9S19140C14D0Ev,_ZThn448_N9S19140C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn808_N9S19140C14D0Ev,_ZThn440_N9S19140C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19140C14D1Ev,_ZTv0_n12_N9S19140C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn824_N9S19140C14D1Ev,_ZThn448_N9S19140C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn808_N9S19140C14D1Ev,_ZThn440_N9S19140C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19140C2D0Ev,_ZTv0_n12_N8S19140C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19140C2D0Ev,_ZThn140_N8S19140C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn808_N8S19140C2D0Ev,_ZThn440_N8S19140C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19140C2D1Ev,_ZTv0_n12_N8S19140C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19140C2D1Ev,_ZThn140_N8S19140C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn808_N8S19140C2D1Ev,_ZThn440_N8S19140C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19140C1D0Ev,_ZTv0_n12_N8S19140C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn888_N8S19140C1D0Ev,_ZThn484_N8S19140C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn872_N8S19140C1D0Ev,_ZThn476_N8S19140C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19140C1D1Ev,_ZTv0_n12_N8S19140C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn888_N8S19140C1D1Ev,_ZThn484_N8S19140C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn872_N8S19140C1D1Ev,_ZThn476_N8S19140C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19140C1D0Ev,_ZTv0_n24_N8S19140C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19140C1D0Ev,_ZThn336_N8S19140C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19140C1D1Ev,_ZTv0_n24_N8S19140C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19140C1D1Ev,_ZThn336_N8S19140C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19140C1 = {  "S19140C1", // class name
  bases_S19140C1, 31,
  &(vtc_S19140C1[0]), // expected_vtbl_contents
  &(vtt_S19140C1[0]), // expected_vtt_contents
  ABISELECT(1128,616), // object size
  NSPAIRA(_ZTI8S19140C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19140C1),64, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19140C1),43, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names147,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7672C3  {
  virtual  ~S7672C3(); // _ZN7S7672C3D1Ev
  virtual void  v7(); // _ZN7S7672C32v7Ev
  S7672C3(); // tgen
};
//SIG(-1 S7672C3) C1{ vd v1}


 S7672C3 ::~S7672C3(){ note_dtor("S7672C3", this);}
void  S7672C3 ::v7(){vfunc_called(this, "_ZN7S7672C32v7Ev");}
S7672C3 ::S7672C3(){ note_ctor("S7672C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7672C3C1Ev();
extern void _ZN7S7672C3D1Ev();
Name_Map name_map_S7672C3[] = {
  NSPAIR(_ZN7S7672C3C1Ev),
  NSPAIR(_ZN7S7672C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7672C3[];
extern void _ZN7S7672C3D1Ev();
extern void _ZN7S7672C3D0Ev();
extern void _ZN7S7672C32v7Ev();
static  VTBL_ENTRY vtc_S7672C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7672C3[0]),
  (VTBL_ENTRY)&_ZN7S7672C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7672C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S7672C3[];
extern  VTBL_ENTRY _ZTV7S7672C3[];
Class_Descriptor cd_S7672C3 = {  "S7672C3", // class name
  0,0,//no base classes
  &(vtc_S7672C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7672C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7672C3),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  S7672C4_nt  {
  long s7672c4f0;
  virtual void  v8(); // _ZN10S7672C4_nt2v8Ev
  virtual void  v9(); // _ZN10S7672C4_nt2v9Ev
  virtual void  v10(); // _ZN10S7672C4_nt3v10Ev
  ~S7672C4_nt(); // tgen
  S7672C4_nt(); // tgen
};
//SIG(-1 S7672C4_nt) C1{ v1 v2 v3 Fl}


void  S7672C4_nt ::v8(){vfunc_called(this, "_ZN10S7672C4_nt2v8Ev");}
void  S7672C4_nt ::v9(){vfunc_called(this, "_ZN10S7672C4_nt2v9Ev");}
void  S7672C4_nt ::v10(){vfunc_called(this, "_ZN10S7672C4_nt3v10Ev");}
S7672C4_nt ::~S7672C4_nt(){ note_dtor("S7672C4_nt", this);} // tgen
S7672C4_nt ::S7672C4_nt(){ note_ctor("S7672C4_nt", this);} // tgen

//skip512 S7672C4_nt

#else // __cplusplus

extern void _ZN10S7672C4_ntC1Ev();
extern void _ZN10S7672C4_ntD1Ev();
Name_Map name_map_S7672C4_nt[] = {
  NSPAIR(_ZN10S7672C4_ntC1Ev),
  NSPAIR(_ZN10S7672C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7672C4_nt[];
extern void _ZN10S7672C4_nt2v8Ev();
extern void _ZN10S7672C4_nt2v9Ev();
extern void _ZN10S7672C4_nt3v10Ev();
static  VTBL_ENTRY vtc_S7672C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S7672C4_nt[];
VTBL_ENTRY *P__ZTI10S7672C4_nt = _ZTI10S7672C4_nt; 
extern  VTBL_ENTRY _ZTV10S7672C4_nt[];
Class_Descriptor cd_S7672C4_nt = {  "S7672C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7672C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7672C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7672C4_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  S7672C2_nt  : virtual S7672C3 , S7672C4_nt {
  long s7672c2f0[9];
  virtual  ~S7672C2_nt(); // _ZN10S7672C2_ntD2Ev
  virtual void  v11(); // _ZN10S7672C2_nt3v11Ev
  S7672C2_nt(); // tgen
};
//SIG(-1 S7672C2_nt) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 Fl} vd v1 Fl[9]}


 S7672C2_nt ::~S7672C2_nt(){ note_dtor("S7672C2_nt", this);}
void  S7672C2_nt ::v11(){vfunc_called(this, "_ZN10S7672C2_nt3v11Ev");}
S7672C2_nt ::S7672C2_nt(){ note_ctor("S7672C2_nt", this);} // tgen

//skip512 S7672C2_nt

#else // __cplusplus

extern void _ZN10S7672C2_ntC1Ev();
extern void _ZN10S7672C2_ntD2Ev();
Name_Map name_map_S7672C2_nt[] = {
  NSPAIR(_ZN10S7672C2_ntC1Ev),
  NSPAIR(_ZN10S7672C2_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7672C3;
extern VTBL_ENTRY _ZTI7S7672C3[];
extern  VTBL_ENTRY _ZTV7S7672C3[];
extern Class_Descriptor cd_S7672C4_nt;
extern VTBL_ENTRY _ZTI10S7672C4_nt[];
extern  VTBL_ENTRY _ZTV10S7672C4_nt[];
static Base_Class bases_S7672C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7672C3,    ABISELECT(88,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7672C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI10S7672C2_nt[];
extern void _ZN10S7672C4_nt2v8Ev();
extern void _ZN10S7672C4_nt2v9Ev();
extern void _ZN10S7672C4_nt3v10Ev();
extern void _ZN10S7672C2_ntD1Ev();
extern void _ZN10S7672C2_ntD0Ev();
extern void _ZN10S7672C2_nt3v11Ev();
extern void ABISELECT(_ZTv0_n24_N10S7672C2_ntD1Ev,_ZTv0_n12_N10S7672C2_ntD1Ev)();
extern void ABISELECT(_ZThn88_N10S7672C2_ntD1Ev,_ZThn44_N10S7672C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7672C2_ntD0Ev,_ZTv0_n12_N10S7672C2_ntD0Ev)();
extern void ABISELECT(_ZThn88_N10S7672C2_ntD0Ev,_ZThn44_N10S7672C2_ntD0Ev)() __attribute__((weak));
extern void _ZN7S7672C32v7Ev();
static  VTBL_ENTRY vtc_S7672C2_nt[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7672C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7672C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7672C2_nt3v11Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI10S7672C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C2_ntD1Ev,_ZTv0_n12_N10S7672C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C2_ntD0Ev,_ZTv0_n12_N10S7672C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
};
extern VTBL_ENTRY _ZTV10S7672C2_nt[];
static  VTT_ENTRY vtt_S7672C2_nt[] = {
  {&(_ZTV10S7672C2_nt[3]),  3,16},
  {&(_ZTV10S7672C2_nt[13]),  13,16},
};
extern VTBL_ENTRY _ZTI10S7672C2_nt[];
VTBL_ENTRY *P__ZTI10S7672C2_nt = _ZTI10S7672C2_nt; 
extern  VTBL_ENTRY _ZTV10S7672C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7672C2_nt[];
static VTBL_ENTRY alt_thunk_names148[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C2_ntD0Ev,_ZTv0_n12_N10S7672C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N10S7672C2_ntD0Ev,_ZThn44_N10S7672C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C2_ntD1Ev,_ZTv0_n12_N10S7672C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N10S7672C2_ntD1Ev,_ZThn44_N10S7672C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7672C2_nt = {  "S7672C2_nt", // class name
  bases_S7672C2_nt, 2,
  &(vtc_S7672C2_nt[0]), // expected_vtbl_contents
  &(vtt_S7672C2_nt[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI10S7672C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S7672C2_nt),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7672C2_nt),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names148,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7672C6_nt  : virtual S7672C3 {
  virtual  ~S7672C6_nt(); // _ZN10S7672C6_ntD2Ev
  virtual void  v12(); // _ZN10S7672C6_nt3v12Ev
  virtual void  v13(); // _ZN10S7672C6_nt3v13Ev
  S7672C6_nt(); // tgen
};
//SIG(-1 S7672C6_nt) C1{ VBC2{ vd v3} vd v1 v2}


 S7672C6_nt ::~S7672C6_nt(){ note_dtor("S7672C6_nt", this);}
void  S7672C6_nt ::v12(){vfunc_called(this, "_ZN10S7672C6_nt3v12Ev");}
void  S7672C6_nt ::v13(){vfunc_called(this, "_ZN10S7672C6_nt3v13Ev");}
S7672C6_nt ::S7672C6_nt(){ note_ctor("S7672C6_nt", this);} // tgen

//skip512 S7672C6_nt

#else // __cplusplus

extern void _ZN10S7672C6_ntC1Ev();
extern void _ZN10S7672C6_ntD2Ev();
Name_Map name_map_S7672C6_nt[] = {
  NSPAIR(_ZN10S7672C6_ntC1Ev),
  NSPAIR(_ZN10S7672C6_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7672C3;
extern VTBL_ENTRY _ZTI7S7672C3[];
extern  VTBL_ENTRY _ZTV7S7672C3[];
static Base_Class bases_S7672C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7672C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S7672C6_nt[];
extern void _ZN10S7672C6_ntD1Ev();
extern void _ZN10S7672C6_ntD0Ev();
extern void _ZN7S7672C32v7Ev();
extern void _ZN10S7672C6_nt3v12Ev();
extern void _ZN10S7672C6_nt3v13Ev();
static  VTBL_ENTRY vtc_S7672C6_nt[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7672C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV10S7672C6_nt[];
static  VTT_ENTRY vtt_S7672C6_nt[] = {
  {&(_ZTV10S7672C6_nt[5]),  5,10},
  {&(_ZTV10S7672C6_nt[5]),  5,10},
};
extern VTBL_ENTRY _ZTI10S7672C6_nt[];
VTBL_ENTRY *P__ZTI10S7672C6_nt = _ZTI10S7672C6_nt; 
extern  VTBL_ENTRY _ZTV10S7672C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7672C6_nt[];
Class_Descriptor cd_S7672C6_nt = {  "S7672C6_nt", // class name
  bases_S7672C6_nt, 1,
  &(vtc_S7672C6_nt[0]), // expected_vtbl_contents
  &(vtt_S7672C6_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7672C6_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7672C6_nt),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7672C6_nt),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7672C5_nt  : virtual S7672C6_nt , S7672C3 {
  void *s7672c5f0;
  ::S7672C6_nt s7672c5f1;
  virtual void  v14(); // _ZN10S7672C5_nt3v14Ev
  virtual void  v15(); // _ZN10S7672C5_nt3v15Ev
  virtual void  v16(); // _ZN10S7672C5_nt3v16Ev
  virtual void  v17(); // _ZN10S7672C5_nt3v17Ev
  virtual void  v18(); // _ZN10S7672C5_nt3v18Ev
  ~S7672C5_nt(); // tgen
  S7672C5_nt(); // tgen
};
//SIG(-1 S7672C5_nt) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7672C5_nt ::v14(){vfunc_called(this, "_ZN10S7672C5_nt3v14Ev");}
void  S7672C5_nt ::v15(){vfunc_called(this, "_ZN10S7672C5_nt3v15Ev");}
void  S7672C5_nt ::v16(){vfunc_called(this, "_ZN10S7672C5_nt3v16Ev");}
void  S7672C5_nt ::v17(){vfunc_called(this, "_ZN10S7672C5_nt3v17Ev");}
void  S7672C5_nt ::v18(){vfunc_called(this, "_ZN10S7672C5_nt3v18Ev");}
S7672C5_nt ::~S7672C5_nt(){ note_dtor("S7672C5_nt", this);} // tgen
S7672C5_nt ::S7672C5_nt(){ note_ctor("S7672C5_nt", this);} // tgen

//skip512 S7672C5_nt

#else // __cplusplus

extern void _ZN10S7672C5_ntC1Ev();
extern void _ZN10S7672C5_ntD1Ev();
Name_Map name_map_S7672C5_nt[] = {
  NSPAIR(_ZN10S7672C5_ntC1Ev),
  NSPAIR(_ZN10S7672C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7672C3;
extern VTBL_ENTRY _ZTI7S7672C3[];
extern  VTBL_ENTRY _ZTV7S7672C3[];
extern Class_Descriptor cd_S7672C6_nt;
extern VTBL_ENTRY _ZTI10S7672C6_nt[];
extern  VTBL_ENTRY _ZTV10S7672C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7672C6_nt[];
extern Class_Descriptor cd_S7672C3;
extern VTBL_ENTRY _ZTI7S7672C3[];
extern  VTBL_ENTRY _ZTV7S7672C3[];
static Base_Class bases_S7672C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7672C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7672C6_nt,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7672C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI10S7672C5_nt[];
extern void _ZN10S7672C5_ntD1Ev();
extern void _ZN10S7672C5_ntD0Ev();
extern void _ZN7S7672C32v7Ev();
extern void _ZN10S7672C5_nt3v14Ev();
extern void _ZN10S7672C5_nt3v15Ev();
extern void _ZN10S7672C5_nt3v16Ev();
extern void _ZN10S7672C5_nt3v17Ev();
extern void _ZN10S7672C5_nt3v18Ev();
extern void ABISELECT(_ZTv0_n24_N10S7672C5_ntD1Ev,_ZTv0_n12_N10S7672C5_ntD1Ev)();
extern void ABISELECT(_ZThn24_N10S7672C5_ntD1Ev,_ZThn12_N10S7672C5_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7672C5_ntD0Ev,_ZTv0_n12_N10S7672C5_ntD0Ev)();
extern void ABISELECT(_ZThn24_N10S7672C5_ntD0Ev,_ZThn12_N10S7672C5_ntD0Ev)() __attribute__((weak));
extern void _ZN7S7672C32v7Ev();
extern void _ZN10S7672C6_nt3v12Ev();
extern void _ZN10S7672C6_nt3v13Ev();
static  VTBL_ENTRY vtc_S7672C5_nt[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7672C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI10S7672C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C5_ntD1Ev,_ZTv0_n12_N10S7672C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C5_ntD0Ev,_ZTv0_n12_N10S7672C5_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV10S7672C5_nt[];
extern void ABISELECT(_ZTv0_n24_N10S7672C6_ntD1Ev,_ZTv0_n12_N10S7672C6_ntD1Ev)();
extern void _ZN10S7672C6_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7672C6_ntD0Ev,_ZTv0_n12_N10S7672C6_ntD0Ev)();
extern void _ZN10S7672C6_ntD0Ev() __attribute__((weak));
extern void _ZN7S7672C32v7Ev();
extern void _ZN10S7672C6_nt3v12Ev();
extern void _ZN10S7672C6_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV10S7672C6_nt__10S7672C5_nt[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C6_ntD1Ev,_ZTv0_n12_N10S7672C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C6_ntD0Ev,_ZTv0_n12_N10S7672C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v13Ev,
};
static  VTT_ENTRY vtt_S7672C5_nt[] = {
  {&(_ZTV10S7672C5_nt[4]),  4,24},
  {&(_ZTV10S7672C5_nt[19]),  19,24},
  {&(_ZTV10S7672C5_nt[19]),  19,24},
  {&(_tg__ZTV10S7672C6_nt__10S7672C5_nt[5]),  5,10},
  {&(_tg__ZTV10S7672C6_nt__10S7672C5_nt[5]),  5,10},
};
extern VTBL_ENTRY _ZTI10S7672C5_nt[];
VTBL_ENTRY *P__ZTI10S7672C5_nt = _ZTI10S7672C5_nt; 
extern  VTBL_ENTRY _ZTV10S7672C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7672C5_nt[];
static VTBL_ENTRY alt_thunk_names149[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C6_ntD0Ev,_ZTv0_n12_N10S7672C6_ntD0Ev), // 
  (VTBL_ENTRY)_ZN10S7672C6_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C6_ntD1Ev,_ZTv0_n12_N10S7672C6_ntD1Ev), // 
  (VTBL_ENTRY)_ZN10S7672C6_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C5_ntD0Ev,_ZTv0_n12_N10S7672C5_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N10S7672C5_ntD0Ev,_ZThn12_N10S7672C5_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C5_ntD1Ev,_ZTv0_n12_N10S7672C5_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N10S7672C5_ntD1Ev,_ZThn12_N10S7672C5_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7672C5_nt = {  "S7672C5_nt", // class name
  bases_S7672C5_nt, 3,
  &(vtc_S7672C5_nt[0]), // expected_vtbl_contents
  &(vtt_S7672C5_nt[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI10S7672C5_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S7672C5_nt),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7672C5_nt),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names149,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7672C7_nt  {
  int s7672c7f0[2];
  virtual void  v19(); // _ZN10S7672C7_nt3v19Ev
  virtual void  v20(); // _ZN10S7672C7_nt3v20Ev
  virtual void  v21(); // _ZN10S7672C7_nt3v21Ev
  virtual void  v22(); // _ZN10S7672C7_nt3v22Ev
  virtual void  v23(); // _ZN10S7672C7_nt3v23Ev
  virtual void  v24(); // _ZN10S7672C7_nt3v24Ev
  virtual void  v25(); // _ZN10S7672C7_nt3v25Ev
  virtual void  v26(); // _ZN10S7672C7_nt3v26Ev
  ~S7672C7_nt(); // tgen
  S7672C7_nt(); // tgen
};
//SIG(-1 S7672C7_nt) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fi[2]}


void  S7672C7_nt ::v19(){vfunc_called(this, "_ZN10S7672C7_nt3v19Ev");}
void  S7672C7_nt ::v20(){vfunc_called(this, "_ZN10S7672C7_nt3v20Ev");}
void  S7672C7_nt ::v21(){vfunc_called(this, "_ZN10S7672C7_nt3v21Ev");}
void  S7672C7_nt ::v22(){vfunc_called(this, "_ZN10S7672C7_nt3v22Ev");}
void  S7672C7_nt ::v23(){vfunc_called(this, "_ZN10S7672C7_nt3v23Ev");}
void  S7672C7_nt ::v24(){vfunc_called(this, "_ZN10S7672C7_nt3v24Ev");}
void  S7672C7_nt ::v25(){vfunc_called(this, "_ZN10S7672C7_nt3v25Ev");}
void  S7672C7_nt ::v26(){vfunc_called(this, "_ZN10S7672C7_nt3v26Ev");}
S7672C7_nt ::~S7672C7_nt(){ note_dtor("S7672C7_nt", this);} // tgen
S7672C7_nt ::S7672C7_nt(){ note_ctor("S7672C7_nt", this);} // tgen

//skip512 S7672C7_nt

#else // __cplusplus

extern void _ZN10S7672C7_ntC1Ev();
extern void _ZN10S7672C7_ntD1Ev();
Name_Map name_map_S7672C7_nt[] = {
  NSPAIR(_ZN10S7672C7_ntC1Ev),
  NSPAIR(_ZN10S7672C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7672C7_nt[];
extern void _ZN10S7672C7_nt3v19Ev();
extern void _ZN10S7672C7_nt3v20Ev();
extern void _ZN10S7672C7_nt3v21Ev();
extern void _ZN10S7672C7_nt3v22Ev();
extern void _ZN10S7672C7_nt3v23Ev();
extern void _ZN10S7672C7_nt3v24Ev();
extern void _ZN10S7672C7_nt3v25Ev();
extern void _ZN10S7672C7_nt3v26Ev();
static  VTBL_ENTRY vtc_S7672C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S7672C7_nt[];
VTBL_ENTRY *P__ZTI10S7672C7_nt = _ZTI10S7672C7_nt; 
extern  VTBL_ENTRY _ZTV10S7672C7_nt[];
Class_Descriptor cd_S7672C7_nt = {  "S7672C7_nt", // class name
  0,0,//no base classes
  &(vtc_S7672C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S7672C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7672C7_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  S7672C8_nt  {
  ::S7672C3 s7672c8f0;
  __tsi64 s7672c8f1:18;
  virtual void  v27(); // _ZN10S7672C8_nt3v27Ev
  ~S7672C8_nt(); // tgen
  S7672C8_nt(); // tgen
};
//SIG(-1 S7672C8_nt) C1{ v1 FC2{ vd v2} FL:18}


void  S7672C8_nt ::v27(){vfunc_called(this, "_ZN10S7672C8_nt3v27Ev");}
S7672C8_nt ::~S7672C8_nt(){ note_dtor("S7672C8_nt", this);} // tgen
S7672C8_nt ::S7672C8_nt(){ note_ctor("S7672C8_nt", this);} // tgen

//skip512 S7672C8_nt

#else // __cplusplus

extern void _ZN10S7672C8_ntC1Ev();
extern void _ZN10S7672C8_ntD1Ev();
Name_Map name_map_S7672C8_nt[] = {
  NSPAIR(_ZN10S7672C8_ntC1Ev),
  NSPAIR(_ZN10S7672C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7672C8_nt[];
extern void _ZN10S7672C8_nt3v27Ev();
static  VTBL_ENTRY vtc_S7672C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S7672C8_nt3v27Ev,
};
extern VTBL_ENTRY _ZTI10S7672C8_nt[];
VTBL_ENTRY *P__ZTI10S7672C8_nt = _ZTI10S7672C8_nt; 
extern  VTBL_ENTRY _ZTV10S7672C8_nt[];
Class_Descriptor cd_S7672C8_nt = {  "S7672C8_nt", // class name
  0,0,//no base classes
  &(vtc_S7672C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S7672C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7672C8_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7672C1  : S7672C2_nt , S7672C4_nt , S7672C5_nt , virtual S7672C7_nt , virtual S7672C8_nt {
  virtual  ~S7672C1(); // _ZN7S7672C1D2Ev
  virtual void  v1(); // _ZN7S7672C12v1Ev
  virtual void  v2(); // _ZN7S7672C12v2Ev
  virtual void  v3(); // _ZN7S7672C12v3Ev
  virtual void  v4(); // _ZN7S7672C12v4Ev
  virtual void  v5(); // _ZN7S7672C12v5Ev
  virtual void  v6(); // _ZN7S7672C12v6Ev
  S7672C1(); // tgen
};
//SIG(1 S7672C1) C1{ BC2{ VBC3{ vd v7} BC4{ v8 v9 v10 Fl} vd v11 Fl[9]} BC4 BC5{ VBC6{ VBC3 vd v12 v13} BC3 v14 v15 v16 v17 v18 Fp FC6} VBC7{ v19 v20 v21 v22 v23 v24 v25 v26 Fi[2]} VBC8{ v27 FC3 FL:18} vd v1 v2 v3 v4 v5 v6}


 S7672C1 ::~S7672C1(){ note_dtor("S7672C1", this);}
void  S7672C1 ::v1(){vfunc_called(this, "_ZN7S7672C12v1Ev");}
void  S7672C1 ::v2(){vfunc_called(this, "_ZN7S7672C12v2Ev");}
void  S7672C1 ::v3(){vfunc_called(this, "_ZN7S7672C12v3Ev");}
void  S7672C1 ::v4(){vfunc_called(this, "_ZN7S7672C12v4Ev");}
void  S7672C1 ::v5(){vfunc_called(this, "_ZN7S7672C12v5Ev");}
void  S7672C1 ::v6(){vfunc_called(this, "_ZN7S7672C12v6Ev");}
S7672C1 ::S7672C1(){ note_ctor("S7672C1", this);} // tgen

static void Test_S7672C1()
{
  extern Class_Descriptor cd_S7672C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S7672C1, buf);
    S7672C1 *dp, &lv = *(dp=new (buf) S7672C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S7672C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7672C1)");
    check_base_class_offset(lv, (S7672C3*)(S7672C2_nt*), ABISELECT(128,64), "S7672C1");
    check_base_class_offset(lv, (S7672C3*)(S7672C6_nt*), ABISELECT(128,64), "S7672C1");
    check_base_class_offset(lv, (S7672C4_nt*)(S7672C2_nt*), 0, "S7672C1");
    check_base_class_offset(lv, (S7672C2_nt*), 0, "S7672C1");
    /*is_ambiguous_... S7672C1::S7672C4_nt */ AMB_check_base_class_offset(lv, (S7672C4_nt*), ABISELECT(88,44), "S7672C1");
    check_base_class_offset(lv, (S7672C6_nt*)(S7672C5_nt*), ABISELECT(128,64), "S7672C1");
    /*is_ambiguous_... S7672C5_nt::S7672C3 */ AMB_check_base_class_offset(lv, (S7672C3*)(S7672C5_nt*), ABISELECT(104,52), "S7672C1");
    check_base_class_offset(lv, (S7672C5_nt*), ABISELECT(104,52), "S7672C1");
    check_base_class_offset(lv, (S7672C7_nt*), ABISELECT(136,68), "S7672C1");
    check_base_class_offset(lv, (S7672C8_nt*), ABISELECT(152,80), "S7672C1");
    test_class_info(&lv, &cd_S7672C1);
    dp->~S7672C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7672C1(Test_S7672C1, "S7672C1", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN7S7672C1C1Ev();
extern void _ZN7S7672C1D2Ev();
Name_Map name_map_S7672C1[] = {
  NSPAIR(_ZN7S7672C1C1Ev),
  NSPAIR(_ZN7S7672C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7672C3;
extern VTBL_ENTRY _ZTI7S7672C3[];
extern  VTBL_ENTRY _ZTV7S7672C3[];
extern Class_Descriptor cd_S7672C4_nt;
extern VTBL_ENTRY _ZTI10S7672C4_nt[];
extern  VTBL_ENTRY _ZTV10S7672C4_nt[];
extern Class_Descriptor cd_S7672C2_nt;
extern VTBL_ENTRY _ZTI10S7672C2_nt[];
extern  VTBL_ENTRY _ZTV10S7672C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7672C2_nt[];
extern Class_Descriptor cd_S7672C4_nt;
extern VTBL_ENTRY _ZTI10S7672C4_nt[];
extern  VTBL_ENTRY _ZTV10S7672C4_nt[];
extern Class_Descriptor cd_S7672C6_nt;
extern VTBL_ENTRY _ZTI10S7672C6_nt[];
extern  VTBL_ENTRY _ZTV10S7672C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7672C6_nt[];
extern Class_Descriptor cd_S7672C3;
extern VTBL_ENTRY _ZTI7S7672C3[];
extern  VTBL_ENTRY _ZTV7S7672C3[];
extern Class_Descriptor cd_S7672C5_nt;
extern VTBL_ENTRY _ZTI10S7672C5_nt[];
extern  VTBL_ENTRY _ZTV10S7672C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7672C5_nt[];
extern Class_Descriptor cd_S7672C7_nt;
extern VTBL_ENTRY _ZTI10S7672C7_nt[];
extern  VTBL_ENTRY _ZTV10S7672C7_nt[];
extern Class_Descriptor cd_S7672C8_nt;
extern VTBL_ENTRY _ZTI10S7672C8_nt[];
extern  VTBL_ENTRY _ZTV10S7672C8_nt[];
static Base_Class bases_S7672C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7672C3,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7672C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7672C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7672C4_nt,    ABISELECT(88,44), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7672C6_nt,    ABISELECT(128,64), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7672C3,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7672C5_nt,    ABISELECT(104,52), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7672C7_nt,    ABISELECT(136,68), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7672C8_nt,    ABISELECT(152,80), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7672C1[];
extern void _ZN10S7672C4_nt2v8Ev();
extern void _ZN10S7672C4_nt2v9Ev();
extern void _ZN10S7672C4_nt3v10Ev();
extern void _ZN7S7672C1D1Ev();
extern void _ZN7S7672C1D0Ev();
extern void _ZN10S7672C2_nt3v11Ev();
extern void _ZN7S7672C12v1Ev();
extern void _ZN7S7672C12v2Ev();
extern void _ZN7S7672C12v3Ev();
extern void _ZN7S7672C12v4Ev();
extern void _ZN7S7672C12v5Ev();
extern void _ZN7S7672C12v6Ev();
extern void _ZN10S7672C4_nt2v8Ev();
extern void _ZN10S7672C4_nt2v9Ev();
extern void _ZN10S7672C4_nt3v10Ev();
extern void ABISELECT(_ZThn104_N7S7672C1D1Ev,_ZThn52_N7S7672C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S7672C1D0Ev,_ZThn52_N7S7672C1D0Ev)();
extern void _ZN7S7672C32v7Ev();
extern void _ZN10S7672C5_nt3v14Ev();
extern void _ZN10S7672C5_nt3v15Ev();
extern void _ZN10S7672C5_nt3v16Ev();
extern void _ZN10S7672C5_nt3v17Ev();
extern void _ZN10S7672C5_nt3v18Ev();
extern void ABISELECT(_ZTv0_n24_N7S7672C1D1Ev,_ZTv0_n12_N7S7672C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7672C1D1Ev,_ZThn64_N7S7672C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7672C1D0Ev,_ZTv0_n12_N7S7672C1D0Ev)();
extern void ABISELECT(_ZThn128_N7S7672C1D0Ev,_ZThn64_N7S7672C1D0Ev)() __attribute__((weak));
extern void _ZN7S7672C32v7Ev();
extern void _ZN10S7672C6_nt3v12Ev();
extern void _ZN10S7672C6_nt3v13Ev();
extern void _ZN10S7672C7_nt3v19Ev();
extern void _ZN10S7672C7_nt3v20Ev();
extern void _ZN10S7672C7_nt3v21Ev();
extern void _ZN10S7672C7_nt3v22Ev();
extern void _ZN10S7672C7_nt3v23Ev();
extern void _ZN10S7672C7_nt3v24Ev();
extern void _ZN10S7672C7_nt3v25Ev();
extern void _ZN10S7672C7_nt3v26Ev();
extern void _ZN10S7672C8_nt3v27Ev();
static  VTBL_ENTRY vtc_S7672C1[] = {
  ABISELECT(152,80),
  ABISELECT(136,68),
  ABISELECT(128,64),
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7672C1[0]),
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S7672C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7672C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7672C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S7672C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7672C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7672C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7672C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7672C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7672C12v6Ev,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7672C1[0]),
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt3v10Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7672C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S7672C1D1Ev,_ZThn52_N7S7672C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S7672C1D0Ev,_ZThn52_N7S7672C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7672C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7672C1D1Ev,_ZTv0_n12_N7S7672C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7672C1D0Ev,_ZTv0_n12_N7S7672C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7672C1[0]),
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S7672C7_nt3v26Ev,
  0,
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI7S7672C1[0]),
  (VTBL_ENTRY)&_ZN10S7672C8_nt3v27Ev,
};
extern VTBL_ENTRY _ZTV7S7672C1[];
extern void _ZN10S7672C4_nt2v8Ev();
extern void _ZN10S7672C4_nt2v9Ev();
extern void _ZN10S7672C4_nt3v10Ev();
extern void _ZN10S7672C2_ntD1Ev();
extern void _ZN10S7672C2_ntD0Ev();
extern void _ZN10S7672C2_nt3v11Ev();
static  VTBL_ENTRY _tg__ZTV10S7672C2_nt__7S7672C1[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7672C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7672C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7672C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7672C2_nt3v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7672C2_ntD1Ev,_ZTv0_n12_N10S7672C2_ntD1Ev)();
extern void ABISELECT(_ZThn128_N10S7672C2_ntD1Ev,_ZThn64_N10S7672C2_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7672C2_ntD0Ev,_ZTv0_n12_N10S7672C2_ntD0Ev)();
extern void ABISELECT(_ZThn128_N10S7672C2_ntD0Ev,_ZThn64_N10S7672C2_ntD0Ev)() __attribute__((weak));
extern void _ZN7S7672C32v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7672C3__10S7672C2_nt__7S7672C1[] = {
  0,
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI10S7672C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C2_ntD1Ev,_ZTv0_n12_N10S7672C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C2_ntD0Ev,_ZTv0_n12_N10S7672C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
};
extern void _ZN10S7672C5_ntD1Ev();
extern void _ZN10S7672C5_ntD0Ev();
extern void _ZN7S7672C32v7Ev();
extern void _ZN10S7672C5_nt3v14Ev();
extern void _ZN10S7672C5_nt3v15Ev();
extern void _ZN10S7672C5_nt3v16Ev();
extern void _ZN10S7672C5_nt3v17Ev();
extern void _ZN10S7672C5_nt3v18Ev();
static  VTBL_ENTRY _tg__ZTV10S7672C5_nt__7S7672C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7672C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7672C5_nt3v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7672C5_ntD1Ev,_ZTv0_n12_N10S7672C5_ntD1Ev)();
extern void ABISELECT(_ZThn24_N10S7672C5_ntD1Ev,_ZThn12_N10S7672C5_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7672C5_ntD0Ev,_ZTv0_n12_N10S7672C5_ntD0Ev)();
extern void ABISELECT(_ZThn24_N10S7672C5_ntD0Ev,_ZThn12_N10S7672C5_ntD0Ev)() __attribute__((weak));
extern void _ZN7S7672C32v7Ev();
extern void _ZN10S7672C6_nt3v12Ev();
extern void _ZN10S7672C6_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV10S7672C6_nt__10S7672C5_nt__7S7672C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI10S7672C5_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C5_ntD1Ev,_ZTv0_n12_N10S7672C5_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C5_ntD0Ev,_ZTv0_n12_N10S7672C5_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N10S7672C6_ntD1Ev,_ZTv0_n12_N10S7672C6_ntD1Ev)();
extern void _ZN10S7672C6_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N10S7672C6_ntD0Ev,_ZTv0_n12_N10S7672C6_ntD0Ev)();
extern void _ZN10S7672C6_ntD0Ev() __attribute__((weak));
extern void _ZN7S7672C32v7Ev();
extern void _ZN10S7672C6_nt3v12Ev();
extern void _ZN10S7672C6_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV10S7672C6_nt__7S7672C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI10S7672C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C6_ntD1Ev,_ZTv0_n12_N10S7672C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N10S7672C6_ntD0Ev,_ZTv0_n12_N10S7672C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S7672C32v7Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7672C6_nt3v13Ev,
};
static  VTT_ENTRY vtt_S7672C1[] = {
  {&(_ZTV7S7672C1[6]),  6,69},
  {&(_tg__ZTV10S7672C2_nt__7S7672C1[3]),  3,9},
  {&(_tg__ZTV7S7672C3__10S7672C2_nt__7S7672C1[4]),  4,7},
  {&(_tg__ZTV10S7672C5_nt__7S7672C1[4]),  4,12},
  {&(_tg__ZTV10S7672C6_nt__10S7672C5_nt__7S7672C1[7]),  7,12},
  {&(_tg__ZTV10S7672C6_nt__10S7672C5_nt__7S7672C1[7]),  7,12},
  {&(_ZTV7S7672C1[42]),  42,69},
  {&(_ZTV7S7672C1[27]),  27,69},
  {&(_ZTV7S7672C1[42]),  42,69},
  {&(_ZTV7S7672C1[57]),  57,69},
  {&(_ZTV7S7672C1[68]),  68,69},
  {&(_tg__ZTV10S7672C6_nt__7S7672C1[5]),  5,10},
  {&(_tg__ZTV10S7672C6_nt__7S7672C1[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7672C1[];
extern  VTBL_ENTRY _ZTV7S7672C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7672C1[];
static VTBL_ENTRY alt_thunk_names150[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C6_ntD0Ev,_ZTv0_n12_N10S7672C6_ntD0Ev), // 
  (VTBL_ENTRY)_ZN10S7672C6_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C6_ntD1Ev,_ZTv0_n12_N10S7672C6_ntD1Ev), // 
  (VTBL_ENTRY)_ZN10S7672C6_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C5_ntD0Ev,_ZTv0_n12_N10S7672C5_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N10S7672C5_ntD0Ev,_ZThn12_N10S7672C5_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C5_ntD1Ev,_ZTv0_n12_N10S7672C5_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N10S7672C5_ntD1Ev,_ZThn12_N10S7672C5_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C2_ntD0Ev,_ZTv0_n12_N10S7672C2_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N10S7672C2_ntD0Ev,_ZThn64_N10S7672C2_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N10S7672C2_ntD1Ev,_ZTv0_n12_N10S7672C2_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N10S7672C2_ntD1Ev,_ZThn64_N10S7672C2_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7672C1D0Ev,_ZTv0_n12_N7S7672C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7672C1D0Ev,_ZThn64_N7S7672C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7672C1D1Ev,_ZTv0_n12_N7S7672C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7672C1D1Ev,_ZThn64_N7S7672C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7672C1 = {  "S7672C1", // class name
  bases_S7672C1, 9,
  &(vtc_S7672C1[0]), // expected_vtbl_contents
  &(vtt_S7672C1[0]), // expected_vtt_contents
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI7S7672C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7672C1),69, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7672C1),13, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names150,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4952C3_nt  {
  virtual  ~S4952C3_nt(); // _ZN10S4952C3_ntD1Ev
  virtual void  v3(); // _ZN10S4952C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4952C3_nt2v4Ev
  virtual void  v5(); // _ZN10S4952C3_nt2v5Ev
  virtual void  v6(); // _ZN10S4952C3_nt2v6Ev
  virtual void  v7(); // _ZN10S4952C3_nt2v7Ev
  virtual void  v8(); // _ZN10S4952C3_nt2v8Ev
  virtual void  v9(); // _ZN10S4952C3_nt2v9Ev
  virtual void  v10(); // _ZN10S4952C3_nt3v10Ev
  virtual void  v11(); // _ZN10S4952C3_nt3v11Ev
  virtual void  v12(); // _ZN10S4952C3_nt3v12Ev
  virtual void  v13(); // _ZN10S4952C3_nt3v13Ev
  virtual void  v14(); // _ZN10S4952C3_nt3v14Ev
  virtual void  v15(); // _ZN10S4952C3_nt3v15Ev
  virtual void  v16(); // _ZN10S4952C3_nt3v16Ev
  virtual void  v17(); // _ZN10S4952C3_nt3v17Ev
  virtual void  v18(); // _ZN10S4952C3_nt3v18Ev
  S4952C3_nt(); // tgen
};
//SIG(-1 S4952C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


 S4952C3_nt ::~S4952C3_nt(){ note_dtor("S4952C3_nt", this);}
void  S4952C3_nt ::v3(){vfunc_called(this, "_ZN10S4952C3_nt2v3Ev");}
void  S4952C3_nt ::v4(){vfunc_called(this, "_ZN10S4952C3_nt2v4Ev");}
void  S4952C3_nt ::v5(){vfunc_called(this, "_ZN10S4952C3_nt2v5Ev");}
void  S4952C3_nt ::v6(){vfunc_called(this, "_ZN10S4952C3_nt2v6Ev");}
void  S4952C3_nt ::v7(){vfunc_called(this, "_ZN10S4952C3_nt2v7Ev");}
void  S4952C3_nt ::v8(){vfunc_called(this, "_ZN10S4952C3_nt2v8Ev");}
void  S4952C3_nt ::v9(){vfunc_called(this, "_ZN10S4952C3_nt2v9Ev");}
void  S4952C3_nt ::v10(){vfunc_called(this, "_ZN10S4952C3_nt3v10Ev");}
void  S4952C3_nt ::v11(){vfunc_called(this, "_ZN10S4952C3_nt3v11Ev");}
void  S4952C3_nt ::v12(){vfunc_called(this, "_ZN10S4952C3_nt3v12Ev");}
void  S4952C3_nt ::v13(){vfunc_called(this, "_ZN10S4952C3_nt3v13Ev");}
void  S4952C3_nt ::v14(){vfunc_called(this, "_ZN10S4952C3_nt3v14Ev");}
void  S4952C3_nt ::v15(){vfunc_called(this, "_ZN10S4952C3_nt3v15Ev");}
void  S4952C3_nt ::v16(){vfunc_called(this, "_ZN10S4952C3_nt3v16Ev");}
void  S4952C3_nt ::v17(){vfunc_called(this, "_ZN10S4952C3_nt3v17Ev");}
void  S4952C3_nt ::v18(){vfunc_called(this, "_ZN10S4952C3_nt3v18Ev");}
S4952C3_nt ::S4952C3_nt(){ note_ctor("S4952C3_nt", this);} // tgen

//skip512 S4952C3_nt

#else // __cplusplus

extern void _ZN10S4952C3_ntC1Ev();
extern void _ZN10S4952C3_ntD1Ev();
Name_Map name_map_S4952C3_nt[] = {
  NSPAIR(_ZN10S4952C3_ntC1Ev),
  NSPAIR(_ZN10S4952C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4952C3_nt[];
extern void _ZN10S4952C3_ntD1Ev();
extern void _ZN10S4952C3_ntD0Ev();
extern void _ZN10S4952C3_nt2v3Ev();
extern void _ZN10S4952C3_nt2v4Ev();
extern void _ZN10S4952C3_nt2v5Ev();
extern void _ZN10S4952C3_nt2v6Ev();
extern void _ZN10S4952C3_nt2v7Ev();
extern void _ZN10S4952C3_nt2v8Ev();
extern void _ZN10S4952C3_nt2v9Ev();
extern void _ZN10S4952C3_nt3v10Ev();
extern void _ZN10S4952C3_nt3v11Ev();
extern void _ZN10S4952C3_nt3v12Ev();
extern void _ZN10S4952C3_nt3v13Ev();
extern void _ZN10S4952C3_nt3v14Ev();
extern void _ZN10S4952C3_nt3v15Ev();
extern void _ZN10S4952C3_nt3v16Ev();
extern void _ZN10S4952C3_nt3v17Ev();
extern void _ZN10S4952C3_nt3v18Ev();
static  VTBL_ENTRY vtc_S4952C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4952C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4952C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S4952C3_nt[];
VTBL_ENTRY *P__ZTI10S4952C3_nt = _ZTI10S4952C3_nt; 
extern  VTBL_ENTRY _ZTV10S4952C3_nt[];
Class_Descriptor cd_S4952C3_nt = {  "S4952C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4952C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4952C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4952C3_nt),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4952C8_nt  {
  __tsi64 s4952c8f0[4];
  void  mf4952c8(); // _ZN10S4952C8_nt8mf4952c8Ev
};
//SIG(-1 S4952C8_nt) C1{ m FL[4]}


void  S4952C8_nt ::mf4952c8(){}

//skip512 S4952C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4952C2  : S4952C3_nt {
  ::S2014C25 s4952c2f0;
  ::S4952C8_nt s4952c2f1;
  virtual  ~S4952C2(); // _ZN7S4952C2D1Ev
  virtual void  v19(); // _ZN7S4952C23v19Ev
  virtual void  v20(); // _ZN7S4952C23v20Ev
  virtual void  v21(); // _ZN7S4952C23v21Ev
  virtual void  v22(); // _ZN7S4952C23v22Ev
  virtual void  v23(); // _ZN7S4952C23v23Ev
  virtual void  v24(); // _ZN7S4952C23v24Ev
  virtual void  v25(); // _ZN7S4952C23v25Ev
  virtual void  v26(); // _ZN7S4952C23v26Ev
  virtual void  v27(); // _ZN7S4952C23v27Ev
  virtual void  v28(); // _ZN7S4952C23v28Ev
  virtual void  v29(); // _ZN7S4952C23v29Ev
  virtual void  v30(); // _ZN7S4952C23v30Ev
  virtual void  v31(); // _ZN7S4952C23v31Ev
  virtual void  v32(); // _ZN7S4952C23v32Ev
  virtual void  v33(); // _ZN7S4952C23v33Ev
  S4952C2(); // tgen
};
//SIG(-1 S4952C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC7{ m FL[4]}}


 S4952C2 ::~S4952C2(){ note_dtor("S4952C2", this);}
void  S4952C2 ::v19(){vfunc_called(this, "_ZN7S4952C23v19Ev");}
void  S4952C2 ::v20(){vfunc_called(this, "_ZN7S4952C23v20Ev");}
void  S4952C2 ::v21(){vfunc_called(this, "_ZN7S4952C23v21Ev");}
void  S4952C2 ::v22(){vfunc_called(this, "_ZN7S4952C23v22Ev");}
void  S4952C2 ::v23(){vfunc_called(this, "_ZN7S4952C23v23Ev");}
void  S4952C2 ::v24(){vfunc_called(this, "_ZN7S4952C23v24Ev");}
void  S4952C2 ::v25(){vfunc_called(this, "_ZN7S4952C23v25Ev");}
void  S4952C2 ::v26(){vfunc_called(this, "_ZN7S4952C23v26Ev");}
void  S4952C2 ::v27(){vfunc_called(this, "_ZN7S4952C23v27Ev");}
void  S4952C2 ::v28(){vfunc_called(this, "_ZN7S4952C23v28Ev");}
void  S4952C2 ::v29(){vfunc_called(this, "_ZN7S4952C23v29Ev");}
void  S4952C2 ::v30(){vfunc_called(this, "_ZN7S4952C23v30Ev");}
void  S4952C2 ::v31(){vfunc_called(this, "_ZN7S4952C23v31Ev");}
void  S4952C2 ::v32(){vfunc_called(this, "_ZN7S4952C23v32Ev");}
void  S4952C2 ::v33(){vfunc_called(this, "_ZN7S4952C23v33Ev");}
S4952C2 ::S4952C2(){ note_ctor("S4952C2", this);} // tgen

static void Test_S4952C2()
{
  extern Class_Descriptor cd_S4952C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S4952C2, buf);
    S4952C2 *dp, &lv = *(dp=new (buf) S4952C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S4952C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4952C2)");
    check_base_class_offset(lv, (S4952C3_nt*), 0, "S4952C2");
    check_field_offset(lv, s4952c2f0, ABISELECT(8,4), "S4952C2.s4952c2f0");
    check_field_offset(lv, s4952c2f1, ABISELECT(24,16), "S4952C2.s4952c2f1");
    test_class_info(&lv, &cd_S4952C2);
    dp->~S4952C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4952C2(Test_S4952C2, "S4952C2", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S4952C2C1Ev();
extern void _ZN7S4952C2D1Ev();
Name_Map name_map_S4952C2[] = {
  NSPAIR(_ZN7S4952C2C1Ev),
  NSPAIR(_ZN7S4952C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4952C3_nt;
extern VTBL_ENTRY _ZTI10S4952C3_nt[];
extern  VTBL_ENTRY _ZTV10S4952C3_nt[];
static Base_Class bases_S4952C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4952C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4952C2[];
extern void _ZN7S4952C2D1Ev();
extern void _ZN7S4952C2D0Ev();
extern void _ZN10S4952C3_nt2v3Ev();
extern void _ZN10S4952C3_nt2v4Ev();
extern void _ZN10S4952C3_nt2v5Ev();
extern void _ZN10S4952C3_nt2v6Ev();
extern void _ZN10S4952C3_nt2v7Ev();
extern void _ZN10S4952C3_nt2v8Ev();
extern void _ZN10S4952C3_nt2v9Ev();
extern void _ZN10S4952C3_nt3v10Ev();
extern void _ZN10S4952C3_nt3v11Ev();
extern void _ZN10S4952C3_nt3v12Ev();
extern void _ZN10S4952C3_nt3v13Ev();
extern void _ZN10S4952C3_nt3v14Ev();
extern void _ZN10S4952C3_nt3v15Ev();
extern void _ZN10S4952C3_nt3v16Ev();
extern void _ZN10S4952C3_nt3v17Ev();
extern void _ZN10S4952C3_nt3v18Ev();
extern void _ZN7S4952C23v19Ev();
extern void _ZN7S4952C23v20Ev();
extern void _ZN7S4952C23v21Ev();
extern void _ZN7S4952C23v22Ev();
extern void _ZN7S4952C23v23Ev();
extern void _ZN7S4952C23v24Ev();
extern void _ZN7S4952C23v25Ev();
extern void _ZN7S4952C23v26Ev();
extern void _ZN7S4952C23v27Ev();
extern void _ZN7S4952C23v28Ev();
extern void _ZN7S4952C23v29Ev();
extern void _ZN7S4952C23v30Ev();
extern void _ZN7S4952C23v31Ev();
extern void _ZN7S4952C23v32Ev();
extern void _ZN7S4952C23v33Ev();
static  VTBL_ENTRY vtc_S4952C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4952C2[0]),
  (VTBL_ENTRY)&_ZN7S4952C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4952C2D0Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v19Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v20Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v21Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v32Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S4952C2[];
extern  VTBL_ENTRY _ZTV7S4952C2[];
Class_Descriptor cd_S4952C2 = {  "S4952C2", // class name
  bases_S4952C2, 1,
  &(vtc_S4952C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S4952C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4952C2),35, //virtual function table var
  2, // 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  S4952C1  : S4952C2 {
  virtual  ~S4952C1(); // _ZN7S4952C1D1Ev
  virtual void  v1(); // _ZN7S4952C12v1Ev
  virtual void  v2(); // _ZN7S4952C12v2Ev
  S4952C1(); // tgen
};
//SIG(1 S4952C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m FL[4]}} vd v1 v2}


 S4952C1 ::~S4952C1(){ note_dtor("S4952C1", this);}
void  S4952C1 ::v1(){vfunc_called(this, "_ZN7S4952C12v1Ev");}
void  S4952C1 ::v2(){vfunc_called(this, "_ZN7S4952C12v2Ev");}
S4952C1 ::S4952C1(){ note_ctor("S4952C1", this);} // tgen

static void Test_S4952C1()
{
  extern Class_Descriptor cd_S4952C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S4952C1, buf);
    S4952C1 *dp, &lv = *(dp=new (buf) S4952C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S4952C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4952C1)");
    check_base_class_offset(lv, (S4952C3_nt*)(S4952C2*), 0, "S4952C1");
    check_base_class_offset(lv, (S4952C2*), 0, "S4952C1");
    test_class_info(&lv, &cd_S4952C1);
    dp->~S4952C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4952C1(Test_S4952C1, "S4952C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S4952C1C1Ev();
extern void _ZN7S4952C1D1Ev();
Name_Map name_map_S4952C1[] = {
  NSPAIR(_ZN7S4952C1C1Ev),
  NSPAIR(_ZN7S4952C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4952C3_nt;
extern VTBL_ENTRY _ZTI10S4952C3_nt[];
extern  VTBL_ENTRY _ZTV10S4952C3_nt[];
extern Class_Descriptor cd_S4952C2;
extern VTBL_ENTRY _ZTI7S4952C2[];
extern  VTBL_ENTRY _ZTV7S4952C2[];
static Base_Class bases_S4952C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4952C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4952C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4952C1[];
extern void _ZN7S4952C1D1Ev();
extern void _ZN7S4952C1D0Ev();
extern void _ZN10S4952C3_nt2v3Ev();
extern void _ZN10S4952C3_nt2v4Ev();
extern void _ZN10S4952C3_nt2v5Ev();
extern void _ZN10S4952C3_nt2v6Ev();
extern void _ZN10S4952C3_nt2v7Ev();
extern void _ZN10S4952C3_nt2v8Ev();
extern void _ZN10S4952C3_nt2v9Ev();
extern void _ZN10S4952C3_nt3v10Ev();
extern void _ZN10S4952C3_nt3v11Ev();
extern void _ZN10S4952C3_nt3v12Ev();
extern void _ZN10S4952C3_nt3v13Ev();
extern void _ZN10S4952C3_nt3v14Ev();
extern void _ZN10S4952C3_nt3v15Ev();
extern void _ZN10S4952C3_nt3v16Ev();
extern void _ZN10S4952C3_nt3v17Ev();
extern void _ZN10S4952C3_nt3v18Ev();
extern void _ZN7S4952C23v19Ev();
extern void _ZN7S4952C23v20Ev();
extern void _ZN7S4952C23v21Ev();
extern void _ZN7S4952C23v22Ev();
extern void _ZN7S4952C23v23Ev();
extern void _ZN7S4952C23v24Ev();
extern void _ZN7S4952C23v25Ev();
extern void _ZN7S4952C23v26Ev();
extern void _ZN7S4952C23v27Ev();
extern void _ZN7S4952C23v28Ev();
extern void _ZN7S4952C23v29Ev();
extern void _ZN7S4952C23v30Ev();
extern void _ZN7S4952C23v31Ev();
extern void _ZN7S4952C23v32Ev();
extern void _ZN7S4952C23v33Ev();
extern void _ZN7S4952C12v1Ev();
extern void _ZN7S4952C12v2Ev();
static  VTBL_ENTRY vtc_S4952C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4952C1[0]),
  (VTBL_ENTRY)&_ZN7S4952C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4952C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4952C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v19Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v20Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v21Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v32Ev,
  (VTBL_ENTRY)&_ZN7S4952C23v33Ev,
  (VTBL_ENTRY)&_ZN7S4952C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4952C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4952C1[];
extern  VTBL_ENTRY _ZTV7S4952C1[];
Class_Descriptor cd_S4952C1 = {  "S4952C1", // class name
  bases_S4952C1, 2,
  &(vtc_S4952C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S4952C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4952C1),37, //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  S15026C2  {
  unsigned char s15026c2f0:1;
  unsigned char s15026c2f1:1;
  unsigned char s15026c2f2:1;
  unsigned char s15026c2f3:1;
  unsigned char s15026c2f4:1;
  unsigned char s15026c2f5:1;
  unsigned char s15026c2f6:1;
  unsigned char s15026c2f7:1;
};
//SIG(-1 S15026C2) C1{ Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1}



static void Test_S15026C2()
{
  {
    init_simple_test("S15026C2");
    static S15026C2 lv;
    check2(sizeof(lv), 1, "sizeof(S15026C2)");
    check2(__alignof__(lv), 1, "__alignof__(S15026C2)");
    set_bf_and_test(lv, s15026c2f0, 0, 0, 1, 1, "S15026C2");
    set_bf_and_test(lv, s15026c2f1, 0, 1, 1, 1, "S15026C2");
    set_bf_and_test(lv, s15026c2f2, 0, 2, 1, 1, "S15026C2");
    set_bf_and_test(lv, s15026c2f3, 0, 3, 1, 1, "S15026C2");
    set_bf_and_test(lv, s15026c2f4, 0, 4, 1, 1, "S15026C2");
    set_bf_and_test(lv, s15026c2f5, 0, 5, 1, 1, "S15026C2");
    set_bf_and_test(lv, s15026c2f6, 0, 6, 1, 1, "S15026C2");
    set_bf_and_test(lv, s15026c2f7, 0, 7, 1, 1, "S15026C2");
  }
}
static Arrange_To_Call_Me vS15026C2(Test_S15026C2, "S15026C2", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15026C8  {
  int s15026c8f0[4];
  __tsi64 s15026c8f1[2];
};
//SIG(-1 S15026C8) C1{ Fi[4] FL[2]}



static void Test_S15026C8()
{
  {
    init_simple_test("S15026C8");
    S15026C8 lv;
    check2(sizeof(lv), 32, "sizeof(S15026C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15026C8)");
    check_field_offset(lv, s15026c8f0, 0, "S15026C8.s15026c8f0");
    check_field_offset(lv, s15026c8f1, 16, "S15026C8.s15026c8f1");
  }
}
static Arrange_To_Call_Me vS15026C8(Test_S15026C8, "S15026C8", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15026C3  {
  char s15026c3f0[32];
  unsigned char s15026c3f1:1;
  unsigned char s15026c3f2:1;
  unsigned char s15026c3f3:1;
  unsigned char s15026c3f4:1;
  unsigned char s15026c3f5:1;
  unsigned char s15026c3f6:1;
  unsigned char s15026c3f7:1;
  char s15026c3f8[33];
  int s15026c3f9[2];
  ::S2014C37 s15026c3f10;
  ::S2014C29_nt s15026c3f11;
  char s15026c3f12[8];
  ::S15026C8 s15026c3f13;
  void *s15026c3f14;
  void  mf15026c3(); // _ZN8S15026C39mf15026c3Ev
};
//SIG(-1 S15026C3) C1{ m Fc[32] Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc[33] Fi[2] FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fp Fi[2] FC5{ m}} Fc[8] FC6{ Fi[4] FL[2]} Fp}


void  S15026C3 ::mf15026c3(){}

static void Test_S15026C3()
{
  {
    init_simple_test("S15026C3");
    static S15026C3 lv;
    check2(sizeof(lv), ABISELECT(176,152), "sizeof(S15026C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15026C3)");
    check_field_offset(lv, s15026c3f0, 0, "S15026C3.s15026c3f0");
    set_bf_and_test(lv, s15026c3f1, 32, 0, 1, 1, "S15026C3");
    set_bf_and_test(lv, s15026c3f2, 32, 1, 1, 1, "S15026C3");
    set_bf_and_test(lv, s15026c3f3, 32, 2, 1, 1, "S15026C3");
    set_bf_and_test(lv, s15026c3f4, 32, 3, 1, 1, "S15026C3");
    set_bf_and_test(lv, s15026c3f5, 32, 4, 1, 1, "S15026C3");
    set_bf_and_test(lv, s15026c3f6, 32, 5, 1, 1, "S15026C3");
    set_bf_and_test(lv, s15026c3f7, 32, 6, 1, 1, "S15026C3");
    check_field_offset(lv, s15026c3f8, 33, "S15026C3.s15026c3f8");
    check_field_offset(lv, s15026c3f9, 68, "S15026C3.s15026c3f9");
    check_field_offset(lv, s15026c3f10, ABISELECT(80,76), "S15026C3.s15026c3f10");
    check_field_offset(lv, s15026c3f11, ABISELECT(104,92), "S15026C3.s15026c3f11");
    check_field_offset(lv, s15026c3f12, ABISELECT(128,108), "S15026C3.s15026c3f12");
    check_field_offset(lv, s15026c3f13, ABISELECT(136,116), "S15026C3.s15026c3f13");
    check_field_offset(lv, s15026c3f14, ABISELECT(168,148), "S15026C3.s15026c3f14");
  }
}
static Arrange_To_Call_Me vS15026C3(Test_S15026C3, "S15026C3", ABISELECT(176,152));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15026C1  {
  char s15026c1f0;
  ::S15026C2 s15026c1f1;
  ::S15026C3 s15026c1f2;
  void  mf15026c1(); // _ZN8S15026C19mf15026c1Ev
};
//SIG(1 S15026C1) C1{ m Fc FC2{ Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1} FC3{ m Fc[32] Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc[33] Fi[2] FC4{ m Fp Fi[2] FC5{ m}} FC6{ m Fp Fi[2] FC7{ m}} Fc[8] FC8{ Fi[4] FL[2]} Fp}}


void  S15026C1 ::mf15026c1(){}

static void Test_S15026C1()
{
  {
    init_simple_test("S15026C1");
    static S15026C1 lv;
    check2(sizeof(lv), ABISELECT(184,156), "sizeof(S15026C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15026C1)");
    check_field_offset(lv, s15026c1f0, 0, "S15026C1.s15026c1f0");
    check_field_offset(lv, s15026c1f1, 1, "S15026C1.s15026c1f1");
    check_field_offset(lv, s15026c1f2, ABISELECT(8,4), "S15026C1.s15026c1f2");
  }
}
static Arrange_To_Call_Me vS15026C1(Test_S15026C1, "S15026C1", ABISELECT(184,156));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8710C2_nt  {
  int s8710c2f0;
  char s8710c2f1[3];
  virtual  ~S8710C2_nt(); // _ZN10S8710C2_ntD1Ev
  virtual void  v2(); // _ZN10S8710C2_nt2v2Ev
  S8710C2_nt(); // tgen
};
//SIG(-1 S8710C2_nt) C1{ vd v1 Fi Fc[3]}


 S8710C2_nt ::~S8710C2_nt(){ note_dtor("S8710C2_nt", this);}
void  S8710C2_nt ::v2(){vfunc_called(this, "_ZN10S8710C2_nt2v2Ev");}
S8710C2_nt ::S8710C2_nt(){ note_ctor("S8710C2_nt", this);} // tgen

//skip512 S8710C2_nt

#else // __cplusplus

extern void _ZN10S8710C2_ntC1Ev();
extern void _ZN10S8710C2_ntD1Ev();
Name_Map name_map_S8710C2_nt[] = {
  NSPAIR(_ZN10S8710C2_ntC1Ev),
  NSPAIR(_ZN10S8710C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8710C2_nt[];
extern void _ZN10S8710C2_ntD1Ev();
extern void _ZN10S8710C2_ntD0Ev();
extern void _ZN10S8710C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8710C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8710C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8710C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8710C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8710C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8710C2_nt[];
VTBL_ENTRY *P__ZTI10S8710C2_nt = _ZTI10S8710C2_nt; 
extern  VTBL_ENTRY _ZTV10S8710C2_nt[];
Class_Descriptor cd_S8710C2_nt = {  "S8710C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8710C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S8710C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8710C2_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  S8710C3_nt  {
  ::S2014C26 s8710c3f0;
  void  mf8710c3(); // _ZN10S8710C3_nt8mf8710c3Ev
};
//SIG(-1 S8710C3_nt) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}}}


void  S8710C3_nt ::mf8710c3(){}

//skip512 S8710C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8710C7  {
  int s8710c7f0[14];
  char s8710c7f1;
};
//SIG(-1 S8710C7) C1{ Fi[14] Fc}



static void Test_S8710C7()
{
  {
    init_simple_test("S8710C7");
    S8710C7 lv;
    check2(sizeof(lv), 60, "sizeof(S8710C7)");
    check2(__alignof__(lv), 4, "__alignof__(S8710C7)");
    check_field_offset(lv, s8710c7f0, 0, "S8710C7.s8710c7f0");
    check_field_offset(lv, s8710c7f1, 56, "S8710C7.s8710c7f1");
  }
}
static Arrange_To_Call_Me vS8710C7(Test_S8710C7, "S8710C7", 60);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S8710C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8710C8_nt  {
  ::S8710C9_nt s8710c8f0;
  void  mf8710c8(); // _ZN10S8710C8_nt8mf8710c8Ev
};
//SIG(-1 S8710C8_nt) C1{ m FC2{ FL[4]}}


void  S8710C8_nt ::mf8710c8(){}

//skip512 S8710C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8710C12_nt  {
  int s8710c12f0[4];
};
//SIG(-1 S8710C12_nt) C1{ Fi[4]}



//skip512 S8710C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8710C11_nt  {
  void *s8710c11f0;
  ::S8710C12_nt s8710c11f1;
  void  mf8710c11(); // _ZN11S8710C11_nt9mf8710c11Ev
};
//SIG(-1 S8710C11_nt) C1{ m Fp FC2{ Fi[4]}}


void  S8710C11_nt ::mf8710c11(){}

//skip512 S8710C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8710C14_nt  {
  int s8710c14f0;
  void *s8710c14f1;
  int s8710c14f2;
};
//SIG(-1 S8710C14_nt) C1{ Fi Fp Fi}



//skip512 S8710C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8710C13  {
  ::S8710C8_nt s8710c13f0;
  ::S8710C11_nt s8710c13f1;
  void *s8710c13f2;
  ::S8710C14_nt s8710c13f3;
  void  mf8710c13(); // _ZN8S8710C139mf8710c13Ev
};
//SIG(-1 S8710C13) C1{ m FC2{ m FC3{ FL[4]}} FC4{ m Fp FC5{ Fi[4]}} Fp FC6{ Fi Fp Fi}}


void  S8710C13 ::mf8710c13(){}

static void Test_S8710C13()
{
  {
    init_simple_test("S8710C13");
    S8710C13 lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S8710C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8710C13)");
    check_field_offset(lv, s8710c13f0, 0, "S8710C13.s8710c13f0");
    check_field_offset(lv, s8710c13f1, 32, "S8710C13.s8710c13f1");
    check_field_offset(lv, s8710c13f2, ABISELECT(56,52), "S8710C13.s8710c13f2");
    check_field_offset(lv, s8710c13f3, ABISELECT(64,56), "S8710C13.s8710c13f3");
  }
}
static Arrange_To_Call_Me vS8710C13(Test_S8710C13, "S8710C13", ABISELECT(88,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8710C1  : S8710C2_nt {
  char s8710c1f0;
  void *s8710c1f1;
  ::S8710C3_nt s8710c1f2;
  int s8710c1f3[4];
  ::S8710C7 s8710c1f4;
  void *s8710c1f5;
  ::S8710C8_nt s8710c1f6;
  ::S8710C8_nt s8710c1f7;
  ::S8710C11_nt s8710c1f8;
  char s8710c1f9;
  ::S8710C13 s8710c1f10;
  void *s8710c1f11;
  virtual  ~S8710C1(); // _ZN7S8710C1D1Ev
  virtual void  v1(); // _ZN7S8710C12v1Ev
  S8710C1(); // tgen
};
//SIG(1 S8710C1) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 Fc Fp FC3{ m FC4{ m Fp Fi FC5{ m} FC6{ m}}} Fi[4] FC7{ Fi[14] Fc} Fp FC8{ m FC9{ FL[4]}} FC8 FC10{ m Fp FC11{ Fi[4]}} Fc FC12{ m FC8 FC10 Fp FC13{ Fi Fp Fi}} Fp}


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

static void Test_S8710C1()
{
  extern Class_Descriptor cd_S8710C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,68)];
    init_test(&cd_S8710C1, buf);
    S8710C1 *dp, &lv = *(dp=new (buf) S8710C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,268), "sizeof(S8710C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8710C1)");
    check_base_class_offset(lv, (S8710C2_nt*), 0, "S8710C1");
    check_field_offset(lv, s8710c1f0, ABISELECT(15,11), "S8710C1.s8710c1f0");
    check_field_offset(lv, s8710c1f1, ABISELECT(16,12), "S8710C1.s8710c1f1");
    check_field_offset(lv, s8710c1f2, ABISELECT(24,16), "S8710C1.s8710c1f2");
    check_field_offset(lv, s8710c1f3, ABISELECT(40,28), "S8710C1.s8710c1f3");
    check_field_offset(lv, s8710c1f4, ABISELECT(56,44), "S8710C1.s8710c1f4");
    check_field_offset(lv, s8710c1f5, ABISELECT(120,104), "S8710C1.s8710c1f5");
    check_field_offset(lv, s8710c1f6, ABISELECT(128,108), "S8710C1.s8710c1f6");
    check_field_offset(lv, s8710c1f7, ABISELECT(160,140), "S8710C1.s8710c1f7");
    check_field_offset(lv, s8710c1f8, ABISELECT(192,172), "S8710C1.s8710c1f8");
    check_field_offset(lv, s8710c1f9, ABISELECT(216,192), "S8710C1.s8710c1f9");
    check_field_offset(lv, s8710c1f10, ABISELECT(224,196), "S8710C1.s8710c1f10");
    check_field_offset(lv, s8710c1f11, ABISELECT(312,264), "S8710C1.s8710c1f11");
    test_class_info(&lv, &cd_S8710C1);
    dp->~S8710C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8710C1(Test_S8710C1, "S8710C1", ABISELECT(320,268));

#else // __cplusplus

extern void _ZN7S8710C1C1Ev();
extern void _ZN7S8710C1D1Ev();
Name_Map name_map_S8710C1[] = {
  NSPAIR(_ZN7S8710C1C1Ev),
  NSPAIR(_ZN7S8710C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8710C2_nt;
extern VTBL_ENTRY _ZTI10S8710C2_nt[];
extern  VTBL_ENTRY _ZTV10S8710C2_nt[];
static Base_Class bases_S8710C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8710C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8710C1[];
extern void _ZN7S8710C1D1Ev();
extern void _ZN7S8710C1D0Ev();
extern void _ZN10S8710C2_nt2v2Ev();
extern void _ZN7S8710C12v1Ev();
static  VTBL_ENTRY vtc_S8710C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8710C1[0]),
  (VTBL_ENTRY)&_ZN7S8710C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8710C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8710C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8710C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8710C1[];
extern  VTBL_ENTRY _ZTV7S8710C1[];
Class_Descriptor cd_S8710C1 = {  "S8710C1", // class name
  bases_S8710C1, 1,
  &(vtc_S8710C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,268), // object size
  NSPAIRA(_ZTI7S8710C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8710C1),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  S19037C5_nt  : virtual S2014C28 , virtual S2014C38 {
  int s19037c5f0[9];
  ~S19037C5_nt(); // tgen
  S19037C5_nt(); // tgen
};
//SIG(-1 S19037C5_nt) C1{ VBC2{ m} VBC3{ m} Fi[9]}


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

//skip512 S19037C5_nt

#else // __cplusplus

extern void _ZN11S19037C5_ntC1Ev();
extern void _ZN11S19037C5_ntD1Ev();
Name_Map name_map_S19037C5_nt[] = {
  NSPAIR(_ZN11S19037C5_ntC1Ev),
  NSPAIR(_ZN11S19037C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S19037C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI11S19037C5_nt[];
static  VTBL_ENTRY vtc_S19037C5_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C5_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19037C5_nt[];
static  VTT_ENTRY vtt_S19037C5_nt[] = {
  {&(_ZTV11S19037C5_nt[4]),  4,4},
};
extern VTBL_ENTRY _ZTI11S19037C5_nt[];
VTBL_ENTRY *P__ZTI11S19037C5_nt = _ZTI11S19037C5_nt; 
extern  VTBL_ENTRY _ZTV11S19037C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C5_nt[];
Class_Descriptor cd_S19037C5_nt = {  "S19037C5_nt", // class name
  bases_S19037C5_nt, 2,
  &(vtc_S19037C5_nt[0]), // expected_vtbl_contents
  &(vtt_S19037C5_nt[0]), // expected_vtt_contents
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI11S19037C5_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S19037C5_nt),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19037C5_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19037C7_nt  : virtual S2014C28 , virtual S2014C38 , virtual S19037C5_nt {
  void *s19037c7f0;
  virtual  ~S19037C7_nt(); // _ZN11S19037C7_ntD2Ev
  S19037C7_nt(); // tgen
};
//SIG(-1 S19037C7_nt) C1{ VBC2{ m} VBC3{ m} VBC4{ VBC2 VBC3 Fi[9]} vd Fp}


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

//skip512 S19037C7_nt

#else // __cplusplus

extern void _ZN11S19037C7_ntC1Ev();
extern void _ZN11S19037C7_ntD2Ev();
Name_Map name_map_S19037C7_nt[] = {
  NSPAIR(_ZN11S19037C7_ntC1Ev),
  NSPAIR(_ZN11S19037C7_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19037C5_nt;
extern VTBL_ENTRY _ZTI11S19037C5_nt[];
extern  VTBL_ENTRY _ZTV11S19037C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C5_nt[];
static Base_Class bases_S19037C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19037C5_nt,    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},
  {0}};
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
extern void _ZN11S19037C7_ntD1Ev();
extern void _ZN11S19037C7_ntD0Ev();
static  VTBL_ENTRY vtc_S19037C7_nt[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C7_ntD0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19037C7_nt[];
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C7_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C5_nt[0]),
};
static  VTT_ENTRY vtt_S19037C7_nt[] = {
  {&(_ZTV11S19037C7_nt[5]),  5,11},
  {&(_ZTV11S19037C7_nt[11]),  11,11},
  {&(_tg__ZTV11S19037C5_nt__11S19037C7_nt[4]),  4,4},
};
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
VTBL_ENTRY *P__ZTI11S19037C7_nt = _ZTI11S19037C7_nt; 
extern  VTBL_ENTRY _ZTV11S19037C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C7_nt[];
Class_Descriptor cd_S19037C7_nt = {  "S19037C7_nt", // class name
  bases_S19037C7_nt, 3,
  &(vtc_S19037C7_nt[0]), // expected_vtbl_contents
  &(vtt_S19037C7_nt[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI11S19037C7_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S19037C7_nt),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19037C7_nt),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19037C8_nt  : virtual S2014C38 , S2014C28 , S19037C7_nt , virtual S2014C24 {
  virtual  ~S19037C8_nt(); // _ZN11S19037C8_ntD2Ev
  S19037C8_nt(); // tgen
};
//SIG(-1 S19037C8_nt) C1{ VBC2{ m} BC3{ m} BC4{ VBC3 VBC2 VBC5{ VBC3 VBC2 Fi[9]} vd Fp} VBC6{ m} vd}


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

//skip512 S19037C8_nt

#else // __cplusplus

extern void _ZN11S19037C8_ntC1Ev();
extern void _ZN11S19037C8_ntD2Ev();
Name_Map name_map_S19037C8_nt[] = {
  NSPAIR(_ZN11S19037C8_ntC1Ev),
  NSPAIR(_ZN11S19037C8_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19037C5_nt;
extern VTBL_ENTRY _ZTI11S19037C5_nt[];
extern  VTBL_ENTRY _ZTV11S19037C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C5_nt[];
extern Class_Descriptor cd_S19037C7_nt;
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
extern  VTBL_ENTRY _ZTV11S19037C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C7_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
static Base_Class bases_S19037C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19037C5_nt,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19037C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI11S19037C8_nt[];
extern void _ZN11S19037C8_ntD1Ev();
extern void _ZN11S19037C8_ntD0Ev();
static  VTBL_ENTRY vtc_S19037C8_nt[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C8_ntD0Ev,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19037C8_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19037C8_nt[];
extern void _ZN11S19037C7_ntD1Ev();
extern void _ZN11S19037C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C7_nt__11S19037C8_nt[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C7_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C7_nt__11S19037C8_nt[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C8_nt[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C5_nt[0]),
};
static  VTT_ENTRY vtt_S19037C8_nt[] = {
  {&(_ZTV11S19037C8_nt[6]),  6,12},
  {&(_tg__ZTV11S19037C7_nt__11S19037C8_nt[5]),  5,7},
  {&(_tg__ZTV11S19037C5_nt__11S19037C7_nt__11S19037C8_nt[4]),  4,4},
  {&(_ZTV11S19037C8_nt[12]),  12,12},
  {&(_tg__ZTV11S19037C5_nt__11S19037C8_nt[4]),  4,4},
};
extern VTBL_ENTRY _ZTI11S19037C8_nt[];
VTBL_ENTRY *P__ZTI11S19037C8_nt = _ZTI11S19037C8_nt; 
extern  VTBL_ENTRY _ZTV11S19037C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C8_nt[];
Class_Descriptor cd_S19037C8_nt = {  "S19037C8_nt", // class name
  bases_S19037C8_nt, 6,
  &(vtc_S19037C8_nt[0]), // expected_vtbl_contents
  &(vtt_S19037C8_nt[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI11S19037C8_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV11S19037C8_nt),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19037C8_nt),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19037C3_nt  : S2014C38 , virtual S19037C5_nt , S19037C7_nt , S2014C28 , virtual S19037C8_nt {
  virtual  ~S19037C3_nt(); // _ZN11S19037C3_ntD2Ev
  S19037C3_nt(); // tgen
};
//SIG(-1 S19037C3_nt) C1{ BC2{ m} VBC3{ VBC4{ m} VBC2 Fi[9]} BC5{ VBC4 VBC2 VBC3 vd Fp} BC4 VBC6{ VBC2 BC4 BC5 VBC7{ m} vd} vd}


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

//skip512 S19037C3_nt

#else // __cplusplus

extern void _ZN11S19037C3_ntC1Ev();
extern void _ZN11S19037C3_ntD2Ev();
Name_Map name_map_S19037C3_nt[] = {
  NSPAIR(_ZN11S19037C3_ntC1Ev),
  NSPAIR(_ZN11S19037C3_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19037C5_nt;
extern VTBL_ENTRY _ZTI11S19037C5_nt[];
extern  VTBL_ENTRY _ZTV11S19037C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C5_nt[];
extern Class_Descriptor cd_S19037C7_nt;
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
extern  VTBL_ENTRY _ZTV11S19037C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C7_nt[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19037C7_nt;
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
extern  VTBL_ENTRY _ZTV11S19037C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C7_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S19037C8_nt;
extern VTBL_ENTRY _ZTI11S19037C8_nt[];
extern  VTBL_ENTRY _ZTV11S19037C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C8_nt[];
static Base_Class bases_S19037C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(60,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(60,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19037C5_nt,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19037C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19037C7_nt,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19037C8_nt,    ABISELECT(64,52), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S19037C3_nt[];
extern void _ZN11S19037C3_ntD1Ev();
extern void _ZN11S19037C3_ntD0Ev();
extern void ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev)();
extern void ABISELECT(_ZThn64_N11S19037C3_ntD1Ev,_ZThn52_N11S19037C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev)();
extern void ABISELECT(_ZThn64_N11S19037C3_ntD0Ev,_ZThn52_N11S19037C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19037C3_nt[] = {
  0,
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C3_ntD0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev),
};
extern VTBL_ENTRY _ZTV11S19037C3_nt[];
extern void _ZN11S19037C7_ntD1Ev();
extern void _ZN11S19037C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C7_nt__11S19037C3_nt[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C7_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C7_nt__11S19037C3_nt[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C3_nt[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C5_nt[0]),
};
extern void _ZN11S19037C8_ntD1Ev();
extern void _ZN11S19037C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C8_nt__11S19037C3_nt[] = {
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C8_ntD0Ev,
};
extern void _ZN11S19037C7_ntD1Ev();
extern void _ZN11S19037C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C7_nt11S19037C8_nt__A1__11S19037C3_nt[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C7_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C8_nt__A1__11S19037C3_nt[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C8_nt__11S19037C3_nt[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI11S19037C8_nt[0]),
};
static  VTT_ENTRY vtt_S19037C3_nt[] = {
  {&(_ZTV11S19037C3_nt[7]),  7,22},
  {&(_tg__ZTV11S19037C7_nt__11S19037C3_nt[5]),  5,7},
  {&(_tg__ZTV11S19037C5_nt__11S19037C7_nt__11S19037C3_nt[4]),  4,4},
  {&(_ZTV11S19037C3_nt[13]),  13,22},
  {&(_ZTV11S19037C3_nt[20]),  20,22},
  {&(_tg__ZTV11S19037C5_nt__11S19037C3_nt[4]),  4,4},
  {&(_tg__ZTV11S19037C8_nt__11S19037C3_nt[6]),  6,8},
  {&(_tg__ZTV11S19037C7_nt11S19037C8_nt__A1__11S19037C3_nt[5]),  5,7},
  {&(_tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C8_nt__A1__11S19037C3_nt[4]),  4,4},
  {&(_tg__ZTV11S19037C5_nt__11S19037C8_nt__11S19037C3_nt[4]),  4,4},
};
extern VTBL_ENTRY _ZTI11S19037C3_nt[];
VTBL_ENTRY *P__ZTI11S19037C3_nt = _ZTI11S19037C3_nt; 
extern  VTBL_ENTRY _ZTV11S19037C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C3_nt[];
static VTBL_ENTRY alt_thunk_names151[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N11S19037C3_ntD0Ev,_ZThn52_N11S19037C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N11S19037C3_ntD1Ev,_ZThn52_N11S19037C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19037C3_nt = {  "S19037C3_nt", // class name
  bases_S19037C3_nt, 10,
  &(vtc_S19037C3_nt[0]), // expected_vtbl_contents
  &(vtt_S19037C3_nt[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI11S19037C3_nt),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV11S19037C3_nt),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19037C3_nt),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names151,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19037C2  : S19037C3_nt , S2014C24 {
  long double s19037c2f0;
  virtual  ~S19037C2(); // _ZN8S19037C2D2Ev
  S19037C2(); // tgen
};
//SIG(-1 S19037C2) C1{ BC2{ BC3{ m} VBC4{ VBC5{ m} VBC3 Fi[9]} BC6{ VBC5 VBC3 VBC4 vd Fp} BC5 VBC7{ VBC3 BC5 BC6 VBC8{ m} vd} vd} BC8 vd FD}


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

static void Test_S19037C2()
{
  extern Class_Descriptor cd_S19037C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,20)];
    init_test(&cd_S19037C2, buf);
    S19037C2 *dp, &lv = *(dp=new (buf) S19037C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S19037C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19037C2)");
    /*is_ambiguous_... S19037C3_nt::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19037C3_nt*), 0, "S19037C2");
    check_base_class_offset(lv, (S2014C28*)(S19037C5_nt*), ABISELECT(76,60), "S19037C2");
    /*is_ambiguous_... S19037C3_nt::S19037C7_nt */ AMB_check_base_class_offset(lv, (S2014C28*)(S19037C7_nt*)(S19037C3_nt*), ABISELECT(76,60), "S19037C2");
    check_base_class_offset(lv, (S2014C28*)(S19037C7_nt*)(S19037C8_nt*), ABISELECT(76,60), "S19037C2");
    check_base_class_offset(lv, (S2014C38*)(S19037C5_nt*), ABISELECT(76,60), "S19037C2");
    /*is_ambiguous_... S19037C3_nt::S19037C7_nt */ AMB_check_base_class_offset(lv, (S2014C38*)(S19037C7_nt*)(S19037C3_nt*), ABISELECT(76,60), "S19037C2");
    check_base_class_offset(lv, (S2014C38*)(S19037C8_nt*), ABISELECT(76,60), "S19037C2");
    check_base_class_offset(lv, (S2014C38*)(S19037C7_nt*)(S19037C8_nt*), ABISELECT(76,60), "S19037C2");
    check_base_class_offset(lv, (S19037C5_nt*)(S19037C3_nt*), ABISELECT(32,20), "S19037C2");
    /*is_ambiguous_... S19037C3_nt::S19037C7_nt */ AMB_check_base_class_offset(lv, (S19037C5_nt*)(S19037C7_nt*)(S19037C3_nt*), ABISELECT(32,20), "S19037C2");
    check_base_class_offset(lv, (S19037C5_nt*)(S19037C7_nt*)(S19037C8_nt*), ABISELECT(32,20), "S19037C2");
    /*is_ambiguous_... S19037C3_nt::S19037C7_nt */ AMB_check_base_class_offset(lv, (S19037C7_nt*)(S19037C3_nt*), 0, "S19037C2");
    /*is_ambiguous_... S19037C3_nt::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19037C3_nt*), 0, "S19037C2");
    /*is_ambiguous_... S19037C8_nt::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19037C8_nt*), ABISELECT(80,64), "S19037C2");
    check_base_class_offset(lv, (S19037C7_nt*)(S19037C8_nt*), ABISELECT(80,64), "S19037C2");
    check_base_class_offset(lv, (S2014C24*)(S19037C8_nt*), ABISELECT(96,72), "S19037C2");
    check_base_class_offset(lv, (S19037C8_nt*)(S19037C3_nt*), ABISELECT(80,64), "S19037C2");
    check_base_class_offset(lv, (S19037C3_nt*), 0, "S19037C2");
    /*is_ambiguous_... S19037C2::S2014C24 */ AMB_check_base_class_offset(lv, (S2014C24*), 0, "S19037C2");
    check_field_offset(lv, s19037c2f0, ABISELECT(16,8), "S19037C2.s19037c2f0");
    test_class_info(&lv, &cd_S19037C2);
    dp->~S19037C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19037C2(Test_S19037C2, "S19037C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN8S19037C2C1Ev();
extern void _ZN8S19037C2D2Ev();
Name_Map name_map_S19037C2[] = {
  NSPAIR(_ZN8S19037C2C1Ev),
  NSPAIR(_ZN8S19037C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19037C5_nt;
extern VTBL_ENTRY _ZTI11S19037C5_nt[];
extern  VTBL_ENTRY _ZTV11S19037C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C5_nt[];
extern Class_Descriptor cd_S19037C7_nt;
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
extern  VTBL_ENTRY _ZTV11S19037C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C7_nt[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19037C7_nt;
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
extern  VTBL_ENTRY _ZTV11S19037C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C7_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S19037C8_nt;
extern VTBL_ENTRY _ZTI11S19037C8_nt[];
extern  VTBL_ENTRY _ZTV11S19037C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C8_nt[];
extern Class_Descriptor cd_S19037C3_nt;
extern VTBL_ENTRY _ZTI11S19037C3_nt[];
extern  VTBL_ENTRY _ZTV11S19037C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C3_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
static Base_Class bases_S19037C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(76,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2014C38,    ABISELECT(76,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19037C5_nt,    ABISELECT(32,20), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19037C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C28,    ABISELECT(80,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19037C7_nt,    ABISELECT(80,64), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2014C24,    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
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19037C8_nt,    ABISELECT(80,64), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19037C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19037C2[];
extern void _ZN8S19037C2D1Ev();
extern void _ZN8S19037C2D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19037C2D1Ev,_ZTv0_n28_N8S19037C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19037C2D1Ev,_ZThn64_N8S19037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19037C2D0Ev,_ZTv0_n28_N8S19037C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19037C2D0Ev,_ZThn64_N8S19037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19037C2[] = {
  ABISELECT(96,72),
  ABISELECT(80,64),
  ABISELECT(32,20),
  ABISELECT(76,60),
  ABISELECT(76,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19037C2[0]),
  (VTBL_ENTRY)&_ZN8S19037C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19037C2D0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19037C2[0]),
  ABISELECT(-80,-64),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI8S19037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19037C2D1Ev,_ZTv0_n28_N8S19037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19037C2D0Ev,_ZTv0_n28_N8S19037C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19037C2[];
extern void _ZN11S19037C3_ntD1Ev();
extern void _ZN11S19037C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C3_nt__8S19037C2[] = {
  ABISELECT(96,72),
  ABISELECT(80,64),
  ABISELECT(32,20),
  ABISELECT(76,60),
  ABISELECT(76,60),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C3_ntD0Ev,
};
extern void _ZN11S19037C7_ntD1Ev();
extern void _ZN11S19037C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C7_nt11S19037C3_nt__8S19037C2[] = {
  ABISELECT(32,20),
  ABISELECT(76,60),
  ABISELECT(76,60),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C7_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C3_nt__8S19037C2[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C3_nt__8S19037C2[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev)();
extern void ABISELECT(_ZThn80_N11S19037C3_ntD1Ev,_ZThn64_N11S19037C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev)();
extern void ABISELECT(_ZThn80_N11S19037C3_ntD0Ev,_ZThn64_N11S19037C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19037C8_nt__11S19037C3_nt__8S19037C2[] = {
  ABISELECT(-80,-64),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__8S19037C2[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C5_nt[0]),
};
extern void _ZN11S19037C8_ntD1Ev();
extern void _ZN11S19037C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C8_nt__8S19037C2[] = {
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C8_ntD0Ev,
};
extern void _ZN11S19037C7_ntD1Ev();
extern void _ZN11S19037C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C7_nt11S19037C8_nt__A1__8S19037C2[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C7_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C8_nt__A1__8S19037C2[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C8_nt__8S19037C2[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI11S19037C8_nt[0]),
};
static  VTT_ENTRY vtt_S19037C2[] = {
  {&(_ZTV8S19037C2[7]),  7,22},
  {&(_tg__ZTV11S19037C3_nt__8S19037C2[7]),  7,9},
  {&(_tg__ZTV11S19037C7_nt11S19037C3_nt__8S19037C2[5]),  5,7},
  {&(_tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C3_nt__8S19037C2[4]),  4,4},
  {&(_tg__ZTV11S19037C5_nt__11S19037C3_nt__8S19037C2[4]),  4,4},
  {&(_tg__ZTV11S19037C8_nt__11S19037C3_nt__8S19037C2[7]),  7,9},
  {&(_ZTV8S19037C2[13]),  13,22},
  {&(_ZTV8S19037C2[20]),  20,22},
  {&(_tg__ZTV11S19037C5_nt__8S19037C2[4]),  4,4},
  {&(_tg__ZTV11S19037C8_nt__8S19037C2[6]),  6,8},
  {&(_tg__ZTV11S19037C7_nt11S19037C8_nt__A1__8S19037C2[5]),  5,7},
  {&(_tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C8_nt__A1__8S19037C2[4]),  4,4},
  {&(_tg__ZTV11S19037C5_nt__11S19037C8_nt__8S19037C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19037C2[];
extern  VTBL_ENTRY _ZTV8S19037C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19037C2[];
static VTBL_ENTRY alt_thunk_names152[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N11S19037C3_ntD0Ev,_ZThn64_N11S19037C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N11S19037C3_ntD1Ev,_ZThn64_N11S19037C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19037C2D0Ev,_ZTv0_n28_N8S19037C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19037C2D0Ev,_ZThn64_N8S19037C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19037C2D1Ev,_ZTv0_n28_N8S19037C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19037C2D1Ev,_ZThn64_N8S19037C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19037C2 = {  "S19037C2", // class name
  bases_S19037C2, 12,
  &(vtc_S19037C2[0]), // expected_vtbl_contents
  &(vtt_S19037C2[0]), // expected_vtt_contents
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI8S19037C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19037C2),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19037C2),13, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names152,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19037C11_nt  : virtual S2014C28 {
  virtual  ~S19037C11_nt(); // _ZN12S19037C11_ntD2Ev
  S19037C11_nt(); // tgen
};
//SIG(-1 S19037C11_nt) C1{ VBC2{ m} vd}


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

//skip512 S19037C11_nt

#else // __cplusplus

extern void _ZN12S19037C11_ntC1Ev();
extern void _ZN12S19037C11_ntD2Ev();
Name_Map name_map_S19037C11_nt[] = {
  NSPAIR(_ZN12S19037C11_ntC1Ev),
  NSPAIR(_ZN12S19037C11_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
static Base_Class bases_S19037C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI12S19037C11_nt[];
extern void _ZN12S19037C11_ntD1Ev();
extern void _ZN12S19037C11_ntD0Ev();
static  VTBL_ENTRY vtc_S19037C11_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S19037C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S19037C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19037C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTV12S19037C11_nt[];
static  VTT_ENTRY vtt_S19037C11_nt[] = {
  {&(_ZTV12S19037C11_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI12S19037C11_nt[];
VTBL_ENTRY *P__ZTI12S19037C11_nt = _ZTI12S19037C11_nt; 
extern  VTBL_ENTRY _ZTV12S19037C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19037C11_nt[];
Class_Descriptor cd_S19037C11_nt = {  "S19037C11_nt", // class name
  bases_S19037C11_nt, 1,
  &(vtc_S19037C11_nt[0]), // expected_vtbl_contents
  &(vtt_S19037C11_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S19037C11_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV12S19037C11_nt),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S19037C11_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19037C12_nt  : virtual S19037C11_nt {
  ::S2014C24 s19037c12f0;
  virtual  ~S19037C12_nt(); // _ZN12S19037C12_ntD2Ev
  S19037C12_nt(); // tgen
};
//SIG(-1 S19037C12_nt) C1{ VBC2{ VBC3{ m} vd} vd FC4{ m}}


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

//skip512 S19037C12_nt

#else // __cplusplus

extern void _ZN12S19037C12_ntC1Ev();
extern void _ZN12S19037C12_ntD2Ev();
Name_Map name_map_S19037C12_nt[] = {
  NSPAIR(_ZN12S19037C12_ntC1Ev),
  NSPAIR(_ZN12S19037C12_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19037C11_nt;
extern VTBL_ENTRY _ZTI12S19037C11_nt[];
extern  VTBL_ENTRY _ZTV12S19037C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19037C11_nt[];
static Base_Class bases_S19037C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19037C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI12S19037C12_nt[];
extern void _ZN12S19037C12_ntD1Ev();
extern void _ZN12S19037C12_ntD0Ev();
static  VTBL_ENTRY vtc_S19037C12_nt[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S19037C12_nt[0]),
  (VTBL_ENTRY)&_ZN12S19037C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19037C12_ntD0Ev,
};
extern VTBL_ENTRY _ZTV12S19037C12_nt[];
extern void _ZN12S19037C11_ntD1Ev();
extern void _ZN12S19037C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S19037C11_nt__12S19037C12_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S19037C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S19037C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19037C11_ntD0Ev,
};
static  VTT_ENTRY vtt_S19037C12_nt[] = {
  {&(_ZTV12S19037C12_nt[5]),  5,7},
  {&(_ZTV12S19037C12_nt[5]),  5,7},
  {&(_tg__ZTV12S19037C11_nt__12S19037C12_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI12S19037C12_nt[];
VTBL_ENTRY *P__ZTI12S19037C12_nt = _ZTI12S19037C12_nt; 
extern  VTBL_ENTRY _ZTV12S19037C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19037C12_nt[];
Class_Descriptor cd_S19037C12_nt = {  "S19037C12_nt", // class name
  bases_S19037C12_nt, 2,
  &(vtc_S19037C12_nt[0]), // expected_vtbl_contents
  &(vtt_S19037C12_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI12S19037C12_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV12S19037C12_nt),7, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S19037C12_nt),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19037C10  : virtual S19037C11_nt , virtual S19037C12_nt , S2014C24 , virtual S19037C5_nt {
  virtual  ~S19037C10(); // _ZN9S19037C10D2Ev
  S19037C10(); // tgen
};
//SIG(-1 S19037C10) C1{ VBC2{ VBC3{ m} vd} VBC4{ VBC2 vd FC5{ m}} BC5 VBC6{ VBC3 VBC7{ m} Fi[9]} vd}


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

static void Test_S19037C10()
{
  extern Class_Descriptor cd_S19037C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S19037C10, buf);
    S19037C10 *dp, &lv = *(dp=new (buf) S19037C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S19037C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19037C10)");
    check_base_class_offset(lv, (S2014C28*)(S19037C11_nt*), 0, "S19037C10");
    check_base_class_offset(lv, (S2014C28*)(S19037C5_nt*), 0, "S19037C10");
    check_base_class_offset(lv, (S19037C11_nt*), 0, "S19037C10");
    check_base_class_offset(lv, (S19037C11_nt*)(S19037C12_nt*), 0, "S19037C10");
    check_base_class_offset(lv, (S19037C12_nt*), ABISELECT(8,4), "S19037C10");
    check_base_class_offset(lv, (S2014C24*), 0, "S19037C10");
    check_base_class_offset(lv, (S2014C38*)(S19037C5_nt*), 0, "S19037C10");
    check_base_class_offset(lv, (S19037C5_nt*), ABISELECT(24,12), "S19037C10");
    test_class_info(&lv, &cd_S19037C10);
    dp->~S19037C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19037C10(Test_S19037C10, "S19037C10", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN9S19037C10C1Ev();
extern void _ZN9S19037C10D2Ev();
Name_Map name_map_S19037C10[] = {
  NSPAIR(_ZN9S19037C10C1Ev),
  NSPAIR(_ZN9S19037C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19037C11_nt;
extern VTBL_ENTRY _ZTI12S19037C11_nt[];
extern  VTBL_ENTRY _ZTV12S19037C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19037C11_nt[];
extern Class_Descriptor cd_S19037C12_nt;
extern VTBL_ENTRY _ZTI12S19037C12_nt[];
extern  VTBL_ENTRY _ZTV12S19037C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19037C12_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19037C5_nt;
extern VTBL_ENTRY _ZTI11S19037C5_nt[];
extern  VTBL_ENTRY _ZTV11S19037C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C5_nt[];
static Base_Class bases_S19037C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19037C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19037C12_nt,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19037C5_nt,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19037C10[];
extern void _ZN9S19037C10D1Ev();
extern void _ZN9S19037C10D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19037C10D1Ev,_ZTv0_n16_N9S19037C10D1Ev)();
extern void ABISELECT(_ZThn8_N9S19037C10D1Ev,_ZThn4_N9S19037C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19037C10D0Ev,_ZTv0_n16_N9S19037C10D0Ev)();
extern void ABISELECT(_ZThn8_N9S19037C10D0Ev,_ZThn4_N9S19037C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19037C10[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19037C10[0]),
  (VTBL_ENTRY)&_ZN9S19037C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19037C10D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19037C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19037C10D1Ev,_ZTv0_n16_N9S19037C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19037C10D0Ev,_ZTv0_n16_N9S19037C10D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19037C10[0]),
};
extern VTBL_ENTRY _ZTV9S19037C10[];
extern void _ZN12S19037C11_ntD1Ev();
extern void _ZN12S19037C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S19037C11_nt__9S19037C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S19037C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S19037C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19037C11_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev)();
extern void _ZN12S19037C12_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev)();
extern void _ZN12S19037C12_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19037C12_nt__9S19037C10[] = {
  ABISELECT(-8,-4),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S19037C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S19037C11_nt__12S19037C12_nt__9S19037C10[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI12S19037C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__9S19037C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C5_nt[0]),
};
static  VTT_ENTRY vtt_S19037C10[] = {
  {&(_ZTV9S19037C10[8]),  8,21},
  {&(_ZTV9S19037C10[8]),  8,21},
  {&(_ZTV9S19037C10[15]),  15,21},
  {&(_ZTV9S19037C10[21]),  21,21},
  {&(_tg__ZTV12S19037C11_nt__9S19037C10[3]),  3,5},
  {&(_tg__ZTV12S19037C12_nt__9S19037C10[5]),  5,7},
  {&(_tg__ZTV12S19037C11_nt__12S19037C12_nt__9S19037C10[4]),  4,6},
  {&(_tg__ZTV11S19037C5_nt__9S19037C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19037C10[];
extern  VTBL_ENTRY _ZTV9S19037C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19037C10[];
static VTBL_ENTRY alt_thunk_names153[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S19037C12_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S19037C12_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19037C10D0Ev,_ZTv0_n16_N9S19037C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19037C10D0Ev,_ZThn4_N9S19037C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19037C10D1Ev,_ZTv0_n16_N9S19037C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19037C10D1Ev,_ZThn4_N9S19037C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19037C10 = {  "S19037C10", // class name
  bases_S19037C10, 6,
  &(vtc_S19037C10[0]), // expected_vtbl_contents
  &(vtt_S19037C10[0]), // expected_vtt_contents
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI9S19037C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19037C10),21, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19037C10),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names153,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19037C1  : virtual S19037C2 , S19037C10 , S19037C3_nt , S2014C21 {
  char s19037c1f0;
  virtual  ~S19037C1(); // _ZN8S19037C1D2Ev
  S19037C1(); // tgen
};
//SIG(1 S19037C1) C1{ VBC2{ BC3{ BC4{ m} VBC5{ VBC6{ m} VBC4 Fi[9]} BC7{ VBC6 VBC4 VBC5 vd Fp} BC6 VBC8{ VBC4 BC6 BC7 VBC9{ m} vd} vd} BC9 vd FD} BC10{ VBC11{ VBC6 vd} VBC12{ VBC11 vd FC9} BC9 VBC5 vd} BC3 BC13{ m} vd Fc}


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

static void Test_S19037C1()
{
  extern Class_Descriptor cd_S19037C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,24)];
    init_test(&cd_S19037C1, buf);
    S19037C1 *dp, &lv = *(dp=new (buf) S19037C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S19037C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19037C1)");
    /*is_ambiguous_... S19037C3_nt::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*)(S19037C3_nt*)(S19037C2*), ABISELECT(32,16), "S19037C1");
    check_base_class_offset(lv, (S2014C28*)(S19037C5_nt*), 0, "S19037C1");
    /*is_ambiguous_... S19037C3_nt::S19037C7_nt */ AMB_check_base_class_offset(lv, (S2014C28*)(S19037C7_nt*)(S19037C3_nt*)(S19037C2*), 0, "S19037C1");
    check_base_class_offset(lv, (S2014C28*)(S19037C7_nt*)(S19037C8_nt*), 0, "S19037C1");
    check_base_class_offset(lv, (S2014C28*)(S19037C11_nt*), 0, "S19037C1");
    /*is_ambiguous_... S19037C1::S19037C3_nt */ AMB_check_base_class_offset(lv, (S2014C28*)(S19037C7_nt*)(S19037C3_nt*), 0, "S19037C1");
    check_base_class_offset(lv, (S2014C38*)(S19037C5_nt*), 0, "S19037C1");
    /*is_ambiguous_... S19037C3_nt::S19037C7_nt */ AMB_check_base_class_offset(lv, (S2014C38*)(S19037C7_nt*)(S19037C3_nt*)(S19037C2*), 0, "S19037C1");
    check_base_class_offset(lv, (S2014C38*)(S19037C8_nt*), 0, "S19037C1");
    check_base_class_offset(lv, (S2014C38*)(S19037C7_nt*)(S19037C8_nt*), 0, "S19037C1");
    /*is_ambiguous_... S19037C1::S19037C3_nt */ AMB_check_base_class_offset(lv, (S2014C38*)(S19037C7_nt*)(S19037C3_nt*), 0, "S19037C1");
    check_base_class_offset(lv, (S19037C5_nt*)(S19037C3_nt*)(S19037C2*), ABISELECT(64,36), "S19037C1");
    /*is_ambiguous_... S19037C3_nt::S19037C7_nt */ AMB_check_base_class_offset(lv, (S19037C5_nt*)(S19037C7_nt*)(S19037C3_nt*)(S19037C2*), ABISELECT(64,36), "S19037C1");
    check_base_class_offset(lv, (S19037C5_nt*)(S19037C7_nt*)(S19037C8_nt*), ABISELECT(64,36), "S19037C1");
    check_base_class_offset(lv, (S19037C5_nt*)(S19037C10*), ABISELECT(64,36), "S19037C1");
    /*is_ambiguous_... S19037C1::S19037C3_nt */ AMB_check_base_class_offset(lv, (S19037C5_nt*)(S19037C3_nt*), ABISELECT(64,36), "S19037C1");
    /*is_ambiguous_... S19037C1::S19037C3_nt */ AMB_check_base_class_offset(lv, (S19037C5_nt*)(S19037C7_nt*)(S19037C3_nt*), ABISELECT(64,36), "S19037C1");
    /*is_ambiguous_... S19037C3_nt::S19037C7_nt */ AMB_check_base_class_offset(lv, (S19037C7_nt*)(S19037C3_nt*)(S19037C2*), ABISELECT(32,16), "S19037C1");
    /*is_ambiguous_... S19037C3_nt::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19037C3_nt*)(S19037C2*), ABISELECT(32,16), "S19037C1");
    /*is_ambiguous_... S19037C8_nt::S2014C28 */ AMB_check_base_class_offset(lv, (S2014C28*)(S19037C8_nt*), ABISELECT(112,76), "S19037C1");
    check_base_class_offset(lv, (S19037C7_nt*)(S19037C8_nt*), ABISELECT(112,76), "S19037C1");
    check_base_class_offset(lv, (S2014C24*)(S19037C8_nt*), ABISELECT(128,84), "S19037C1");
    check_base_class_offset(lv, (S19037C8_nt*)(S19037C3_nt*)(S19037C2*), ABISELECT(112,76), "S19037C1");
    /*is_ambiguous_... S19037C1::S19037C3_nt */ AMB_check_base_class_offset(lv, (S19037C8_nt*)(S19037C3_nt*), ABISELECT(112,76), "S19037C1");
    check_base_class_offset(lv, (S19037C3_nt*)(S19037C2*), ABISELECT(32,16), "S19037C1");
    /*is_ambiguous_... S19037C2::S2014C24 */ AMB_check_base_class_offset(lv, (S2014C24*)(S19037C2*), ABISELECT(32,16), "S19037C1");
    check_base_class_offset(lv, (S19037C2*), ABISELECT(32,16), "S19037C1");
    check_base_class_offset(lv, (S19037C11_nt*)(S19037C10*), 0, "S19037C1");
    check_base_class_offset(lv, (S19037C11_nt*)(S19037C12_nt*), 0, "S19037C1");
    check_base_class_offset(lv, (S19037C12_nt*)(S19037C10*), ABISELECT(128,84), "S19037C1");
    check_base_class_offset(lv, (S2014C24*)(S19037C10*), 0, "S19037C1");
    check_base_class_offset(lv, (S19037C10*), 0, "S19037C1");
    /*is_ambiguous_... S19037C1::S19037C3_nt */ AMB_check_base_class_offset(lv, (S2014C38*)(S19037C3_nt*), ABISELECT(8,4), "S19037C1");
    /*is_ambiguous_... S19037C1::S19037C3_nt */ AMB_check_base_class_offset(lv, (S19037C7_nt*)(S19037C3_nt*), ABISELECT(8,4), "S19037C1");
    /*is_ambiguous_... S19037C1::S19037C3_nt */ AMB_check_base_class_offset(lv, (S2014C28*)(S19037C3_nt*), ABISELECT(8,4), "S19037C1");
    /*is_ambiguous_... S19037C1::S19037C3_nt */ AMB_check_base_class_offset(lv, (S19037C3_nt*), ABISELECT(8,4), "S19037C1");
    check_base_class_offset(lv, (S2014C21*), 0, "S19037C1");
    check_field_offset(lv, s19037c1f0, ABISELECT(24,12), "S19037C1.s19037c1f0");
    test_class_info(&lv, &cd_S19037C1);
    dp->~S19037C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19037C1(Test_S19037C1, "S19037C1", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN8S19037C1C1Ev();
extern void _ZN8S19037C1D2Ev();
Name_Map name_map_S19037C1[] = {
  NSPAIR(_ZN8S19037C1C1Ev),
  NSPAIR(_ZN8S19037C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19037C5_nt;
extern VTBL_ENTRY _ZTI11S19037C5_nt[];
extern  VTBL_ENTRY _ZTV11S19037C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C5_nt[];
extern Class_Descriptor cd_S19037C7_nt;
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
extern  VTBL_ENTRY _ZTV11S19037C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C7_nt[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19037C7_nt;
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
extern  VTBL_ENTRY _ZTV11S19037C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C7_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S19037C8_nt;
extern VTBL_ENTRY _ZTI11S19037C8_nt[];
extern  VTBL_ENTRY _ZTV11S19037C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C8_nt[];
extern Class_Descriptor cd_S19037C3_nt;
extern VTBL_ENTRY _ZTI11S19037C3_nt[];
extern  VTBL_ENTRY _ZTV11S19037C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C3_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S19037C2;
extern VTBL_ENTRY _ZTI8S19037C2[];
extern  VTBL_ENTRY _ZTV8S19037C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19037C2[];
extern Class_Descriptor cd_S19037C11_nt;
extern VTBL_ENTRY _ZTI12S19037C11_nt[];
extern  VTBL_ENTRY _ZTV12S19037C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19037C11_nt[];
extern Class_Descriptor cd_S19037C12_nt;
extern VTBL_ENTRY _ZTI12S19037C12_nt[];
extern  VTBL_ENTRY _ZTV12S19037C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S19037C12_nt[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S19037C10;
extern VTBL_ENTRY _ZTI9S19037C10[];
extern  VTBL_ENTRY _ZTV9S19037C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19037C10[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S19037C7_nt;
extern VTBL_ENTRY _ZTI11S19037C7_nt[];
extern  VTBL_ENTRY _ZTV11S19037C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C7_nt[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S19037C3_nt;
extern VTBL_ENTRY _ZTI11S19037C3_nt[];
extern  VTBL_ENTRY _ZTV11S19037C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19037C3_nt[];
extern Class_Descriptor cd_S2014C21;
extern VTBL_ENTRY _ZTI8S2014C21[];
static Base_Class bases_S19037C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19037C5_nt,    ABISELECT(64,36), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19037C7_nt,    ABISELECT(32,16), //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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2014C28,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19037C7_nt,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2014C24,    ABISELECT(128,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19037C8_nt,    ABISELECT(112,76), //bcp->offset
    36, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19037C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2014C24,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19037C2,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19037C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    14, //immediately_derived
  0, 1},
  {&cd_S19037C12_nt,    ABISELECT(128,84), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19037C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C38,    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
    20, //immediately_derived
  0, 0},
  {&cd_S19037C7_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2014C28,    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
    20, //immediately_derived
  0, 0},
  {&cd_S19037C3_nt,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19037C1[];
extern void _ZN8S19037C1D1Ev();
extern void _ZN8S19037C1D0Ev();
extern void ABISELECT(_ZThn8_N8S19037C1D1Ev,_ZThn4_N8S19037C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19037C1D0Ev,_ZThn4_N8S19037C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19037C1D1Ev,_ZTv0_n32_N8S19037C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19037C1D1Ev,_ZThn16_N8S19037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19037C1D0Ev,_ZTv0_n32_N8S19037C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19037C1D0Ev,_ZThn16_N8S19037C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19037C1D1Ev,_ZTv0_n28_N8S19037C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19037C1D1Ev,_ZThn76_N8S19037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19037C1D0Ev,_ZTv0_n28_N8S19037C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S19037C1D0Ev,_ZThn76_N8S19037C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19037C1D1Ev,_ZTv0_n16_N8S19037C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19037C1D1Ev,_ZThn84_N8S19037C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19037C1D0Ev,_ZTv0_n16_N8S19037C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19037C1D0Ev,_ZThn84_N8S19037C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19037C1[] = {
  ABISELECT(128,84),
  ABISELECT(112,76),
  ABISELECT(32,16),
  0,
  ABISELECT(64,36),
  ABISELECT(128,84),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19037C1[0]),
  (VTBL_ENTRY)&_ZN8S19037C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19037C1D0Ev,
  ABISELECT(120,80),
  ABISELECT(104,72),
  ABISELECT(56,32),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19037C1D1Ev,_ZThn4_N8S19037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19037C1D0Ev,_ZThn4_N8S19037C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(96,68),
  ABISELECT(80,60),
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19037C1D1Ev,_ZTv0_n32_N8S19037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19037C1D0Ev,_ZTv0_n32_N8S19037C1D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19037C1[0]),
  ABISELECT(-112,-76),
  ABISELECT(16,8),
  ABISELECT(-48,-40),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S19037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19037C1D1Ev,_ZTv0_n28_N8S19037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19037C1D0Ev,_ZTv0_n28_N8S19037C1D0Ev),
  ABISELECT(-128,-84),
  ABISELECT(-128,-84),
  ABISELECT(-128,-84),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S19037C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19037C1D1Ev,_ZTv0_n16_N8S19037C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19037C1D0Ev,_ZTv0_n16_N8S19037C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19037C1[];
extern void _ZN9S19037C10D1Ev();
extern void _ZN9S19037C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19037C10__8S19037C1[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(128,84),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19037C10[0]),
  (VTBL_ENTRY)&_ZN9S19037C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19037C10D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19037C10D1Ev,_ZTv0_n16_N9S19037C10D1Ev)();
extern void ABISELECT(_ZThn128_N9S19037C10D1Ev,_ZThn84_N9S19037C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19037C10D0Ev,_ZTv0_n16_N9S19037C10D0Ev)();
extern void ABISELECT(_ZThn128_N9S19037C10D0Ev,_ZThn84_N9S19037C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19037C12_nt__9S19037C10__8S19037C1[] = {
  ABISELECT(-128,-84),
  ABISELECT(-128,-84),
  ABISELECT(-128,-84),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S19037C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19037C10D1Ev,_ZTv0_n16_N9S19037C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19037C10D0Ev,_ZTv0_n16_N9S19037C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__9S19037C10__8S19037C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19037C10[0]),
};
extern void _ZN11S19037C3_ntD1Ev();
extern void _ZN11S19037C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C3_nt__A1__8S19037C1[] = {
  ABISELECT(120,80),
  ABISELECT(104,72),
  ABISELECT(56,32),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C3_ntD0Ev,
};
extern void _ZN11S19037C7_ntD1Ev();
extern void _ZN11S19037C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C7_nt11S19037C3_nt__A2__8S19037C1[] = {
  ABISELECT(56,32),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C7_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C3_nt__A2__8S19037C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C3_nt__A1__8S19037C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev)();
extern void ABISELECT(_ZThn104_N11S19037C3_ntD1Ev,_ZThn72_N11S19037C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev)();
extern void ABISELECT(_ZThn104_N11S19037C3_ntD0Ev,_ZThn72_N11S19037C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19037C8_nt__11S19037C3_nt__A1__8S19037C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(16,8),
  ABISELECT(-48,-40),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev),
};
extern void _ZN8S19037C2D1Ev();
extern void _ZN8S19037C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19037C2__8S19037C1[] = {
  ABISELECT(96,68),
  ABISELECT(80,60),
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19037C2[0]),
  (VTBL_ENTRY)&_ZN8S19037C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19037C2D0Ev,
};
extern void _ZN11S19037C3_ntD1Ev();
extern void _ZN11S19037C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C3_nt8S19037C2__8S19037C1[] = {
  ABISELECT(96,68),
  ABISELECT(80,60),
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C3_ntD0Ev,
};
extern void _ZN11S19037C7_ntD1Ev();
extern void _ZN11S19037C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C7_nt11S19037C3_nt8S19037C2__8S19037C1[] = {
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C7_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C3_nt8S19037C2__8S19037C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C3_nt8S19037C2__8S19037C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev)();
extern void ABISELECT(_ZThn80_N11S19037C3_ntD1Ev,_ZThn60_N11S19037C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev)();
extern void ABISELECT(_ZThn80_N11S19037C3_ntD0Ev,_ZThn60_N11S19037C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19037C8_nt__11S19037C3_nt8S19037C2__8S19037C1[] = {
  ABISELECT(-80,-60),
  ABISELECT(16,8),
  ABISELECT(-48,-40),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI11S19037C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__8S19037C2__8S19037C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19037C2[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19037C2D1Ev,_ZTv0_n28_N8S19037C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19037C2D1Ev,_ZThn60_N8S19037C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19037C2D0Ev,_ZTv0_n28_N8S19037C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19037C2D0Ev,_ZThn60_N8S19037C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S19037C8_nt__8S19037C2__8S19037C1[] = {
  ABISELECT(-80,-60),
  ABISELECT(16,8),
  ABISELECT(-48,-40),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S19037C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19037C2D1Ev,_ZTv0_n28_N8S19037C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19037C2D0Ev,_ZTv0_n28_N8S19037C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__8S19037C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C5_nt[0]),
};
extern void _ZN11S19037C8_ntD1Ev();
extern void _ZN11S19037C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C8_nt__8S19037C1[] = {
  ABISELECT(16,8),
  ABISELECT(-48,-40),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C8_ntD0Ev,
};
extern void _ZN11S19037C7_ntD1Ev();
extern void _ZN11S19037C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S19037C7_nt11S19037C8_nt__A1__8S19037C1[] = {
  ABISELECT(-48,-40),
  ABISELECT(-112,-76),
  ABISELECT(-112,-76),
  0,
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S19037C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S19037C7_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C8_nt__A1__8S19037C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI11S19037C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19037C5_nt__11S19037C8_nt__8S19037C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI11S19037C8_nt[0]),
};
extern void _ZN12S19037C11_ntD1Ev();
extern void _ZN12S19037C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S19037C11_nt__8S19037C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S19037C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S19037C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S19037C11_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev)();
extern void _ZN12S19037C12_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev)();
extern void _ZN12S19037C12_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S19037C12_nt__8S19037C1[] = {
  ABISELECT(-128,-84),
  0,
  ABISELECT(-128,-84),
  0,
  (VTBL_ENTRY)&(_ZTI12S19037C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S19037C11_nt__12S19037C12_nt__8S19037C1[] = {
  ABISELECT(128,84),
  0,
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI12S19037C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev),
};
static  VTT_ENTRY vtt_S19037C1[] = {
  {&(_ZTV8S19037C1[11]),  11,52},
  {&(_tg__ZTV9S19037C10__8S19037C1[8]),  8,10},
  {&(_tg__ZTV9S19037C10__8S19037C1[8]),  8,10},
  {&(_tg__ZTV12S19037C12_nt__9S19037C10__8S19037C1[5]),  5,7},
  {&(_tg__ZTV11S19037C5_nt__9S19037C10__8S19037C1[4]),  4,4},
  {&(_tg__ZTV11S19037C3_nt__A1__8S19037C1[7]),  7,9},
  {&(_tg__ZTV11S19037C7_nt11S19037C3_nt__A2__8S19037C1[5]),  5,7},
  {&(_tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C3_nt__A2__8S19037C1[4]),  4,4},
  {&(_tg__ZTV11S19037C5_nt__11S19037C3_nt__A1__8S19037C1[4]),  4,4},
  {&(_tg__ZTV11S19037C8_nt__11S19037C3_nt__A1__8S19037C1[7]),  7,9},
  {&(_ZTV8S19037C1[30]),  30,52},
  {&(_ZTV8S19037C1[36]),  36,52},
  {&(_ZTV8S19037C1[43]),  43,52},
  {&(_ZTV8S19037C1[11]),  11,52},
  {&(_ZTV8S19037C1[50]),  50,52},
  {&(_ZTV8S19037C1[20]),  20,52},
  {&(_tg__ZTV8S19037C2__8S19037C1[7]),  7,9},
  {&(_tg__ZTV11S19037C3_nt8S19037C2__8S19037C1[7]),  7,9},
  {&(_tg__ZTV11S19037C7_nt11S19037C3_nt8S19037C2__8S19037C1[5]),  5,7},
  {&(_tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C3_nt8S19037C2__8S19037C1[4]),  4,4},
  {&(_tg__ZTV11S19037C5_nt__11S19037C3_nt8S19037C2__8S19037C1[4]),  4,4},
  {&(_tg__ZTV11S19037C8_nt__11S19037C3_nt8S19037C2__8S19037C1[7]),  7,9},
  {&(_tg__ZTV11S19037C5_nt__8S19037C2__8S19037C1[4]),  4,4},
  {&(_tg__ZTV11S19037C8_nt__8S19037C2__8S19037C1[7]),  7,9},
  {&(_tg__ZTV11S19037C5_nt__8S19037C1[4]),  4,4},
  {&(_tg__ZTV11S19037C8_nt__8S19037C1[6]),  6,8},
  {&(_tg__ZTV11S19037C7_nt11S19037C8_nt__A1__8S19037C1[5]),  5,7},
  {&(_tg__ZTV11S19037C5_nt__11S19037C7_nt11S19037C8_nt__A1__8S19037C1[4]),  4,4},
  {&(_tg__ZTV11S19037C5_nt__11S19037C8_nt__8S19037C1[4]),  4,4},
  {&(_tg__ZTV12S19037C11_nt__8S19037C1[3]),  3,5},
  {&(_tg__ZTV12S19037C12_nt__8S19037C1[5]),  5,7},
  {&(_tg__ZTV12S19037C11_nt__12S19037C12_nt__8S19037C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19037C1[];
extern  VTBL_ENTRY _ZTV8S19037C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19037C1[];
static VTBL_ENTRY alt_thunk_names154[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S19037C12_ntD0Ev,_ZTv0_n16_N12S19037C12_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S19037C12_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S19037C12_ntD1Ev,_ZTv0_n16_N12S19037C12_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S19037C12_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19037C2D0Ev,_ZTv0_n28_N8S19037C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19037C2D0Ev,_ZThn60_N8S19037C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19037C2D1Ev,_ZTv0_n28_N8S19037C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19037C2D1Ev,_ZThn60_N8S19037C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S19037C3_ntD0Ev,_ZTv0_n28_N11S19037C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N11S19037C3_ntD0Ev,_ZThn60_N11S19037C3_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19037C3_ntD0Ev,_ZThn72_N11S19037C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S19037C3_ntD1Ev,_ZTv0_n28_N11S19037C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N11S19037C3_ntD1Ev,_ZThn60_N11S19037C3_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N11S19037C3_ntD1Ev,_ZThn72_N11S19037C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19037C10D0Ev,_ZTv0_n16_N9S19037C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19037C10D0Ev,_ZThn84_N9S19037C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19037C10D1Ev,_ZTv0_n16_N9S19037C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19037C10D1Ev,_ZThn84_N9S19037C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19037C1D0Ev,_ZTv0_n16_N8S19037C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19037C1D0Ev,_ZThn84_N8S19037C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19037C1D1Ev,_ZTv0_n16_N8S19037C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19037C1D1Ev,_ZThn84_N8S19037C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19037C1D0Ev,_ZTv0_n28_N8S19037C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19037C1D0Ev,_ZThn76_N8S19037C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19037C1D1Ev,_ZTv0_n28_N8S19037C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19037C1D1Ev,_ZThn76_N8S19037C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19037C1D0Ev,_ZTv0_n32_N8S19037C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19037C1D0Ev,_ZThn16_N8S19037C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19037C1D1Ev,_ZTv0_n32_N8S19037C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19037C1D1Ev,_ZThn16_N8S19037C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19037C1 = {  "S19037C1", // class name
  bases_S19037C1, 22,
  &(vtc_S19037C1[0]), // expected_vtbl_contents
  &(vtt_S19037C1[0]), // expected_vtt_contents
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI8S19037C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19037C1),52, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19037C1),32, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names154,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6058C6  : virtual S19169C6_nt {
  __tsi64 s6058c6f0;
  ~S6058C6(); // tgen
  S6058C6(); // tgen
};
//SIG(-1 S6058C6) C1{ VBC2{ m Fp[6]} FL}


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

static void Test_S6058C6()
{
  extern Class_Descriptor cd_S6058C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S6058C6, buf);
    S6058C6 *dp, &lv = *(dp=new (buf) S6058C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S6058C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6058C6)");
    check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(16,12), "S6058C6");
    check_field_offset(lv, s6058c6f0, ABISELECT(8,4), "S6058C6.s6058c6f0");
    test_class_info(&lv, &cd_S6058C6);
    dp->~S6058C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6058C6(Test_S6058C6, "S6058C6", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S6058C6C1Ev();
extern void _ZN7S6058C6D1Ev();
Name_Map name_map_S6058C6[] = {
  NSPAIR(_ZN7S6058C6C1Ev),
  NSPAIR(_ZN7S6058C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S6058C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6058C6[];
static  VTBL_ENTRY vtc_S6058C6[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
extern VTBL_ENTRY _ZTV7S6058C6[];
static  VTT_ENTRY vtt_S6058C6[] = {
  {&(_ZTV7S6058C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
Class_Descriptor cd_S6058C6 = {  "S6058C6", // class name
  bases_S6058C6, 1,
  &(vtc_S6058C6[0]), // expected_vtbl_contents
  &(vtt_S6058C6[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S6058C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6058C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6058C6),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  S6058C7  : virtual S19169C6_nt {
  ~S6058C7(); // tgen
  S6058C7(); // tgen
};
//SIG(-1 S6058C7) C1{ VBC2{ m Fp[6]}}


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

static void Test_S6058C7()
{
  extern Class_Descriptor cd_S6058C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S6058C7, buf);
    S6058C7 *dp, &lv = *(dp=new (buf) S6058C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S6058C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6058C7)");
    check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(8,4), "S6058C7");
    test_class_info(&lv, &cd_S6058C7);
    dp->~S6058C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6058C7(Test_S6058C7, "S6058C7", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S6058C7C1Ev();
extern void _ZN7S6058C7D1Ev();
Name_Map name_map_S6058C7[] = {
  NSPAIR(_ZN7S6058C7C1Ev),
  NSPAIR(_ZN7S6058C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S6058C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_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 _ZTI7S6058C7[];
static  VTBL_ENTRY vtc_S6058C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
extern VTBL_ENTRY _ZTV7S6058C7[];
static  VTT_ENTRY vtt_S6058C7[] = {
  {&(_ZTV7S6058C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
Class_Descriptor cd_S6058C7 = {  "S6058C7", // class name
  bases_S6058C7, 1,
  &(vtc_S6058C7[0]), // expected_vtbl_contents
  &(vtt_S6058C7[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S6058C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6058C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6058C7),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  S6058C8  : S19169C6_nt , S6058C6 , virtual S6058C7 {
  ~S6058C8(); // tgen
  S6058C8(); // tgen
};
//SIG(-1 S6058C8) C1{ BC2{ m Fp[6]} BC3{ VBC2 FL} VBC4{ VBC2}}


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

static void Test_S6058C8()
{
  extern Class_Descriptor cd_S6058C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S6058C8, buf);
    S6058C8 *dp, &lv = *(dp=new (buf) S6058C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S6058C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6058C8)");
    /*is_ambiguous_... S6058C8::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(16,12), "S6058C8");
    check_base_class_offset(lv, (S19169C6_nt*)(S6058C6*), ABISELECT(64,36), "S6058C8");
    check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*), ABISELECT(64,36), "S6058C8");
    check_base_class_offset(lv, (S6058C6*), 0, "S6058C8");
    check_base_class_offset(lv, (S6058C7*), ABISELECT(112,60), "S6058C8");
    test_class_info(&lv, &cd_S6058C8);
    dp->~S6058C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6058C8(Test_S6058C8, "S6058C8", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN7S6058C8C1Ev();
extern void _ZN7S6058C8D1Ev();
Name_Map name_map_S6058C8[] = {
  NSPAIR(_ZN7S6058C8C1Ev),
  NSPAIR(_ZN7S6058C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C6;
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
static Base_Class bases_S6058C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6058C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6058C7,    ABISELECT(112,60), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6058C8[];
static  VTBL_ENTRY vtc_S6058C8[] = {
  ABISELECT(112,60),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
  ABISELECT(-48,-24),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
};
extern VTBL_ENTRY _ZTV7S6058C8[];
static  VTBL_ENTRY _tg__ZTV7S6058C6__7S6058C8[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__7S6058C8[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
static  VTT_ENTRY vtt_S6058C8[] = {
  {&(_ZTV7S6058C8[4]),  4,7},
  {&(_tg__ZTV7S6058C6__7S6058C8[3]),  3,3},
  {&(_ZTV7S6058C8[7]),  7,7},
  {&(_tg__ZTV7S6058C7__7S6058C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6058C8[];
extern  VTBL_ENTRY _ZTV7S6058C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C8[];
Class_Descriptor cd_S6058C8 = {  "S6058C8", // class name
  bases_S6058C8, 4,
  &(vtc_S6058C8[0]), // expected_vtbl_contents
  &(vtt_S6058C8[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI7S6058C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6058C8),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6058C8),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6058C5  : S6058C6 , S19169C3_nt , S6058C7 , S6058C8 {
  ::S6058C6 s6058c5f0;
  virtual  ~S6058C5(); // _ZN7S6058C5D2Ev
  S6058C5(); // tgen
};
//SIG(-1 S6058C5) C1{ BC2{ VBC3{ m Fp[6]} FL} BC4{ m Fl[10]} BC5{ VBC3} BC6{ BC3 BC2 VBC5} vd FC2}


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

static void Test_S6058C5()
{
  extern Class_Descriptor cd_S6058C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,40)];
    init_test(&cd_S6058C5, buf);
    S6058C5 *dp, &lv = *(dp=new (buf) S6058C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,156), "sizeof(S6058C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6058C5)");
    /*is_ambiguous_... S6058C5::S6058C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C6*), ABISELECT(232,128), "S6058C5");
    /*is_ambiguous_... S6058C5::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*), ABISELECT(232,128), "S6058C5");
    check_base_class_offset(lv, (S19169C6_nt*)(S6058C6*)(S6058C8*), ABISELECT(232,128), "S6058C5");
    /*is_ambiguous_... S6058C5::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*), ABISELECT(232,128), "S6058C5");
    /*is_ambiguous_... S6058C5::S6058C6 */ AMB_check_base_class_offset(lv, (S6058C6*), 0, "S6058C5");
    check_base_class_offset(lv, (S19169C3_nt*), ABISELECT(16,12), "S6058C5");
    /*is_ambiguous_... S6058C5::S6058C7 */ AMB_check_base_class_offset(lv, (S6058C7*), ABISELECT(96,52), "S6058C5");
    /*is_ambiguous_... S6058C8::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C8*), ABISELECT(120,68), "S6058C5");
    check_base_class_offset(lv, (S6058C6*)(S6058C8*), ABISELECT(104,56), "S6058C5");
    check_base_class_offset(lv, (S6058C7*)(S6058C8*), ABISELECT(280,152), "S6058C5");
    check_base_class_offset(lv, (S6058C8*), ABISELECT(104,56), "S6058C5");
    check_field_offset(lv, s6058c5f0, ABISELECT(168,92), "S6058C5.s6058c5f0");
    test_class_info(&lv, &cd_S6058C5);
    dp->~S6058C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6058C5(Test_S6058C5, "S6058C5", ABISELECT(288,156));

#else // __cplusplus

extern void _ZN7S6058C5C1Ev();
extern void _ZN7S6058C5D2Ev();
Name_Map name_map_S6058C5[] = {
  NSPAIR(_ZN7S6058C5C1Ev),
  NSPAIR(_ZN7S6058C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C6;
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C6;
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S6058C8;
extern VTBL_ENTRY _ZTI7S6058C8[];
extern  VTBL_ENTRY _ZTV7S6058C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C8[];
static Base_Class bases_S6058C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(232,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S6058C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C3_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6058C7,    ABISELECT(96,52), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(120,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6058C6,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6058C7,    ABISELECT(280,152), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6058C8,    ABISELECT(104,56), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6058C5[];
extern void _ZN7S6058C5D1Ev();
extern void _ZN7S6058C5D0Ev();
static  VTBL_ENTRY vtc_S6058C5[] = {
  ABISELECT(280,152),
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
  (VTBL_ENTRY)&_ZN7S6058C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C5D0Ev,
  ABISELECT(136,76),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
  ABISELECT(-48,-24),
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
extern VTBL_ENTRY _ZTV7S6058C5[];
static  VTBL_ENTRY _tg__ZTV7S6058C6__7S6058C5[] = {
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A__7S6058C5[] = {
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C8__7S6058C5[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C67S6058C8__A1__7S6058C5[] = {
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__7S6058C8__7S6058C5[] = {
  ABISELECT(-48,-24),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A1__7S6058C5[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
static  VTT_ENTRY vtt_S6058C5[] = {
  {&(_ZTV7S6058C5[4]),  4,16},
  {&(_tg__ZTV7S6058C6__7S6058C5[3]),  3,3},
  {&(_tg__ZTV7S6058C7__A__7S6058C5[3]),  3,3},
  {&(_tg__ZTV7S6058C8__7S6058C5[4]),  4,4},
  {&(_tg__ZTV7S6058C67S6058C8__A1__7S6058C5[3]),  3,3},
  {&(_tg__ZTV7S6058C7__7S6058C8__7S6058C5[3]),  3,3},
  {&(_ZTV7S6058C5[9]),  9,16},
  {&(_ZTV7S6058C5[13]),  13,16},
  {&(_ZTV7S6058C5[16]),  16,16},
  {&(_tg__ZTV7S6058C7__A1__7S6058C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6058C5[];
extern  VTBL_ENTRY _ZTV7S6058C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C5[];
Class_Descriptor cd_S6058C5 = {  "S6058C5", // class name
  bases_S6058C5, 8,
  &(vtc_S6058C5[0]), // expected_vtbl_contents
  &(vtt_S6058C5[0]), // expected_vtt_contents
  ABISELECT(288,156), // object size
  NSPAIRA(_ZTI7S6058C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6058C5),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6058C5),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6058C9  : S19169C3_nt , S19169C6_nt , S6058C7 , virtual S6058C5 {
  virtual  ~S6058C9(); // _ZN7S6058C9D2Ev
  S6058C9(); // tgen
};
//SIG(-1 S6058C9) C1{ BC2{ m Fl[10]} BC3{ m Fp[6]} BC4{ VBC3} VBC5{ BC6{ VBC3 FL} BC2 BC4 BC7{ BC3 BC6 VBC4} vd FC6} vd}


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

static void Test_S6058C9()
{
  extern Class_Descriptor cd_S6058C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,57)];
    init_test(&cd_S6058C9, buf);
    S6058C9 *dp, &lv = *(dp=new (buf) S6058C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,224), "sizeof(S6058C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6058C9)");
    /*is_ambiguous_... S6058C9::S19169C3_nt */ AMB_check_base_class_offset(lv, (S19169C3_nt*), ABISELECT(8,4), "S6058C9");
    /*is_ambiguous_... S6058C9::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(88,44), "S6058C9");
    /*is_ambiguous_... S6058C9::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*), ABISELECT(136,68), "S6058C9");
    /*is_ambiguous_... S6058C5::S6058C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C6*)(S6058C5*), ABISELECT(136,68), "S6058C9");
    /*is_ambiguous_... S6058C5::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*)(S6058C5*), ABISELECT(136,68), "S6058C9");
    check_base_class_offset(lv, (S19169C6_nt*)(S6058C6*)(S6058C8*)(S6058C5*), ABISELECT(136,68), "S6058C9");
    /*is_ambiguous_... S6058C9::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*), ABISELECT(136,68), "S6058C9");
    /*is_ambiguous_... S6058C9::S6058C7 */ AMB_check_base_class_offset(lv, (S6058C7*), 0, "S6058C9");
    /*is_ambiguous_... S6058C5::S6058C6 */ AMB_check_base_class_offset(lv, (S6058C6*)(S6058C5*), ABISELECT(184,92), "S6058C9");
    check_base_class_offset(lv, (S19169C3_nt*)(S6058C5*), ABISELECT(200,104), "S6058C9");
    /*is_ambiguous_... S6058C5::S6058C7 */ AMB_check_base_class_offset(lv, (S6058C7*)(S6058C5*), ABISELECT(280,144), "S6058C9");
    /*is_ambiguous_... S6058C8::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C8*)(S6058C5*), ABISELECT(304,160), "S6058C9");
    check_base_class_offset(lv, (S6058C6*)(S6058C8*)(S6058C5*), ABISELECT(288,148), "S6058C9");
    check_base_class_offset(lv, (S6058C7*)(S6058C8*)(S6058C5*), ABISELECT(416,220), "S6058C9");
    check_base_class_offset(lv, (S6058C8*)(S6058C5*), ABISELECT(288,148), "S6058C9");
    check_base_class_offset(lv, (S6058C5*), ABISELECT(184,92), "S6058C9");
    test_class_info(&lv, &cd_S6058C9);
    dp->~S6058C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6058C9(Test_S6058C9, "S6058C9", ABISELECT(424,224));

#else // __cplusplus

extern void _ZN7S6058C9C1Ev();
extern void _ZN7S6058C9D2Ev();
Name_Map name_map_S6058C9[] = {
  NSPAIR(_ZN7S6058C9C1Ev),
  NSPAIR(_ZN7S6058C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S6058C6;
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C6;
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S6058C8;
extern VTBL_ENTRY _ZTI7S6058C8[];
extern  VTBL_ENTRY _ZTV7S6058C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C8[];
extern Class_Descriptor cd_S6058C5;
extern VTBL_ENTRY _ZTI7S6058C5[];
extern  VTBL_ENTRY _ZTV7S6058C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C5[];
static Base_Class bases_S6058C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C3_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_S19169C6_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6058C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6058C6,    ABISELECT(184,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(200,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6058C7,    ABISELECT(280,144), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(304,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6058C6,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6058C7,    ABISELECT(416,220), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6058C8,    ABISELECT(288,148), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6058C5,    ABISELECT(184,92), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6058C9[];
extern void _ZN7S6058C9D1Ev();
extern void _ZN7S6058C9D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S6058C9D1Ev,_ZTv0_n20_N7S6058C9D1Ev)();
extern void ABISELECT(_ZThn184_N7S6058C9D1Ev,_ZThn92_N7S6058C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6058C9D0Ev,_ZTv0_n20_N7S6058C9D0Ev)();
extern void ABISELECT(_ZThn184_N7S6058C9D0Ev,_ZThn92_N7S6058C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6058C9[] = {
  ABISELECT(416,220),
  ABISELECT(184,92),
  ABISELECT(136,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
  (VTBL_ENTRY)&_ZN7S6058C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C9D0Ev,
  ABISELECT(-184,-92),
  ABISELECT(232,128),
  ABISELECT(-48,-24),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C9D1Ev,_ZTv0_n20_N7S6058C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C9D0Ev,_ZTv0_n20_N7S6058C9D0Ev),
  ABISELECT(-144,-76),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
  ABISELECT(128,72),
  ABISELECT(-152,-80),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
  ABISELECT(-280,-152),
  ABISELECT(-416,-220),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
};
extern VTBL_ENTRY _ZTV7S6058C9[];
static  VTBL_ENTRY _tg__ZTV7S6058C7__A__7S6058C9[] = {
  ABISELECT(136,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
extern void _ZN7S6058C5D1Ev();
extern void _ZN7S6058C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6058C5__7S6058C9[] = {
  ABISELECT(232,128),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
  (VTBL_ENTRY)&_ZN7S6058C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6058C67S6058C5__7S6058C9[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C77S6058C5__A1__7S6058C9[] = {
  ABISELECT(-144,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C87S6058C5__7S6058C9[] = {
  ABISELECT(128,72),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C67S6058C87S6058C5__A1__7S6058C9[] = {
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__7S6058C87S6058C5__7S6058C9[] = {
  ABISELECT(-280,-152),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A__7S6058C5__7S6058C9[] = {
  ABISELECT(-144,-76),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C8__7S6058C5__7S6058C9[] = {
  ABISELECT(128,72),
  ABISELECT(-152,-80),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A1__7S6058C5__7S6058C9[] = {
  ABISELECT(-280,-152),
  ABISELECT(-232,-128),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A2__7S6058C9[] = {
  ABISELECT(-280,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
static  VTT_ENTRY vtt_S6058C9[] = {
  {&(_ZTV7S6058C9[5]),  5,24},
  {&(_tg__ZTV7S6058C7__A__7S6058C9[3]),  3,3},
  {&(_ZTV7S6058C9[12]),  12,24},
  {&(_ZTV7S6058C9[17]),  17,24},
  {&(_ZTV7S6058C9[21]),  21,24},
  {&(_ZTV7S6058C9[24]),  24,24},
  {&(_tg__ZTV7S6058C5__7S6058C9[4]),  4,6},
  {&(_tg__ZTV7S6058C67S6058C5__7S6058C9[3]),  3,3},
  {&(_tg__ZTV7S6058C77S6058C5__A1__7S6058C9[3]),  3,3},
  {&(_tg__ZTV7S6058C87S6058C5__7S6058C9[4]),  4,4},
  {&(_tg__ZTV7S6058C67S6058C87S6058C5__A1__7S6058C9[3]),  3,3},
  {&(_tg__ZTV7S6058C7__7S6058C87S6058C5__7S6058C9[3]),  3,3},
  {&(_tg__ZTV7S6058C7__A__7S6058C5__7S6058C9[3]),  3,3},
  {&(_tg__ZTV7S6058C8__7S6058C5__7S6058C9[4]),  4,4},
  {&(_tg__ZTV7S6058C7__A1__7S6058C5__7S6058C9[3]),  3,3},
  {&(_tg__ZTV7S6058C7__A2__7S6058C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6058C9[];
extern  VTBL_ENTRY _ZTV7S6058C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C9[];
static VTBL_ENTRY alt_thunk_names155[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C9D0Ev,_ZTv0_n20_N7S6058C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6058C9D0Ev,_ZThn92_N7S6058C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C9D1Ev,_ZTv0_n20_N7S6058C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6058C9D1Ev,_ZThn92_N7S6058C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6058C9 = {  "S6058C9", // class name
  bases_S6058C9, 12,
  &(vtc_S6058C9[0]), // expected_vtbl_contents
  &(vtt_S6058C9[0]), // expected_vtt_contents
  ABISELECT(424,224), // object size
  NSPAIRA(_ZTI7S6058C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6058C9),24, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6058C9),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names155,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6058C3  : S19169C3_nt , virtual S6058C5 , S6058C9 , virtual S3222C8_nt , S19169C11_nt {
  __tsi64 s6058c3f0;
  void *s6058c3f1;
  virtual  ~S6058C3(); // _ZN7S6058C3D2Ev
  S6058C3(); // tgen
};
//SIG(-1 S6058C3) C1{ BC2{ m Fl[10]} VBC3{ BC4{ VBC5{ m Fp[6]} FL} BC2 BC6{ VBC5} BC7{ BC5 BC4 VBC6} vd FC4} BC8{ BC2 BC5 BC6 VBC3 vd} VBC9{ m Fi} BC10{ vd m} vd FL Fp}


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

static void Test_S6058C3()
{
  extern Class_Descriptor cd_S6058C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(68,72)];
    init_test(&cd_S6058C3, buf);
    S6058C3 *dp, &lv = *(dp=new (buf) S6058C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(536,284), "sizeof(S6058C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6058C3)");
    /*is_ambiguous_... S6058C3::S19169C3_nt */ AMB_check_base_class_offset(lv, (S19169C3_nt*), ABISELECT(136,68), "S6058C3");
    /*is_ambiguous_... S6058C5::S6058C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C6*)(S6058C5*), ABISELECT(472,252), "S6058C3");
    /*is_ambiguous_... S6058C5::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*)(S6058C5*), ABISELECT(472,252), "S6058C3");
    check_base_class_offset(lv, (S19169C6_nt*)(S6058C6*)(S6058C8*)(S6058C5*), ABISELECT(472,252), "S6058C3");
    /*is_ambiguous_... S6058C3::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*), ABISELECT(472,252), "S6058C3");
    /*is_ambiguous_... S6058C9::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*)(S6058C9*), ABISELECT(472,252), "S6058C3");
    /*is_ambiguous_... S6058C5::S6058C6 */ AMB_check_base_class_offset(lv, (S6058C6*)(S6058C5*), ABISELECT(240,124), "S6058C3");
    check_base_class_offset(lv, (S19169C3_nt*)(S6058C5*), ABISELECT(256,136), "S6058C3");
    /*is_ambiguous_... S6058C5::S6058C7 */ AMB_check_base_class_offset(lv, (S6058C7*)(S6058C5*), ABISELECT(336,176), "S6058C3");
    /*is_ambiguous_... S6058C8::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C8*)(S6058C5*), ABISELECT(360,192), "S6058C3");
    check_base_class_offset(lv, (S6058C6*)(S6058C8*)(S6058C5*), ABISELECT(344,180), "S6058C3");
    check_base_class_offset(lv, (S6058C7*)(S6058C8*)(S6058C5*), ABISELECT(520,276), "S6058C3");
    check_base_class_offset(lv, (S6058C8*)(S6058C5*), ABISELECT(344,180), "S6058C3");
    check_base_class_offset(lv, (S6058C5*), ABISELECT(240,124), "S6058C3");
    check_base_class_offset(lv, (S6058C5*)(S6058C9*), ABISELECT(240,124), "S6058C3");
    /*is_ambiguous_... S6058C9::S19169C3_nt */ AMB_check_base_class_offset(lv, (S19169C3_nt*)(S6058C9*), ABISELECT(8,4), "S6058C3");
    /*is_ambiguous_... S6058C9::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C9*), ABISELECT(88,44), "S6058C3");
    /*is_ambiguous_... S6058C9::S6058C7 */ AMB_check_base_class_offset(lv, (S6058C7*)(S6058C9*), 0, "S6058C3");
    check_base_class_offset(lv, (S6058C9*), 0, "S6058C3");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(528,280), "S6058C3");
    check_base_class_offset(lv, (S19169C11_nt*), ABISELECT(216,108), "S6058C3");
    check_field_offset(lv, s6058c3f0, ABISELECT(224,112), "S6058C3.s6058c3f0");
    check_field_offset(lv, s6058c3f1, ABISELECT(232,120), "S6058C3.s6058c3f1");
    test_class_info(&lv, &cd_S6058C3);
    dp->~S6058C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6058C3(Test_S6058C3, "S6058C3", ABISELECT(536,284));

#else // __cplusplus

extern void _ZN7S6058C3C1Ev();
extern void _ZN7S6058C3D2Ev();
Name_Map name_map_S6058C3[] = {
  NSPAIR(_ZN7S6058C3C1Ev),
  NSPAIR(_ZN7S6058C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C6;
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C6;
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S6058C8;
extern VTBL_ENTRY _ZTI7S6058C8[];
extern  VTBL_ENTRY _ZTV7S6058C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C8[];
extern Class_Descriptor cd_S6058C5;
extern VTBL_ENTRY _ZTI7S6058C5[];
extern  VTBL_ENTRY _ZTV7S6058C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C5[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S6058C9;
extern VTBL_ENTRY _ZTI7S6058C9[];
extern  VTBL_ENTRY _ZTV7S6058C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C9[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
static Base_Class bases_S6058C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C3_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(472,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6058C6,    ABISELECT(240,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(256,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6058C7,    ABISELECT(336,176), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(360,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6058C6,    ABISELECT(344,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6058C7,    ABISELECT(520,276), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6058C8,    ABISELECT(344,180), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6058C5,    ABISELECT(240,124), //bcp->offset
    12, //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
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C3_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
    13, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6058C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6058C9,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3222C8_nt,    ABISELECT(528,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19169C11_nt,    ABISELECT(216,108), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6058C3[];
extern void _ZN7S6058C3D1Ev();
extern void _ZN7S6058C3D0Ev();
extern void ABISELECT(_ZThn216_N7S6058C3D1Ev,_ZThn108_N7S6058C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S6058C3D0Ev,_ZThn108_N7S6058C3D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S6058C3D1Ev,_ZTv0_n20_N7S6058C3D1Ev)();
extern void ABISELECT(_ZThn240_N7S6058C3D1Ev,_ZThn124_N7S6058C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6058C3D0Ev,_ZTv0_n20_N7S6058C3D0Ev)();
extern void ABISELECT(_ZThn240_N7S6058C3D0Ev,_ZThn124_N7S6058C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6058C3[] = {
  ABISELECT(528,280),
  ABISELECT(520,276),
  ABISELECT(240,124),
  ABISELECT(472,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
  (VTBL_ENTRY)&_ZN7S6058C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C3D0Ev,
  ABISELECT(-216,-108),
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S6058C3D1Ev,_ZThn108_N7S6058C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S6058C3D0Ev,_ZThn108_N7S6058C3D0Ev),
  ABISELECT(-240,-124),
  ABISELECT(280,152),
  ABISELECT(232,128),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C3D1Ev,_ZTv0_n20_N7S6058C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C3D0Ev,_ZTv0_n20_N7S6058C3D0Ev),
  ABISELECT(136,76),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
  ABISELECT(-48,-24),
  ABISELECT(-520,-276),
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
};
extern VTBL_ENTRY _ZTV7S6058C3[];
extern void _ZN7S6058C9D1Ev();
extern void _ZN7S6058C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6058C9__7S6058C3[] = {
  ABISELECT(520,276),
  ABISELECT(240,124),
  ABISELECT(472,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
  (VTBL_ENTRY)&_ZN7S6058C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6058C77S6058C9__A2__7S6058C3[] = {
  ABISELECT(472,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S6058C9D1Ev,_ZTv0_n20_N7S6058C9D1Ev)();
extern void ABISELECT(_ZThn240_N7S6058C9D1Ev,_ZThn124_N7S6058C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6058C9D0Ev,_ZTv0_n20_N7S6058C9D0Ev)();
extern void ABISELECT(_ZThn240_N7S6058C9D0Ev,_ZThn124_N7S6058C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6058C5__7S6058C9__7S6058C3[] = {
  ABISELECT(-240,-124),
  ABISELECT(280,152),
  ABISELECT(232,128),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C9D1Ev,_ZTv0_n20_N7S6058C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C9D0Ev,_ZTv0_n20_N7S6058C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6058C77S6058C5__A1__7S6058C9__7S6058C3[] = {
  ABISELECT(136,76),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C87S6058C5__7S6058C9__7S6058C3[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A2__7S6058C9__7S6058C3[] = {
  ABISELECT(-48,-24),
  ABISELECT(-520,-276),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
};
extern void _ZN7S6058C5D1Ev();
extern void _ZN7S6058C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6058C5__7S6058C3[] = {
  ABISELECT(280,152),
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
  (VTBL_ENTRY)&_ZN7S6058C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6058C67S6058C5__7S6058C3[] = {
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C77S6058C5__7S6058C3[] = {
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C87S6058C5__7S6058C3[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C67S6058C87S6058C5__A1__7S6058C3[] = {
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__7S6058C87S6058C5__7S6058C3[] = {
  ABISELECT(-48,-24),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A__7S6058C5__7S6058C3[] = {
  ABISELECT(136,76),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C8__7S6058C5__7S6058C3[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A1__7S6058C5__7S6058C3[] = {
  ABISELECT(-48,-24),
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A1__7S6058C3[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
static  VTT_ENTRY vtt_S6058C3[] = {
  {&(_ZTV7S6058C3[6]),  6,29},
  {&(_tg__ZTV7S6058C9__7S6058C3[5]),  5,7},
  {&(_tg__ZTV7S6058C77S6058C9__A2__7S6058C3[3]),  3,3},
  {&(_tg__ZTV7S6058C5__7S6058C9__7S6058C3[5]),  5,7},
  {&(_tg__ZTV7S6058C77S6058C5__A1__7S6058C9__7S6058C3[3]),  3,3},
  {&(_tg__ZTV7S6058C87S6058C5__7S6058C9__7S6058C3[4]),  4,4},
  {&(_tg__ZTV7S6058C7__A2__7S6058C9__7S6058C3[3]),  3,3},
  {&(_ZTV7S6058C3[17]),  17,29},
  {&(_ZTV7S6058C3[22]),  22,29},
  {&(_ZTV7S6058C3[26]),  26,29},
  {&(_ZTV7S6058C3[29]),  29,29},
  {&(_tg__ZTV7S6058C5__7S6058C3[4]),  4,6},
  {&(_tg__ZTV7S6058C67S6058C5__7S6058C3[3]),  3,3},
  {&(_tg__ZTV7S6058C77S6058C5__7S6058C3[3]),  3,3},
  {&(_tg__ZTV7S6058C87S6058C5__7S6058C3[4]),  4,4},
  {&(_tg__ZTV7S6058C67S6058C87S6058C5__A1__7S6058C3[3]),  3,3},
  {&(_tg__ZTV7S6058C7__7S6058C87S6058C5__7S6058C3[3]),  3,3},
  {&(_tg__ZTV7S6058C7__A__7S6058C5__7S6058C3[3]),  3,3},
  {&(_tg__ZTV7S6058C8__7S6058C5__7S6058C3[4]),  4,4},
  {&(_tg__ZTV7S6058C7__A1__7S6058C5__7S6058C3[3]),  3,3},
  {&(_tg__ZTV7S6058C7__A1__7S6058C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6058C3[];
extern  VTBL_ENTRY _ZTV7S6058C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C3[];
static VTBL_ENTRY alt_thunk_names156[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C9D0Ev,_ZTv0_n20_N7S6058C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6058C9D0Ev,_ZThn124_N7S6058C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C9D1Ev,_ZTv0_n20_N7S6058C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6058C9D1Ev,_ZThn124_N7S6058C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C3D0Ev,_ZTv0_n20_N7S6058C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6058C3D0Ev,_ZThn124_N7S6058C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C3D1Ev,_ZTv0_n20_N7S6058C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6058C3D1Ev,_ZThn124_N7S6058C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6058C3 = {  "S6058C3", // class name
  bases_S6058C3, 16,
  &(vtc_S6058C3[0]), // expected_vtbl_contents
  &(vtt_S6058C3[0]), // expected_vtt_contents
  ABISELECT(536,284), // object size
  NSPAIRA(_ZTI7S6058C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6058C3),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6058C3),21, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names156,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6058C12_nt  : virtual S19169C11_nt , S19169C3_nt , S19169C16_nt {
  __tsi64 s6058c12f0:7;
  virtual  ~S6058C12_nt(); // _ZN11S6058C12_ntD2Ev
  S6058C12_nt(); // tgen
};
//SIG(-1 S6058C12_nt) C1{ VBC2{ vd m} BC3{ m Fl[10]} BC4{ m FC5{ VBC6{ m Fp[6]} FL}} vd FL:7}


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

//skip512 S6058C12_nt

#else // __cplusplus

extern void _ZN11S6058C12_ntC1Ev();
extern void _ZN11S6058C12_ntD2Ev();
Name_Map name_map_S6058C12_nt[] = {
  NSPAIR(_ZN11S6058C12_ntC1Ev),
  NSPAIR(_ZN11S6058C12_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
static Base_Class bases_S6058C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C3_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_S19169C16_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S6058C12_nt[];
extern void _ZN11S6058C12_ntD1Ev();
extern void _ZN11S6058C12_ntD0Ev();
static  VTBL_ENTRY vtc_S6058C12_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S6058C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S6058C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S6058C12_ntD0Ev,
};
extern VTBL_ENTRY _ZTV11S6058C12_nt[];
static  VTT_ENTRY vtt_S6058C12_nt[] = {
  {&(_ZTV11S6058C12_nt[4]),  4,6},
  {&(_ZTV11S6058C12_nt[4]),  4,6},
};
extern VTBL_ENTRY _ZTI11S6058C12_nt[];
VTBL_ENTRY *P__ZTI11S6058C12_nt = _ZTI11S6058C12_nt; 
extern  VTBL_ENTRY _ZTV11S6058C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S6058C12_nt[];
Class_Descriptor cd_S6058C12_nt = {  "S6058C12_nt", // class name
  bases_S6058C12_nt, 3,
  &(vtc_S6058C12_nt[0]), // expected_vtbl_contents
  &(vtt_S6058C12_nt[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI11S6058C12_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S6058C12_nt),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S6058C12_nt),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  S6058C1  : S19169C6_nt , S6058C3 , S6058C12_nt {
  virtual  ~S6058C1(); // _ZN7S6058C1D2Ev
  S6058C1(); // tgen
};
//SIG(1 S6058C1) C1{ BC2{ m Fp[6]} BC3{ BC4{ m Fl[10]} VBC5{ BC6{ VBC2 FL} BC4 BC7{ VBC2} BC8{ BC2 BC6 VBC7} vd FC6} BC9{ BC4 BC2 BC7 VBC5 vd} VBC10{ m Fi} BC11{ vd m} vd FL Fp} BC12{ VBC11 BC4 BC13{ m FC14{ VBC2 FL}} vd FL:7} vd}


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

static void Test_S6058C1()
{
  extern Class_Descriptor cd_S6058C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(94,99)];
    init_test(&cd_S6058C1, buf);
    S6058C1 *dp, &lv = *(dp=new (buf) S6058C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(744,392), "sizeof(S6058C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6058C1)");
    /*is_ambiguous_... S6058C1::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(240,124), "S6058C1");
    /*is_ambiguous_... S6058C3::S19169C3_nt */ AMB_check_base_class_offset(lv, (S19169C3_nt*)(S6058C3*), ABISELECT(136,68), "S6058C1");
    /*is_ambiguous_... S6058C5::S6058C6 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C6*)(S6058C5*), ABISELECT(680,360), "S6058C1");
    /*is_ambiguous_... S6058C5::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*)(S6058C5*), ABISELECT(680,360), "S6058C1");
    check_base_class_offset(lv, (S19169C6_nt*)(S6058C6*)(S6058C8*)(S6058C5*), ABISELECT(680,360), "S6058C1");
    /*is_ambiguous_... S6058C1::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*), ABISELECT(680,360), "S6058C1");
    /*is_ambiguous_... S6058C9::S6058C7 */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C7*)(S6058C9*)(S6058C3*), ABISELECT(680,360), "S6058C1");
    /*is_ambiguous_... S6058C5::S6058C6 */ AMB_check_base_class_offset(lv, (S6058C6*)(S6058C5*), ABISELECT(448,232), "S6058C1");
    check_base_class_offset(lv, (S19169C3_nt*)(S6058C5*), ABISELECT(464,244), "S6058C1");
    /*is_ambiguous_... S6058C5::S6058C7 */ AMB_check_base_class_offset(lv, (S6058C7*)(S6058C5*), ABISELECT(544,284), "S6058C1");
    /*is_ambiguous_... S6058C8::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C8*)(S6058C5*), ABISELECT(568,300), "S6058C1");
    check_base_class_offset(lv, (S6058C6*)(S6058C8*)(S6058C5*), ABISELECT(552,288), "S6058C1");
    check_base_class_offset(lv, (S6058C7*)(S6058C8*)(S6058C5*), ABISELECT(728,384), "S6058C1");
    check_base_class_offset(lv, (S6058C8*)(S6058C5*), ABISELECT(552,288), "S6058C1");
    check_base_class_offset(lv, (S6058C5*)(S6058C3*), ABISELECT(448,232), "S6058C1");
    check_base_class_offset(lv, (S6058C5*)(S6058C9*)(S6058C3*), ABISELECT(448,232), "S6058C1");
    /*is_ambiguous_... S6058C9::S19169C3_nt */ AMB_check_base_class_offset(lv, (S19169C3_nt*)(S6058C9*)(S6058C3*), ABISELECT(8,4), "S6058C1");
    /*is_ambiguous_... S6058C9::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S6058C9*)(S6058C3*), ABISELECT(88,44), "S6058C1");
    /*is_ambiguous_... S6058C9::S6058C7 */ AMB_check_base_class_offset(lv, (S6058C7*)(S6058C9*)(S6058C3*), 0, "S6058C1");
    check_base_class_offset(lv, (S6058C9*)(S6058C3*), 0, "S6058C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S6058C3*), ABISELECT(736,388), "S6058C1");
    check_base_class_offset(lv, (S19169C11_nt*)(S6058C3*), ABISELECT(216,108), "S6058C1");
    check_base_class_offset(lv, (S6058C3*), 0, "S6058C1");
    check_base_class_offset(lv, (S19169C11_nt*)(S6058C12_nt*), ABISELECT(288,148), "S6058C1");
    check_base_class_offset(lv, (S19169C3_nt*)(S6058C12_nt*), ABISELECT(296,152), "S6058C1");
    check_base_class_offset(lv, (S19169C16_nt*)(S6058C12_nt*), ABISELECT(376,192), "S6058C1");
    check_base_class_offset(lv, (S6058C12_nt*), ABISELECT(288,148), "S6058C1");
    test_class_info(&lv, &cd_S6058C1);
    dp->~S6058C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6058C1(Test_S6058C1, "S6058C1", ABISELECT(744,392));

#else // __cplusplus

extern void _ZN7S6058C1C1Ev();
extern void _ZN7S6058C1D2Ev();
Name_Map name_map_S6058C1[] = {
  NSPAIR(_ZN7S6058C1C1Ev),
  NSPAIR(_ZN7S6058C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C6;
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C6;
extern VTBL_ENTRY _ZTI7S6058C6[];
extern  VTBL_ENTRY _ZTV7S6058C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C6[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S6058C8;
extern VTBL_ENTRY _ZTI7S6058C8[];
extern  VTBL_ENTRY _ZTV7S6058C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C8[];
extern Class_Descriptor cd_S6058C5;
extern VTBL_ENTRY _ZTI7S6058C5[];
extern  VTBL_ENTRY _ZTV7S6058C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C5[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S6058C7;
extern VTBL_ENTRY _ZTI7S6058C7[];
extern  VTBL_ENTRY _ZTV7S6058C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C7[];
extern Class_Descriptor cd_S6058C9;
extern VTBL_ENTRY _ZTI7S6058C9[];
extern  VTBL_ENTRY _ZTV7S6058C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C9[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S6058C3;
extern VTBL_ENTRY _ZTI7S6058C3[];
extern  VTBL_ENTRY _ZTV7S6058C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C3[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S6058C12_nt;
extern VTBL_ENTRY _ZTI11S6058C12_nt[];
extern  VTBL_ENTRY _ZTV11S6058C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S6058C12_nt[];
static Base_Class bases_S6058C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(240,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C3_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(680,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6058C6,    ABISELECT(448,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(464,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6058C7,    ABISELECT(544,284), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(568,300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6058C6,    ABISELECT(552,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6058C7,    ABISELECT(728,384), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6058C8,    ABISELECT(552,288), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6058C5,    ABISELECT(448,232), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19169C3_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
    14, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6058C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6058C9,    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
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3222C8_nt,    ABISELECT(736,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19169C11_nt,    ABISELECT(216,108), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6058C3,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C11_nt,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19169C3_nt,    ABISELECT(296,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19169C16_nt,    ABISELECT(376,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6058C12_nt,    ABISELECT(288,148), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6058C1[];
extern void _ZN7S6058C1D1Ev();
extern void _ZN7S6058C1D0Ev();
extern void ABISELECT(_ZThn216_N7S6058C1D1Ev,_ZThn108_N7S6058C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S6058C1D0Ev,_ZThn108_N7S6058C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S6058C1D1Ev,_ZTv0_n12_N7S6058C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S6058C1D1Ev,_ZThn148_N7S6058C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6058C1D0Ev,_ZTv0_n12_N7S6058C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S6058C1D0Ev,_ZThn148_N7S6058C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6058C1D1Ev,_ZTv0_n20_N7S6058C1D1Ev)();
extern void ABISELECT(_ZThn448_N7S6058C1D1Ev,_ZThn232_N7S6058C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6058C1D0Ev,_ZTv0_n20_N7S6058C1D0Ev)();
extern void ABISELECT(_ZThn448_N7S6058C1D0Ev,_ZThn232_N7S6058C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6058C1[] = {
  ABISELECT(288,148),
  ABISELECT(736,388),
  ABISELECT(728,384),
  ABISELECT(448,232),
  ABISELECT(680,360),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C1[0]),
  (VTBL_ENTRY)&_ZN7S6058C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C1D0Ev,
  ABISELECT(-216,-108),
  (VTBL_ENTRY)&(_ZTI7S6058C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S6058C1D1Ev,_ZThn108_N7S6058C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S6058C1D0Ev,_ZThn108_N7S6058C1D0Ev),
  0,
  ABISELECT(-288,-148),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S6058C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6058C1D1Ev,_ZTv0_n12_N7S6058C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6058C1D0Ev,_ZTv0_n12_N7S6058C1D0Ev),
  ABISELECT(-448,-232),
  ABISELECT(280,152),
  ABISELECT(232,128),
  ABISELECT(-448,-232),
  (VTBL_ENTRY)&(_ZTI7S6058C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C1D1Ev,_ZTv0_n20_N7S6058C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C1D0Ev,_ZTv0_n20_N7S6058C1D0Ev),
  ABISELECT(136,76),
  ABISELECT(-544,-284),
  (VTBL_ENTRY)&(_ZTI7S6058C1[0]),
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-552,-288),
  (VTBL_ENTRY)&(_ZTI7S6058C1[0]),
  ABISELECT(-48,-24),
  ABISELECT(-728,-384),
  (VTBL_ENTRY)&(_ZTI7S6058C1[0]),
};
extern VTBL_ENTRY _ZTV7S6058C1[];
extern void _ZN7S6058C3D1Ev();
extern void _ZN7S6058C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6058C3__7S6058C1[] = {
  ABISELECT(736,388),
  ABISELECT(728,384),
  ABISELECT(448,232),
  ABISELECT(680,360),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
  (VTBL_ENTRY)&_ZN7S6058C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C3D0Ev,
};
extern void _ZN7S6058C9D1Ev();
extern void _ZN7S6058C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6058C97S6058C3__7S6058C1[] = {
  ABISELECT(728,384),
  ABISELECT(448,232),
  ABISELECT(680,360),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
  (VTBL_ENTRY)&_ZN7S6058C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6058C77S6058C97S6058C3__A2__7S6058C1[] = {
  ABISELECT(680,360),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S6058C9D1Ev,_ZTv0_n20_N7S6058C9D1Ev)();
extern void ABISELECT(_ZThn448_N7S6058C9D1Ev,_ZThn232_N7S6058C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6058C9D0Ev,_ZTv0_n20_N7S6058C9D0Ev)();
extern void ABISELECT(_ZThn448_N7S6058C9D0Ev,_ZThn232_N7S6058C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6058C5__7S6058C97S6058C3__7S6058C1[] = {
  ABISELECT(-448,-232),
  ABISELECT(280,152),
  ABISELECT(232,128),
  ABISELECT(-448,-232),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C9D1Ev,_ZTv0_n20_N7S6058C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C9D0Ev,_ZTv0_n20_N7S6058C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6058C77S6058C5__A1__7S6058C97S6058C3__7S6058C1[] = {
  ABISELECT(136,76),
  ABISELECT(-544,-284),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C87S6058C5__7S6058C97S6058C3__7S6058C1[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-552,-288),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A2__7S6058C97S6058C3__7S6058C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-728,-384),
  (VTBL_ENTRY)&(_ZTI7S6058C9[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S6058C3D1Ev,_ZTv0_n20_N7S6058C3D1Ev)();
extern void ABISELECT(_ZThn448_N7S6058C3D1Ev,_ZThn232_N7S6058C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6058C3D0Ev,_ZTv0_n20_N7S6058C3D0Ev)();
extern void ABISELECT(_ZThn448_N7S6058C3D0Ev,_ZThn232_N7S6058C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6058C5__7S6058C3__7S6058C1[] = {
  ABISELECT(-448,-232),
  ABISELECT(280,152),
  ABISELECT(232,128),
  ABISELECT(-448,-232),
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C3D1Ev,_ZTv0_n20_N7S6058C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6058C3D0Ev,_ZTv0_n20_N7S6058C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6058C77S6058C5__7S6058C3__7S6058C1[] = {
  ABISELECT(136,76),
  ABISELECT(-544,-284),
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C87S6058C5__7S6058C3__7S6058C1[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-552,-288),
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A1__7S6058C3__7S6058C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-728,-384),
  (VTBL_ENTRY)&(_ZTI7S6058C3[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S6058C12_ntD1Ev,_ZTv0_n12_N11S6058C12_ntD1Ev)();
extern void _ZN11S6058C12_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S6058C12_ntD0Ev,_ZTv0_n12_N11S6058C12_ntD0Ev)();
extern void _ZN11S6058C12_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S6058C12_nt__7S6058C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S6058C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S6058C12_ntD1Ev,_ZTv0_n12_N11S6058C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S6058C12_ntD0Ev,_ZTv0_n12_N11S6058C12_ntD0Ev),
};
extern void _ZN7S6058C5D1Ev();
extern void _ZN7S6058C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6058C5__7S6058C1[] = {
  ABISELECT(280,152),
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
  (VTBL_ENTRY)&_ZN7S6058C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6058C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6058C67S6058C5__7S6058C1[] = {
  ABISELECT(232,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C77S6058C5__7S6058C1[] = {
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C87S6058C5__7S6058C1[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C67S6058C87S6058C5__A1__7S6058C1[] = {
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__7S6058C87S6058C5__7S6058C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI7S6058C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A__7S6058C5__7S6058C1[] = {
  ABISELECT(136,76),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C8__7S6058C5__7S6058C1[] = {
  ABISELECT(176,96),
  ABISELECT(128,72),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A1__7S6058C5__7S6058C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI7S6058C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6058C7__A1__7S6058C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6058C7[0]),
};
static  VTT_ENTRY vtt_S6058C1[] = {
  {&(_ZTV7S6058C1[7]),  7,36},
  {&(_tg__ZTV7S6058C3__7S6058C1[6]),  6,8},
  {&(_tg__ZTV7S6058C97S6058C3__7S6058C1[5]),  5,7},
  {&(_tg__ZTV7S6058C77S6058C97S6058C3__A2__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C5__7S6058C97S6058C3__7S6058C1[5]),  5,7},
  {&(_tg__ZTV7S6058C77S6058C5__A1__7S6058C97S6058C3__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C87S6058C5__7S6058C97S6058C3__7S6058C1[4]),  4,4},
  {&(_tg__ZTV7S6058C7__A2__7S6058C97S6058C3__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C5__7S6058C3__7S6058C1[5]),  5,7},
  {&(_tg__ZTV7S6058C77S6058C5__7S6058C3__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C87S6058C5__7S6058C3__7S6058C1[4]),  4,4},
  {&(_tg__ZTV7S6058C7__A1__7S6058C3__7S6058C1[3]),  3,3},
  {&(_tg__ZTV11S6058C12_nt__7S6058C1[4]),  4,6},
  {&(_tg__ZTV11S6058C12_nt__7S6058C1[4]),  4,6},
  {&(_ZTV7S6058C1[24]),  24,36},
  {&(_ZTV7S6058C1[29]),  29,36},
  {&(_ZTV7S6058C1[33]),  33,36},
  {&(_ZTV7S6058C1[36]),  36,36},
  {&(_ZTV7S6058C1[17]),  17,36},
  {&(_ZTV7S6058C1[17]),  17,36},
  {&(_tg__ZTV7S6058C5__7S6058C1[4]),  4,6},
  {&(_tg__ZTV7S6058C67S6058C5__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C77S6058C5__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C87S6058C5__7S6058C1[4]),  4,4},
  {&(_tg__ZTV7S6058C67S6058C87S6058C5__A1__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C7__7S6058C87S6058C5__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C7__A__7S6058C5__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C8__7S6058C5__7S6058C1[4]),  4,4},
  {&(_tg__ZTV7S6058C7__A1__7S6058C5__7S6058C1[3]),  3,3},
  {&(_tg__ZTV7S6058C7__A1__7S6058C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6058C1[];
extern  VTBL_ENTRY _ZTV7S6058C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6058C1[];
static VTBL_ENTRY alt_thunk_names157[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S6058C12_ntD0Ev,_ZTv0_n12_N11S6058C12_ntD0Ev), // 
  (VTBL_ENTRY)_ZN11S6058C12_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S6058C12_ntD1Ev,_ZTv0_n12_N11S6058C12_ntD1Ev), // 
  (VTBL_ENTRY)_ZN11S6058C12_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C3D0Ev,_ZTv0_n20_N7S6058C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S6058C3D0Ev,_ZThn232_N7S6058C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C3D1Ev,_ZTv0_n20_N7S6058C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S6058C3D1Ev,_ZThn232_N7S6058C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C9D0Ev,_ZTv0_n20_N7S6058C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S6058C9D0Ev,_ZThn232_N7S6058C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C9D1Ev,_ZTv0_n20_N7S6058C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S6058C9D1Ev,_ZThn232_N7S6058C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C1D0Ev,_ZTv0_n20_N7S6058C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S6058C1D0Ev,_ZThn232_N7S6058C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6058C1D1Ev,_ZTv0_n20_N7S6058C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S6058C1D1Ev,_ZThn232_N7S6058C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6058C1D0Ev,_ZTv0_n12_N7S6058C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6058C1D0Ev,_ZThn148_N7S6058C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6058C1D1Ev,_ZTv0_n12_N7S6058C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6058C1D1Ev,_ZThn148_N7S6058C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6058C1 = {  "S6058C1", // class name
  bases_S6058C1, 22,
  &(vtc_S6058C1[0]), // expected_vtbl_contents
  &(vtt_S6058C1[0]), // expected_vtt_contents
  ABISELECT(744,392), // object size
  NSPAIRA(_ZTI7S6058C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6058C1),36, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6058C1),30, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names157,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20303C2  {
  char s20303c2f0;
  int s20303c2f1;
  void *s20303c2f2;
  virtual void  v6(); // _ZN8S20303C22v6Ev
  virtual void  v7(); // _ZN8S20303C22v7Ev
  virtual void  v8(); // _ZN8S20303C22v8Ev
  virtual void  v9(); // _ZN8S20303C22v9Ev
  virtual void  v10(); // _ZN8S20303C23v10Ev
  virtual void  v11(); // _ZN8S20303C23v11Ev
  ~S20303C2(); // tgen
  S20303C2(); // tgen
};
//SIG(-1 S20303C2) C1{ v1 v2 v3 v4 v5 v6 Fc Fi Fp}


void  S20303C2 ::v6(){vfunc_called(this, "_ZN8S20303C22v6Ev");}
void  S20303C2 ::v7(){vfunc_called(this, "_ZN8S20303C22v7Ev");}
void  S20303C2 ::v8(){vfunc_called(this, "_ZN8S20303C22v8Ev");}
void  S20303C2 ::v9(){vfunc_called(this, "_ZN8S20303C22v9Ev");}
void  S20303C2 ::v10(){vfunc_called(this, "_ZN8S20303C23v10Ev");}
void  S20303C2 ::v11(){vfunc_called(this, "_ZN8S20303C23v11Ev");}
S20303C2 ::~S20303C2(){ note_dtor("S20303C2", this);} // tgen
S20303C2 ::S20303C2(){ note_ctor("S20303C2", this);} // tgen

static void Test_S20303C2()
{
  extern Class_Descriptor cd_S20303C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20303C2, buf);
    S20303C2 *dp, &lv = *(dp=new (buf) S20303C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20303C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20303C2)");
    check_field_offset(lv, s20303c2f0, ABISELECT(8,4), "S20303C2.s20303c2f0");
    check_field_offset(lv, s20303c2f1, ABISELECT(12,8), "S20303C2.s20303c2f1");
    check_field_offset(lv, s20303c2f2, ABISELECT(16,12), "S20303C2.s20303c2f2");
    test_class_info(&lv, &cd_S20303C2);
    dp->~S20303C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20303C2(Test_S20303C2, "S20303C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20303C2C1Ev();
extern void _ZN8S20303C2D1Ev();
Name_Map name_map_S20303C2[] = {
  NSPAIR(_ZN8S20303C2C1Ev),
  NSPAIR(_ZN8S20303C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20303C2[];
extern void _ZN8S20303C22v6Ev();
extern void _ZN8S20303C22v7Ev();
extern void _ZN8S20303C22v8Ev();
extern void _ZN8S20303C22v9Ev();
extern void _ZN8S20303C23v10Ev();
extern void _ZN8S20303C23v11Ev();
static  VTBL_ENTRY vtc_S20303C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20303C2[0]),
  (VTBL_ENTRY)&_ZN8S20303C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20303C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20303C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20303C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20303C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20303C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S20303C2[];
extern  VTBL_ENTRY _ZTV8S20303C2[];
Class_Descriptor cd_S20303C2 = {  "S20303C2", // class name
  0,0,//no base classes
  &(vtc_S20303C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20303C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20303C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20303C4  {
  char s20303c4f0;
  void *s20303c4f1;
  virtual void  v12(); // _ZN8S20303C43v12Ev
  virtual void  v13(); // _ZN8S20303C43v13Ev
  ~S20303C4(); // tgen
  S20303C4(); // tgen
};
//SIG(-1 S20303C4) C1{ v1 v2 Fc Fp}


void  S20303C4 ::v12(){vfunc_called(this, "_ZN8S20303C43v12Ev");}
void  S20303C4 ::v13(){vfunc_called(this, "_ZN8S20303C43v13Ev");}
S20303C4 ::~S20303C4(){ note_dtor("S20303C4", this);} // tgen
S20303C4 ::S20303C4(){ note_ctor("S20303C4", this);} // tgen

static void Test_S20303C4()
{
  extern Class_Descriptor cd_S20303C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20303C4, buf);
    S20303C4 *dp, &lv = *(dp=new (buf) S20303C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20303C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20303C4)");
    check_field_offset(lv, s20303c4f0, ABISELECT(8,4), "S20303C4.s20303c4f0");
    check_field_offset(lv, s20303c4f1, ABISELECT(16,8), "S20303C4.s20303c4f1");
    test_class_info(&lv, &cd_S20303C4);
    dp->~S20303C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20303C4(Test_S20303C4, "S20303C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20303C4C1Ev();
extern void _ZN8S20303C4D1Ev();
Name_Map name_map_S20303C4[] = {
  NSPAIR(_ZN8S20303C4C1Ev),
  NSPAIR(_ZN8S20303C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20303C4[];
extern void _ZN8S20303C43v12Ev();
extern void _ZN8S20303C43v13Ev();
static  VTBL_ENTRY vtc_S20303C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20303C4[0]),
  (VTBL_ENTRY)&_ZN8S20303C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20303C43v13Ev,
};
extern VTBL_ENTRY _ZTI8S20303C4[];
extern  VTBL_ENTRY _ZTV8S20303C4[];
Class_Descriptor cd_S20303C4 = {  "S20303C4", // class name
  0,0,//no base classes
  &(vtc_S20303C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20303C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20303C4),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  S20303C5  {
  int s20303c5f0;
  ::S20975C6 s20303c5f1;
  virtual void  v14(); // _ZN8S20303C53v14Ev
  ~S20303C5(); // tgen
  S20303C5(); // tgen
};
//SIG(-1 S20303C5) C1{ v1 Fi FC2{ v2 v3 v4 v5 v6}}


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

static void Test_S20303C5()
{
  extern Class_Descriptor cd_S20303C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20303C5, buf);
    S20303C5 *dp, &lv = *(dp=new (buf) S20303C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20303C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20303C5)");
    check_field_offset(lv, s20303c5f0, ABISELECT(8,4), "S20303C5.s20303c5f0");
    check_field_offset(lv, s20303c5f1, ABISELECT(16,8), "S20303C5.s20303c5f1");
    test_class_info(&lv, &cd_S20303C5);
    dp->~S20303C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20303C5(Test_S20303C5, "S20303C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20303C5C1Ev();
extern void _ZN8S20303C5D1Ev();
Name_Map name_map_S20303C5[] = {
  NSPAIR(_ZN8S20303C5C1Ev),
  NSPAIR(_ZN8S20303C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20303C5[];
extern void _ZN8S20303C53v14Ev();
static  VTBL_ENTRY vtc_S20303C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20303C5[0]),
  (VTBL_ENTRY)&_ZN8S20303C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S20303C5[];
extern  VTBL_ENTRY _ZTV8S20303C5[];
Class_Descriptor cd_S20303C5 = {  "S20303C5", // class name
  0,0,//no base classes
  &(vtc_S20303C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20303C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20303C5),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20303C3  : S20303C4 , virtual S20303C5 {
  int s20303c3f0[2];
  virtual void  v15(); // _ZN8S20303C33v15Ev
  virtual void  v16(); // _ZN8S20303C33v16Ev
  virtual void  v17(); // _ZN8S20303C33v17Ev
  virtual void  v18(); // _ZN8S20303C33v18Ev
  virtual void  v19(); // _ZN8S20303C33v19Ev
  virtual void  v20(); // _ZN8S20303C33v20Ev
  virtual void  v21(); // _ZN8S20303C33v21Ev
  virtual void  v22(); // _ZN8S20303C33v22Ev
  ~S20303C3(); // tgen
  S20303C3(); // tgen
};
//SIG(-1 S20303C3) C1{ BC2{ v9 v10 Fc Fp} VBC3{ v11 Fi FC4{ v12 v13 v14 v15 v16}} v1 v2 v3 v4 v5 v6 v7 v8 Fi[2]}


void  S20303C3 ::v15(){vfunc_called(this, "_ZN8S20303C33v15Ev");}
void  S20303C3 ::v16(){vfunc_called(this, "_ZN8S20303C33v16Ev");}
void  S20303C3 ::v17(){vfunc_called(this, "_ZN8S20303C33v17Ev");}
void  S20303C3 ::v18(){vfunc_called(this, "_ZN8S20303C33v18Ev");}
void  S20303C3 ::v19(){vfunc_called(this, "_ZN8S20303C33v19Ev");}
void  S20303C3 ::v20(){vfunc_called(this, "_ZN8S20303C33v20Ev");}
void  S20303C3 ::v21(){vfunc_called(this, "_ZN8S20303C33v21Ev");}
void  S20303C3 ::v22(){vfunc_called(this, "_ZN8S20303C33v22Ev");}
S20303C3 ::~S20303C3(){ note_dtor("S20303C3", this);} // tgen
S20303C3 ::S20303C3(){ note_ctor("S20303C3", this);} // tgen

static void Test_S20303C3()
{
  extern Class_Descriptor cd_S20303C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S20303C3, buf);
    S20303C3 *dp, &lv = *(dp=new (buf) S20303C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S20303C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20303C3)");
    check_base_class_offset(lv, (S20303C4*), 0, "S20303C3");
    check_base_class_offset(lv, (S20303C5*), ABISELECT(32,20), "S20303C3");
    check_field_offset(lv, s20303c3f0, ABISELECT(24,12), "S20303C3.s20303c3f0");
    test_class_info(&lv, &cd_S20303C3);
    dp->~S20303C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20303C3(Test_S20303C3, "S20303C3", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S20303C3C1Ev();
extern void _ZN8S20303C3D1Ev();
Name_Map name_map_S20303C3[] = {
  NSPAIR(_ZN8S20303C3C1Ev),
  NSPAIR(_ZN8S20303C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20303C4;
extern VTBL_ENTRY _ZTI8S20303C4[];
extern  VTBL_ENTRY _ZTV8S20303C4[];
extern Class_Descriptor cd_S20303C5;
extern VTBL_ENTRY _ZTI8S20303C5[];
extern  VTBL_ENTRY _ZTV8S20303C5[];
static Base_Class bases_S20303C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20303C5,    ABISELECT(32,20), //bcp->offset
    13, //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 _ZTI8S20303C3[];
extern void _ZN8S20303C43v12Ev();
extern void _ZN8S20303C43v13Ev();
extern void _ZN8S20303C33v15Ev();
extern void _ZN8S20303C33v16Ev();
extern void _ZN8S20303C33v17Ev();
extern void _ZN8S20303C33v18Ev();
extern void _ZN8S20303C33v19Ev();
extern void _ZN8S20303C33v20Ev();
extern void _ZN8S20303C33v21Ev();
extern void _ZN8S20303C33v22Ev();
extern void _ZN8S20303C53v14Ev();
static  VTBL_ENTRY vtc_S20303C3[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20303C3[0]),
  (VTBL_ENTRY)&_ZN8S20303C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20303C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v22Ev,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20303C3[0]),
  (VTBL_ENTRY)&_ZN8S20303C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S20303C3[];
static  VTT_ENTRY vtt_S20303C3[] = {
  {&(_ZTV8S20303C3[3]),  3,17},
  {&(_ZTV8S20303C3[16]),  16,17},
};
extern VTBL_ENTRY _ZTI8S20303C3[];
extern  VTBL_ENTRY _ZTV8S20303C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20303C3[];
Class_Descriptor cd_S20303C3 = {  "S20303C3", // class name
  bases_S20303C3, 2,
  &(vtc_S20303C3[0]), // expected_vtbl_contents
  &(vtt_S20303C3[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S20303C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20303C3),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20303C3),2, //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  S20303C1  : virtual S20303C2 , S20303C3 {
  ::S19414C8 s20303c1f0;
  virtual void  v1(); // _ZN8S20303C12v1Ev
  virtual void  v2(); // _ZN8S20303C12v2Ev
  virtual void  v3(); // _ZN8S20303C12v3Ev
  virtual void  v4(); // _ZN8S20303C12v4Ev
  virtual void  v5(); // _ZN8S20303C12v5Ev
  ~S20303C1(); // tgen
  S20303C1(); // tgen
};
//SIG(1 S20303C1) C1{ VBC2{ v6 v7 v8 v9 v10 v11 Fc Fi Fp} BC3{ BC4{ v12 v13 Fc Fp} VBC5{ v14 Fi FC6{ v27 v28 v29 v30 v31}} v15 v16 v17 v18 v19 v20 v21 v22 Fi[2]} v1 v2 v3 v4 v5 FC7{ v23 v24 v25 v26 Fp}}


void  S20303C1 ::v1(){vfunc_called(this, "_ZN8S20303C12v1Ev");}
void  S20303C1 ::v2(){vfunc_called(this, "_ZN8S20303C12v2Ev");}
void  S20303C1 ::v3(){vfunc_called(this, "_ZN8S20303C12v3Ev");}
void  S20303C1 ::v4(){vfunc_called(this, "_ZN8S20303C12v4Ev");}
void  S20303C1 ::v5(){vfunc_called(this, "_ZN8S20303C12v5Ev");}
S20303C1 ::~S20303C1(){ note_dtor("S20303C1", this);} // tgen
S20303C1 ::S20303C1(){ note_ctor("S20303C1", this);} // tgen

static void Test_S20303C1()
{
  extern Class_Descriptor cd_S20303C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,15)];
    init_test(&cd_S20303C1, buf);
    S20303C1 *dp, &lv = *(dp=new (buf) S20303C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S20303C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20303C1)");
    check_base_class_offset(lv, (S20303C2*), ABISELECT(48,28), "S20303C1");
    check_base_class_offset(lv, (S20303C4*)(S20303C3*), 0, "S20303C1");
    check_base_class_offset(lv, (S20303C5*)(S20303C3*), ABISELECT(72,44), "S20303C1");
    check_base_class_offset(lv, (S20303C3*), 0, "S20303C1");
    check_field_offset(lv, s20303c1f0, ABISELECT(32,20), "S20303C1.s20303c1f0");
    test_class_info(&lv, &cd_S20303C1);
    dp->~S20303C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20303C1(Test_S20303C1, "S20303C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S20303C1C1Ev();
extern void _ZN8S20303C1D1Ev();
Name_Map name_map_S20303C1[] = {
  NSPAIR(_ZN8S20303C1C1Ev),
  NSPAIR(_ZN8S20303C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20303C2;
extern VTBL_ENTRY _ZTI8S20303C2[];
extern  VTBL_ENTRY _ZTV8S20303C2[];
extern Class_Descriptor cd_S20303C4;
extern VTBL_ENTRY _ZTI8S20303C4[];
extern  VTBL_ENTRY _ZTV8S20303C4[];
extern Class_Descriptor cd_S20303C5;
extern VTBL_ENTRY _ZTI8S20303C5[];
extern  VTBL_ENTRY _ZTV8S20303C5[];
extern Class_Descriptor cd_S20303C3;
extern VTBL_ENTRY _ZTI8S20303C3[];
extern  VTBL_ENTRY _ZTV8S20303C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20303C3[];
static Base_Class bases_S20303C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20303C2,    ABISELECT(48,28), //bcp->offset
    19, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20303C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20303C5,    ABISELECT(72,44), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20303C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20303C1[];
extern void _ZN8S20303C43v12Ev();
extern void _ZN8S20303C43v13Ev();
extern void _ZN8S20303C33v15Ev();
extern void _ZN8S20303C33v16Ev();
extern void _ZN8S20303C33v17Ev();
extern void _ZN8S20303C33v18Ev();
extern void _ZN8S20303C33v19Ev();
extern void _ZN8S20303C33v20Ev();
extern void _ZN8S20303C33v21Ev();
extern void _ZN8S20303C33v22Ev();
extern void _ZN8S20303C12v1Ev();
extern void _ZN8S20303C12v2Ev();
extern void _ZN8S20303C12v3Ev();
extern void _ZN8S20303C12v4Ev();
extern void _ZN8S20303C12v5Ev();
extern void _ZN8S20303C22v6Ev();
extern void _ZN8S20303C22v7Ev();
extern void _ZN8S20303C22v8Ev();
extern void _ZN8S20303C22v9Ev();
extern void _ZN8S20303C23v10Ev();
extern void _ZN8S20303C23v11Ev();
extern void _ZN8S20303C53v14Ev();
static  VTBL_ENTRY vtc_S20303C1[] = {
  ABISELECT(48,28),
  ABISELECT(72,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20303C1[0]),
  (VTBL_ENTRY)&_ZN8S20303C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20303C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20303C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20303C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20303C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20303C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20303C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20303C1[0]),
  (VTBL_ENTRY)&_ZN8S20303C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20303C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20303C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20303C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20303C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20303C23v11Ev,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20303C1[0]),
  (VTBL_ENTRY)&_ZN8S20303C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S20303C1[];
extern void _ZN8S20303C43v12Ev();
extern void _ZN8S20303C43v13Ev();
extern void _ZN8S20303C33v15Ev();
extern void _ZN8S20303C33v16Ev();
extern void _ZN8S20303C33v17Ev();
extern void _ZN8S20303C33v18Ev();
extern void _ZN8S20303C33v19Ev();
extern void _ZN8S20303C33v20Ev();
extern void _ZN8S20303C33v21Ev();
extern void _ZN8S20303C33v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20303C3__8S20303C1[] = {
  ABISELECT(72,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20303C3[0]),
  (VTBL_ENTRY)&_ZN8S20303C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20303C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20303C33v22Ev,
};
extern void _ZN8S20303C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20303C5__8S20303C3__8S20303C1[] = {
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S20303C3[0]),
  (VTBL_ENTRY)&_ZN8S20303C53v14Ev,
};
static  VTT_ENTRY vtt_S20303C1[] = {
  {&(_ZTV8S20303C1[4]),  4,37},
  {&(_tg__ZTV8S20303C3__8S20303C1[3]),  3,13},
  {&(_tg__ZTV8S20303C5__8S20303C3__8S20303C1[3]),  3,4},
  {&(_ZTV8S20303C1[27]),  27,37},
  {&(_ZTV8S20303C1[36]),  36,37},
};
extern VTBL_ENTRY _ZTI8S20303C1[];
extern  VTBL_ENTRY _ZTV8S20303C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20303C1[];
Class_Descriptor cd_S20303C1 = {  "S20303C1", // class name
  bases_S20303C1, 4,
  &(vtc_S20303C1[0]), // expected_vtbl_contents
  &(vtt_S20303C1[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S20303C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20303C1),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20303C1),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7138C2_nt  {
  int s7138c2f0;
  virtual void  v8(); // _ZN10S7138C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7138C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7138C2_nt3v10Ev
  virtual void  v11(); // _ZN10S7138C2_nt3v11Ev
  virtual void  v12(); // _ZN10S7138C2_nt3v12Ev
  virtual void  v13(); // _ZN10S7138C2_nt3v13Ev
  ~S7138C2_nt(); // tgen
  S7138C2_nt(); // tgen
};
//SIG(-1 S7138C2_nt) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S7138C2_nt ::v8(){vfunc_called(this, "_ZN10S7138C2_nt2v8Ev");}
void  S7138C2_nt ::v9(){vfunc_called(this, "_ZN10S7138C2_nt2v9Ev");}
void  S7138C2_nt ::v10(){vfunc_called(this, "_ZN10S7138C2_nt3v10Ev");}
void  S7138C2_nt ::v11(){vfunc_called(this, "_ZN10S7138C2_nt3v11Ev");}
void  S7138C2_nt ::v12(){vfunc_called(this, "_ZN10S7138C2_nt3v12Ev");}
void  S7138C2_nt ::v13(){vfunc_called(this, "_ZN10S7138C2_nt3v13Ev");}
S7138C2_nt ::~S7138C2_nt(){ note_dtor("S7138C2_nt", this);} // tgen
S7138C2_nt ::S7138C2_nt(){ note_ctor("S7138C2_nt", this);} // tgen

//skip512 S7138C2_nt

#else // __cplusplus

extern void _ZN10S7138C2_ntC1Ev();
extern void _ZN10S7138C2_ntD1Ev();
Name_Map name_map_S7138C2_nt[] = {
  NSPAIR(_ZN10S7138C2_ntC1Ev),
  NSPAIR(_ZN10S7138C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7138C2_nt[];
extern void _ZN10S7138C2_nt2v8Ev();
extern void _ZN10S7138C2_nt2v9Ev();
extern void _ZN10S7138C2_nt3v10Ev();
extern void _ZN10S7138C2_nt3v11Ev();
extern void _ZN10S7138C2_nt3v12Ev();
extern void _ZN10S7138C2_nt3v13Ev();
static  VTBL_ENTRY vtc_S7138C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7138C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S7138C2_nt[];
VTBL_ENTRY *P__ZTI10S7138C2_nt = _ZTI10S7138C2_nt; 
extern  VTBL_ENTRY _ZTV10S7138C2_nt[];
Class_Descriptor cd_S7138C2_nt = {  "S7138C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7138C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7138C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7138C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7138C3_nt  {
  char s7138c3f0;
  virtual void  v14(); // _ZN10S7138C3_nt3v14Ev
  virtual void  v15(); // _ZN10S7138C3_nt3v15Ev
  virtual void  v16(); // _ZN10S7138C3_nt3v16Ev
  virtual void  v17(); // _ZN10S7138C3_nt3v17Ev
  ~S7138C3_nt(); // tgen
  S7138C3_nt(); // tgen
};
//SIG(-1 S7138C3_nt) C1{ v1 v2 v3 v4 Fc}


void  S7138C3_nt ::v14(){vfunc_called(this, "_ZN10S7138C3_nt3v14Ev");}
void  S7138C3_nt ::v15(){vfunc_called(this, "_ZN10S7138C3_nt3v15Ev");}
void  S7138C3_nt ::v16(){vfunc_called(this, "_ZN10S7138C3_nt3v16Ev");}
void  S7138C3_nt ::v17(){vfunc_called(this, "_ZN10S7138C3_nt3v17Ev");}
S7138C3_nt ::~S7138C3_nt(){ note_dtor("S7138C3_nt", this);} // tgen
S7138C3_nt ::S7138C3_nt(){ note_ctor("S7138C3_nt", this);} // tgen

//skip512 S7138C3_nt

#else // __cplusplus

extern void _ZN10S7138C3_ntC1Ev();
extern void _ZN10S7138C3_ntD1Ev();
Name_Map name_map_S7138C3_nt[] = {
  NSPAIR(_ZN10S7138C3_ntC1Ev),
  NSPAIR(_ZN10S7138C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7138C3_nt[];
extern void _ZN10S7138C3_nt3v14Ev();
extern void _ZN10S7138C3_nt3v15Ev();
extern void _ZN10S7138C3_nt3v16Ev();
extern void _ZN10S7138C3_nt3v17Ev();
static  VTBL_ENTRY vtc_S7138C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7138C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI10S7138C3_nt[];
VTBL_ENTRY *P__ZTI10S7138C3_nt = _ZTI10S7138C3_nt; 
extern  VTBL_ENTRY _ZTV10S7138C3_nt[];
Class_Descriptor cd_S7138C3_nt = {  "S7138C3_nt", // class name
  0,0,//no base classes
  &(vtc_S7138C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7138C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7138C3_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  S7138C4  {
  char s7138c4f0;
  virtual void  v18(); // _ZN7S7138C43v18Ev
  virtual void  v19(); // _ZN7S7138C43v19Ev
  virtual void  v20(); // _ZN7S7138C43v20Ev
  virtual void  v21(); // _ZN7S7138C43v21Ev
  virtual void  v22(); // _ZN7S7138C43v22Ev
  virtual void  v23(); // _ZN7S7138C43v23Ev
  ~S7138C4(); // tgen
  S7138C4(); // tgen
};
//SIG(-1 S7138C4) C1{ v1 v2 v3 v4 v5 v6 Fc}


void  S7138C4 ::v18(){vfunc_called(this, "_ZN7S7138C43v18Ev");}
void  S7138C4 ::v19(){vfunc_called(this, "_ZN7S7138C43v19Ev");}
void  S7138C4 ::v20(){vfunc_called(this, "_ZN7S7138C43v20Ev");}
void  S7138C4 ::v21(){vfunc_called(this, "_ZN7S7138C43v21Ev");}
void  S7138C4 ::v22(){vfunc_called(this, "_ZN7S7138C43v22Ev");}
void  S7138C4 ::v23(){vfunc_called(this, "_ZN7S7138C43v23Ev");}
S7138C4 ::~S7138C4(){ note_dtor("S7138C4", this);} // tgen
S7138C4 ::S7138C4(){ note_ctor("S7138C4", this);} // tgen

static void Test_S7138C4()
{
  extern Class_Descriptor cd_S7138C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7138C4, buf);
    S7138C4 *dp, &lv = *(dp=new (buf) S7138C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7138C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7138C4)");
    check_field_offset(lv, s7138c4f0, ABISELECT(8,4), "S7138C4.s7138c4f0");
    test_class_info(&lv, &cd_S7138C4);
    dp->~S7138C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7138C4(Test_S7138C4, "S7138C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7138C4C1Ev();
extern void _ZN7S7138C4D1Ev();
Name_Map name_map_S7138C4[] = {
  NSPAIR(_ZN7S7138C4C1Ev),
  NSPAIR(_ZN7S7138C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7138C4[];
extern void _ZN7S7138C43v18Ev();
extern void _ZN7S7138C43v19Ev();
extern void _ZN7S7138C43v20Ev();
extern void _ZN7S7138C43v21Ev();
extern void _ZN7S7138C43v22Ev();
extern void _ZN7S7138C43v23Ev();
static  VTBL_ENTRY vtc_S7138C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7138C4[0]),
  (VTBL_ENTRY)&_ZN7S7138C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v23Ev,
};
extern VTBL_ENTRY _ZTI7S7138C4[];
extern  VTBL_ENTRY _ZTV7S7138C4[];
Class_Descriptor cd_S7138C4 = {  "S7138C4", // class name
  0,0,//no base classes
  &(vtc_S7138C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7138C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7138C4),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7138C5  : S7138C4 , S7138C3_nt , virtual S7138C2_nt {
  int s7138c5f0;
  virtual void  v24(); // _ZN7S7138C53v24Ev
  virtual void  v25(); // _ZN7S7138C53v25Ev
  virtual void  v26(); // _ZN7S7138C53v26Ev
  virtual void  v27(); // _ZN7S7138C53v27Ev
  virtual void  v28(); // _ZN7S7138C53v28Ev
  virtual void  v29(); // _ZN7S7138C53v29Ev
  virtual void  v30(); // _ZN7S7138C53v30Ev
  virtual void  v31(); // _ZN7S7138C53v31Ev
  virtual void  v32(); // _ZN7S7138C53v32Ev
  ~S7138C5(); // tgen
  S7138C5(); // tgen
};
//SIG(-1 S7138C5) C1{ BC2{ v10 v11 v12 v13 v14 v15 Fc} BC3{ v16 v17 v18 v19 Fc} VBC4{ v20 v21 v22 v23 v24 v25 Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 Fi}


void  S7138C5 ::v24(){vfunc_called(this, "_ZN7S7138C53v24Ev");}
void  S7138C5 ::v25(){vfunc_called(this, "_ZN7S7138C53v25Ev");}
void  S7138C5 ::v26(){vfunc_called(this, "_ZN7S7138C53v26Ev");}
void  S7138C5 ::v27(){vfunc_called(this, "_ZN7S7138C53v27Ev");}
void  S7138C5 ::v28(){vfunc_called(this, "_ZN7S7138C53v28Ev");}
void  S7138C5 ::v29(){vfunc_called(this, "_ZN7S7138C53v29Ev");}
void  S7138C5 ::v30(){vfunc_called(this, "_ZN7S7138C53v30Ev");}
void  S7138C5 ::v31(){vfunc_called(this, "_ZN7S7138C53v31Ev");}
void  S7138C5 ::v32(){vfunc_called(this, "_ZN7S7138C53v32Ev");}
S7138C5 ::~S7138C5(){ note_dtor("S7138C5", this);} // tgen
S7138C5 ::S7138C5(){ note_ctor("S7138C5", this);} // tgen

static void Test_S7138C5()
{
  extern Class_Descriptor cd_S7138C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7138C5, buf);
    S7138C5 *dp, &lv = *(dp=new (buf) S7138C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7138C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7138C5)");
    check_base_class_offset(lv, (S7138C4*), 0, "S7138C5");
    check_base_class_offset(lv, (S7138C3_nt*), ABISELECT(16,8), "S7138C5");
    check_base_class_offset(lv, (S7138C2_nt*), ABISELECT(32,20), "S7138C5");
    check_field_offset(lv, s7138c5f0, ABISELECT(28,16), "S7138C5.s7138c5f0");
    test_class_info(&lv, &cd_S7138C5);
    dp->~S7138C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7138C5(Test_S7138C5, "S7138C5", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S7138C5C1Ev();
extern void _ZN7S7138C5D1Ev();
Name_Map name_map_S7138C5[] = {
  NSPAIR(_ZN7S7138C5C1Ev),
  NSPAIR(_ZN7S7138C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7138C4;
extern VTBL_ENTRY _ZTI7S7138C4[];
extern  VTBL_ENTRY _ZTV7S7138C4[];
extern Class_Descriptor cd_S7138C3_nt;
extern VTBL_ENTRY _ZTI10S7138C3_nt[];
extern  VTBL_ENTRY _ZTV10S7138C3_nt[];
extern Class_Descriptor cd_S7138C2_nt;
extern VTBL_ENTRY _ZTI10S7138C2_nt[];
extern  VTBL_ENTRY _ZTV10S7138C2_nt[];
static Base_Class bases_S7138C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7138C3_nt,    ABISELECT(16,8), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7138C2_nt,    ABISELECT(32,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7138C5[];
extern void _ZN7S7138C43v18Ev();
extern void _ZN7S7138C43v19Ev();
extern void _ZN7S7138C43v20Ev();
extern void _ZN7S7138C43v21Ev();
extern void _ZN7S7138C43v22Ev();
extern void _ZN7S7138C43v23Ev();
extern void _ZN7S7138C53v24Ev();
extern void _ZN7S7138C53v25Ev();
extern void _ZN7S7138C53v26Ev();
extern void _ZN7S7138C53v27Ev();
extern void _ZN7S7138C53v28Ev();
extern void _ZN7S7138C53v29Ev();
extern void _ZN7S7138C53v30Ev();
extern void _ZN7S7138C53v31Ev();
extern void _ZN7S7138C53v32Ev();
extern void _ZN10S7138C3_nt3v14Ev();
extern void _ZN10S7138C3_nt3v15Ev();
extern void _ZN10S7138C3_nt3v16Ev();
extern void _ZN10S7138C3_nt3v17Ev();
extern void _ZN10S7138C2_nt2v8Ev();
extern void _ZN10S7138C2_nt2v9Ev();
extern void _ZN10S7138C2_nt3v10Ev();
extern void _ZN10S7138C2_nt3v11Ev();
extern void _ZN10S7138C2_nt3v12Ev();
extern void _ZN10S7138C2_nt3v13Ev();
static  VTBL_ENTRY vtc_S7138C5[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7138C5[0]),
  (VTBL_ENTRY)&_ZN7S7138C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v28Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v29Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v30Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v31Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v32Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7138C5[0]),
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7138C5[0]),
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV7S7138C5[];
static  VTT_ENTRY vtt_S7138C5[] = {
  {&(_ZTV7S7138C5[3]),  3,38},
  {&(_ZTV7S7138C5[32]),  32,38},
};
extern VTBL_ENTRY _ZTI7S7138C5[];
extern  VTBL_ENTRY _ZTV7S7138C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7138C5[];
Class_Descriptor cd_S7138C5 = {  "S7138C5", // class name
  bases_S7138C5, 3,
  &(vtc_S7138C5[0]), // expected_vtbl_contents
  &(vtt_S7138C5[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S7138C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7138C5),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7138C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7138C1  : S7138C2_nt , virtual S7138C3_nt , virtual S7138C4 , virtual S7138C5 {
  char s7138c1f0:4;
  virtual void  v1(); // _ZN7S7138C12v1Ev
  virtual void  v2(); // _ZN7S7138C12v2Ev
  virtual void  v3(); // _ZN7S7138C12v3Ev
  virtual void  v4(); // _ZN7S7138C12v4Ev
  virtual void  v5(); // _ZN7S7138C12v5Ev
  virtual void  v6(); // _ZN7S7138C12v6Ev
  virtual void  v7(); // _ZN7S7138C12v7Ev
  ~S7138C1(); // tgen
  S7138C1(); // tgen
};
//SIG(1 S7138C1) C1{ BC2{ v8 v9 v10 v11 v12 v13 Fi} VBC3{ v14 v15 v16 v17 Fc} VBC4{ v18 v19 v20 v21 v22 v23 Fc} VBC5{ BC4 BC3 VBC2 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fi} v1 v2 v3 v4 v5 v6 v7 Fc:4}


void  S7138C1 ::v1(){vfunc_called(this, "_ZN7S7138C12v1Ev");}
void  S7138C1 ::v2(){vfunc_called(this, "_ZN7S7138C12v2Ev");}
void  S7138C1 ::v3(){vfunc_called(this, "_ZN7S7138C12v3Ev");}
void  S7138C1 ::v4(){vfunc_called(this, "_ZN7S7138C12v4Ev");}
void  S7138C1 ::v5(){vfunc_called(this, "_ZN7S7138C12v5Ev");}
void  S7138C1 ::v6(){vfunc_called(this, "_ZN7S7138C12v6Ev");}
void  S7138C1 ::v7(){vfunc_called(this, "_ZN7S7138C12v7Ev");}
S7138C1 ::~S7138C1(){ note_dtor("S7138C1", this);} // tgen
S7138C1 ::S7138C1(){ note_ctor("S7138C1", this);} // tgen

static void Test_S7138C1()
{
  extern Class_Descriptor cd_S7138C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,15)];
    init_test(&cd_S7138C1, buf);
    S7138C1 *dp, &lv = *(dp=new (buf) S7138C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7138C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7138C1)");
    /*is_ambiguous_... S7138C1::S7138C2_nt */ AMB_check_base_class_offset(lv, (S7138C2_nt*), 0, "S7138C1");
    /*is_ambiguous_... S7138C1::S7138C3_nt */ AMB_check_base_class_offset(lv, (S7138C3_nt*), ABISELECT(16,12), "S7138C1");
    /*is_ambiguous_... S7138C1::S7138C4 */ AMB_check_base_class_offset(lv, (S7138C4*), ABISELECT(32,20), "S7138C1");
    check_base_class_offset(lv, (S7138C4*)(S7138C5*), ABISELECT(48,28), "S7138C1");
    check_base_class_offset(lv, (S7138C3_nt*)(S7138C5*), ABISELECT(64,36), "S7138C1");
    check_base_class_offset(lv, (S7138C2_nt*)(S7138C5*), ABISELECT(80,48), "S7138C1");
    check_base_class_offset(lv, (S7138C5*), ABISELECT(48,28), "S7138C1");
    set_bf_and_test(lv, s7138c1f0, ABISELECT(12,8), 0, 4, 1, "S7138C1");
    set_bf_and_test(lv, s7138c1f0, ABISELECT(12,8), 0, 4, hide_sll(1LL<<3), "S7138C1");
    test_class_info(&lv, &cd_S7138C1);
    dp->~S7138C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7138C1(Test_S7138C1, "S7138C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7138C1C1Ev();
extern void _ZN7S7138C1D1Ev();
Name_Map name_map_S7138C1[] = {
  NSPAIR(_ZN7S7138C1C1Ev),
  NSPAIR(_ZN7S7138C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7138C2_nt;
extern VTBL_ENTRY _ZTI10S7138C2_nt[];
extern  VTBL_ENTRY _ZTV10S7138C2_nt[];
extern Class_Descriptor cd_S7138C3_nt;
extern VTBL_ENTRY _ZTI10S7138C3_nt[];
extern  VTBL_ENTRY _ZTV10S7138C3_nt[];
extern Class_Descriptor cd_S7138C4;
extern VTBL_ENTRY _ZTI7S7138C4[];
extern  VTBL_ENTRY _ZTV7S7138C4[];
extern Class_Descriptor cd_S7138C4;
extern VTBL_ENTRY _ZTI7S7138C4[];
extern  VTBL_ENTRY _ZTV7S7138C4[];
extern Class_Descriptor cd_S7138C3_nt;
extern VTBL_ENTRY _ZTI10S7138C3_nt[];
extern  VTBL_ENTRY _ZTV10S7138C3_nt[];
extern Class_Descriptor cd_S7138C2_nt;
extern VTBL_ENTRY _ZTI10S7138C2_nt[];
extern  VTBL_ENTRY _ZTV10S7138C2_nt[];
extern Class_Descriptor cd_S7138C5;
extern VTBL_ENTRY _ZTI7S7138C5[];
extern  VTBL_ENTRY _ZTV7S7138C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7138C5[];
static Base_Class bases_S7138C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7138C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7138C3_nt,    ABISELECT(16,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7138C4,    ABISELECT(32,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7138C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7138C3_nt,    ABISELECT(64,36), //bcp->offset
    80, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7138C2_nt,    ABISELECT(80,48), //bcp->offset
    86, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7138C5,    ABISELECT(48,28), //bcp->offset
    43, //bcp->virtual_function_table_offset
    22, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7138C1[];
extern void _ZN10S7138C2_nt2v8Ev();
extern void _ZN10S7138C2_nt2v9Ev();
extern void _ZN10S7138C2_nt3v10Ev();
extern void _ZN10S7138C2_nt3v11Ev();
extern void _ZN10S7138C2_nt3v12Ev();
extern void _ZN10S7138C2_nt3v13Ev();
extern void _ZN7S7138C12v1Ev();
extern void _ZN7S7138C12v2Ev();
extern void _ZN7S7138C12v3Ev();
extern void _ZN7S7138C12v4Ev();
extern void _ZN7S7138C12v5Ev();
extern void _ZN7S7138C12v6Ev();
extern void _ZN7S7138C12v7Ev();
extern void _ZN10S7138C3_nt3v14Ev();
extern void _ZN10S7138C3_nt3v15Ev();
extern void _ZN10S7138C3_nt3v16Ev();
extern void _ZN10S7138C3_nt3v17Ev();
extern void _ZN7S7138C43v18Ev();
extern void _ZN7S7138C43v19Ev();
extern void _ZN7S7138C43v20Ev();
extern void _ZN7S7138C43v21Ev();
extern void _ZN7S7138C43v22Ev();
extern void _ZN7S7138C43v23Ev();
extern void _ZN7S7138C43v18Ev();
extern void _ZN7S7138C43v19Ev();
extern void _ZN7S7138C43v20Ev();
extern void _ZN7S7138C43v21Ev();
extern void _ZN7S7138C43v22Ev();
extern void _ZN7S7138C43v23Ev();
extern void _ZN7S7138C53v24Ev();
extern void _ZN7S7138C53v25Ev();
extern void _ZN7S7138C53v26Ev();
extern void _ZN7S7138C53v27Ev();
extern void _ZN7S7138C53v28Ev();
extern void _ZN7S7138C53v29Ev();
extern void _ZN7S7138C53v30Ev();
extern void _ZN7S7138C53v31Ev();
extern void _ZN7S7138C53v32Ev();
extern void _ZN10S7138C3_nt3v14Ev();
extern void _ZN10S7138C3_nt3v15Ev();
extern void _ZN10S7138C3_nt3v16Ev();
extern void _ZN10S7138C3_nt3v17Ev();
extern void _ZN10S7138C2_nt2v8Ev();
extern void _ZN10S7138C2_nt2v9Ev();
extern void _ZN10S7138C2_nt3v10Ev();
extern void _ZN10S7138C2_nt3v11Ev();
extern void _ZN10S7138C2_nt3v12Ev();
extern void _ZN10S7138C2_nt3v13Ev();
static  VTBL_ENTRY vtc_S7138C1[] = {
  ABISELECT(80,48),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7138C1[0]),
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S7138C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7138C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7138C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7138C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7138C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7138C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7138C12v7Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7138C1[0]),
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7138C1[0]),
  (VTBL_ENTRY)&_ZN7S7138C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v23Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7138C1[0]),
  (VTBL_ENTRY)&_ZN7S7138C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v28Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v29Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v30Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v31Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v32Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7138C1[0]),
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7138C3_nt3v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7138C1[0]),
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV7S7138C1[];
extern void _ZN7S7138C43v18Ev();
extern void _ZN7S7138C43v19Ev();
extern void _ZN7S7138C43v20Ev();
extern void _ZN7S7138C43v21Ev();
extern void _ZN7S7138C43v22Ev();
extern void _ZN7S7138C43v23Ev();
extern void _ZN7S7138C53v24Ev();
extern void _ZN7S7138C53v25Ev();
extern void _ZN7S7138C53v26Ev();
extern void _ZN7S7138C53v27Ev();
extern void _ZN7S7138C53v28Ev();
extern void _ZN7S7138C53v29Ev();
extern void _ZN7S7138C53v30Ev();
extern void _ZN7S7138C53v31Ev();
extern void _ZN7S7138C53v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7138C5__7S7138C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7138C5[0]),
  (VTBL_ENTRY)&_ZN7S7138C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7138C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v28Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v29Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v30Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v31Ev,
  (VTBL_ENTRY)&_ZN7S7138C53v32Ev,
};
extern void _ZN10S7138C2_nt2v8Ev();
extern void _ZN10S7138C2_nt2v9Ev();
extern void _ZN10S7138C2_nt3v10Ev();
extern void _ZN10S7138C2_nt3v11Ev();
extern void _ZN10S7138C2_nt3v12Ev();
extern void _ZN10S7138C2_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV10S7138C2_nt__7S7138C5__7S7138C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7138C5[0]),
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7138C2_nt3v13Ev,
};
static  VTT_ENTRY vtt_S7138C1[] = {
  {&(_ZTV7S7138C1[6]),  6,100},
  {&(_ZTV7S7138C1[25]),  25,100},
  {&(_ZTV7S7138C1[37]),  37,100},
  {&(_ZTV7S7138C1[65]),  65,100},
  {&(_ZTV7S7138C1[82]),  82,100},
  {&(_ZTV7S7138C1[94]),  94,100},
  {&(_tg__ZTV7S7138C5__7S7138C1[3]),  3,18},
  {&(_tg__ZTV10S7138C2_nt__7S7138C5__7S7138C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S7138C1[];
extern  VTBL_ENTRY _ZTV7S7138C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7138C1[];
Class_Descriptor cd_S7138C1 = {  "S7138C1", // class name
  bases_S7138C1, 7,
  &(vtc_S7138C1[0]), // expected_vtbl_contents
  &(vtt_S7138C1[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7138C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7138C1),100, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7138C1),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20038C2  {
  short s20038c2f0[6];
  virtual void  v2(); // _ZN8S20038C22v2Ev
  virtual void  v3(); // _ZN8S20038C22v3Ev
  ~S20038C2(); // tgen
  S20038C2(); // tgen
};
//SIG(-1 S20038C2) C1{ v1 v2 Fs[6]}


void  S20038C2 ::v2(){vfunc_called(this, "_ZN8S20038C22v2Ev");}
void  S20038C2 ::v3(){vfunc_called(this, "_ZN8S20038C22v3Ev");}
S20038C2 ::~S20038C2(){ note_dtor("S20038C2", this);} // tgen
S20038C2 ::S20038C2(){ note_ctor("S20038C2", this);} // tgen

static void Test_S20038C2()
{
  extern Class_Descriptor cd_S20038C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20038C2, buf);
    S20038C2 *dp, &lv = *(dp=new (buf) S20038C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20038C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20038C2)");
    check_field_offset(lv, s20038c2f0, ABISELECT(8,4), "S20038C2.s20038c2f0");
    test_class_info(&lv, &cd_S20038C2);
    dp->~S20038C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20038C2(Test_S20038C2, "S20038C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20038C2C1Ev();
extern void _ZN8S20038C2D1Ev();
Name_Map name_map_S20038C2[] = {
  NSPAIR(_ZN8S20038C2C1Ev),
  NSPAIR(_ZN8S20038C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20038C2[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
static  VTBL_ENTRY vtc_S20038C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C2[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
};
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
Class_Descriptor cd_S20038C2 = {  "S20038C2", // class name
  0,0,//no base classes
  &(vtc_S20038C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20038C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20038C2),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  S20038C4  : S20038C2 {
  short s20038c4f0[9];
  __tsi64 s20038c4f1;
  virtual void  v4(); // _ZN8S20038C42v4Ev
  virtual void  v5(); // _ZN8S20038C42v5Ev
  virtual void  v6(); // _ZN8S20038C42v6Ev
  virtual void  v7(); // _ZN8S20038C42v7Ev
  virtual void  v8(); // _ZN8S20038C42v8Ev
  virtual void  v9(); // _ZN8S20038C42v9Ev
  ~S20038C4(); // tgen
  S20038C4(); // tgen
};
//SIG(-1 S20038C4) C1{ BC2{ v7 v8 Fs[6]} v1 v2 v3 v4 v5 v6 Fs[9] FL}


void  S20038C4 ::v4(){vfunc_called(this, "_ZN8S20038C42v4Ev");}
void  S20038C4 ::v5(){vfunc_called(this, "_ZN8S20038C42v5Ev");}
void  S20038C4 ::v6(){vfunc_called(this, "_ZN8S20038C42v6Ev");}
void  S20038C4 ::v7(){vfunc_called(this, "_ZN8S20038C42v7Ev");}
void  S20038C4 ::v8(){vfunc_called(this, "_ZN8S20038C42v8Ev");}
void  S20038C4 ::v9(){vfunc_called(this, "_ZN8S20038C42v9Ev");}
S20038C4 ::~S20038C4(){ note_dtor("S20038C4", this);} // tgen
S20038C4 ::S20038C4(){ note_ctor("S20038C4", this);} // tgen

static void Test_S20038C4()
{
  extern Class_Descriptor cd_S20038C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S20038C4, buf);
    S20038C4 *dp, &lv = *(dp=new (buf) S20038C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S20038C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20038C4)");
    check_base_class_offset(lv, (S20038C2*), 0, "S20038C4");
    check_field_offset(lv, s20038c4f0, ABISELECT(20,16), "S20038C4.s20038c4f0");
    check_field_offset(lv, s20038c4f1, ABISELECT(40,36), "S20038C4.s20038c4f1");
    test_class_info(&lv, &cd_S20038C4);
    dp->~S20038C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20038C4(Test_S20038C4, "S20038C4", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN8S20038C4C1Ev();
extern void _ZN8S20038C4D1Ev();
Name_Map name_map_S20038C4[] = {
  NSPAIR(_ZN8S20038C4C1Ev),
  NSPAIR(_ZN8S20038C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
static Base_Class bases_S20038C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20038C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20038C4[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
static  VTBL_ENTRY vtc_S20038C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C4[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
};
extern VTBL_ENTRY _ZTI8S20038C4[];
extern  VTBL_ENTRY _ZTV8S20038C4[];
Class_Descriptor cd_S20038C4 = {  "S20038C4", // class name
  bases_S20038C4, 1,
  &(vtc_S20038C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI8S20038C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20038C4),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  S20038C6  : S20038C2 {
  void *s20038c6f0;
  virtual void  v10(); // _ZN8S20038C63v10Ev
  virtual void  v11(); // _ZN8S20038C63v11Ev
  ~S20038C6(); // tgen
  S20038C6(); // tgen
};
//SIG(-1 S20038C6) C1{ BC2{ v3 v4 Fs[6]} v1 v2 Fp}


void  S20038C6 ::v10(){vfunc_called(this, "_ZN8S20038C63v10Ev");}
void  S20038C6 ::v11(){vfunc_called(this, "_ZN8S20038C63v11Ev");}
S20038C6 ::~S20038C6(){ note_dtor("S20038C6", this);} // tgen
S20038C6 ::S20038C6(){ note_ctor("S20038C6", this);} // tgen

static void Test_S20038C6()
{
  extern Class_Descriptor cd_S20038C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20038C6, buf);
    S20038C6 *dp, &lv = *(dp=new (buf) S20038C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20038C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20038C6)");
    check_base_class_offset(lv, (S20038C2*), 0, "S20038C6");
    check_field_offset(lv, s20038c6f0, ABISELECT(24,16), "S20038C6.s20038c6f0");
    test_class_info(&lv, &cd_S20038C6);
    dp->~S20038C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20038C6(Test_S20038C6, "S20038C6", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20038C6C1Ev();
extern void _ZN8S20038C6D1Ev();
Name_Map name_map_S20038C6[] = {
  NSPAIR(_ZN8S20038C6C1Ev),
  NSPAIR(_ZN8S20038C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
static Base_Class bases_S20038C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20038C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20038C6[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
static  VTBL_ENTRY vtc_S20038C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C6[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
};
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
Class_Descriptor cd_S20038C6 = {  "S20038C6", // class name
  bases_S20038C6, 1,
  &(vtc_S20038C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20038C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20038C6),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  S20038C5  : S20038C6 , virtual S20038C4 , virtual S20038C2 {
  virtual void  v12(); // _ZN8S20038C53v12Ev
  virtual void  v13(); // _ZN8S20038C53v13Ev
  virtual void  v14(); // _ZN8S20038C53v14Ev
  virtual void  v15(); // _ZN8S20038C53v15Ev
  virtual void  v16(); // _ZN8S20038C53v16Ev
  ~S20038C5(); // tgen
  S20038C5(); // tgen
};
//SIG(-1 S20038C5) C1{ BC2{ BC3{ v6 v7 Fs[6]} v8 v9 Fp} VBC4{ BC3 v10 v11 v12 v13 v14 v15 Fs[9] FL} VBC3 v1 v2 v3 v4 v5}


void  S20038C5 ::v12(){vfunc_called(this, "_ZN8S20038C53v12Ev");}
void  S20038C5 ::v13(){vfunc_called(this, "_ZN8S20038C53v13Ev");}
void  S20038C5 ::v14(){vfunc_called(this, "_ZN8S20038C53v14Ev");}
void  S20038C5 ::v15(){vfunc_called(this, "_ZN8S20038C53v15Ev");}
void  S20038C5 ::v16(){vfunc_called(this, "_ZN8S20038C53v16Ev");}
S20038C5 ::~S20038C5(){ note_dtor("S20038C5", this);} // tgen
S20038C5 ::S20038C5(){ note_ctor("S20038C5", this);} // tgen

static void Test_S20038C5()
{
  extern Class_Descriptor cd_S20038C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,21)];
    init_test(&cd_S20038C5, buf);
    S20038C5 *dp, &lv = *(dp=new (buf) S20038C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S20038C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20038C5)");
    check_base_class_offset(lv, (S20038C2*)(S20038C6*), 0, "S20038C5");
    check_base_class_offset(lv, (S20038C6*), 0, "S20038C5");
    check_base_class_offset(lv, (S20038C2*)(S20038C4*), ABISELECT(32,20), "S20038C5");
    check_base_class_offset(lv, (S20038C4*), ABISELECT(32,20), "S20038C5");
    /*is_ambiguous_... S20038C5::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*), ABISELECT(80,64), "S20038C5");
    test_class_info(&lv, &cd_S20038C5);
    dp->~S20038C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20038C5(Test_S20038C5, "S20038C5", ABISELECT(104,80));

#else // __cplusplus

extern void _ZN8S20038C5C1Ev();
extern void _ZN8S20038C5D1Ev();
Name_Map name_map_S20038C5[] = {
  NSPAIR(_ZN8S20038C5C1Ev),
  NSPAIR(_ZN8S20038C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C6;
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C4;
extern VTBL_ENTRY _ZTI8S20038C4[];
extern  VTBL_ENTRY _ZTV8S20038C4[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
static Base_Class bases_S20038C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20038C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20038C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20038C2,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20038C4,    ABISELECT(32,20), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20038C2,    ABISELECT(80,64), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20038C5[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
static  VTBL_ENTRY vtc_S20038C5[] = {
  ABISELECT(80,64),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  0,
  0,
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
};
extern VTBL_ENTRY _ZTV8S20038C5[];
static  VTT_ENTRY vtt_S20038C5[] = {
  {&(_ZTV8S20038C5[4]),  4,37},
  {&(_ZTV8S20038C5[23]),  23,37},
  {&(_ZTV8S20038C5[35]),  35,37},
};
extern VTBL_ENTRY _ZTI8S20038C5[];
extern  VTBL_ENTRY _ZTV8S20038C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C5[];
Class_Descriptor cd_S20038C5 = {  "S20038C5", // class name
  bases_S20038C5, 5,
  &(vtc_S20038C5[0]), // expected_vtbl_contents
  &(vtt_S20038C5[0]), // expected_vtt_contents
  ABISELECT(104,80), // object size
  NSPAIRA(_ZTI8S20038C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20038C5),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20038C5),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20038C7  : S20038C4 , virtual S20038C2 , virtual S20038C5 , virtual S20038C6 {
  int s20038c7f0;
  virtual  ~S20038C7(); // _ZN8S20038C7D2Ev
  virtual void  v17(); // _ZN8S20038C73v17Ev
  S20038C7(); // tgen
};
//SIG(-1 S20038C7) C1{ BC2{ BC3{ v2 v3 Fs[6]} v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC3 VBC4{ BC5{ BC3 v10 v11 Fp} VBC2 VBC3 v12 v13 v14 v15 v16} VBC5 vd v1 Fi}


 S20038C7 ::~S20038C7(){ note_dtor("S20038C7", this);}
void  S20038C7 ::v17(){vfunc_called(this, "_ZN8S20038C73v17Ev");}
S20038C7 ::S20038C7(){ note_ctor("S20038C7", this);} // tgen

static void Test_S20038C7()
{
  extern Class_Descriptor cd_S20038C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,38)];
    init_test(&cd_S20038C7, buf);
    S20038C7 *dp, &lv = *(dp=new (buf) S20038C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,148), "sizeof(S20038C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20038C7)");
    /*is_ambiguous_... S20038C7::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C4*), 0, "S20038C7");
    /*is_ambiguous_... S20038C7::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C4*), 0, "S20038C7");
    /*is_ambiguous_... S20038C7::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*), ABISELECT(56,48), "S20038C7");
    /*is_ambiguous_... S20038C5::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C5*), ABISELECT(56,48), "S20038C7");
    check_base_class_offset(lv, (S20038C2*)(S20038C6*)(S20038C5*), ABISELECT(80,64), "S20038C7");
    check_base_class_offset(lv, (S20038C6*)(S20038C5*), ABISELECT(80,64), "S20038C7");
    /*is_ambiguous_... S20038C7::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C4*), ABISELECT(112,84), "S20038C7");
    check_base_class_offset(lv, (S20038C4*)(S20038C5*), ABISELECT(112,84), "S20038C7");
    check_base_class_offset(lv, (S20038C5*), ABISELECT(80,64), "S20038C7");
    /*is_ambiguous_... S20038C7::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C6*), ABISELECT(160,128), "S20038C7");
    /*is_ambiguous_... S20038C7::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C6*), ABISELECT(160,128), "S20038C7");
    check_field_offset(lv, s20038c7f0, ABISELECT(48,44), "S20038C7.s20038c7f0");
    test_class_info(&lv, &cd_S20038C7);
    dp->~S20038C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20038C7(Test_S20038C7, "S20038C7", ABISELECT(192,148));

#else // __cplusplus

extern void _ZN8S20038C7C1Ev();
extern void _ZN8S20038C7D2Ev();
Name_Map name_map_S20038C7[] = {
  NSPAIR(_ZN8S20038C7C1Ev),
  NSPAIR(_ZN8S20038C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C4;
extern VTBL_ENTRY _ZTI8S20038C4[];
extern  VTBL_ENTRY _ZTV8S20038C4[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C6;
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C4;
extern VTBL_ENTRY _ZTI8S20038C4[];
extern  VTBL_ENTRY _ZTV8S20038C4[];
extern Class_Descriptor cd_S20038C5;
extern VTBL_ENTRY _ZTI8S20038C5[];
extern  VTBL_ENTRY _ZTV8S20038C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C5[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C6;
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
static Base_Class bases_S20038C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20038C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20038C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20038C2,    ABISELECT(56,48), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20038C2,    ABISELECT(80,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20038C6,    ABISELECT(80,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20038C2,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20038C4,    ABISELECT(112,84), //bcp->offset
    45, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20038C5,    ABISELECT(80,64), //bcp->offset
    23, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20038C2,    ABISELECT(160,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20038C6,    ABISELECT(160,128), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20038C7[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void _ZN8S20038C7D1Ev();
extern void _ZN8S20038C7D0Ev();
extern void _ZN8S20038C73v17Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
static  VTBL_ENTRY vtc_S20038C7[] = {
  ABISELECT(160,128),
  ABISELECT(112,84),
  ABISELECT(80,64),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20038C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20038C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20038C73v17Ev,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,20),
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-128),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
};
extern VTBL_ENTRY _ZTV8S20038C7[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C5__8S20038C7[] = {
  ABISELECT(-24,-16),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C4__8S20038C5__8S20038C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C2__A2__8S20038C5__8S20038C7[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
};
static  VTT_ENTRY vtt_S20038C7[] = {
  {&(_ZTV8S20038C7[6]),  6,73},
  {&(_ZTV8S20038C7[21]),  21,73},
  {&(_ZTV8S20038C7[36]),  36,73},
  {&(_ZTV8S20038C7[55]),  55,73},
  {&(_ZTV8S20038C7[69]),  69,73},
  {&(_tg__ZTV8S20038C5__8S20038C7[4]),  4,13},
  {&(_tg__ZTV8S20038C4__8S20038C5__8S20038C7[10]),  10,18},
  {&(_tg__ZTV8S20038C2__A2__8S20038C5__8S20038C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20038C7[];
extern  VTBL_ENTRY _ZTV8S20038C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C7[];
Class_Descriptor cd_S20038C7 = {  "S20038C7", // class name
  bases_S20038C7, 10,
  &(vtc_S20038C7[0]), // expected_vtbl_contents
  &(vtt_S20038C7[0]), // expected_vtt_contents
  ABISELECT(192,148), // object size
  NSPAIRA(_ZTI8S20038C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20038C7),73, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20038C7),8, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20038C3  : S20038C2 , virtual S20038C4 , virtual S20038C5 , virtual S20038C7 , S20038C6 {
  virtual  ~S20038C3(); // _ZN8S20038C3D2Ev
  virtual void  v18(); // _ZN8S20038C33v18Ev
  S20038C3(); // tgen
};
//SIG(-1 S20038C3) C1{ BC2{ v2 v3 Fs[6]} VBC3{ BC2 v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC4{ BC5{ BC2 v10 v11 Fp} VBC3 VBC2 v12 v13 v14 v15 v16} VBC6{ BC3 VBC2 VBC4 VBC5 vd v17 Fi} BC5 vd v1}


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

static void Test_S20038C3()
{
  extern Class_Descriptor cd_S20038C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,47)];
    init_test(&cd_S20038C3, buf);
    S20038C3 *dp, &lv = *(dp=new (buf) S20038C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,184), "sizeof(S20038C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20038C3)");
    /*is_ambiguous_... S20038C3::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*), 0, "S20038C3");
    /*is_ambiguous_... S20038C3::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C4*), ABISELECT(56,36), "S20038C3");
    /*is_ambiguous_... S20038C3::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C4*), ABISELECT(56,36), "S20038C3");
    check_base_class_offset(lv, (S20038C4*)(S20038C5*), ABISELECT(56,36), "S20038C3");
    check_base_class_offset(lv, (S20038C2*)(S20038C6*)(S20038C5*), ABISELECT(104,80), "S20038C3");
    check_base_class_offset(lv, (S20038C6*)(S20038C5*), ABISELECT(104,80), "S20038C3");
    /*is_ambiguous_... S20038C5::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C5*), ABISELECT(136,100), "S20038C3");
    /*is_ambiguous_... S20038C7::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C7*), ABISELECT(136,100), "S20038C3");
    check_base_class_offset(lv, (S20038C5*), ABISELECT(104,80), "S20038C3");
    check_base_class_offset(lv, (S20038C5*)(S20038C7*), ABISELECT(104,80), "S20038C3");
    /*is_ambiguous_... S20038C7::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C4*)(S20038C7*), ABISELECT(160,116), "S20038C3");
    /*is_ambiguous_... S20038C7::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C4*)(S20038C7*), ABISELECT(160,116), "S20038C3");
    /*is_ambiguous_... S20038C3::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C6*), ABISELECT(216,164), "S20038C3");
    /*is_ambiguous_... S20038C7::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C6*)(S20038C7*), ABISELECT(216,164), "S20038C3");
    check_base_class_offset(lv, (S20038C7*), ABISELECT(160,116), "S20038C3");
    /*is_ambiguous_... S20038C3::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C6*), ABISELECT(24,16), "S20038C3");
    /*is_ambiguous_... S20038C3::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C6*), ABISELECT(24,16), "S20038C3");
    test_class_info(&lv, &cd_S20038C3);
    dp->~S20038C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20038C3(Test_S20038C3, "S20038C3", ABISELECT(248,184));

#else // __cplusplus

extern void _ZN8S20038C3C1Ev();
extern void _ZN8S20038C3D2Ev();
Name_Map name_map_S20038C3[] = {
  NSPAIR(_ZN8S20038C3C1Ev),
  NSPAIR(_ZN8S20038C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C4;
extern VTBL_ENTRY _ZTI8S20038C4[];
extern  VTBL_ENTRY _ZTV8S20038C4[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C6;
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C5;
extern VTBL_ENTRY _ZTI8S20038C5[];
extern  VTBL_ENTRY _ZTV8S20038C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C5[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C4;
extern VTBL_ENTRY _ZTI8S20038C4[];
extern  VTBL_ENTRY _ZTV8S20038C4[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C6;
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
extern Class_Descriptor cd_S20038C7;
extern VTBL_ENTRY _ZTI8S20038C7[];
extern  VTBL_ENTRY _ZTV8S20038C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C7[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C6;
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
static Base_Class bases_S20038C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20038C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20038C2,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20038C4,    ABISELECT(56,36), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20038C2,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20038C6,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20038C2,    ABISELECT(136,100), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20038C5,    ABISELECT(104,80), //bcp->offset
    36, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20038C2,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20038C4,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20038C2,    ABISELECT(216,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20038C6,    ABISELECT(216,164), //bcp->offset
    91, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20038C7,    ABISELECT(160,116), //bcp->offset
    64, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20038C2,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20038C6,    ABISELECT(24,16), //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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20038C3[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C3D1Ev();
extern void _ZN8S20038C3D0Ev();
extern void _ZN8S20038C33v18Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void ABISELECT(_ZTv0_n120_N8S20038C3D1Ev,_ZTv0_n60_N8S20038C3D1Ev)();
extern void ABISELECT(_ZThn160_N8S20038C3D1Ev,_ZThn116_N8S20038C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20038C3D0Ev,_ZTv0_n60_N8S20038C3D0Ev)();
extern void ABISELECT(_ZThn160_N8S20038C3D0Ev,_ZThn116_N8S20038C3D0Ev)() __attribute__((weak));
extern void _ZN8S20038C73v17Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
static  VTBL_ENTRY vtc_S20038C3[] = {
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(136,100),
  ABISELECT(104,80),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20038C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20038C33v18Ev,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
  0,
  0,
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20038C3D1Ev,_ZTv0_n60_N8S20038C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20038C3D0Ev,_ZTv0_n60_N8S20038C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20038C73v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
};
extern VTBL_ENTRY _ZTV8S20038C3[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C5__8S20038C3[] = {
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C4__8S20038C5__8S20038C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C2__A2__8S20038C5__8S20038C3[] = {
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void _ZN8S20038C7D1Ev();
extern void _ZN8S20038C7D0Ev();
extern void _ZN8S20038C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C7__8S20038C3[] = {
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20038C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20038C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20038C73v17Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C2__A1__8S20038C7__8S20038C3[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C5__8S20038C7__8S20038C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C4__A1__8S20038C7__8S20038C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,80),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C6__A1__8S20038C7__8S20038C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
};
static  VTT_ENTRY vtt_S20038C3[] = {
  {&(_ZTV8S20038C3[7]),  7,101},
  {&(_ZTV8S20038C3[28]),  28,101},
  {&(_ZTV8S20038C3[49]),  49,101},
  {&(_ZTV8S20038C3[62]),  62,101},
  {&(_ZTV8S20038C3[80]),  80,101},
  {&(_ZTV8S20038C3[97]),  97,101},
  {&(_tg__ZTV8S20038C5__8S20038C3[4]),  4,13},
  {&(_tg__ZTV8S20038C4__8S20038C5__8S20038C3[10]),  10,18},
  {&(_tg__ZTV8S20038C2__A2__8S20038C5__8S20038C3[4]),  4,6},
  {&(_tg__ZTV8S20038C7__8S20038C3[6]),  6,17},
  {&(_tg__ZTV8S20038C2__A1__8S20038C7__8S20038C3[4]),  4,6},
  {&(_tg__ZTV8S20038C5__8S20038C7__8S20038C3[13]),  13,22},
  {&(_tg__ZTV8S20038C4__A1__8S20038C7__8S20038C3[10]),  10,18},
  {&(_tg__ZTV8S20038C6__A1__8S20038C7__8S20038C3[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20038C3[];
extern  VTBL_ENTRY _ZTV8S20038C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C3[];
static VTBL_ENTRY alt_thunk_names158[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20038C3D0Ev,_ZTv0_n60_N8S20038C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20038C3D0Ev,_ZThn116_N8S20038C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20038C3D1Ev,_ZTv0_n60_N8S20038C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20038C3D1Ev,_ZThn116_N8S20038C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20038C3 = {  "S20038C3", // class name
  bases_S20038C3, 14,
  &(vtc_S20038C3[0]), // expected_vtbl_contents
  &(vtt_S20038C3[0]), // expected_vtt_contents
  ABISELECT(248,184), // object size
  NSPAIRA(_ZTI8S20038C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20038C3),101, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20038C3),14, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names158,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20038C1  : virtual S20038C2 , S20038C3 {
  virtual void  v1(); // _ZN8S20038C12v1Ev
  ~S20038C1(); // tgen
  S20038C1(); // tgen
};
//SIG(1 S20038C1) C1{ VBC2{ v2 v3 Fs[6]} BC3{ BC2 VBC4{ BC2 v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC5{ BC6{ BC2 v10 v11 Fp} VBC4 VBC2 v12 v13 v14 v15 v16} VBC7{ BC4 VBC2 VBC5 VBC6 vd v17 Fi} BC6 vd v18} v1}


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

static void Test_S20038C1()
{
  extern Class_Descriptor cd_S20038C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,47)];
    init_test(&cd_S20038C1, buf);
    S20038C1 *dp, &lv = *(dp=new (buf) S20038C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,184), "sizeof(S20038C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20038C1)");
    /*is_ambiguous_... S20038C1::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*), ABISELECT(56,36), "S20038C1");
    /*is_ambiguous_... S20038C5::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C5*), ABISELECT(56,36), "S20038C1");
    /*is_ambiguous_... S20038C7::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C7*), ABISELECT(56,36), "S20038C1");
    /*is_ambiguous_... S20038C3::S20038C2 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C3*), 0, "S20038C1");
    /*is_ambiguous_... S20038C1::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C4*), ABISELECT(80,52), "S20038C1");
    /*is_ambiguous_... S20038C3::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C4*)(S20038C3*), ABISELECT(80,52), "S20038C1");
    check_base_class_offset(lv, (S20038C4*)(S20038C5*), ABISELECT(80,52), "S20038C1");
    check_base_class_offset(lv, (S20038C2*)(S20038C6*)(S20038C5*), ABISELECT(128,96), "S20038C1");
    check_base_class_offset(lv, (S20038C6*)(S20038C5*), ABISELECT(128,96), "S20038C1");
    check_base_class_offset(lv, (S20038C5*)(S20038C3*), ABISELECT(128,96), "S20038C1");
    check_base_class_offset(lv, (S20038C5*)(S20038C7*), ABISELECT(128,96), "S20038C1");
    /*is_ambiguous_... S20038C7::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C4*)(S20038C7*), ABISELECT(160,116), "S20038C1");
    /*is_ambiguous_... S20038C7::S20038C4 */ AMB_check_base_class_offset(lv, (S20038C4*)(S20038C7*), ABISELECT(160,116), "S20038C1");
    /*is_ambiguous_... S20038C1::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C6*), ABISELECT(216,164), "S20038C1");
    /*is_ambiguous_... S20038C7::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C6*)(S20038C7*), ABISELECT(216,164), "S20038C1");
    check_base_class_offset(lv, (S20038C7*)(S20038C3*), ABISELECT(160,116), "S20038C1");
    /*is_ambiguous_... S20038C3::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C2*)(S20038C6*)(S20038C3*), ABISELECT(24,16), "S20038C1");
    /*is_ambiguous_... S20038C3::S20038C6 */ AMB_check_base_class_offset(lv, (S20038C6*)(S20038C3*), ABISELECT(24,16), "S20038C1");
    check_base_class_offset(lv, (S20038C3*), 0, "S20038C1");
    test_class_info(&lv, &cd_S20038C1);
    dp->~S20038C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20038C1(Test_S20038C1, "S20038C1", ABISELECT(248,184));

#else // __cplusplus

extern void _ZN8S20038C1C1Ev();
extern void _ZN8S20038C1D1Ev();
Name_Map name_map_S20038C1[] = {
  NSPAIR(_ZN8S20038C1C1Ev),
  NSPAIR(_ZN8S20038C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C4;
extern VTBL_ENTRY _ZTI8S20038C4[];
extern  VTBL_ENTRY _ZTV8S20038C4[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C6;
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
extern Class_Descriptor cd_S20038C5;
extern VTBL_ENTRY _ZTI8S20038C5[];
extern  VTBL_ENTRY _ZTV8S20038C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C5[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C4;
extern VTBL_ENTRY _ZTI8S20038C4[];
extern  VTBL_ENTRY _ZTV8S20038C4[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C6;
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
extern Class_Descriptor cd_S20038C7;
extern VTBL_ENTRY _ZTI8S20038C7[];
extern  VTBL_ENTRY _ZTV8S20038C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C7[];
extern Class_Descriptor cd_S20038C2;
extern VTBL_ENTRY _ZTI8S20038C2[];
extern  VTBL_ENTRY _ZTV8S20038C2[];
extern Class_Descriptor cd_S20038C6;
extern VTBL_ENTRY _ZTI8S20038C6[];
extern  VTBL_ENTRY _ZTV8S20038C6[];
extern Class_Descriptor cd_S20038C3;
extern VTBL_ENTRY _ZTI8S20038C3[];
extern  VTBL_ENTRY _ZTV8S20038C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C3[];
static Base_Class bases_S20038C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20038C2,    ABISELECT(56,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20038C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20038C2,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20038C4,    ABISELECT(80,52), //bcp->offset
    25, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20038C2,    ABISELECT(128,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20038C6,    ABISELECT(128,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20038C5,    ABISELECT(128,96), //bcp->offset
    43, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20038C2,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20038C4,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20038C2,    ABISELECT(216,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20038C6,    ABISELECT(216,164), //bcp->offset
    92, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20038C7,    ABISELECT(160,116), //bcp->offset
    65, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20038C2,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20038C6,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20038C3,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20038C1[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C1D1Ev();
extern void _ZN8S20038C1D0Ev();
extern void _ZN8S20038C33v18Ev();
extern void _ZN8S20038C12v1Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void ABISELECT(_ZTv0_n120_N8S20038C1D1Ev,_ZTv0_n60_N8S20038C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S20038C1D1Ev,_ZThn116_N8S20038C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20038C1D0Ev,_ZTv0_n60_N8S20038C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S20038C1D0Ev,_ZThn116_N8S20038C1D0Ev)() __attribute__((weak));
extern void _ZN8S20038C73v17Ev();
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
static  VTBL_ENTRY vtc_S20038C1[] = {
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(56,36),
  ABISELECT(128,96),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C1[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20038C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20038C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20038C12v1Ev,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20038C1[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20038C1[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S20038C1[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-60),
  ABISELECT(-48,-44),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI8S20038C1[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-80,-64),
  ABISELECT(-32,-20),
  ABISELECT(-104,-80),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI8S20038C1[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20038C1D1Ev,_ZTv0_n60_N8S20038C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20038C1D0Ev,_ZTv0_n60_N8S20038C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20038C73v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI8S20038C1[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
};
extern VTBL_ENTRY _ZTV8S20038C1[];
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C3D1Ev();
extern void _ZN8S20038C3D0Ev();
extern void _ZN8S20038C33v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C3__8S20038C1[] = {
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(56,36),
  ABISELECT(128,96),
  ABISELECT(80,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20038C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20038C33v18Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C4__8S20038C3__8S20038C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C5__8S20038C3__8S20038C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-60),
  ABISELECT(-48,-44),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C2__A3__8S20038C3__8S20038C1[] = {
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void ABISELECT(_ZTv0_n120_N8S20038C3D1Ev,_ZTv0_n60_N8S20038C3D1Ev)();
extern void ABISELECT(_ZThn160_N8S20038C3D1Ev,_ZThn116_N8S20038C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S20038C3D0Ev,_ZTv0_n60_N8S20038C3D0Ev)();
extern void ABISELECT(_ZThn160_N8S20038C3D0Ev,_ZThn116_N8S20038C3D0Ev)() __attribute__((weak));
extern void _ZN8S20038C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C7__8S20038C3__8S20038C1[] = {
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-80,-64),
  ABISELECT(-32,-20),
  ABISELECT(-104,-80),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20038C3D1Ev,_ZTv0_n60_N8S20038C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S20038C3D0Ev,_ZTv0_n60_N8S20038C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20038C73v17Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C6__A1__8S20038C3__8S20038C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI8S20038C3[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C5__8S20038C1[] = {
  ABISELECT(-72,-60),
  ABISELECT(-48,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C4__8S20038C5__8S20038C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C2__A2__8S20038C5__8S20038C1[] = {
  0,
  0,
  ABISELECT(72,60),
  (VTBL_ENTRY)&(_ZTI8S20038C5[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
extern void _ZN8S20038C7D1Ev();
extern void _ZN8S20038C7D0Ev();
extern void _ZN8S20038C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C7__8S20038C1[] = {
  ABISELECT(56,48),
  ABISELECT(-80,-64),
  ABISELECT(-32,-20),
  ABISELECT(-104,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20038C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20038C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20038C73v17Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C2__A1__8S20038C7__8S20038C1[] = {
  0,
  0,
  ABISELECT(104,80),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
extern void _ZN8S20038C53v12Ev();
extern void _ZN8S20038C53v13Ev();
extern void _ZN8S20038C53v14Ev();
extern void _ZN8S20038C53v15Ev();
extern void _ZN8S20038C53v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C5__8S20038C7__8S20038C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-60),
  ABISELECT(-48,-44),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20038C53v16Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C42v4Ev();
extern void _ZN8S20038C42v5Ev();
extern void _ZN8S20038C42v6Ev();
extern void _ZN8S20038C42v7Ev();
extern void _ZN8S20038C42v8Ev();
extern void _ZN8S20038C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C4__A1__8S20038C7__8S20038C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,64),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20038C42v9Ev,
};
extern void _ZN8S20038C22v2Ev();
extern void _ZN8S20038C22v3Ev();
extern void _ZN8S20038C63v10Ev();
extern void _ZN8S20038C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20038C6__A1__8S20038C7__8S20038C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S20038C7[0]),
  (VTBL_ENTRY)&_ZN8S20038C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20038C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20038C63v11Ev,
};
static  VTT_ENTRY vtt_S20038C1[] = {
  {&(_ZTV8S20038C1[7]),  7,102},
  {&(_tg__ZTV8S20038C3__8S20038C1[7]),  7,12},
  {&(_tg__ZTV8S20038C4__8S20038C3__8S20038C1[10]),  10,18},
  {&(_tg__ZTV8S20038C5__8S20038C3__8S20038C1[13]),  13,22},
  {&(_tg__ZTV8S20038C2__A3__8S20038C3__8S20038C1[4]),  4,6},
  {&(_tg__ZTV8S20038C7__8S20038C3__8S20038C1[16]),  16,27},
  {&(_tg__ZTV8S20038C6__A1__8S20038C3__8S20038C1[6]),  6,10},
  {&(_ZTV8S20038C1[23]),  23,102},
  {&(_ZTV8S20038C1[35]),  35,102},
  {&(_ZTV8S20038C1[56]),  56,102},
  {&(_ZTV8S20038C1[81]),  81,102},
  {&(_ZTV8S20038C1[98]),  98,102},
  {&(_tg__ZTV8S20038C5__8S20038C1[4]),  4,13},
  {&(_tg__ZTV8S20038C4__8S20038C5__8S20038C1[10]),  10,18},
  {&(_tg__ZTV8S20038C2__A2__8S20038C5__8S20038C1[4]),  4,6},
  {&(_tg__ZTV8S20038C7__8S20038C1[6]),  6,17},
  {&(_tg__ZTV8S20038C2__A1__8S20038C7__8S20038C1[4]),  4,6},
  {&(_tg__ZTV8S20038C5__8S20038C7__8S20038C1[13]),  13,22},
  {&(_tg__ZTV8S20038C4__A1__8S20038C7__8S20038C1[10]),  10,18},
  {&(_tg__ZTV8S20038C6__A1__8S20038C7__8S20038C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20038C1[];
extern  VTBL_ENTRY _ZTV8S20038C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20038C1[];
static VTBL_ENTRY alt_thunk_names159[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20038C3D0Ev,_ZTv0_n60_N8S20038C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20038C3D0Ev,_ZThn116_N8S20038C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20038C3D1Ev,_ZTv0_n60_N8S20038C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20038C3D1Ev,_ZThn116_N8S20038C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20038C1D0Ev,_ZTv0_n60_N8S20038C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20038C1D0Ev,_ZThn116_N8S20038C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S20038C1D1Ev,_ZTv0_n60_N8S20038C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20038C1D1Ev,_ZThn116_N8S20038C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20038C1 = {  "S20038C1", // class name
  bases_S20038C1, 15,
  &(vtc_S20038C1[0]), // expected_vtbl_contents
  &(vtt_S20038C1[0]), // expected_vtt_contents
  ABISELECT(248,184), // object size
  NSPAIRA(_ZTI8S20038C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20038C1),102, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20038C1),20, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names159,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3060C3  {
  short s3060c3f0[6];
  virtual void  v2(); // _ZN7S3060C32v2Ev
  virtual void  v3(); // _ZN7S3060C32v3Ev
  ~S3060C3(); // tgen
  S3060C3(); // tgen
};
//SIG(-1 S3060C3) C1{ v1 v2 Fs[6]}


void  S3060C3 ::v2(){vfunc_called(this, "_ZN7S3060C32v2Ev");}
void  S3060C3 ::v3(){vfunc_called(this, "_ZN7S3060C32v3Ev");}
S3060C3 ::~S3060C3(){ note_dtor("S3060C3", this);} // tgen
S3060C3 ::S3060C3(){ note_ctor("S3060C3", this);} // tgen

static void Test_S3060C3()
{
  extern Class_Descriptor cd_S3060C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3060C3, buf);
    S3060C3 *dp, &lv = *(dp=new (buf) S3060C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3060C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3060C3)");
    check_field_offset(lv, s3060c3f0, ABISELECT(8,4), "S3060C3.s3060c3f0");
    test_class_info(&lv, &cd_S3060C3);
    dp->~S3060C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3060C3(Test_S3060C3, "S3060C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3060C3C1Ev();
extern void _ZN7S3060C3D1Ev();
Name_Map name_map_S3060C3[] = {
  NSPAIR(_ZN7S3060C3C1Ev),
  NSPAIR(_ZN7S3060C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3060C3[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
static  VTBL_ENTRY vtc_S3060C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C3[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
Class_Descriptor cd_S3060C3 = {  "S3060C3", // class name
  0,0,//no base classes
  &(vtc_S3060C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3060C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3060C3),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  S3060C4  : S3060C3 {
  short s3060c4f0[9];
  __tsi64 s3060c4f1;
  virtual void  v4(); // _ZN7S3060C42v4Ev
  virtual void  v5(); // _ZN7S3060C42v5Ev
  virtual void  v6(); // _ZN7S3060C42v6Ev
  virtual void  v7(); // _ZN7S3060C42v7Ev
  virtual void  v8(); // _ZN7S3060C42v8Ev
  virtual void  v9(); // _ZN7S3060C42v9Ev
  ~S3060C4(); // tgen
  S3060C4(); // tgen
};
//SIG(-1 S3060C4) C1{ BC2{ v7 v8 Fs[6]} v1 v2 v3 v4 v5 v6 Fs[9] FL}


void  S3060C4 ::v4(){vfunc_called(this, "_ZN7S3060C42v4Ev");}
void  S3060C4 ::v5(){vfunc_called(this, "_ZN7S3060C42v5Ev");}
void  S3060C4 ::v6(){vfunc_called(this, "_ZN7S3060C42v6Ev");}
void  S3060C4 ::v7(){vfunc_called(this, "_ZN7S3060C42v7Ev");}
void  S3060C4 ::v8(){vfunc_called(this, "_ZN7S3060C42v8Ev");}
void  S3060C4 ::v9(){vfunc_called(this, "_ZN7S3060C42v9Ev");}
S3060C4 ::~S3060C4(){ note_dtor("S3060C4", this);} // tgen
S3060C4 ::S3060C4(){ note_ctor("S3060C4", this);} // tgen

static void Test_S3060C4()
{
  extern Class_Descriptor cd_S3060C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S3060C4, buf);
    S3060C4 *dp, &lv = *(dp=new (buf) S3060C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S3060C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3060C4)");
    check_base_class_offset(lv, (S3060C3*), 0, "S3060C4");
    check_field_offset(lv, s3060c4f0, ABISELECT(20,16), "S3060C4.s3060c4f0");
    check_field_offset(lv, s3060c4f1, ABISELECT(40,36), "S3060C4.s3060c4f1");
    test_class_info(&lv, &cd_S3060C4);
    dp->~S3060C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3060C4(Test_S3060C4, "S3060C4", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN7S3060C4C1Ev();
extern void _ZN7S3060C4D1Ev();
Name_Map name_map_S3060C4[] = {
  NSPAIR(_ZN7S3060C4C1Ev),
  NSPAIR(_ZN7S3060C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
static Base_Class bases_S3060C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3060C4[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
static  VTBL_ENTRY vtc_S3060C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C4[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S3060C4[];
extern  VTBL_ENTRY _ZTV7S3060C4[];
Class_Descriptor cd_S3060C4 = {  "S3060C4", // class name
  bases_S3060C4, 1,
  &(vtc_S3060C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI7S3060C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3060C4),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  S3060C6  : S3060C3 {
  void *s3060c6f0;
  virtual void  v10(); // _ZN7S3060C63v10Ev
  virtual void  v11(); // _ZN7S3060C63v11Ev
  ~S3060C6(); // tgen
  S3060C6(); // tgen
};
//SIG(-1 S3060C6) C1{ BC2{ v3 v4 Fs[6]} v1 v2 Fp}


void  S3060C6 ::v10(){vfunc_called(this, "_ZN7S3060C63v10Ev");}
void  S3060C6 ::v11(){vfunc_called(this, "_ZN7S3060C63v11Ev");}
S3060C6 ::~S3060C6(){ note_dtor("S3060C6", this);} // tgen
S3060C6 ::S3060C6(){ note_ctor("S3060C6", this);} // tgen

static void Test_S3060C6()
{
  extern Class_Descriptor cd_S3060C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3060C6, buf);
    S3060C6 *dp, &lv = *(dp=new (buf) S3060C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3060C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3060C6)");
    check_base_class_offset(lv, (S3060C3*), 0, "S3060C6");
    check_field_offset(lv, s3060c6f0, ABISELECT(24,16), "S3060C6.s3060c6f0");
    test_class_info(&lv, &cd_S3060C6);
    dp->~S3060C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3060C6(Test_S3060C6, "S3060C6", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3060C6C1Ev();
extern void _ZN7S3060C6D1Ev();
Name_Map name_map_S3060C6[] = {
  NSPAIR(_ZN7S3060C6C1Ev),
  NSPAIR(_ZN7S3060C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
static Base_Class bases_S3060C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3060C6[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
static  VTBL_ENTRY vtc_S3060C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C6[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
};
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
Class_Descriptor cd_S3060C6 = {  "S3060C6", // class name
  bases_S3060C6, 1,
  &(vtc_S3060C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3060C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3060C6),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  S3060C5  : S3060C6 , virtual S3060C4 , virtual S3060C3 {
  virtual void  v12(); // _ZN7S3060C53v12Ev
  virtual void  v13(); // _ZN7S3060C53v13Ev
  virtual void  v14(); // _ZN7S3060C53v14Ev
  virtual void  v15(); // _ZN7S3060C53v15Ev
  virtual void  v16(); // _ZN7S3060C53v16Ev
  ~S3060C5(); // tgen
  S3060C5(); // tgen
};
//SIG(-1 S3060C5) C1{ BC2{ BC3{ v6 v7 Fs[6]} v8 v9 Fp} VBC4{ BC3 v10 v11 v12 v13 v14 v15 Fs[9] FL} VBC3 v1 v2 v3 v4 v5}


void  S3060C5 ::v12(){vfunc_called(this, "_ZN7S3060C53v12Ev");}
void  S3060C5 ::v13(){vfunc_called(this, "_ZN7S3060C53v13Ev");}
void  S3060C5 ::v14(){vfunc_called(this, "_ZN7S3060C53v14Ev");}
void  S3060C5 ::v15(){vfunc_called(this, "_ZN7S3060C53v15Ev");}
void  S3060C5 ::v16(){vfunc_called(this, "_ZN7S3060C53v16Ev");}
S3060C5 ::~S3060C5(){ note_dtor("S3060C5", this);} // tgen
S3060C5 ::S3060C5(){ note_ctor("S3060C5", this);} // tgen

static void Test_S3060C5()
{
  extern Class_Descriptor cd_S3060C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,21)];
    init_test(&cd_S3060C5, buf);
    S3060C5 *dp, &lv = *(dp=new (buf) S3060C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S3060C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3060C5)");
    check_base_class_offset(lv, (S3060C3*)(S3060C6*), 0, "S3060C5");
    check_base_class_offset(lv, (S3060C6*), 0, "S3060C5");
    check_base_class_offset(lv, (S3060C3*)(S3060C4*), ABISELECT(32,20), "S3060C5");
    check_base_class_offset(lv, (S3060C4*), ABISELECT(32,20), "S3060C5");
    /*is_ambiguous_... S3060C5::S3060C3 */ AMB_check_base_class_offset(lv, (S3060C3*), ABISELECT(80,64), "S3060C5");
    test_class_info(&lv, &cd_S3060C5);
    dp->~S3060C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3060C5(Test_S3060C5, "S3060C5", ABISELECT(104,80));

#else // __cplusplus

extern void _ZN7S3060C5C1Ev();
extern void _ZN7S3060C5D1Ev();
Name_Map name_map_S3060C5[] = {
  NSPAIR(_ZN7S3060C5C1Ev),
  NSPAIR(_ZN7S3060C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C6;
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C4;
extern VTBL_ENTRY _ZTI7S3060C4[];
extern  VTBL_ENTRY _ZTV7S3060C4[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
static Base_Class bases_S3060C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3060C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3060C3,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3060C4,    ABISELECT(32,20), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3060C3,    ABISELECT(80,64), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3060C5[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
static  VTBL_ENTRY vtc_S3060C5[] = {
  ABISELECT(80,64),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  0,
  0,
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
};
extern VTBL_ENTRY _ZTV7S3060C5[];
static  VTT_ENTRY vtt_S3060C5[] = {
  {&(_ZTV7S3060C5[4]),  4,37},
  {&(_ZTV7S3060C5[23]),  23,37},
  {&(_ZTV7S3060C5[35]),  35,37},
};
extern VTBL_ENTRY _ZTI7S3060C5[];
extern  VTBL_ENTRY _ZTV7S3060C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C5[];
Class_Descriptor cd_S3060C5 = {  "S3060C5", // class name
  bases_S3060C5, 5,
  &(vtc_S3060C5[0]), // expected_vtbl_contents
  &(vtt_S3060C5[0]), // expected_vtt_contents
  ABISELECT(104,80), // object size
  NSPAIRA(_ZTI7S3060C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3060C5),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3060C5),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3060C7  : S3060C4 , virtual S3060C3 , virtual S3060C5 , virtual S3060C6 {
  int s3060c7f0;
  virtual  ~S3060C7(); // _ZN7S3060C7D2Ev
  virtual void  v17(); // _ZN7S3060C73v17Ev
  S3060C7(); // tgen
};
//SIG(-1 S3060C7) C1{ BC2{ BC3{ v2 v3 Fs[6]} v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC3 VBC4{ BC5{ BC3 v10 v11 Fp} VBC2 VBC3 v12 v13 v14 v15 v16} VBC5 vd v1 Fi}


 S3060C7 ::~S3060C7(){ note_dtor("S3060C7", this);}
void  S3060C7 ::v17(){vfunc_called(this, "_ZN7S3060C73v17Ev");}
S3060C7 ::S3060C7(){ note_ctor("S3060C7", this);} // tgen

static void Test_S3060C7()
{
  extern Class_Descriptor cd_S3060C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,38)];
    init_test(&cd_S3060C7, buf);
    S3060C7 *dp, &lv = *(dp=new (buf) S3060C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,148), "sizeof(S3060C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3060C7)");
    /*is_ambiguous_... S3060C7::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C4*), 0, "S3060C7");
    /*is_ambiguous_... S3060C7::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C4*), 0, "S3060C7");
    /*is_ambiguous_... S3060C7::S3060C3 */ AMB_check_base_class_offset(lv, (S3060C3*), ABISELECT(56,48), "S3060C7");
    /*is_ambiguous_... S3060C5::S3060C3 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C5*), ABISELECT(56,48), "S3060C7");
    check_base_class_offset(lv, (S3060C3*)(S3060C6*)(S3060C5*), ABISELECT(80,64), "S3060C7");
    check_base_class_offset(lv, (S3060C6*)(S3060C5*), ABISELECT(80,64), "S3060C7");
    /*is_ambiguous_... S3060C7::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C4*), ABISELECT(112,84), "S3060C7");
    check_base_class_offset(lv, (S3060C4*)(S3060C5*), ABISELECT(112,84), "S3060C7");
    check_base_class_offset(lv, (S3060C5*), ABISELECT(80,64), "S3060C7");
    /*is_ambiguous_... S3060C7::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C6*), ABISELECT(160,128), "S3060C7");
    /*is_ambiguous_... S3060C7::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C6*), ABISELECT(160,128), "S3060C7");
    check_field_offset(lv, s3060c7f0, ABISELECT(48,44), "S3060C7.s3060c7f0");
    test_class_info(&lv, &cd_S3060C7);
    dp->~S3060C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3060C7(Test_S3060C7, "S3060C7", ABISELECT(192,148));

#else // __cplusplus

extern void _ZN7S3060C7C1Ev();
extern void _ZN7S3060C7D2Ev();
Name_Map name_map_S3060C7[] = {
  NSPAIR(_ZN7S3060C7C1Ev),
  NSPAIR(_ZN7S3060C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C4;
extern VTBL_ENTRY _ZTI7S3060C4[];
extern  VTBL_ENTRY _ZTV7S3060C4[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C6;
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C4;
extern VTBL_ENTRY _ZTI7S3060C4[];
extern  VTBL_ENTRY _ZTV7S3060C4[];
extern Class_Descriptor cd_S3060C5;
extern VTBL_ENTRY _ZTI7S3060C5[];
extern  VTBL_ENTRY _ZTV7S3060C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C5[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C6;
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
static Base_Class bases_S3060C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3060C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3060C3,    ABISELECT(56,48), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3060C3,    ABISELECT(80,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3060C6,    ABISELECT(80,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3060C3,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3060C4,    ABISELECT(112,84), //bcp->offset
    45, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3060C5,    ABISELECT(80,64), //bcp->offset
    23, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3060C3,    ABISELECT(160,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3060C6,    ABISELECT(160,128), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3060C7[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void _ZN7S3060C7D1Ev();
extern void _ZN7S3060C7D0Ev();
extern void _ZN7S3060C73v17Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
static  VTBL_ENTRY vtc_S3060C7[] = {
  ABISELECT(160,128),
  ABISELECT(112,84),
  ABISELECT(80,64),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3060C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3060C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3060C73v17Ev,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(32,20),
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-128),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
};
extern VTBL_ENTRY _ZTV7S3060C7[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C5__7S3060C7[] = {
  ABISELECT(-24,-16),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C4__7S3060C5__7S3060C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C3__A2__7S3060C5__7S3060C7[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
};
static  VTT_ENTRY vtt_S3060C7[] = {
  {&(_ZTV7S3060C7[6]),  6,73},
  {&(_ZTV7S3060C7[21]),  21,73},
  {&(_ZTV7S3060C7[36]),  36,73},
  {&(_ZTV7S3060C7[55]),  55,73},
  {&(_ZTV7S3060C7[69]),  69,73},
  {&(_tg__ZTV7S3060C5__7S3060C7[4]),  4,13},
  {&(_tg__ZTV7S3060C4__7S3060C5__7S3060C7[10]),  10,18},
  {&(_tg__ZTV7S3060C3__A2__7S3060C5__7S3060C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3060C7[];
extern  VTBL_ENTRY _ZTV7S3060C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C7[];
Class_Descriptor cd_S3060C7 = {  "S3060C7", // class name
  bases_S3060C7, 10,
  &(vtc_S3060C7[0]), // expected_vtbl_contents
  &(vtt_S3060C7[0]), // expected_vtt_contents
  ABISELECT(192,148), // object size
  NSPAIRA(_ZTI7S3060C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3060C7),73, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3060C7),8, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3060C2  : S3060C3 , virtual S3060C4 , virtual S3060C5 , virtual S3060C7 , S3060C6 {
  virtual  ~S3060C2(); // _ZN7S3060C2D2Ev
  virtual void  v18(); // _ZN7S3060C23v18Ev
  S3060C2(); // tgen
};
//SIG(-1 S3060C2) C1{ BC2{ v2 v3 Fs[6]} VBC3{ BC2 v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC4{ BC5{ BC2 v10 v11 Fp} VBC3 VBC2 v12 v13 v14 v15 v16} VBC6{ BC3 VBC2 VBC4 VBC5 vd v17 Fi} BC5 vd v1}


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

static void Test_S3060C2()
{
  extern Class_Descriptor cd_S3060C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,47)];
    init_test(&cd_S3060C2, buf);
    S3060C2 *dp, &lv = *(dp=new (buf) S3060C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,184), "sizeof(S3060C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3060C2)");
    /*is_ambiguous_... S3060C2::S3060C3 */ AMB_check_base_class_offset(lv, (S3060C3*), 0, "S3060C2");
    /*is_ambiguous_... S3060C2::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C4*), ABISELECT(56,36), "S3060C2");
    /*is_ambiguous_... S3060C2::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C4*), ABISELECT(56,36), "S3060C2");
    check_base_class_offset(lv, (S3060C4*)(S3060C5*), ABISELECT(56,36), "S3060C2");
    check_base_class_offset(lv, (S3060C3*)(S3060C6*)(S3060C5*), ABISELECT(104,80), "S3060C2");
    check_base_class_offset(lv, (S3060C6*)(S3060C5*), ABISELECT(104,80), "S3060C2");
    /*is_ambiguous_... S3060C5::S3060C3 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C5*), ABISELECT(136,100), "S3060C2");
    /*is_ambiguous_... S3060C7::S3060C3 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C7*), ABISELECT(136,100), "S3060C2");
    check_base_class_offset(lv, (S3060C5*), ABISELECT(104,80), "S3060C2");
    check_base_class_offset(lv, (S3060C5*)(S3060C7*), ABISELECT(104,80), "S3060C2");
    /*is_ambiguous_... S3060C7::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C4*)(S3060C7*), ABISELECT(160,116), "S3060C2");
    /*is_ambiguous_... S3060C7::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C4*)(S3060C7*), ABISELECT(160,116), "S3060C2");
    /*is_ambiguous_... S3060C2::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C6*), ABISELECT(216,164), "S3060C2");
    /*is_ambiguous_... S3060C7::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C6*)(S3060C7*), ABISELECT(216,164), "S3060C2");
    check_base_class_offset(lv, (S3060C7*), ABISELECT(160,116), "S3060C2");
    /*is_ambiguous_... S3060C2::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C6*), ABISELECT(24,16), "S3060C2");
    /*is_ambiguous_... S3060C2::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C6*), ABISELECT(24,16), "S3060C2");
    test_class_info(&lv, &cd_S3060C2);
    dp->~S3060C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3060C2(Test_S3060C2, "S3060C2", ABISELECT(248,184));

#else // __cplusplus

extern void _ZN7S3060C2C1Ev();
extern void _ZN7S3060C2D2Ev();
Name_Map name_map_S3060C2[] = {
  NSPAIR(_ZN7S3060C2C1Ev),
  NSPAIR(_ZN7S3060C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C4;
extern VTBL_ENTRY _ZTI7S3060C4[];
extern  VTBL_ENTRY _ZTV7S3060C4[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C6;
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C5;
extern VTBL_ENTRY _ZTI7S3060C5[];
extern  VTBL_ENTRY _ZTV7S3060C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C5[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C4;
extern VTBL_ENTRY _ZTI7S3060C4[];
extern  VTBL_ENTRY _ZTV7S3060C4[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C6;
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
extern Class_Descriptor cd_S3060C7;
extern VTBL_ENTRY _ZTI7S3060C7[];
extern  VTBL_ENTRY _ZTV7S3060C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C7[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C6;
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
static Base_Class bases_S3060C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3060C3,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3060C4,    ABISELECT(56,36), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3060C3,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3060C6,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3060C3,    ABISELECT(136,100), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3060C5,    ABISELECT(104,80), //bcp->offset
    36, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3060C3,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3060C4,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3060C3,    ABISELECT(216,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3060C6,    ABISELECT(216,164), //bcp->offset
    91, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3060C7,    ABISELECT(160,116), //bcp->offset
    64, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3060C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3060C6,    ABISELECT(24,16), //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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3060C2[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C2D1Ev();
extern void _ZN7S3060C2D0Ev();
extern void _ZN7S3060C23v18Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void ABISELECT(_ZTv0_n120_N7S3060C2D1Ev,_ZTv0_n60_N7S3060C2D1Ev)();
extern void ABISELECT(_ZThn160_N7S3060C2D1Ev,_ZThn116_N7S3060C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S3060C2D0Ev,_ZTv0_n60_N7S3060C2D0Ev)();
extern void ABISELECT(_ZThn160_N7S3060C2D0Ev,_ZThn116_N7S3060C2D0Ev)() __attribute__((weak));
extern void _ZN7S3060C73v17Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
static  VTBL_ENTRY vtc_S3060C2[] = {
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(136,100),
  ABISELECT(104,80),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3060C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3060C23v18Ev,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
  0,
  0,
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S3060C2D1Ev,_ZTv0_n60_N7S3060C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S3060C2D0Ev,_ZTv0_n60_N7S3060C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3060C73v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
};
extern VTBL_ENTRY _ZTV7S3060C2[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C5__7S3060C2[] = {
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C4__7S3060C5__7S3060C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C3__A2__7S3060C5__7S3060C2[] = {
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void _ZN7S3060C7D1Ev();
extern void _ZN7S3060C7D0Ev();
extern void _ZN7S3060C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C7__7S3060C2[] = {
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3060C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3060C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3060C73v17Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C3__A1__7S3060C7__7S3060C2[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C5__7S3060C7__7S3060C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C4__A1__7S3060C7__7S3060C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,80),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C6__A1__7S3060C7__7S3060C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
};
static  VTT_ENTRY vtt_S3060C2[] = {
  {&(_ZTV7S3060C2[7]),  7,101},
  {&(_ZTV7S3060C2[28]),  28,101},
  {&(_ZTV7S3060C2[49]),  49,101},
  {&(_ZTV7S3060C2[62]),  62,101},
  {&(_ZTV7S3060C2[80]),  80,101},
  {&(_ZTV7S3060C2[97]),  97,101},
  {&(_tg__ZTV7S3060C5__7S3060C2[4]),  4,13},
  {&(_tg__ZTV7S3060C4__7S3060C5__7S3060C2[10]),  10,18},
  {&(_tg__ZTV7S3060C3__A2__7S3060C5__7S3060C2[4]),  4,6},
  {&(_tg__ZTV7S3060C7__7S3060C2[6]),  6,17},
  {&(_tg__ZTV7S3060C3__A1__7S3060C7__7S3060C2[4]),  4,6},
  {&(_tg__ZTV7S3060C5__7S3060C7__7S3060C2[13]),  13,22},
  {&(_tg__ZTV7S3060C4__A1__7S3060C7__7S3060C2[10]),  10,18},
  {&(_tg__ZTV7S3060C6__A1__7S3060C7__7S3060C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3060C2[];
extern  VTBL_ENTRY _ZTV7S3060C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C2[];
static VTBL_ENTRY alt_thunk_names160[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S3060C2D0Ev,_ZTv0_n60_N7S3060C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3060C2D0Ev,_ZThn116_N7S3060C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S3060C2D1Ev,_ZTv0_n60_N7S3060C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3060C2D1Ev,_ZThn116_N7S3060C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3060C2 = {  "S3060C2", // class name
  bases_S3060C2, 14,
  &(vtc_S3060C2[0]), // expected_vtbl_contents
  &(vtt_S3060C2[0]), // expected_vtt_contents
  ABISELECT(248,184), // object size
  NSPAIRA(_ZTI7S3060C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3060C2),101, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3060C2),14, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names160,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3060C1  : S3060C2 {
  virtual  ~S3060C1(); // _ZN7S3060C1D2Ev
  virtual void  v1(); // _ZN7S3060C12v1Ev
  S3060C1(); // tgen
};
//SIG(1 S3060C1) C1{ BC2{ BC3{ v2 v3 Fs[6]} VBC4{ BC3 v4 v5 v6 v7 v8 v9 Fs[9] FL} VBC5{ BC6{ BC3 v10 v11 Fp} VBC4 VBC3 v12 v13 v14 v15 v16} VBC7{ BC4 VBC3 VBC5 VBC6 vd v17 Fi} BC6 vd v18} vd v1}


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

static void Test_S3060C1()
{
  extern Class_Descriptor cd_S3060C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,47)];
    init_test(&cd_S3060C1, buf);
    S3060C1 *dp, &lv = *(dp=new (buf) S3060C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,184), "sizeof(S3060C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3060C1)");
    /*is_ambiguous_... S3060C2::S3060C3 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C2*), 0, "S3060C1");
    /*is_ambiguous_... S3060C1::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C4*), ABISELECT(56,36), "S3060C1");
    /*is_ambiguous_... S3060C2::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C4*)(S3060C2*), ABISELECT(56,36), "S3060C1");
    check_base_class_offset(lv, (S3060C4*)(S3060C5*), ABISELECT(56,36), "S3060C1");
    check_base_class_offset(lv, (S3060C3*)(S3060C6*)(S3060C5*), ABISELECT(104,80), "S3060C1");
    check_base_class_offset(lv, (S3060C6*)(S3060C5*), ABISELECT(104,80), "S3060C1");
    /*is_ambiguous_... S3060C5::S3060C3 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C5*), ABISELECT(136,100), "S3060C1");
    /*is_ambiguous_... S3060C7::S3060C3 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C7*), ABISELECT(136,100), "S3060C1");
    check_base_class_offset(lv, (S3060C5*)(S3060C2*), ABISELECT(104,80), "S3060C1");
    check_base_class_offset(lv, (S3060C5*)(S3060C7*), ABISELECT(104,80), "S3060C1");
    /*is_ambiguous_... S3060C7::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C4*)(S3060C7*), ABISELECT(160,116), "S3060C1");
    /*is_ambiguous_... S3060C7::S3060C4 */ AMB_check_base_class_offset(lv, (S3060C4*)(S3060C7*), ABISELECT(160,116), "S3060C1");
    /*is_ambiguous_... S3060C1::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C6*), ABISELECT(216,164), "S3060C1");
    /*is_ambiguous_... S3060C7::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C6*)(S3060C7*), ABISELECT(216,164), "S3060C1");
    check_base_class_offset(lv, (S3060C7*)(S3060C2*), ABISELECT(160,116), "S3060C1");
    /*is_ambiguous_... S3060C2::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C3*)(S3060C6*)(S3060C2*), ABISELECT(24,16), "S3060C1");
    /*is_ambiguous_... S3060C2::S3060C6 */ AMB_check_base_class_offset(lv, (S3060C6*)(S3060C2*), ABISELECT(24,16), "S3060C1");
    check_base_class_offset(lv, (S3060C2*), 0, "S3060C1");
    test_class_info(&lv, &cd_S3060C1);
    dp->~S3060C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3060C1(Test_S3060C1, "S3060C1", ABISELECT(248,184));

#else // __cplusplus

extern void _ZN7S3060C1C1Ev();
extern void _ZN7S3060C1D2Ev();
Name_Map name_map_S3060C1[] = {
  NSPAIR(_ZN7S3060C1C1Ev),
  NSPAIR(_ZN7S3060C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C4;
extern VTBL_ENTRY _ZTI7S3060C4[];
extern  VTBL_ENTRY _ZTV7S3060C4[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C6;
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C5;
extern VTBL_ENTRY _ZTI7S3060C5[];
extern  VTBL_ENTRY _ZTV7S3060C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C5[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C4;
extern VTBL_ENTRY _ZTI7S3060C4[];
extern  VTBL_ENTRY _ZTV7S3060C4[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C6;
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
extern Class_Descriptor cd_S3060C7;
extern VTBL_ENTRY _ZTI7S3060C7[];
extern  VTBL_ENTRY _ZTV7S3060C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C7[];
extern Class_Descriptor cd_S3060C3;
extern VTBL_ENTRY _ZTI7S3060C3[];
extern  VTBL_ENTRY _ZTV7S3060C3[];
extern Class_Descriptor cd_S3060C6;
extern VTBL_ENTRY _ZTI7S3060C6[];
extern  VTBL_ENTRY _ZTV7S3060C6[];
extern Class_Descriptor cd_S3060C2;
extern VTBL_ENTRY _ZTI7S3060C2[];
extern  VTBL_ENTRY _ZTV7S3060C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C2[];
static Base_Class bases_S3060C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3060C3,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3060C4,    ABISELECT(56,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3060C3,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3060C6,    ABISELECT(104,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3060C3,    ABISELECT(136,100), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3060C5,    ABISELECT(104,80), //bcp->offset
    37, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3060C3,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3060C4,    ABISELECT(160,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3060C3,    ABISELECT(216,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3060C6,    ABISELECT(216,164), //bcp->offset
    92, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3060C7,    ABISELECT(160,116), //bcp->offset
    65, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3060C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3060C6,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3060C2,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3060C1[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C1D1Ev();
extern void _ZN7S3060C1D0Ev();
extern void _ZN7S3060C23v18Ev();
extern void _ZN7S3060C12v1Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void ABISELECT(_ZTv0_n120_N7S3060C1D1Ev,_ZTv0_n60_N7S3060C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S3060C1D1Ev,_ZThn116_N7S3060C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S3060C1D0Ev,_ZTv0_n60_N7S3060C1D0Ev)();
extern void ABISELECT(_ZThn160_N7S3060C1D0Ev,_ZThn116_N7S3060C1D0Ev)() __attribute__((weak));
extern void _ZN7S3060C73v17Ev();
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
static  VTBL_ENTRY vtc_S3060C1[] = {
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(136,100),
  ABISELECT(104,80),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C1[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3060C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3060C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3060C12v1Ev,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3060C1[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3060C1[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S3060C1[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
  0,
  0,
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S3060C1[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI7S3060C1[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S3060C1D1Ev,_ZTv0_n60_N7S3060C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S3060C1D0Ev,_ZTv0_n60_N7S3060C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3060C73v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI7S3060C1[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
};
extern VTBL_ENTRY _ZTV7S3060C1[];
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C2D1Ev();
extern void _ZN7S3060C2D0Ev();
extern void _ZN7S3060C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C2__7S3060C1[] = {
  ABISELECT(216,164),
  ABISELECT(160,116),
  ABISELECT(136,100),
  ABISELECT(104,80),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3060C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3060C23v18Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C4__7S3060C2__7S3060C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C5__7S3060C2__7S3060C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C3__A3__7S3060C2__7S3060C1[] = {
  0,
  0,
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void ABISELECT(_ZTv0_n120_N7S3060C2D1Ev,_ZTv0_n60_N7S3060C2D1Ev)();
extern void ABISELECT(_ZThn160_N7S3060C2D1Ev,_ZThn116_N7S3060C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S3060C2D0Ev,_ZTv0_n60_N7S3060C2D0Ev)();
extern void ABISELECT(_ZThn160_N7S3060C2D0Ev,_ZThn116_N7S3060C2D0Ev)() __attribute__((weak));
extern void _ZN7S3060C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C7__7S3060C2__7S3060C1[] = {
  0,
  ABISELECT(-160,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  ABISELECT(-160,-116),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S3060C2D1Ev,_ZTv0_n60_N7S3060C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S3060C2D0Ev,_ZTv0_n60_N7S3060C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3060C73v17Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C6__A1__7S3060C2__7S3060C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI7S3060C2[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C5__7S3060C1[] = {
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C4__7S3060C5__7S3060C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C3__A2__7S3060C5__7S3060C1[] = {
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3060C5[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
extern void _ZN7S3060C7D1Ev();
extern void _ZN7S3060C7D0Ev();
extern void _ZN7S3060C73v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C7__7S3060C1[] = {
  ABISELECT(56,48),
  ABISELECT(-104,-80),
  ABISELECT(-56,-36),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3060C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3060C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3060C73v17Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C3__A1__7S3060C7__7S3060C1[] = {
  0,
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
extern void _ZN7S3060C53v12Ev();
extern void _ZN7S3060C53v13Ev();
extern void _ZN7S3060C53v14Ev();
extern void _ZN7S3060C53v15Ev();
extern void _ZN7S3060C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C5__7S3060C7__7S3060C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-44),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3060C53v16Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C42v4Ev();
extern void _ZN7S3060C42v5Ev();
extern void _ZN7S3060C42v6Ev();
extern void _ZN7S3060C42v7Ev();
extern void _ZN7S3060C42v8Ev();
extern void _ZN7S3060C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C4__A1__7S3060C7__7S3060C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,80),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v7Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3060C42v9Ev,
};
extern void _ZN7S3060C32v2Ev();
extern void _ZN7S3060C32v3Ev();
extern void _ZN7S3060C63v10Ev();
extern void _ZN7S3060C63v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3060C6__A1__7S3060C7__7S3060C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S3060C7[0]),
  (VTBL_ENTRY)&_ZN7S3060C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3060C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3060C63v11Ev,
};
static  VTT_ENTRY vtt_S3060C1[] = {
  {&(_ZTV7S3060C1[7]),  7,102},
  {&(_tg__ZTV7S3060C2__7S3060C1[7]),  7,12},
  {&(_tg__ZTV7S3060C4__7S3060C2__7S3060C1[10]),  10,18},
  {&(_tg__ZTV7S3060C5__7S3060C2__7S3060C1[13]),  13,22},
  {&(_tg__ZTV7S3060C3__A3__7S3060C2__7S3060C1[4]),  4,6},
  {&(_tg__ZTV7S3060C7__7S3060C2__7S3060C1[16]),  16,27},
  {&(_tg__ZTV7S3060C6__A1__7S3060C2__7S3060C1[6]),  6,10},
  {&(_ZTV7S3060C1[29]),  29,102},
  {&(_ZTV7S3060C1[50]),  50,102},
  {&(_ZTV7S3060C1[63]),  63,102},
  {&(_ZTV7S3060C1[81]),  81,102},
  {&(_ZTV7S3060C1[98]),  98,102},
  {&(_tg__ZTV7S3060C5__7S3060C1[4]),  4,13},
  {&(_tg__ZTV7S3060C4__7S3060C5__7S3060C1[10]),  10,18},
  {&(_tg__ZTV7S3060C3__A2__7S3060C5__7S3060C1[4]),  4,6},
  {&(_tg__ZTV7S3060C7__7S3060C1[6]),  6,17},
  {&(_tg__ZTV7S3060C3__A1__7S3060C7__7S3060C1[4]),  4,6},
  {&(_tg__ZTV7S3060C5__7S3060C7__7S3060C1[13]),  13,22},
  {&(_tg__ZTV7S3060C4__A1__7S3060C7__7S3060C1[10]),  10,18},
  {&(_tg__ZTV7S3060C6__A1__7S3060C7__7S3060C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3060C1[];
extern  VTBL_ENTRY _ZTV7S3060C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3060C1[];
static VTBL_ENTRY alt_thunk_names161[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S3060C2D0Ev,_ZTv0_n60_N7S3060C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3060C2D0Ev,_ZThn116_N7S3060C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S3060C2D1Ev,_ZTv0_n60_N7S3060C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3060C2D1Ev,_ZThn116_N7S3060C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S3060C1D0Ev,_ZTv0_n60_N7S3060C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3060C1D0Ev,_ZThn116_N7S3060C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S3060C1D1Ev,_ZTv0_n60_N7S3060C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3060C1D1Ev,_ZThn116_N7S3060C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3060C1 = {  "S3060C1", // class name
  bases_S3060C1, 15,
  &(vtc_S3060C1[0]), // expected_vtbl_contents
  &(vtt_S3060C1[0]), // expected_vtt_contents
  ABISELECT(248,184), // object size
  NSPAIRA(_ZTI7S3060C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3060C1),102, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3060C1),20, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names161,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3456C6  {
  virtual void  v4(); // _ZN7S3456C62v4Ev
  virtual void  v5(); // _ZN7S3456C62v5Ev
  virtual void  v6(); // _ZN7S3456C62v6Ev
  virtual void  v7(); // _ZN7S3456C62v7Ev
  virtual void  v8(); // _ZN7S3456C62v8Ev
  ~S3456C6(); // tgen
  S3456C6(); // tgen
};
//SIG(-1 S3456C6) C1{ v1 v2 v3 v4 v5}


void  S3456C6 ::v4(){vfunc_called(this, "_ZN7S3456C62v4Ev");}
void  S3456C6 ::v5(){vfunc_called(this, "_ZN7S3456C62v5Ev");}
void  S3456C6 ::v6(){vfunc_called(this, "_ZN7S3456C62v6Ev");}
void  S3456C6 ::v7(){vfunc_called(this, "_ZN7S3456C62v7Ev");}
void  S3456C6 ::v8(){vfunc_called(this, "_ZN7S3456C62v8Ev");}
S3456C6 ::~S3456C6(){ note_dtor("S3456C6", this);} // tgen
S3456C6 ::S3456C6(){ note_ctor("S3456C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3456C6C1Ev();
extern void _ZN7S3456C6D1Ev();
Name_Map name_map_S3456C6[] = {
  NSPAIR(_ZN7S3456C6C1Ev),
  NSPAIR(_ZN7S3456C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3456C6[];
extern void _ZN7S3456C62v4Ev();
extern void _ZN7S3456C62v5Ev();
extern void _ZN7S3456C62v6Ev();
extern void _ZN7S3456C62v7Ev();
extern void _ZN7S3456C62v8Ev();
static  VTBL_ENTRY vtc_S3456C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C6[0]),
  (VTBL_ENTRY)&_ZN7S3456C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v8Ev,
};
extern VTBL_ENTRY _ZTI7S3456C6[];
extern  VTBL_ENTRY _ZTV7S3456C6[];
Class_Descriptor cd_S3456C6 = {  "S3456C6", // class name
  0,0,//no base classes
  &(vtc_S3456C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3456C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3456C6),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  S3456C5  : S3456C6 {
  ::S3456C6 s3456c5f0;
  virtual void  v9(); // _ZN7S3456C52v9Ev
  virtual void  v10(); // _ZN7S3456C53v10Ev
  virtual void  v11(); // _ZN7S3456C53v11Ev
  virtual void  v12(); // _ZN7S3456C53v12Ev
  ~S3456C5(); // tgen
  S3456C5(); // tgen
};
//SIG(-1 S3456C5) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S3456C5 ::v9(){vfunc_called(this, "_ZN7S3456C52v9Ev");}
void  S3456C5 ::v10(){vfunc_called(this, "_ZN7S3456C53v10Ev");}
void  S3456C5 ::v11(){vfunc_called(this, "_ZN7S3456C53v11Ev");}
void  S3456C5 ::v12(){vfunc_called(this, "_ZN7S3456C53v12Ev");}
S3456C5 ::~S3456C5(){ note_dtor("S3456C5", this);} // tgen
S3456C5 ::S3456C5(){ note_ctor("S3456C5", this);} // tgen

static void Test_S3456C5()
{
  extern Class_Descriptor cd_S3456C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3456C5, buf);
    S3456C5 *dp, &lv = *(dp=new (buf) S3456C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3456C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3456C5)");
    check_base_class_offset(lv, (S3456C6*), 0, "S3456C5");
    check_field_offset(lv, s3456c5f0, ABISELECT(8,4), "S3456C5.s3456c5f0");
    test_class_info(&lv, &cd_S3456C5);
    dp->~S3456C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3456C5(Test_S3456C5, "S3456C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3456C5C1Ev();
extern void _ZN7S3456C5D1Ev();
Name_Map name_map_S3456C5[] = {
  NSPAIR(_ZN7S3456C5C1Ev),
  NSPAIR(_ZN7S3456C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3456C6;
extern VTBL_ENTRY _ZTI7S3456C6[];
extern  VTBL_ENTRY _ZTV7S3456C6[];
static Base_Class bases_S3456C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3456C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3456C5[];
extern void _ZN7S3456C62v4Ev();
extern void _ZN7S3456C62v5Ev();
extern void _ZN7S3456C62v6Ev();
extern void _ZN7S3456C62v7Ev();
extern void _ZN7S3456C62v8Ev();
extern void _ZN7S3456C52v9Ev();
extern void _ZN7S3456C53v10Ev();
extern void _ZN7S3456C53v11Ev();
extern void _ZN7S3456C53v12Ev();
static  VTBL_ENTRY vtc_S3456C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C5[0]),
  (VTBL_ENTRY)&_ZN7S3456C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3456C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S3456C5[];
extern  VTBL_ENTRY _ZTV7S3456C5[];
Class_Descriptor cd_S3456C5 = {  "S3456C5", // class name
  bases_S3456C5, 1,
  &(vtc_S3456C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3456C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3456C5),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3456C4  : S3456C5 {
  virtual void  v13(); // _ZN7S3456C43v13Ev
  virtual void  v14(); // _ZN7S3456C43v14Ev
  virtual void  v15(); // _ZN7S3456C43v15Ev
  virtual void  v16(); // _ZN7S3456C43v16Ev
  virtual void  v17(); // _ZN7S3456C43v17Ev
  virtual void  v18(); // _ZN7S3456C43v18Ev
  ~S3456C4(); // tgen
  S3456C4(); // tgen
};
//SIG(-1 S3456C4) C1{ BC2{ BC3{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 v6}


void  S3456C4 ::v13(){vfunc_called(this, "_ZN7S3456C43v13Ev");}
void  S3456C4 ::v14(){vfunc_called(this, "_ZN7S3456C43v14Ev");}
void  S3456C4 ::v15(){vfunc_called(this, "_ZN7S3456C43v15Ev");}
void  S3456C4 ::v16(){vfunc_called(this, "_ZN7S3456C43v16Ev");}
void  S3456C4 ::v17(){vfunc_called(this, "_ZN7S3456C43v17Ev");}
void  S3456C4 ::v18(){vfunc_called(this, "_ZN7S3456C43v18Ev");}
S3456C4 ::~S3456C4(){ note_dtor("S3456C4", this);} // tgen
S3456C4 ::S3456C4(){ note_ctor("S3456C4", this);} // tgen

static void Test_S3456C4()
{
  extern Class_Descriptor cd_S3456C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3456C4, buf);
    S3456C4 *dp, &lv = *(dp=new (buf) S3456C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3456C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3456C4)");
    check_base_class_offset(lv, (S3456C6*)(S3456C5*), 0, "S3456C4");
    check_base_class_offset(lv, (S3456C5*), 0, "S3456C4");
    test_class_info(&lv, &cd_S3456C4);
    dp->~S3456C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3456C4(Test_S3456C4, "S3456C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3456C4C1Ev();
extern void _ZN7S3456C4D1Ev();
Name_Map name_map_S3456C4[] = {
  NSPAIR(_ZN7S3456C4C1Ev),
  NSPAIR(_ZN7S3456C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3456C6;
extern VTBL_ENTRY _ZTI7S3456C6[];
extern  VTBL_ENTRY _ZTV7S3456C6[];
extern Class_Descriptor cd_S3456C5;
extern VTBL_ENTRY _ZTI7S3456C5[];
extern  VTBL_ENTRY _ZTV7S3456C5[];
static Base_Class bases_S3456C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3456C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3456C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3456C4[];
extern void _ZN7S3456C62v4Ev();
extern void _ZN7S3456C62v5Ev();
extern void _ZN7S3456C62v6Ev();
extern void _ZN7S3456C62v7Ev();
extern void _ZN7S3456C62v8Ev();
extern void _ZN7S3456C52v9Ev();
extern void _ZN7S3456C53v10Ev();
extern void _ZN7S3456C53v11Ev();
extern void _ZN7S3456C53v12Ev();
extern void _ZN7S3456C43v13Ev();
extern void _ZN7S3456C43v14Ev();
extern void _ZN7S3456C43v15Ev();
extern void _ZN7S3456C43v16Ev();
extern void _ZN7S3456C43v17Ev();
extern void _ZN7S3456C43v18Ev();
static  VTBL_ENTRY vtc_S3456C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C4[0]),
  (VTBL_ENTRY)&_ZN7S3456C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3456C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v18Ev,
};
extern VTBL_ENTRY _ZTI7S3456C4[];
extern  VTBL_ENTRY _ZTV7S3456C4[];
Class_Descriptor cd_S3456C4 = {  "S3456C4", // class name
  bases_S3456C4, 2,
  &(vtc_S3456C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3456C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3456C4),17, //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  S3456C3  : virtual S3456C4 {
  virtual void  v19(); // _ZN7S3456C33v19Ev
  virtual void  v20(); // _ZN7S3456C33v20Ev
  virtual void  v21(); // _ZN7S3456C33v21Ev
  ~S3456C3(); // tgen
  S3456C3(); // tgen
};
//SIG(-1 S3456C3) C1{ VBC2{ BC3{ BC4{ v4 v5 v6 v7 v8} v9 v10 v11 v12 FC4} v13 v14 v15 v16 v17 v18} v1 v2 v3}


void  S3456C3 ::v19(){vfunc_called(this, "_ZN7S3456C33v19Ev");}
void  S3456C3 ::v20(){vfunc_called(this, "_ZN7S3456C33v20Ev");}
void  S3456C3 ::v21(){vfunc_called(this, "_ZN7S3456C33v21Ev");}
S3456C3 ::~S3456C3(){ note_dtor("S3456C3", this);} // tgen
S3456C3 ::S3456C3(){ note_ctor("S3456C3", this);} // tgen

static void Test_S3456C3()
{
  extern Class_Descriptor cd_S3456C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3456C3, buf);
    S3456C3 *dp, &lv = *(dp=new (buf) S3456C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3456C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3456C3)");
    check_base_class_offset(lv, (S3456C6*)(S3456C5*)(S3456C4*), ABISELECT(8,4), "S3456C3");
    check_base_class_offset(lv, (S3456C5*)(S3456C4*), ABISELECT(8,4), "S3456C3");
    check_base_class_offset(lv, (S3456C4*), ABISELECT(8,4), "S3456C3");
    test_class_info(&lv, &cd_S3456C3);
    dp->~S3456C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3456C3(Test_S3456C3, "S3456C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3456C3C1Ev();
extern void _ZN7S3456C3D1Ev();
Name_Map name_map_S3456C3[] = {
  NSPAIR(_ZN7S3456C3C1Ev),
  NSPAIR(_ZN7S3456C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3456C6;
extern VTBL_ENTRY _ZTI7S3456C6[];
extern  VTBL_ENTRY _ZTV7S3456C6[];
extern Class_Descriptor cd_S3456C5;
extern VTBL_ENTRY _ZTI7S3456C5[];
extern  VTBL_ENTRY _ZTV7S3456C5[];
extern Class_Descriptor cd_S3456C4;
extern VTBL_ENTRY _ZTI7S3456C4[];
extern  VTBL_ENTRY _ZTV7S3456C4[];
static Base_Class bases_S3456C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3456C6,    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_S3456C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3456C4,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3456C3[];
extern void _ZN7S3456C33v19Ev();
extern void _ZN7S3456C33v20Ev();
extern void _ZN7S3456C33v21Ev();
extern void _ZN7S3456C62v4Ev();
extern void _ZN7S3456C62v5Ev();
extern void _ZN7S3456C62v6Ev();
extern void _ZN7S3456C62v7Ev();
extern void _ZN7S3456C62v8Ev();
extern void _ZN7S3456C52v9Ev();
extern void _ZN7S3456C53v10Ev();
extern void _ZN7S3456C53v11Ev();
extern void _ZN7S3456C53v12Ev();
extern void _ZN7S3456C43v13Ev();
extern void _ZN7S3456C43v14Ev();
extern void _ZN7S3456C43v15Ev();
extern void _ZN7S3456C43v16Ev();
extern void _ZN7S3456C43v17Ev();
extern void _ZN7S3456C43v18Ev();
static  VTBL_ENTRY vtc_S3456C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C3[0]),
  (VTBL_ENTRY)&_ZN7S3456C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3456C3[0]),
  (VTBL_ENTRY)&_ZN7S3456C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3456C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v18Ev,
};
extern VTBL_ENTRY _ZTV7S3456C3[];
static  VTT_ENTRY vtt_S3456C3[] = {
  {&(_ZTV7S3456C3[3]),  3,38},
  {&(_ZTV7S3456C3[23]),  23,38},
};
extern VTBL_ENTRY _ZTI7S3456C3[];
extern  VTBL_ENTRY _ZTV7S3456C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3456C3[];
Class_Descriptor cd_S3456C3 = {  "S3456C3", // class name
  bases_S3456C3, 3,
  &(vtc_S3456C3[0]), // expected_vtbl_contents
  &(vtt_S3456C3[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3456C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3456C3),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3456C3),2, //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  S3456C2  : S3456C3 {
  virtual  ~S3456C2(); // _ZN7S3456C2D2Ev
  virtual void  v22(); // _ZN7S3456C23v22Ev
  virtual void  v23(); // _ZN7S3456C23v23Ev
  virtual void  v24(); // _ZN7S3456C23v24Ev
  virtual void  v25(); // _ZN7S3456C23v25Ev
  virtual void  v26(); // _ZN7S3456C23v26Ev
  virtual void  v27(); // _ZN7S3456C23v27Ev
  virtual void  v28(); // _ZN7S3456C23v28Ev
  S3456C2(); // tgen
};
//SIG(-1 S3456C2) C1{ BC2{ VBC3{ BC4{ BC5{ v8 v9 v10 v11 v12} v13 v14 v15 v16 FC5} v17 v18 v19 v20 v21 v22} v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7}


 S3456C2 ::~S3456C2(){ note_dtor("S3456C2", this);}
void  S3456C2 ::v22(){vfunc_called(this, "_ZN7S3456C23v22Ev");}
void  S3456C2 ::v23(){vfunc_called(this, "_ZN7S3456C23v23Ev");}
void  S3456C2 ::v24(){vfunc_called(this, "_ZN7S3456C23v24Ev");}
void  S3456C2 ::v25(){vfunc_called(this, "_ZN7S3456C23v25Ev");}
void  S3456C2 ::v26(){vfunc_called(this, "_ZN7S3456C23v26Ev");}
void  S3456C2 ::v27(){vfunc_called(this, "_ZN7S3456C23v27Ev");}
void  S3456C2 ::v28(){vfunc_called(this, "_ZN7S3456C23v28Ev");}
S3456C2 ::S3456C2(){ note_ctor("S3456C2", this);} // tgen

static void Test_S3456C2()
{
  extern Class_Descriptor cd_S3456C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3456C2, buf);
    S3456C2 *dp, &lv = *(dp=new (buf) S3456C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3456C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3456C2)");
    check_base_class_offset(lv, (S3456C6*)(S3456C5*)(S3456C4*), ABISELECT(8,4), "S3456C2");
    check_base_class_offset(lv, (S3456C5*)(S3456C4*), ABISELECT(8,4), "S3456C2");
    check_base_class_offset(lv, (S3456C4*)(S3456C3*), ABISELECT(8,4), "S3456C2");
    check_base_class_offset(lv, (S3456C3*), 0, "S3456C2");
    test_class_info(&lv, &cd_S3456C2);
    dp->~S3456C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3456C2(Test_S3456C2, "S3456C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3456C2C1Ev();
extern void _ZN7S3456C2D2Ev();
Name_Map name_map_S3456C2[] = {
  NSPAIR(_ZN7S3456C2C1Ev),
  NSPAIR(_ZN7S3456C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3456C6;
extern VTBL_ENTRY _ZTI7S3456C6[];
extern  VTBL_ENTRY _ZTV7S3456C6[];
extern Class_Descriptor cd_S3456C5;
extern VTBL_ENTRY _ZTI7S3456C5[];
extern  VTBL_ENTRY _ZTV7S3456C5[];
extern Class_Descriptor cd_S3456C4;
extern VTBL_ENTRY _ZTI7S3456C4[];
extern  VTBL_ENTRY _ZTV7S3456C4[];
extern Class_Descriptor cd_S3456C3;
extern VTBL_ENTRY _ZTI7S3456C3[];
extern  VTBL_ENTRY _ZTV7S3456C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3456C3[];
static Base_Class bases_S3456C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3456C6,    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_S3456C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3456C4,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3456C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3456C2[];
extern void _ZN7S3456C33v19Ev();
extern void _ZN7S3456C33v20Ev();
extern void _ZN7S3456C33v21Ev();
extern void _ZN7S3456C2D1Ev();
extern void _ZN7S3456C2D0Ev();
extern void _ZN7S3456C23v22Ev();
extern void _ZN7S3456C23v23Ev();
extern void _ZN7S3456C23v24Ev();
extern void _ZN7S3456C23v25Ev();
extern void _ZN7S3456C23v26Ev();
extern void _ZN7S3456C23v27Ev();
extern void _ZN7S3456C23v28Ev();
extern void _ZN7S3456C62v4Ev();
extern void _ZN7S3456C62v5Ev();
extern void _ZN7S3456C62v6Ev();
extern void _ZN7S3456C62v7Ev();
extern void _ZN7S3456C62v8Ev();
extern void _ZN7S3456C52v9Ev();
extern void _ZN7S3456C53v10Ev();
extern void _ZN7S3456C53v11Ev();
extern void _ZN7S3456C53v12Ev();
extern void _ZN7S3456C43v13Ev();
extern void _ZN7S3456C43v14Ev();
extern void _ZN7S3456C43v15Ev();
extern void _ZN7S3456C43v16Ev();
extern void _ZN7S3456C43v17Ev();
extern void _ZN7S3456C43v18Ev();
static  VTBL_ENTRY vtc_S3456C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C2[0]),
  (VTBL_ENTRY)&_ZN7S3456C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3456C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3456C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3456C2[0]),
  (VTBL_ENTRY)&_ZN7S3456C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3456C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v18Ev,
};
extern VTBL_ENTRY _ZTV7S3456C2[];
extern void _ZN7S3456C33v19Ev();
extern void _ZN7S3456C33v20Ev();
extern void _ZN7S3456C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3456C3__7S3456C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C3[0]),
  (VTBL_ENTRY)&_ZN7S3456C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v21Ev,
};
extern void _ZN7S3456C62v4Ev();
extern void _ZN7S3456C62v5Ev();
extern void _ZN7S3456C62v6Ev();
extern void _ZN7S3456C62v7Ev();
extern void _ZN7S3456C62v8Ev();
extern void _ZN7S3456C52v9Ev();
extern void _ZN7S3456C53v10Ev();
extern void _ZN7S3456C53v11Ev();
extern void _ZN7S3456C53v12Ev();
extern void _ZN7S3456C43v13Ev();
extern void _ZN7S3456C43v14Ev();
extern void _ZN7S3456C43v15Ev();
extern void _ZN7S3456C43v16Ev();
extern void _ZN7S3456C43v17Ev();
extern void _ZN7S3456C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3456C4__7S3456C3__7S3456C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3456C3[0]),
  (VTBL_ENTRY)&_ZN7S3456C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3456C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v18Ev,
};
static  VTT_ENTRY vtt_S3456C2[] = {
  {&(_ZTV7S3456C2[3]),  3,47},
  {&(_tg__ZTV7S3456C3__7S3456C2[3]),  3,6},
  {&(_tg__ZTV7S3456C4__7S3456C3__7S3456C2[17]),  17,32},
  {&(_ZTV7S3456C2[32]),  32,47},
};
extern VTBL_ENTRY _ZTI7S3456C2[];
extern  VTBL_ENTRY _ZTV7S3456C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3456C2[];
Class_Descriptor cd_S3456C2 = {  "S3456C2", // class name
  bases_S3456C2, 4,
  &(vtc_S3456C2[0]), // expected_vtbl_contents
  &(vtt_S3456C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3456C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3456C2),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3456C2),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3456C7  {
  long s3456c7f0[5];
  void *s3456c7f1;
  virtual void  v29(); // _ZN7S3456C73v29Ev
  virtual void  v30(); // _ZN7S3456C73v30Ev
  ~S3456C7(); // tgen
  S3456C7(); // tgen
};
//SIG(-1 S3456C7) C1{ v1 v2 Fl[5] Fp}


void  S3456C7 ::v29(){vfunc_called(this, "_ZN7S3456C73v29Ev");}
void  S3456C7 ::v30(){vfunc_called(this, "_ZN7S3456C73v30Ev");}
S3456C7 ::~S3456C7(){ note_dtor("S3456C7", this);} // tgen
S3456C7 ::S3456C7(){ note_ctor("S3456C7", this);} // tgen

static void Test_S3456C7()
{
  extern Class_Descriptor cd_S3456C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3456C7, buf);
    S3456C7 *dp, &lv = *(dp=new (buf) S3456C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3456C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3456C7)");
    check_field_offset(lv, s3456c7f0, ABISELECT(8,4), "S3456C7.s3456c7f0");
    check_field_offset(lv, s3456c7f1, ABISELECT(48,24), "S3456C7.s3456c7f1");
    test_class_info(&lv, &cd_S3456C7);
    dp->~S3456C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3456C7(Test_S3456C7, "S3456C7", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3456C7C1Ev();
extern void _ZN7S3456C7D1Ev();
Name_Map name_map_S3456C7[] = {
  NSPAIR(_ZN7S3456C7C1Ev),
  NSPAIR(_ZN7S3456C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3456C7[];
extern void _ZN7S3456C73v29Ev();
extern void _ZN7S3456C73v30Ev();
static  VTBL_ENTRY vtc_S3456C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C7[0]),
  (VTBL_ENTRY)&_ZN7S3456C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3456C73v30Ev,
};
extern VTBL_ENTRY _ZTI7S3456C7[];
extern  VTBL_ENTRY _ZTV7S3456C7[];
Class_Descriptor cd_S3456C7 = {  "S3456C7", // class name
  0,0,//no base classes
  &(vtc_S3456C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3456C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3456C7),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  S3456C1  : S3456C2 , virtual S3456C7 {
  int s3456c1f0;
  __tsi64 s3456c1f1;
  virtual void  v1(); // _ZN7S3456C12v1Ev
  virtual void  v2(); // _ZN7S3456C12v2Ev
  virtual void  v3(); // _ZN7S3456C12v3Ev
  ~S3456C1(); // tgen
  S3456C1(); // tgen
};
//SIG(1 S3456C1) C1{ BC2{ BC3{ VBC4{ BC5{ BC6{ v4 v5 v6 v7 v8} v9 v10 v11 v12 FC6} v13 v14 v15 v16 v17 v18} v19 v20 v21} vd v22 v23 v24 v25 v26 v27 v28} VBC7{ v29 v30 Fl[5] Fp} v1 v2 v3 Fi FL}


void  S3456C1 ::v1(){vfunc_called(this, "_ZN7S3456C12v1Ev");}
void  S3456C1 ::v2(){vfunc_called(this, "_ZN7S3456C12v2Ev");}
void  S3456C1 ::v3(){vfunc_called(this, "_ZN7S3456C12v3Ev");}
S3456C1 ::~S3456C1(){ note_dtor("S3456C1", this);} // tgen
S3456C1 ::S3456C1(){ note_ctor("S3456C1", this);} // tgen

static void Test_S3456C1()
{
  extern Class_Descriptor cd_S3456C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S3456C1, buf);
    S3456C1 *dp, &lv = *(dp=new (buf) S3456C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S3456C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3456C1)");
    check_base_class_offset(lv, (S3456C6*)(S3456C5*)(S3456C4*), ABISELECT(24,16), "S3456C1");
    check_base_class_offset(lv, (S3456C5*)(S3456C4*), ABISELECT(24,16), "S3456C1");
    check_base_class_offset(lv, (S3456C4*)(S3456C3*)(S3456C2*), ABISELECT(24,16), "S3456C1");
    check_base_class_offset(lv, (S3456C3*)(S3456C2*), 0, "S3456C1");
    check_base_class_offset(lv, (S3456C2*), 0, "S3456C1");
    check_base_class_offset(lv, (S3456C7*), ABISELECT(40,24), "S3456C1");
    check_field_offset(lv, s3456c1f0, ABISELECT(8,4), "S3456C1.s3456c1f0");
    check_field_offset(lv, s3456c1f1, ABISELECT(16,8), "S3456C1.s3456c1f1");
    test_class_info(&lv, &cd_S3456C1);
    dp->~S3456C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3456C1(Test_S3456C1, "S3456C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S3456C1C1Ev();
extern void _ZN7S3456C1D1Ev();
Name_Map name_map_S3456C1[] = {
  NSPAIR(_ZN7S3456C1C1Ev),
  NSPAIR(_ZN7S3456C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3456C6;
extern VTBL_ENTRY _ZTI7S3456C6[];
extern  VTBL_ENTRY _ZTV7S3456C6[];
extern Class_Descriptor cd_S3456C5;
extern VTBL_ENTRY _ZTI7S3456C5[];
extern  VTBL_ENTRY _ZTV7S3456C5[];
extern Class_Descriptor cd_S3456C4;
extern VTBL_ENTRY _ZTI7S3456C4[];
extern  VTBL_ENTRY _ZTV7S3456C4[];
extern Class_Descriptor cd_S3456C3;
extern VTBL_ENTRY _ZTI7S3456C3[];
extern  VTBL_ENTRY _ZTV7S3456C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3456C3[];
extern Class_Descriptor cd_S3456C2;
extern VTBL_ENTRY _ZTI7S3456C2[];
extern  VTBL_ENTRY _ZTV7S3456C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3456C2[];
extern Class_Descriptor cd_S3456C7;
extern VTBL_ENTRY _ZTI7S3456C7[];
extern  VTBL_ENTRY _ZTV7S3456C7[];
static Base_Class bases_S3456C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3456C6,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3456C5,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3456C4,    ABISELECT(24,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3456C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3456C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3456C7,    ABISELECT(40,24), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3456C1[];
extern void _ZN7S3456C33v19Ev();
extern void _ZN7S3456C33v20Ev();
extern void _ZN7S3456C33v21Ev();
extern void _ZN7S3456C1D1Ev();
extern void _ZN7S3456C1D0Ev();
extern void _ZN7S3456C23v22Ev();
extern void _ZN7S3456C23v23Ev();
extern void _ZN7S3456C23v24Ev();
extern void _ZN7S3456C23v25Ev();
extern void _ZN7S3456C23v26Ev();
extern void _ZN7S3456C23v27Ev();
extern void _ZN7S3456C23v28Ev();
extern void _ZN7S3456C12v1Ev();
extern void _ZN7S3456C12v2Ev();
extern void _ZN7S3456C12v3Ev();
extern void _ZN7S3456C62v4Ev();
extern void _ZN7S3456C62v5Ev();
extern void _ZN7S3456C62v6Ev();
extern void _ZN7S3456C62v7Ev();
extern void _ZN7S3456C62v8Ev();
extern void _ZN7S3456C52v9Ev();
extern void _ZN7S3456C53v10Ev();
extern void _ZN7S3456C53v11Ev();
extern void _ZN7S3456C53v12Ev();
extern void _ZN7S3456C43v13Ev();
extern void _ZN7S3456C43v14Ev();
extern void _ZN7S3456C43v15Ev();
extern void _ZN7S3456C43v16Ev();
extern void _ZN7S3456C43v17Ev();
extern void _ZN7S3456C43v18Ev();
extern void _ZN7S3456C73v29Ev();
extern void _ZN7S3456C73v30Ev();
static  VTBL_ENTRY vtc_S3456C1[] = {
  ABISELECT(40,24),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C1[0]),
  (VTBL_ENTRY)&_ZN7S3456C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3456C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3456C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3456C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3456C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3456C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3456C1[0]),
  (VTBL_ENTRY)&_ZN7S3456C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3456C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v18Ev,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3456C1[0]),
  (VTBL_ENTRY)&_ZN7S3456C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3456C73v30Ev,
};
extern VTBL_ENTRY _ZTV7S3456C1[];
extern void _ZN7S3456C33v19Ev();
extern void _ZN7S3456C33v20Ev();
extern void _ZN7S3456C33v21Ev();
extern void _ZN7S3456C2D1Ev();
extern void _ZN7S3456C2D0Ev();
extern void _ZN7S3456C23v22Ev();
extern void _ZN7S3456C23v23Ev();
extern void _ZN7S3456C23v24Ev();
extern void _ZN7S3456C23v25Ev();
extern void _ZN7S3456C23v26Ev();
extern void _ZN7S3456C23v27Ev();
extern void _ZN7S3456C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S3456C2__7S3456C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C2[0]),
  (VTBL_ENTRY)&_ZN7S3456C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3456C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3456C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3456C23v28Ev,
};
extern void _ZN7S3456C33v19Ev();
extern void _ZN7S3456C33v20Ev();
extern void _ZN7S3456C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3456C37S3456C2__7S3456C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3456C3[0]),
  (VTBL_ENTRY)&_ZN7S3456C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3456C33v21Ev,
};
extern void _ZN7S3456C62v4Ev();
extern void _ZN7S3456C62v5Ev();
extern void _ZN7S3456C62v6Ev();
extern void _ZN7S3456C62v7Ev();
extern void _ZN7S3456C62v8Ev();
extern void _ZN7S3456C52v9Ev();
extern void _ZN7S3456C53v10Ev();
extern void _ZN7S3456C53v11Ev();
extern void _ZN7S3456C53v12Ev();
extern void _ZN7S3456C43v13Ev();
extern void _ZN7S3456C43v14Ev();
extern void _ZN7S3456C43v15Ev();
extern void _ZN7S3456C43v16Ev();
extern void _ZN7S3456C43v17Ev();
extern void _ZN7S3456C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3456C4__7S3456C37S3456C2__7S3456C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3456C3[0]),
  (VTBL_ENTRY)&_ZN7S3456C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3456C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v18Ev,
};
extern void _ZN7S3456C62v4Ev();
extern void _ZN7S3456C62v5Ev();
extern void _ZN7S3456C62v6Ev();
extern void _ZN7S3456C62v7Ev();
extern void _ZN7S3456C62v8Ev();
extern void _ZN7S3456C52v9Ev();
extern void _ZN7S3456C53v10Ev();
extern void _ZN7S3456C53v11Ev();
extern void _ZN7S3456C53v12Ev();
extern void _ZN7S3456C43v13Ev();
extern void _ZN7S3456C43v14Ev();
extern void _ZN7S3456C43v15Ev();
extern void _ZN7S3456C43v16Ev();
extern void _ZN7S3456C43v17Ev();
extern void _ZN7S3456C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3456C4__7S3456C2__7S3456C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3456C2[0]),
  (VTBL_ENTRY)&_ZN7S3456C62v4Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3456C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3456C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3456C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v13Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3456C43v18Ev,
};
static  VTT_ENTRY vtt_S3456C1[] = {
  {&(_ZTV7S3456C1[4]),  4,57},
  {&(_tg__ZTV7S3456C2__7S3456C1[3]),  3,15},
  {&(_tg__ZTV7S3456C37S3456C2__7S3456C1[3]),  3,6},
  {&(_tg__ZTV7S3456C4__7S3456C37S3456C2__7S3456C1[17]),  17,32},
  {&(_tg__ZTV7S3456C4__7S3456C2__7S3456C1[17]),  17,32},
  {&(_ZTV7S3456C1[36]),  36,57},
  {&(_ZTV7S3456C1[55]),  55,57},
};
extern VTBL_ENTRY _ZTI7S3456C1[];
extern  VTBL_ENTRY _ZTV7S3456C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3456C1[];
Class_Descriptor cd_S3456C1 = {  "S3456C1", // class name
  bases_S3456C1, 6,
  &(vtc_S3456C1[0]), // expected_vtbl_contents
  &(vtt_S3456C1[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S3456C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3456C1),57, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3456C1),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20344C3_nt  {
  virtual void  v25(); // _ZN11S20344C3_nt3v25Ev
  virtual void  v26(); // _ZN11S20344C3_nt3v26Ev
  ~S20344C3_nt(); // tgen
  S20344C3_nt(); // tgen
};
//SIG(-1 S20344C3_nt) C1{ v1 v2}


void  S20344C3_nt ::v25(){vfunc_called(this, "_ZN11S20344C3_nt3v25Ev");}
void  S20344C3_nt ::v26(){vfunc_called(this, "_ZN11S20344C3_nt3v26Ev");}
S20344C3_nt ::~S20344C3_nt(){ note_dtor("S20344C3_nt", this);} // tgen
S20344C3_nt ::S20344C3_nt(){ note_ctor("S20344C3_nt", this);} // tgen

//skip512 S20344C3_nt

#else // __cplusplus

extern void _ZN11S20344C3_ntC1Ev();
extern void _ZN11S20344C3_ntD1Ev();
Name_Map name_map_S20344C3_nt[] = {
  NSPAIR(_ZN11S20344C3_ntC1Ev),
  NSPAIR(_ZN11S20344C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20344C3_nt[];
extern void _ZN11S20344C3_nt3v25Ev();
extern void _ZN11S20344C3_nt3v26Ev();
static  VTBL_ENTRY vtc_S20344C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20344C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20344C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S20344C3_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI11S20344C3_nt[];
VTBL_ENTRY *P__ZTI11S20344C3_nt = _ZTI11S20344C3_nt; 
extern  VTBL_ENTRY _ZTV11S20344C3_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20344C2  {
  void *s20344c2f0[6];
  ::S20344C3_nt s20344c2f1;
  int s20344c2f2;
  virtual void  v7(); // _ZN8S20344C22v7Ev
  virtual void  v8(); // _ZN8S20344C22v8Ev
  virtual void  v9(); // _ZN8S20344C22v9Ev
  ~S20344C2(); // tgen
  S20344C2(); // tgen
};
//SIG(-1 S20344C2) C1{ v1 v2 v3 Fp[6] FC2{ v4 v5} Fi}


void  S20344C2 ::v7(){vfunc_called(this, "_ZN8S20344C22v7Ev");}
void  S20344C2 ::v8(){vfunc_called(this, "_ZN8S20344C22v8Ev");}
void  S20344C2 ::v9(){vfunc_called(this, "_ZN8S20344C22v9Ev");}
S20344C2 ::~S20344C2(){ note_dtor("S20344C2", this);} // tgen
S20344C2 ::S20344C2(){ note_ctor("S20344C2", this);} // tgen

static void Test_S20344C2()
{
  extern Class_Descriptor cd_S20344C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20344C2, buf);
    S20344C2 *dp, &lv = *(dp=new (buf) S20344C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20344C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20344C2)");
    check_field_offset(lv, s20344c2f0, ABISELECT(8,4), "S20344C2.s20344c2f0");
    check_field_offset(lv, s20344c2f1, ABISELECT(56,28), "S20344C2.s20344c2f1");
    check_field_offset(lv, s20344c2f2, ABISELECT(64,32), "S20344C2.s20344c2f2");
    test_class_info(&lv, &cd_S20344C2);
    dp->~S20344C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20344C2(Test_S20344C2, "S20344C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S20344C2C1Ev();
extern void _ZN8S20344C2D1Ev();
Name_Map name_map_S20344C2[] = {
  NSPAIR(_ZN8S20344C2C1Ev),
  NSPAIR(_ZN8S20344C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20344C2[];
extern void _ZN8S20344C22v7Ev();
extern void _ZN8S20344C22v8Ev();
extern void _ZN8S20344C22v9Ev();
static  VTBL_ENTRY vtc_S20344C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20344C2[0]),
  (VTBL_ENTRY)&_ZN8S20344C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20344C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20344C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20344C2[];
extern  VTBL_ENTRY _ZTV8S20344C2[];
Class_Descriptor cd_S20344C2 = {  "S20344C2", // class name
  0,0,//no base classes
  &(vtc_S20344C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S20344C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20344C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20344C6_nt  {
  virtual void  v10(); // _ZN11S20344C6_nt3v10Ev
  virtual void  v11(); // _ZN11S20344C6_nt3v11Ev
  virtual void  v12(); // _ZN11S20344C6_nt3v12Ev
  ~S20344C6_nt(); // tgen
  S20344C6_nt(); // tgen
};
//SIG(-1 S20344C6_nt) C1{ v1 v2 v3}


void  S20344C6_nt ::v10(){vfunc_called(this, "_ZN11S20344C6_nt3v10Ev");}
void  S20344C6_nt ::v11(){vfunc_called(this, "_ZN11S20344C6_nt3v11Ev");}
void  S20344C6_nt ::v12(){vfunc_called(this, "_ZN11S20344C6_nt3v12Ev");}
S20344C6_nt ::~S20344C6_nt(){ note_dtor("S20344C6_nt", this);} // tgen
S20344C6_nt ::S20344C6_nt(){ note_ctor("S20344C6_nt", this);} // tgen

//skip512 S20344C6_nt

#else // __cplusplus

extern void _ZN11S20344C6_ntC1Ev();
extern void _ZN11S20344C6_ntD1Ev();
Name_Map name_map_S20344C6_nt[] = {
  NSPAIR(_ZN11S20344C6_ntC1Ev),
  NSPAIR(_ZN11S20344C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20344C6_nt[];
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
static  VTBL_ENTRY vtc_S20344C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20344C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI11S20344C6_nt[];
VTBL_ENTRY *P__ZTI11S20344C6_nt = _ZTI11S20344C6_nt; 
extern  VTBL_ENTRY _ZTV11S20344C6_nt[];
Class_Descriptor cd_S20344C6_nt = {  "S20344C6_nt", // class name
  0,0,//no base classes
  &(vtc_S20344C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20344C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20344C6_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  S20344C5  : S20344C6_nt {
  int s20344c5f0;
  virtual void  v13(); // _ZN8S20344C53v13Ev
  virtual void  v14(); // _ZN8S20344C53v14Ev
  virtual void  v15(); // _ZN8S20344C53v15Ev
  virtual void  v16(); // _ZN8S20344C53v16Ev
  virtual void  v17(); // _ZN8S20344C53v17Ev
  virtual void  v18(); // _ZN8S20344C53v18Ev
  virtual void  v19(); // _ZN8S20344C53v19Ev
  ~S20344C5(); // tgen
  S20344C5(); // tgen
};
//SIG(-1 S20344C5) C1{ BC2{ v8 v9 v10} v1 v2 v3 v4 v5 v6 v7 Fi}


void  S20344C5 ::v13(){vfunc_called(this, "_ZN8S20344C53v13Ev");}
void  S20344C5 ::v14(){vfunc_called(this, "_ZN8S20344C53v14Ev");}
void  S20344C5 ::v15(){vfunc_called(this, "_ZN8S20344C53v15Ev");}
void  S20344C5 ::v16(){vfunc_called(this, "_ZN8S20344C53v16Ev");}
void  S20344C5 ::v17(){vfunc_called(this, "_ZN8S20344C53v17Ev");}
void  S20344C5 ::v18(){vfunc_called(this, "_ZN8S20344C53v18Ev");}
void  S20344C5 ::v19(){vfunc_called(this, "_ZN8S20344C53v19Ev");}
S20344C5 ::~S20344C5(){ note_dtor("S20344C5", this);} // tgen
S20344C5 ::S20344C5(){ note_ctor("S20344C5", this);} // tgen

static void Test_S20344C5()
{
  extern Class_Descriptor cd_S20344C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20344C5, buf);
    S20344C5 *dp, &lv = *(dp=new (buf) S20344C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20344C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20344C5)");
    check_base_class_offset(lv, (S20344C6_nt*), 0, "S20344C5");
    check_field_offset(lv, s20344c5f0, ABISELECT(8,4), "S20344C5.s20344c5f0");
    test_class_info(&lv, &cd_S20344C5);
    dp->~S20344C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20344C5(Test_S20344C5, "S20344C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20344C5C1Ev();
extern void _ZN8S20344C5D1Ev();
Name_Map name_map_S20344C5[] = {
  NSPAIR(_ZN8S20344C5C1Ev),
  NSPAIR(_ZN8S20344C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20344C6_nt;
extern VTBL_ENTRY _ZTI11S20344C6_nt[];
extern  VTBL_ENTRY _ZTV11S20344C6_nt[];
static Base_Class bases_S20344C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20344C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20344C5[];
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C53v13Ev();
extern void _ZN8S20344C53v14Ev();
extern void _ZN8S20344C53v15Ev();
extern void _ZN8S20344C53v16Ev();
extern void _ZN8S20344C53v17Ev();
extern void _ZN8S20344C53v18Ev();
extern void _ZN8S20344C53v19Ev();
static  VTBL_ENTRY vtc_S20344C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20344C5[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v19Ev,
};
extern VTBL_ENTRY _ZTI8S20344C5[];
extern  VTBL_ENTRY _ZTV8S20344C5[];
Class_Descriptor cd_S20344C5 = {  "S20344C5", // class name
  bases_S20344C5, 1,
  &(vtc_S20344C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20344C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20344C5),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20344C7  : virtual S20344C5 , S20344C6_nt {
  virtual void  v20(); // _ZN8S20344C73v20Ev
  virtual void  v21(); // _ZN8S20344C73v21Ev
  virtual void  v22(); // _ZN8S20344C73v22Ev
  ~S20344C7(); // tgen
  S20344C7(); // tgen
};
//SIG(-1 S20344C7) C1{ VBC2{ BC3{ v4 v5 v6} v7 v8 v9 v10 v11 v12 v13 Fi} BC3 v1 v2 v3}


void  S20344C7 ::v20(){vfunc_called(this, "_ZN8S20344C73v20Ev");}
void  S20344C7 ::v21(){vfunc_called(this, "_ZN8S20344C73v21Ev");}
void  S20344C7 ::v22(){vfunc_called(this, "_ZN8S20344C73v22Ev");}
S20344C7 ::~S20344C7(){ note_dtor("S20344C7", this);} // tgen
S20344C7 ::S20344C7(){ note_ctor("S20344C7", this);} // tgen

static void Test_S20344C7()
{
  extern Class_Descriptor cd_S20344C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20344C7, buf);
    S20344C7 *dp, &lv = *(dp=new (buf) S20344C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20344C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20344C7)");
    check_base_class_offset(lv, (S20344C6_nt*)(S20344C5*), ABISELECT(8,4), "S20344C7");
    check_base_class_offset(lv, (S20344C5*), ABISELECT(8,4), "S20344C7");
    /*is_ambiguous_... S20344C7::S20344C6_nt */ AMB_check_base_class_offset(lv, (S20344C6_nt*), 0, "S20344C7");
    test_class_info(&lv, &cd_S20344C7);
    dp->~S20344C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20344C7(Test_S20344C7, "S20344C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20344C7C1Ev();
extern void _ZN8S20344C7D1Ev();
Name_Map name_map_S20344C7[] = {
  NSPAIR(_ZN8S20344C7C1Ev),
  NSPAIR(_ZN8S20344C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20344C6_nt;
extern VTBL_ENTRY _ZTI11S20344C6_nt[];
extern  VTBL_ENTRY _ZTV11S20344C6_nt[];
extern Class_Descriptor cd_S20344C5;
extern VTBL_ENTRY _ZTI8S20344C5[];
extern  VTBL_ENTRY _ZTV8S20344C5[];
extern Class_Descriptor cd_S20344C6_nt;
extern VTBL_ENTRY _ZTI11S20344C6_nt[];
extern  VTBL_ENTRY _ZTV11S20344C6_nt[];
static Base_Class bases_S20344C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20344C6_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_S20344C5,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20344C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20344C7[];
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C73v20Ev();
extern void _ZN8S20344C73v21Ev();
extern void _ZN8S20344C73v22Ev();
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C53v13Ev();
extern void _ZN8S20344C53v14Ev();
extern void _ZN8S20344C53v15Ev();
extern void _ZN8S20344C53v16Ev();
extern void _ZN8S20344C53v17Ev();
extern void _ZN8S20344C53v18Ev();
extern void _ZN8S20344C53v19Ev();
static  VTBL_ENTRY vtc_S20344C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20344C7[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20344C7[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v19Ev,
};
extern VTBL_ENTRY _ZTV8S20344C7[];
static  VTT_ENTRY vtt_S20344C7[] = {
  {&(_ZTV8S20344C7[3]),  3,31},
  {&(_ZTV8S20344C7[21]),  21,31},
};
extern VTBL_ENTRY _ZTI8S20344C7[];
extern  VTBL_ENTRY _ZTV8S20344C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20344C7[];
Class_Descriptor cd_S20344C7 = {  "S20344C7", // class name
  bases_S20344C7, 3,
  &(vtc_S20344C7[0]), // expected_vtbl_contents
  &(vtt_S20344C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20344C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20344C7),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20344C7),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20344C4  : virtual S20344C5 , virtual S20344C7 {
  char s20344c4f0;
  virtual void  v23(); // _ZN8S20344C43v23Ev
  virtual void  v24(); // _ZN8S20344C43v24Ev
  ~S20344C4(); // tgen
  S20344C4(); // tgen
};
//SIG(-1 S20344C4) C1{ VBC2{ BC3{ v3 v4 v5} v6 v7 v8 v9 v10 v11 v12 Fi} VBC4{ VBC2 BC3 v13 v14 v15} v1 v2 Fc}


void  S20344C4 ::v23(){vfunc_called(this, "_ZN8S20344C43v23Ev");}
void  S20344C4 ::v24(){vfunc_called(this, "_ZN8S20344C43v24Ev");}
S20344C4 ::~S20344C4(){ note_dtor("S20344C4", this);} // tgen
S20344C4 ::S20344C4(){ note_ctor("S20344C4", this);} // tgen

static void Test_S20344C4()
{
  extern Class_Descriptor cd_S20344C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20344C4, buf);
    S20344C4 *dp, &lv = *(dp=new (buf) S20344C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20344C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20344C4)");
    check_base_class_offset(lv, (S20344C6_nt*)(S20344C5*), ABISELECT(16,8), "S20344C4");
    check_base_class_offset(lv, (S20344C5*), ABISELECT(16,8), "S20344C4");
    check_base_class_offset(lv, (S20344C5*)(S20344C7*), ABISELECT(16,8), "S20344C4");
    /*is_ambiguous_... S20344C7::S20344C6_nt */ AMB_check_base_class_offset(lv, (S20344C6_nt*)(S20344C7*), 0, "S20344C4");
    check_base_class_offset(lv, (S20344C7*), 0, "S20344C4");
    check_field_offset(lv, s20344c4f0, ABISELECT(8,4), "S20344C4.s20344c4f0");
    test_class_info(&lv, &cd_S20344C4);
    dp->~S20344C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20344C4(Test_S20344C4, "S20344C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20344C4C1Ev();
extern void _ZN8S20344C4D1Ev();
Name_Map name_map_S20344C4[] = {
  NSPAIR(_ZN8S20344C4C1Ev),
  NSPAIR(_ZN8S20344C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20344C6_nt;
extern VTBL_ENTRY _ZTI11S20344C6_nt[];
extern  VTBL_ENTRY _ZTV11S20344C6_nt[];
extern Class_Descriptor cd_S20344C5;
extern VTBL_ENTRY _ZTI8S20344C5[];
extern  VTBL_ENTRY _ZTV8S20344C5[];
extern Class_Descriptor cd_S20344C6_nt;
extern VTBL_ENTRY _ZTI11S20344C6_nt[];
extern  VTBL_ENTRY _ZTV11S20344C6_nt[];
extern Class_Descriptor cd_S20344C7;
extern VTBL_ENTRY _ZTI8S20344C7[];
extern  VTBL_ENTRY _ZTV8S20344C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20344C7[];
static Base_Class bases_S20344C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20344C6_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20344C5,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20344C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20344C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20344C4[];
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C73v20Ev();
extern void _ZN8S20344C73v21Ev();
extern void _ZN8S20344C73v22Ev();
extern void _ZN8S20344C43v23Ev();
extern void _ZN8S20344C43v24Ev();
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C53v13Ev();
extern void _ZN8S20344C53v14Ev();
extern void _ZN8S20344C53v15Ev();
extern void _ZN8S20344C53v16Ev();
extern void _ZN8S20344C53v17Ev();
extern void _ZN8S20344C53v18Ev();
extern void _ZN8S20344C53v19Ev();
static  VTBL_ENTRY vtc_S20344C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20344C4[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20344C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20344C43v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20344C4[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v19Ev,
};
extern VTBL_ENTRY _ZTV8S20344C4[];
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C73v20Ev();
extern void _ZN8S20344C73v21Ev();
extern void _ZN8S20344C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20344C7__8S20344C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20344C7[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v22Ev,
};
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C53v13Ev();
extern void _ZN8S20344C53v14Ev();
extern void _ZN8S20344C53v15Ev();
extern void _ZN8S20344C53v16Ev();
extern void _ZN8S20344C53v17Ev();
extern void _ZN8S20344C53v18Ev();
extern void _ZN8S20344C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20344C5__8S20344C7__8S20344C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20344C7[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v19Ev,
};
static  VTT_ENTRY vtt_S20344C4[] = {
  {&(_ZTV8S20344C4[10]),  10,40},
  {&(_ZTV8S20344C4[30]),  30,40},
  {&(_ZTV8S20344C4[10]),  10,40},
  {&(_tg__ZTV8S20344C7__8S20344C4[3]),  3,9},
  {&(_tg__ZTV8S20344C5__8S20344C7__8S20344C4[12]),  12,22},
};
extern VTBL_ENTRY _ZTI8S20344C4[];
extern  VTBL_ENTRY _ZTV8S20344C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20344C4[];
Class_Descriptor cd_S20344C4 = {  "S20344C4", // class name
  bases_S20344C4, 4,
  &(vtc_S20344C4[0]), // expected_vtbl_contents
  &(vtt_S20344C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20344C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20344C4),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20344C4),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20344C1  : virtual S20344C2 , virtual S20344C4 {
  __tsi64 s20344c1f0;
  virtual void  v1(); // _ZN8S20344C12v1Ev
  virtual void  v2(); // _ZN8S20344C12v2Ev
  virtual void  v3(); // _ZN8S20344C12v3Ev
  virtual void  v4(); // _ZN8S20344C12v4Ev
  virtual void  v5(); // _ZN8S20344C12v5Ev
  virtual void  v6(); // _ZN8S20344C12v6Ev
  ~S20344C1(); // tgen
  S20344C1(); // tgen
};
//SIG(1 S20344C1) C1{ VBC2{ v7 v8 v9 Fp[6] FC3{ v25 v26} Fi} VBC4{ VBC5{ BC6{ v10 v11 v12} v13 v14 v15 v16 v17 v18 v19 Fi} VBC7{ VBC5 BC6 v20 v21 v22} v23 v24 Fc} v1 v2 v3 v4 v5 v6 FL}


void  S20344C1 ::v1(){vfunc_called(this, "_ZN8S20344C12v1Ev");}
void  S20344C1 ::v2(){vfunc_called(this, "_ZN8S20344C12v2Ev");}
void  S20344C1 ::v3(){vfunc_called(this, "_ZN8S20344C12v3Ev");}
void  S20344C1 ::v4(){vfunc_called(this, "_ZN8S20344C12v4Ev");}
void  S20344C1 ::v5(){vfunc_called(this, "_ZN8S20344C12v5Ev");}
void  S20344C1 ::v6(){vfunc_called(this, "_ZN8S20344C12v6Ev");}
S20344C1 ::~S20344C1(){ note_dtor("S20344C1", this);} // tgen
S20344C1 ::S20344C1(){ note_ctor("S20344C1", this);} // tgen

static void Test_S20344C1()
{
  extern Class_Descriptor cd_S20344C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S20344C1, buf);
    S20344C1 *dp, &lv = *(dp=new (buf) S20344C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S20344C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20344C1)");
    check_base_class_offset(lv, (S20344C2*), ABISELECT(16,12), "S20344C1");
    check_base_class_offset(lv, (S20344C6_nt*)(S20344C5*), ABISELECT(104,56), "S20344C1");
    check_base_class_offset(lv, (S20344C5*)(S20344C4*), ABISELECT(104,56), "S20344C1");
    check_base_class_offset(lv, (S20344C5*)(S20344C7*), ABISELECT(104,56), "S20344C1");
    /*is_ambiguous_... S20344C7::S20344C6_nt */ AMB_check_base_class_offset(lv, (S20344C6_nt*)(S20344C7*), 0, "S20344C1");
    check_base_class_offset(lv, (S20344C7*)(S20344C4*), 0, "S20344C1");
    check_base_class_offset(lv, (S20344C4*), ABISELECT(88,48), "S20344C1");
    check_field_offset(lv, s20344c1f0, ABISELECT(8,4), "S20344C1.s20344c1f0");
    test_class_info(&lv, &cd_S20344C1);
    dp->~S20344C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20344C1(Test_S20344C1, "S20344C1", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN8S20344C1C1Ev();
extern void _ZN8S20344C1D1Ev();
Name_Map name_map_S20344C1[] = {
  NSPAIR(_ZN8S20344C1C1Ev),
  NSPAIR(_ZN8S20344C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20344C2;
extern VTBL_ENTRY _ZTI8S20344C2[];
extern  VTBL_ENTRY _ZTV8S20344C2[];
extern Class_Descriptor cd_S20344C6_nt;
extern VTBL_ENTRY _ZTI11S20344C6_nt[];
extern  VTBL_ENTRY _ZTV11S20344C6_nt[];
extern Class_Descriptor cd_S20344C5;
extern VTBL_ENTRY _ZTI8S20344C5[];
extern  VTBL_ENTRY _ZTV8S20344C5[];
extern Class_Descriptor cd_S20344C6_nt;
extern VTBL_ENTRY _ZTI11S20344C6_nt[];
extern  VTBL_ENTRY _ZTV11S20344C6_nt[];
extern Class_Descriptor cd_S20344C7;
extern VTBL_ENTRY _ZTI8S20344C7[];
extern  VTBL_ENTRY _ZTV8S20344C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20344C7[];
extern Class_Descriptor cd_S20344C4;
extern VTBL_ENTRY _ZTI8S20344C4[];
extern  VTBL_ENTRY _ZTV8S20344C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20344C4[];
static Base_Class bases_S20344C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20344C2,    ABISELECT(16,12), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20344C6_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20344C5,    ABISELECT(104,56), //bcp->offset
    52, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20344C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20344C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20344C4,    ABISELECT(88,48), //bcp->offset
    32, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20344C1[];
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C73v20Ev();
extern void _ZN8S20344C73v21Ev();
extern void _ZN8S20344C73v22Ev();
extern void _ZN8S20344C12v1Ev();
extern void _ZN8S20344C12v2Ev();
extern void _ZN8S20344C12v3Ev();
extern void _ZN8S20344C12v4Ev();
extern void _ZN8S20344C12v5Ev();
extern void _ZN8S20344C12v6Ev();
extern void _ZN8S20344C22v7Ev();
extern void _ZN8S20344C22v8Ev();
extern void _ZN8S20344C22v9Ev();
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C73v20Ev();
extern void _ZN8S20344C73v21Ev();
extern void _ZN8S20344C73v22Ev();
extern void _ZN8S20344C43v23Ev();
extern void _ZN8S20344C43v24Ev();
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C53v13Ev();
extern void _ZN8S20344C53v14Ev();
extern void _ZN8S20344C53v15Ev();
extern void _ZN8S20344C53v16Ev();
extern void _ZN8S20344C53v17Ev();
extern void _ZN8S20344C53v18Ev();
extern void _ZN8S20344C53v19Ev();
static  VTBL_ENTRY vtc_S20344C1[] = {
  0,
  ABISELECT(88,48),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20344C1[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20344C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20344C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20344C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20344C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20344C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20344C12v6Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20344C1[0]),
  (VTBL_ENTRY)&_ZN8S20344C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20344C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20344C22v9Ev,
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(16,8),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20344C1[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20344C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20344C43v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20344C1[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v19Ev,
};
extern VTBL_ENTRY _ZTV8S20344C1[];
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C73v20Ev();
extern void _ZN8S20344C73v21Ev();
extern void _ZN8S20344C73v22Ev();
extern void _ZN8S20344C43v23Ev();
extern void _ZN8S20344C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20344C4__8S20344C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20344C4[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20344C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20344C43v24Ev,
};
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C53v13Ev();
extern void _ZN8S20344C53v14Ev();
extern void _ZN8S20344C53v15Ev();
extern void _ZN8S20344C53v16Ev();
extern void _ZN8S20344C53v17Ev();
extern void _ZN8S20344C53v18Ev();
extern void _ZN8S20344C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20344C5__8S20344C4__8S20344C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20344C4[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v19Ev,
};
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C73v20Ev();
extern void _ZN8S20344C73v21Ev();
extern void _ZN8S20344C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20344C7__8S20344C4__8S20344C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,56),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S20344C4[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v22Ev,
};
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C73v20Ev();
extern void _ZN8S20344C73v21Ev();
extern void _ZN8S20344C73v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20344C7__8S20344C1[] = {
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20344C7[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20344C73v22Ev,
};
extern void _ZN11S20344C6_nt3v10Ev();
extern void _ZN11S20344C6_nt3v11Ev();
extern void _ZN11S20344C6_nt3v12Ev();
extern void _ZN8S20344C53v13Ev();
extern void _ZN8S20344C53v14Ev();
extern void _ZN8S20344C53v15Ev();
extern void _ZN8S20344C53v16Ev();
extern void _ZN8S20344C53v17Ev();
extern void _ZN8S20344C53v18Ev();
extern void _ZN8S20344C53v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20344C5__8S20344C7__8S20344C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20344C7[0]),
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20344C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v18Ev,
  (VTBL_ENTRY)&_ZN8S20344C53v19Ev,
};
static  VTT_ENTRY vtt_S20344C1[] = {
  {&(_ZTV8S20344C1[12]),  12,74},
  {&(_ZTV8S20344C1[29]),  29,74},
  {&(_ZTV8S20344C1[44]),  44,74},
  {&(_ZTV8S20344C1[64]),  64,74},
  {&(_ZTV8S20344C1[12]),  12,74},
  {&(_tg__ZTV8S20344C4__8S20344C1[10]),  10,18},
  {&(_tg__ZTV8S20344C5__8S20344C4__8S20344C1[12]),  12,22},
  {&(_tg__ZTV8S20344C7__8S20344C4__8S20344C1[9]),  9,15},
  {&(_tg__ZTV8S20344C7__8S20344C1[3]),  3,9},
  {&(_tg__ZTV8S20344C5__8S20344C7__8S20344C1[12]),  12,22},
};
extern VTBL_ENTRY _ZTI8S20344C1[];
extern  VTBL_ENTRY _ZTV8S20344C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20344C1[];
Class_Descriptor cd_S20344C1 = {  "S20344C1", // class name
  bases_S20344C1, 6,
  &(vtc_S20344C1[0]), // expected_vtbl_contents
  &(vtt_S20344C1[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI8S20344C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20344C1),74, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20344C1),10, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1535C4  {
  void *s1535c4f0;
  virtual void  v7(); // _ZN7S1535C42v7Ev
  virtual void  v8(); // _ZN7S1535C42v8Ev
  virtual void  v9(); // _ZN7S1535C42v9Ev
  virtual void  v10(); // _ZN7S1535C43v10Ev
  ~S1535C4(); // tgen
  S1535C4(); // tgen
};
//SIG(-1 S1535C4) C1{ v1 v2 v3 v4 Fp}


void  S1535C4 ::v7(){vfunc_called(this, "_ZN7S1535C42v7Ev");}
void  S1535C4 ::v8(){vfunc_called(this, "_ZN7S1535C42v8Ev");}
void  S1535C4 ::v9(){vfunc_called(this, "_ZN7S1535C42v9Ev");}
void  S1535C4 ::v10(){vfunc_called(this, "_ZN7S1535C43v10Ev");}
S1535C4 ::~S1535C4(){ note_dtor("S1535C4", this);} // tgen
S1535C4 ::S1535C4(){ note_ctor("S1535C4", this);} // tgen

static void Test_S1535C4()
{
  extern Class_Descriptor cd_S1535C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1535C4, buf);
    S1535C4 *dp, &lv = *(dp=new (buf) S1535C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1535C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1535C4)");
    check_field_offset(lv, s1535c4f0, ABISELECT(8,4), "S1535C4.s1535c4f0");
    test_class_info(&lv, &cd_S1535C4);
    dp->~S1535C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1535C4(Test_S1535C4, "S1535C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1535C4C1Ev();
extern void _ZN7S1535C4D1Ev();
Name_Map name_map_S1535C4[] = {
  NSPAIR(_ZN7S1535C4C1Ev),
  NSPAIR(_ZN7S1535C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1535C4[];
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
static  VTBL_ENTRY vtc_S1535C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1535C4[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
Class_Descriptor cd_S1535C4 = {  "S1535C4", // class name
  0,0,//no base classes
  &(vtc_S1535C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1535C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1535C4),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  S1535C3  : S1535C4 {
  void *s1535c3f0;
  __tsi64 s1535c3f1;
  virtual void  v11(); // _ZN7S1535C33v11Ev
  virtual void  v12(); // _ZN7S1535C33v12Ev
  ~S1535C3(); // tgen
  S1535C3(); // tgen
};
//SIG(-1 S1535C3) C1{ BC2{ v3 v4 v5 v6 Fp} v1 v2 Fp FL}


void  S1535C3 ::v11(){vfunc_called(this, "_ZN7S1535C33v11Ev");}
void  S1535C3 ::v12(){vfunc_called(this, "_ZN7S1535C33v12Ev");}
S1535C3 ::~S1535C3(){ note_dtor("S1535C3", this);} // tgen
S1535C3 ::S1535C3(){ note_ctor("S1535C3", this);} // tgen

static void Test_S1535C3()
{
  extern Class_Descriptor cd_S1535C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1535C3, buf);
    S1535C3 *dp, &lv = *(dp=new (buf) S1535C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1535C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1535C3)");
    check_base_class_offset(lv, (S1535C4*), 0, "S1535C3");
    check_field_offset(lv, s1535c3f0, ABISELECT(16,8), "S1535C3.s1535c3f0");
    check_field_offset(lv, s1535c3f1, ABISELECT(24,12), "S1535C3.s1535c3f1");
    test_class_info(&lv, &cd_S1535C3);
    dp->~S1535C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1535C3(Test_S1535C3, "S1535C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1535C3C1Ev();
extern void _ZN7S1535C3D1Ev();
Name_Map name_map_S1535C3[] = {
  NSPAIR(_ZN7S1535C3C1Ev),
  NSPAIR(_ZN7S1535C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
static Base_Class bases_S1535C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1535C3[];
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
static  VTBL_ENTRY vtc_S1535C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1535C3[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1535C3[];
extern  VTBL_ENTRY _ZTV7S1535C3[];
Class_Descriptor cd_S1535C3 = {  "S1535C3", // class name
  bases_S1535C3, 1,
  &(vtc_S1535C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1535C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1535C3),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  S1535C6  : S1535C4 {
  int s1535c6f0;
  virtual  ~S1535C6(); // _ZN7S1535C6D1Ev
  virtual void  v13(); // _ZN7S1535C63v13Ev
  virtual void  v14(); // _ZN7S1535C63v14Ev
  virtual void  v15(); // _ZN7S1535C63v15Ev
  virtual void  v16(); // _ZN7S1535C63v16Ev
  S1535C6(); // tgen
};
//SIG(-1 S1535C6) C1{ BC2{ v5 v6 v7 v8 Fp} vd v1 v2 v3 v4 Fi}


 S1535C6 ::~S1535C6(){ note_dtor("S1535C6", this);}
void  S1535C6 ::v13(){vfunc_called(this, "_ZN7S1535C63v13Ev");}
void  S1535C6 ::v14(){vfunc_called(this, "_ZN7S1535C63v14Ev");}
void  S1535C6 ::v15(){vfunc_called(this, "_ZN7S1535C63v15Ev");}
void  S1535C6 ::v16(){vfunc_called(this, "_ZN7S1535C63v16Ev");}
S1535C6 ::S1535C6(){ note_ctor("S1535C6", this);} // tgen

static void Test_S1535C6()
{
  extern Class_Descriptor cd_S1535C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1535C6, buf);
    S1535C6 *dp, &lv = *(dp=new (buf) S1535C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1535C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1535C6)");
    check_base_class_offset(lv, (S1535C4*), 0, "S1535C6");
    check_field_offset(lv, s1535c6f0, ABISELECT(16,8), "S1535C6.s1535c6f0");
    test_class_info(&lv, &cd_S1535C6);
    dp->~S1535C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1535C6(Test_S1535C6, "S1535C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1535C6C1Ev();
extern void _ZN7S1535C6D1Ev();
Name_Map name_map_S1535C6[] = {
  NSPAIR(_ZN7S1535C6C1Ev),
  NSPAIR(_ZN7S1535C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
static Base_Class bases_S1535C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1535C6[];
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C6D1Ev();
extern void _ZN7S1535C6D0Ev();
extern void _ZN7S1535C63v13Ev();
extern void _ZN7S1535C63v14Ev();
extern void _ZN7S1535C63v15Ev();
extern void _ZN7S1535C63v16Ev();
static  VTBL_ENTRY vtc_S1535C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1535C6[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1535C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v16Ev,
};
extern VTBL_ENTRY _ZTI7S1535C6[];
extern  VTBL_ENTRY _ZTV7S1535C6[];
Class_Descriptor cd_S1535C6 = {  "S1535C6", // class name
  bases_S1535C6, 1,
  &(vtc_S1535C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1535C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1535C6),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1535C5  : virtual S1535C3 , S1535C6 {
  char s1535c5f0[7];
  virtual  ~S1535C5(); // _ZN7S1535C5D2Ev
  virtual void  v17(); // _ZN7S1535C53v17Ev
  virtual void  v18(); // _ZN7S1535C53v18Ev
  virtual void  v19(); // _ZN7S1535C53v19Ev
  virtual void  v20(); // _ZN7S1535C53v20Ev
  virtual void  v21(); // _ZN7S1535C53v21Ev
  S1535C5(); // tgen
};
//SIG(-1 S1535C5) C1{ VBC2{ BC3{ v6 v7 v8 v9 Fp} v10 v11 Fp FL} BC4{ BC3 vd v12 v13 v14 v15 Fi} vd v1 v2 v3 v4 v5 Fc[7]}


 S1535C5 ::~S1535C5(){ note_dtor("S1535C5", this);}
void  S1535C5 ::v17(){vfunc_called(this, "_ZN7S1535C53v17Ev");}
void  S1535C5 ::v18(){vfunc_called(this, "_ZN7S1535C53v18Ev");}
void  S1535C5 ::v19(){vfunc_called(this, "_ZN7S1535C53v19Ev");}
void  S1535C5 ::v20(){vfunc_called(this, "_ZN7S1535C53v20Ev");}
void  S1535C5 ::v21(){vfunc_called(this, "_ZN7S1535C53v21Ev");}
S1535C5 ::S1535C5(){ note_ctor("S1535C5", this);} // tgen

static void Test_S1535C5()
{
  extern Class_Descriptor cd_S1535C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S1535C5, buf);
    S1535C5 *dp, &lv = *(dp=new (buf) S1535C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S1535C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1535C5)");
    check_base_class_offset(lv, (S1535C4*)(S1535C3*), ABISELECT(32,20), "S1535C5");
    check_base_class_offset(lv, (S1535C3*), ABISELECT(32,20), "S1535C5");
    check_base_class_offset(lv, (S1535C4*)(S1535C6*), 0, "S1535C5");
    check_base_class_offset(lv, (S1535C6*), 0, "S1535C5");
    check_field_offset(lv, s1535c5f0, ABISELECT(20,12), "S1535C5.s1535c5f0");
    test_class_info(&lv, &cd_S1535C5);
    dp->~S1535C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1535C5(Test_S1535C5, "S1535C5", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S1535C5C1Ev();
extern void _ZN7S1535C5D2Ev();
Name_Map name_map_S1535C5[] = {
  NSPAIR(_ZN7S1535C5C1Ev),
  NSPAIR(_ZN7S1535C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
extern Class_Descriptor cd_S1535C3;
extern VTBL_ENTRY _ZTI7S1535C3[];
extern  VTBL_ENTRY _ZTV7S1535C3[];
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
extern Class_Descriptor cd_S1535C6;
extern VTBL_ENTRY _ZTI7S1535C6[];
extern  VTBL_ENTRY _ZTV7S1535C6[];
static Base_Class bases_S1535C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1535C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1535C3,    ABISELECT(32,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1535C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1535C5[];
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C5D1Ev();
extern void _ZN7S1535C5D0Ev();
extern void _ZN7S1535C63v13Ev();
extern void _ZN7S1535C63v14Ev();
extern void _ZN7S1535C63v15Ev();
extern void _ZN7S1535C63v16Ev();
extern void _ZN7S1535C53v17Ev();
extern void _ZN7S1535C53v18Ev();
extern void _ZN7S1535C53v19Ev();
extern void _ZN7S1535C53v20Ev();
extern void _ZN7S1535C53v21Ev();
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
static  VTBL_ENTRY vtc_S1535C5[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1535C5[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1535C5[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
};
extern VTBL_ENTRY _ZTV7S1535C5[];
static  VTT_ENTRY vtt_S1535C5[] = {
  {&(_ZTV7S1535C5[3]),  3,32},
  {&(_ZTV7S1535C5[26]),  26,32},
};
extern VTBL_ENTRY _ZTI7S1535C5[];
extern  VTBL_ENTRY _ZTV7S1535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1535C5[];
Class_Descriptor cd_S1535C5 = {  "S1535C5", // class name
  bases_S1535C5, 4,
  &(vtc_S1535C5[0]), // expected_vtbl_contents
  &(vtt_S1535C5[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S1535C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1535C5),32, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1535C5),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1535C2  : S1535C3 , virtual S1535C5 {
  short s1535c2f0[6];
  virtual void  v22(); // _ZN7S1535C23v22Ev
  virtual void  v23(); // _ZN7S1535C23v23Ev
  virtual void  v24(); // _ZN7S1535C23v24Ev
  ~S1535C2(); // tgen
  S1535C2(); // tgen
};
//SIG(-1 S1535C2) C1{ BC2{ BC3{ v4 v5 v6 v7 Fp} v8 v9 Fp FL} VBC4{ VBC2 BC5{ BC3 vd v10 v11 v12 v13 Fi} vd v14 v15 v16 v17 v18 Fc[7]} v1 v2 v3 Fs[6]}


void  S1535C2 ::v22(){vfunc_called(this, "_ZN7S1535C23v22Ev");}
void  S1535C2 ::v23(){vfunc_called(this, "_ZN7S1535C23v23Ev");}
void  S1535C2 ::v24(){vfunc_called(this, "_ZN7S1535C23v24Ev");}
S1535C2 ::~S1535C2(){ note_dtor("S1535C2", this);} // tgen
S1535C2 ::S1535C2(){ note_ctor("S1535C2", this);} // tgen

static void Test_S1535C2()
{
  extern Class_Descriptor cd_S1535C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S1535C2, buf);
    S1535C2 *dp, &lv = *(dp=new (buf) S1535C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S1535C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1535C2)");
    /*is_ambiguous_... S1535C2::S1535C3 */ AMB_check_base_class_offset(lv, (S1535C4*)(S1535C3*), 0, "S1535C2");
    /*is_ambiguous_... S1535C2::S1535C3 */ AMB_check_base_class_offset(lv, (S1535C3*), 0, "S1535C2");
    /*is_ambiguous_... S1535C2::S1535C3 */ AMB_check_base_class_offset(lv, (S1535C4*)(S1535C3*), ABISELECT(80,52), "S1535C2");
    check_base_class_offset(lv, (S1535C3*)(S1535C5*), ABISELECT(80,52), "S1535C2");
    check_base_class_offset(lv, (S1535C4*)(S1535C6*)(S1535C5*), ABISELECT(48,32), "S1535C2");
    check_base_class_offset(lv, (S1535C6*)(S1535C5*), ABISELECT(48,32), "S1535C2");
    check_base_class_offset(lv, (S1535C5*), ABISELECT(48,32), "S1535C2");
    check_field_offset(lv, s1535c2f0, ABISELECT(32,20), "S1535C2.s1535c2f0");
    test_class_info(&lv, &cd_S1535C2);
    dp->~S1535C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1535C2(Test_S1535C2, "S1535C2", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S1535C2C1Ev();
extern void _ZN7S1535C2D1Ev();
Name_Map name_map_S1535C2[] = {
  NSPAIR(_ZN7S1535C2C1Ev),
  NSPAIR(_ZN7S1535C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
extern Class_Descriptor cd_S1535C3;
extern VTBL_ENTRY _ZTI7S1535C3[];
extern  VTBL_ENTRY _ZTV7S1535C3[];
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
extern Class_Descriptor cd_S1535C3;
extern VTBL_ENTRY _ZTI7S1535C3[];
extern  VTBL_ENTRY _ZTV7S1535C3[];
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
extern Class_Descriptor cd_S1535C6;
extern VTBL_ENTRY _ZTI7S1535C6[];
extern  VTBL_ENTRY _ZTV7S1535C6[];
extern Class_Descriptor cd_S1535C5;
extern VTBL_ENTRY _ZTI7S1535C5[];
extern  VTBL_ENTRY _ZTV7S1535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1535C5[];
static Base_Class bases_S1535C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1535C4,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1535C3,    ABISELECT(80,52), //bcp->offset
    47, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1535C4,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1535C6,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1535C5,    ABISELECT(48,32), //bcp->offset
    15, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1535C2[];
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
extern void _ZN7S1535C23v22Ev();
extern void _ZN7S1535C23v23Ev();
extern void _ZN7S1535C23v24Ev();
extern void _ZN7S1535C2D1Ev();
extern void _ZN7S1535C2D0Ev();
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void ABISELECT(_ZTv0_n64_N7S1535C2D1Ev,_ZTv0_n32_N7S1535C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S1535C2D1Ev,_ZThn32_N7S1535C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S1535C2D0Ev,_ZTv0_n32_N7S1535C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S1535C2D0Ev,_ZThn32_N7S1535C2D0Ev)() __attribute__((weak));
extern void _ZN7S1535C63v13Ev();
extern void _ZN7S1535C63v14Ev();
extern void _ZN7S1535C63v15Ev();
extern void _ZN7S1535C63v16Ev();
extern void _ZN7S1535C53v17Ev();
extern void _ZN7S1535C53v18Ev();
extern void _ZN7S1535C53v19Ev();
extern void _ZN7S1535C53v20Ev();
extern void _ZN7S1535C53v21Ev();
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
static  VTBL_ENTRY vtc_S1535C2[] = {
  ABISELECT(80,52),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1535C2[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1535C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1535C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1535C2D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S1535C2[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S1535C2D1Ev,_ZTv0_n32_N7S1535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S1535C2D0Ev,_ZTv0_n32_N7S1535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1535C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S1535C2[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
};
extern VTBL_ENTRY _ZTV7S1535C2[];
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C5D1Ev();
extern void _ZN7S1535C5D0Ev();
extern void _ZN7S1535C63v13Ev();
extern void _ZN7S1535C63v14Ev();
extern void _ZN7S1535C63v15Ev();
extern void _ZN7S1535C63v16Ev();
extern void _ZN7S1535C53v17Ev();
extern void _ZN7S1535C53v18Ev();
extern void _ZN7S1535C53v19Ev();
extern void _ZN7S1535C53v20Ev();
extern void _ZN7S1535C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1535C5__7S1535C2[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1535C5[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v21Ev,
};
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1535C3__7S1535C5__7S1535C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1535C5[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
};
static  VTT_ENTRY vtt_S1535C2[] = {
  {&(_ZTV7S1535C2[4]),  4,61},
  {&(_ZTV7S1535C2[32]),  32,61},
  {&(_ZTV7S1535C2[55]),  55,61},
  {&(_tg__ZTV7S1535C5__7S1535C2[3]),  3,18},
  {&(_tg__ZTV7S1535C3__7S1535C5__7S1535C2[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S1535C2[];
extern  VTBL_ENTRY _ZTV7S1535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1535C2[];
static VTBL_ENTRY alt_thunk_names162[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S1535C2D0Ev,_ZTv0_n32_N7S1535C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S1535C2D0Ev,_ZThn32_N7S1535C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S1535C2D1Ev,_ZTv0_n32_N7S1535C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S1535C2D1Ev,_ZThn32_N7S1535C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1535C2 = {  "S1535C2", // class name
  bases_S1535C2, 7,
  &(vtc_S1535C2[0]), // expected_vtbl_contents
  &(vtt_S1535C2[0]), // expected_vtt_contents
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S1535C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1535C2),61, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1535C2),5, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names162,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1535C1  : S1535C2 {
  virtual  ~S1535C1(); // _ZN7S1535C1D2Ev
  virtual void  v1(); // _ZN7S1535C12v1Ev
  virtual void  v2(); // _ZN7S1535C12v2Ev
  virtual void  v3(); // _ZN7S1535C12v3Ev
  virtual void  v4(); // _ZN7S1535C12v4Ev
  virtual void  v5(); // _ZN7S1535C12v5Ev
  virtual void  v6(); // _ZN7S1535C12v6Ev
  S1535C1(); // tgen
};
//SIG(1 S1535C1) C1{ BC2{ BC3{ BC4{ v7 v8 v9 v10 Fp} v11 v12 Fp FL} VBC5{ VBC3 BC6{ BC4 vd v13 v14 v15 v16 Fi} vd v17 v18 v19 v20 v21 Fc[7]} v22 v23 v24 Fs[6]} vd v1 v2 v3 v4 v5 v6}


 S1535C1 ::~S1535C1(){ note_dtor("S1535C1", this);}
void  S1535C1 ::v1(){vfunc_called(this, "_ZN7S1535C12v1Ev");}
void  S1535C1 ::v2(){vfunc_called(this, "_ZN7S1535C12v2Ev");}
void  S1535C1 ::v3(){vfunc_called(this, "_ZN7S1535C12v3Ev");}
void  S1535C1 ::v4(){vfunc_called(this, "_ZN7S1535C12v4Ev");}
void  S1535C1 ::v5(){vfunc_called(this, "_ZN7S1535C12v5Ev");}
void  S1535C1 ::v6(){vfunc_called(this, "_ZN7S1535C12v6Ev");}
S1535C1 ::S1535C1(){ note_ctor("S1535C1", this);} // tgen

static void Test_S1535C1()
{
  extern Class_Descriptor cd_S1535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S1535C1, buf);
    S1535C1 *dp, &lv = *(dp=new (buf) S1535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S1535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1535C1)");
    /*is_ambiguous_... S1535C2::S1535C3 */ AMB_check_base_class_offset(lv, (S1535C4*)(S1535C3*)(S1535C2*), 0, "S1535C1");
    /*is_ambiguous_... S1535C2::S1535C3 */ AMB_check_base_class_offset(lv, (S1535C3*)(S1535C2*), 0, "S1535C1");
    /*is_ambiguous_... S1535C1::S1535C3 */ AMB_check_base_class_offset(lv, (S1535C4*)(S1535C3*), ABISELECT(80,52), "S1535C1");
    check_base_class_offset(lv, (S1535C3*)(S1535C5*), ABISELECT(80,52), "S1535C1");
    check_base_class_offset(lv, (S1535C4*)(S1535C6*)(S1535C5*), ABISELECT(48,32), "S1535C1");
    check_base_class_offset(lv, (S1535C6*)(S1535C5*), ABISELECT(48,32), "S1535C1");
    check_base_class_offset(lv, (S1535C5*)(S1535C2*), ABISELECT(48,32), "S1535C1");
    check_base_class_offset(lv, (S1535C2*), 0, "S1535C1");
    test_class_info(&lv, &cd_S1535C1);
    dp->~S1535C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1535C1(Test_S1535C1, "S1535C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S1535C1C1Ev();
extern void _ZN7S1535C1D2Ev();
Name_Map name_map_S1535C1[] = {
  NSPAIR(_ZN7S1535C1C1Ev),
  NSPAIR(_ZN7S1535C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
extern Class_Descriptor cd_S1535C3;
extern VTBL_ENTRY _ZTI7S1535C3[];
extern  VTBL_ENTRY _ZTV7S1535C3[];
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
extern Class_Descriptor cd_S1535C3;
extern VTBL_ENTRY _ZTI7S1535C3[];
extern  VTBL_ENTRY _ZTV7S1535C3[];
extern Class_Descriptor cd_S1535C4;
extern VTBL_ENTRY _ZTI7S1535C4[];
extern  VTBL_ENTRY _ZTV7S1535C4[];
extern Class_Descriptor cd_S1535C6;
extern VTBL_ENTRY _ZTI7S1535C6[];
extern  VTBL_ENTRY _ZTV7S1535C6[];
extern Class_Descriptor cd_S1535C5;
extern VTBL_ENTRY _ZTI7S1535C5[];
extern  VTBL_ENTRY _ZTV7S1535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1535C5[];
extern Class_Descriptor cd_S1535C2;
extern VTBL_ENTRY _ZTI7S1535C2[];
extern  VTBL_ENTRY _ZTV7S1535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1535C2[];
static Base_Class bases_S1535C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1535C4,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1535C3,    ABISELECT(80,52), //bcp->offset
    53, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1535C4,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1535C6,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1535C5,    ABISELECT(48,32), //bcp->offset
    21, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1535C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1535C1[];
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
extern void _ZN7S1535C23v22Ev();
extern void _ZN7S1535C23v23Ev();
extern void _ZN7S1535C23v24Ev();
extern void _ZN7S1535C1D1Ev();
extern void _ZN7S1535C1D0Ev();
extern void _ZN7S1535C12v1Ev();
extern void _ZN7S1535C12v2Ev();
extern void _ZN7S1535C12v3Ev();
extern void _ZN7S1535C12v4Ev();
extern void _ZN7S1535C12v5Ev();
extern void _ZN7S1535C12v6Ev();
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void ABISELECT(_ZTv0_n64_N7S1535C1D1Ev,_ZTv0_n32_N7S1535C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S1535C1D1Ev,_ZThn32_N7S1535C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S1535C1D0Ev,_ZTv0_n32_N7S1535C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S1535C1D0Ev,_ZThn32_N7S1535C1D0Ev)() __attribute__((weak));
extern void _ZN7S1535C63v13Ev();
extern void _ZN7S1535C63v14Ev();
extern void _ZN7S1535C63v15Ev();
extern void _ZN7S1535C63v16Ev();
extern void _ZN7S1535C53v17Ev();
extern void _ZN7S1535C53v18Ev();
extern void _ZN7S1535C53v19Ev();
extern void _ZN7S1535C53v20Ev();
extern void _ZN7S1535C53v21Ev();
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
static  VTBL_ENTRY vtc_S1535C1[] = {
  ABISELECT(80,52),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1535C1[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1535C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1535C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1535C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1535C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1535C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1535C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1535C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1535C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1535C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S1535C1[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S1535C1D1Ev,_ZTv0_n32_N7S1535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S1535C1D0Ev,_ZTv0_n32_N7S1535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1535C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S1535C1[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
};
extern VTBL_ENTRY _ZTV7S1535C1[];
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
extern void _ZN7S1535C23v22Ev();
extern void _ZN7S1535C23v23Ev();
extern void _ZN7S1535C23v24Ev();
extern void _ZN7S1535C2D1Ev();
extern void _ZN7S1535C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1535C2__7S1535C1[] = {
  ABISELECT(80,52),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1535C2[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1535C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1535C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1535C2D0Ev,
};
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void ABISELECT(_ZTv0_n64_N7S1535C2D1Ev,_ZTv0_n32_N7S1535C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S1535C2D1Ev,_ZThn32_N7S1535C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S1535C2D0Ev,_ZTv0_n32_N7S1535C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S1535C2D0Ev,_ZThn32_N7S1535C2D0Ev)() __attribute__((weak));
extern void _ZN7S1535C63v13Ev();
extern void _ZN7S1535C63v14Ev();
extern void _ZN7S1535C63v15Ev();
extern void _ZN7S1535C63v16Ev();
extern void _ZN7S1535C53v17Ev();
extern void _ZN7S1535C53v18Ev();
extern void _ZN7S1535C53v19Ev();
extern void _ZN7S1535C53v20Ev();
extern void _ZN7S1535C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1535C5__7S1535C2__7S1535C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S1535C2[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S1535C2D1Ev,_ZTv0_n32_N7S1535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S1535C2D0Ev,_ZTv0_n32_N7S1535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1535C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v21Ev,
};
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1535C3__A1__7S1535C2__7S1535C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI7S1535C2[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
};
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C5D1Ev();
extern void _ZN7S1535C5D0Ev();
extern void _ZN7S1535C63v13Ev();
extern void _ZN7S1535C63v14Ev();
extern void _ZN7S1535C63v15Ev();
extern void _ZN7S1535C63v16Ev();
extern void _ZN7S1535C53v17Ev();
extern void _ZN7S1535C53v18Ev();
extern void _ZN7S1535C53v19Ev();
extern void _ZN7S1535C53v20Ev();
extern void _ZN7S1535C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1535C5__7S1535C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1535C5[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v13Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v14Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v15Ev,
  (VTBL_ENTRY)&_ZN7S1535C63v16Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v18Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1535C53v21Ev,
};
extern void _ZN7S1535C42v7Ev();
extern void _ZN7S1535C42v8Ev();
extern void _ZN7S1535C42v9Ev();
extern void _ZN7S1535C43v10Ev();
extern void _ZN7S1535C33v11Ev();
extern void _ZN7S1535C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1535C3__7S1535C5__7S1535C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1535C5[0]),
  (VTBL_ENTRY)&_ZN7S1535C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1535C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1535C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1535C33v12Ev,
};
static  VTT_ENTRY vtt_S1535C1[] = {
  {&(_ZTV7S1535C1[4]),  4,67},
  {&(_tg__ZTV7S1535C2__7S1535C1[4]),  4,15},
  {&(_tg__ZTV7S1535C5__7S1535C2__7S1535C1[17]),  17,32},
  {&(_tg__ZTV7S1535C3__A1__7S1535C2__7S1535C1[8]),  8,14},
  {&(_ZTV7S1535C1[38]),  38,67},
  {&(_ZTV7S1535C1[61]),  61,67},
  {&(_tg__ZTV7S1535C5__7S1535C1[3]),  3,18},
  {&(_tg__ZTV7S1535C3__7S1535C5__7S1535C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S1535C1[];
extern  VTBL_ENTRY _ZTV7S1535C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1535C1[];
static VTBL_ENTRY alt_thunk_names163[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S1535C2D0Ev,_ZTv0_n32_N7S1535C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S1535C2D0Ev,_ZThn32_N7S1535C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S1535C2D1Ev,_ZTv0_n32_N7S1535C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S1535C2D1Ev,_ZThn32_N7S1535C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S1535C1D0Ev,_ZTv0_n32_N7S1535C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S1535C1D0Ev,_ZThn32_N7S1535C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S1535C1D1Ev,_ZTv0_n32_N7S1535C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S1535C1D1Ev,_ZThn32_N7S1535C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1535C1 = {  "S1535C1", // class name
  bases_S1535C1, 8,
  &(vtc_S1535C1[0]), // expected_vtbl_contents
  &(vtt_S1535C1[0]), // expected_vtt_contents
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S1535C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1535C1),67, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1535C1),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names163,
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S15367C6_nt

#else // __cplusplus

Class_Descriptor cd_S15367C6_nt = {  "S15367C6_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  S15367C5_nt  : S15367C6_nt {
};
//SIG(-1 S15367C5_nt) C1{ BC2{}}



//skip512 S15367C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S15367C6_nt;
static Base_Class bases_S15367C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15367C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S15367C3_nt  : S19762C18_nt {
  ::S15367C5_nt s15367c3f0;
};
//SIG(-1 S15367C3_nt) C1{ BC2{} FC3{ BC4{}}}



//skip512 S15367C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S19762C18_nt;
static Base_Class bases_S15367C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S15367C3_nt = {  "S15367C3_nt", // class name
  bases_S15367C3_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15367C2_nt  : S15367C3_nt {
  void *s15367c2f0[3];
};
//SIG(-1 S15367C2_nt) C1{ BC2{ BC3{} FC4{ BC5{}}} Fp[3]}



//skip512 S15367C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S19762C18_nt;
extern Class_Descriptor cd_S15367C3_nt;
static Base_Class bases_S15367C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19762C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S15367C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S15367C12_nt  {
  void *s15367c12f0;
  void  mf15367c12(); // _ZN12S15367C12_nt10mf15367c12Ev
};
//SIG(-1 S15367C12_nt) C1{ m Fp}


void  S15367C12_nt ::mf15367c12(){}

//skip512 S15367C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15367C14  {
  void *s15367c14f0;
  void  mf15367c14(); // _ZN9S15367C1410mf15367c14Ev
};
//SIG(-1 S15367C14) C1{ m Fp}


void  S15367C14 ::mf15367c14(){}

static void Test_S15367C14()
{
  {
    init_simple_test("S15367C14");
    S15367C14 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S15367C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15367C14)");
    check_field_offset(lv, s15367c14f0, 0, "S15367C14.s15367c14f0");
  }
}
static Arrange_To_Call_Me vS15367C14(Test_S15367C14, "S15367C14", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15367C1  {
  ::S15367C2_nt s15367c1f0;
  int s15367c1f1;
  ::S4531C10_nt s15367c1f2;
  void *s15367c1f3[2];
  ::S15367C2_nt s15367c1f4;
  void *s15367c1f5[4];
  int s15367c1f6[2];
  ::S15367C12_nt s15367c1f7;
  void *s15367c1f8[2];
  ::S15367C12_nt s15367c1f9;
  ::S15367C12_nt s15367c1f10;
  ::S15367C12_nt s15367c1f11;
  void *s15367c1f12;
  ::S15367C14 s15367c1f13;
  int s15367c1f14;
  void  mf15367c1(); // _ZN8S15367C19mf15367c1Ev
};
//SIG(1 S15367C1) C1{ m FC2{ BC3{ BC4{} FC5{ BC6{}}} Fp[3]} Fi FC7{ m Fp} Fp[2] FC2 Fp[4] Fi[2] FC8{ m Fp} Fp[2] FC8 FC8 FC8 Fp FC9{ m Fp} Fi}


void  S15367C1 ::mf15367c1(){}

static void Test_S15367C1()
{
  {
    init_simple_test("S15367C1");
    S15367C1 lv;
    check2(sizeof(lv), ABISELECT(208,108), "sizeof(S15367C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15367C1)");
    check_field_offset(lv, s15367c1f0, 0, "S15367C1.s15367c1f0");
    check_field_offset(lv, s15367c1f1, ABISELECT(32,16), "S15367C1.s15367c1f1");
    check_field_offset(lv, s15367c1f2, ABISELECT(40,20), "S15367C1.s15367c1f2");
    check_field_offset(lv, s15367c1f3, ABISELECT(48,24), "S15367C1.s15367c1f3");
    check_field_offset(lv, s15367c1f4, ABISELECT(64,32), "S15367C1.s15367c1f4");
    check_field_offset(lv, s15367c1f5, ABISELECT(96,48), "S15367C1.s15367c1f5");
    check_field_offset(lv, s15367c1f6, ABISELECT(128,64), "S15367C1.s15367c1f6");
    check_field_offset(lv, s15367c1f7, ABISELECT(136,72), "S15367C1.s15367c1f7");
    check_field_offset(lv, s15367c1f8, ABISELECT(144,76), "S15367C1.s15367c1f8");
    check_field_offset(lv, s15367c1f9, ABISELECT(160,84), "S15367C1.s15367c1f9");
    check_field_offset(lv, s15367c1f10, ABISELECT(168,88), "S15367C1.s15367c1f10");
    check_field_offset(lv, s15367c1f11, ABISELECT(176,92), "S15367C1.s15367c1f11");
    check_field_offset(lv, s15367c1f12, ABISELECT(184,96), "S15367C1.s15367c1f12");
    check_field_offset(lv, s15367c1f13, ABISELECT(192,100), "S15367C1.s15367c1f13");
    check_field_offset(lv, s15367c1f14, ABISELECT(200,104), "S15367C1.s15367c1f14");
  }
}
static Arrange_To_Call_Me vS15367C1(Test_S15367C1, "S15367C1", ABISELECT(208,108));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7219C5  {
  virtual void  v8(); // _ZN7S7219C52v8Ev
  virtual void  v9(); // _ZN7S7219C52v9Ev
  virtual void  v10(); // _ZN7S7219C53v10Ev
  virtual void  v11(); // _ZN7S7219C53v11Ev
  virtual void  v12(); // _ZN7S7219C53v12Ev
  ~S7219C5(); // tgen
  S7219C5(); // tgen
};
//SIG(-1 S7219C5) C1{ v1 v2 v3 v4 v5}


void  S7219C5 ::v8(){vfunc_called(this, "_ZN7S7219C52v8Ev");}
void  S7219C5 ::v9(){vfunc_called(this, "_ZN7S7219C52v9Ev");}
void  S7219C5 ::v10(){vfunc_called(this, "_ZN7S7219C53v10Ev");}
void  S7219C5 ::v11(){vfunc_called(this, "_ZN7S7219C53v11Ev");}
void  S7219C5 ::v12(){vfunc_called(this, "_ZN7S7219C53v12Ev");}
S7219C5 ::~S7219C5(){ note_dtor("S7219C5", this);} // tgen
S7219C5 ::S7219C5(){ note_ctor("S7219C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7219C5C1Ev();
extern void _ZN7S7219C5D1Ev();
Name_Map name_map_S7219C5[] = {
  NSPAIR(_ZN7S7219C5C1Ev),
  NSPAIR(_ZN7S7219C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7219C5[];
extern void _ZN7S7219C52v8Ev();
extern void _ZN7S7219C52v9Ev();
extern void _ZN7S7219C53v10Ev();
extern void _ZN7S7219C53v11Ev();
extern void _ZN7S7219C53v12Ev();
static  VTBL_ENTRY vtc_S7219C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7219C5[0]),
  (VTBL_ENTRY)&_ZN7S7219C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7219C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S7219C5[];
extern  VTBL_ENTRY _ZTV7S7219C5[];
Class_Descriptor cd_S7219C5 = {  "S7219C5", // class name
  0,0,//no base classes
  &(vtc_S7219C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7219C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7219C5),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  S7219C4  : S7219C5 {
  ::S7219C5 s7219c4f0;
  virtual void  v13(); // _ZN7S7219C43v13Ev
  virtual void  v14(); // _ZN7S7219C43v14Ev
  virtual void  v15(); // _ZN7S7219C43v15Ev
  virtual void  v16(); // _ZN7S7219C43v16Ev
  ~S7219C4(); // tgen
  S7219C4(); // tgen
};
//SIG(-1 S7219C4) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S7219C4 ::v13(){vfunc_called(this, "_ZN7S7219C43v13Ev");}
void  S7219C4 ::v14(){vfunc_called(this, "_ZN7S7219C43v14Ev");}
void  S7219C4 ::v15(){vfunc_called(this, "_ZN7S7219C43v15Ev");}
void  S7219C4 ::v16(){vfunc_called(this, "_ZN7S7219C43v16Ev");}
S7219C4 ::~S7219C4(){ note_dtor("S7219C4", this);} // tgen
S7219C4 ::S7219C4(){ note_ctor("S7219C4", this);} // tgen

static void Test_S7219C4()
{
  extern Class_Descriptor cd_S7219C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7219C4, buf);
    S7219C4 *dp, &lv = *(dp=new (buf) S7219C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7219C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7219C4)");
    check_base_class_offset(lv, (S7219C5*), 0, "S7219C4");
    check_field_offset(lv, s7219c4f0, ABISELECT(8,4), "S7219C4.s7219c4f0");
    test_class_info(&lv, &cd_S7219C4);
    dp->~S7219C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7219C4(Test_S7219C4, "S7219C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7219C4C1Ev();
extern void _ZN7S7219C4D1Ev();
Name_Map name_map_S7219C4[] = {
  NSPAIR(_ZN7S7219C4C1Ev),
  NSPAIR(_ZN7S7219C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7219C5;
extern VTBL_ENTRY _ZTI7S7219C5[];
extern  VTBL_ENTRY _ZTV7S7219C5[];
static Base_Class bases_S7219C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7219C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7219C4[];
extern void _ZN7S7219C52v8Ev();
extern void _ZN7S7219C52v9Ev();
extern void _ZN7S7219C53v10Ev();
extern void _ZN7S7219C53v11Ev();
extern void _ZN7S7219C53v12Ev();
extern void _ZN7S7219C43v13Ev();
extern void _ZN7S7219C43v14Ev();
extern void _ZN7S7219C43v15Ev();
extern void _ZN7S7219C43v16Ev();
static  VTBL_ENTRY vtc_S7219C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7219C4[0]),
  (VTBL_ENTRY)&_ZN7S7219C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7219C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v16Ev,
};
extern VTBL_ENTRY _ZTI7S7219C4[];
extern  VTBL_ENTRY _ZTV7S7219C4[];
Class_Descriptor cd_S7219C4 = {  "S7219C4", // class name
  bases_S7219C4, 1,
  &(vtc_S7219C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7219C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7219C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7219C3  : S7219C4 {
  virtual void  v17(); // _ZN7S7219C33v17Ev
  virtual void  v18(); // _ZN7S7219C33v18Ev
  virtual void  v19(); // _ZN7S7219C33v19Ev
  virtual void  v20(); // _ZN7S7219C33v20Ev
  virtual void  v21(); // _ZN7S7219C33v21Ev
  virtual void  v22(); // _ZN7S7219C33v22Ev
  ~S7219C3(); // tgen
  S7219C3(); // tgen
};
//SIG(-1 S7219C3) C1{ BC2{ BC3{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 v6}


void  S7219C3 ::v17(){vfunc_called(this, "_ZN7S7219C33v17Ev");}
void  S7219C3 ::v18(){vfunc_called(this, "_ZN7S7219C33v18Ev");}
void  S7219C3 ::v19(){vfunc_called(this, "_ZN7S7219C33v19Ev");}
void  S7219C3 ::v20(){vfunc_called(this, "_ZN7S7219C33v20Ev");}
void  S7219C3 ::v21(){vfunc_called(this, "_ZN7S7219C33v21Ev");}
void  S7219C3 ::v22(){vfunc_called(this, "_ZN7S7219C33v22Ev");}
S7219C3 ::~S7219C3(){ note_dtor("S7219C3", this);} // tgen
S7219C3 ::S7219C3(){ note_ctor("S7219C3", this);} // tgen

static void Test_S7219C3()
{
  extern Class_Descriptor cd_S7219C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7219C3, buf);
    S7219C3 *dp, &lv = *(dp=new (buf) S7219C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7219C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7219C3)");
    check_base_class_offset(lv, (S7219C5*)(S7219C4*), 0, "S7219C3");
    check_base_class_offset(lv, (S7219C4*), 0, "S7219C3");
    test_class_info(&lv, &cd_S7219C3);
    dp->~S7219C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7219C3(Test_S7219C3, "S7219C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7219C3C1Ev();
extern void _ZN7S7219C3D1Ev();
Name_Map name_map_S7219C3[] = {
  NSPAIR(_ZN7S7219C3C1Ev),
  NSPAIR(_ZN7S7219C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7219C5;
extern VTBL_ENTRY _ZTI7S7219C5[];
extern  VTBL_ENTRY _ZTV7S7219C5[];
extern Class_Descriptor cd_S7219C4;
extern VTBL_ENTRY _ZTI7S7219C4[];
extern  VTBL_ENTRY _ZTV7S7219C4[];
static Base_Class bases_S7219C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7219C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7219C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7219C3[];
extern void _ZN7S7219C52v8Ev();
extern void _ZN7S7219C52v9Ev();
extern void _ZN7S7219C53v10Ev();
extern void _ZN7S7219C53v11Ev();
extern void _ZN7S7219C53v12Ev();
extern void _ZN7S7219C43v13Ev();
extern void _ZN7S7219C43v14Ev();
extern void _ZN7S7219C43v15Ev();
extern void _ZN7S7219C43v16Ev();
extern void _ZN7S7219C33v17Ev();
extern void _ZN7S7219C33v18Ev();
extern void _ZN7S7219C33v19Ev();
extern void _ZN7S7219C33v20Ev();
extern void _ZN7S7219C33v21Ev();
extern void _ZN7S7219C33v22Ev();
static  VTBL_ENTRY vtc_S7219C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7219C3[0]),
  (VTBL_ENTRY)&_ZN7S7219C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7219C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v22Ev,
};
extern VTBL_ENTRY _ZTI7S7219C3[];
extern  VTBL_ENTRY _ZTV7S7219C3[];
Class_Descriptor cd_S7219C3 = {  "S7219C3", // class name
  bases_S7219C3, 2,
  &(vtc_S7219C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7219C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7219C3),17, //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  S7219C2  : virtual S7219C3 {
  virtual void  v23(); // _ZN7S7219C23v23Ev
  virtual void  v24(); // _ZN7S7219C23v24Ev
  virtual void  v25(); // _ZN7S7219C23v25Ev
  ~S7219C2(); // tgen
  S7219C2(); // tgen
};
//SIG(-1 S7219C2) C1{ VBC2{ BC3{ BC4{ v4 v5 v6 v7 v8} v9 v10 v11 v12 FC4} v13 v14 v15 v16 v17 v18} v1 v2 v3}


void  S7219C2 ::v23(){vfunc_called(this, "_ZN7S7219C23v23Ev");}
void  S7219C2 ::v24(){vfunc_called(this, "_ZN7S7219C23v24Ev");}
void  S7219C2 ::v25(){vfunc_called(this, "_ZN7S7219C23v25Ev");}
S7219C2 ::~S7219C2(){ note_dtor("S7219C2", this);} // tgen
S7219C2 ::S7219C2(){ note_ctor("S7219C2", this);} // tgen

static void Test_S7219C2()
{
  extern Class_Descriptor cd_S7219C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7219C2, buf);
    S7219C2 *dp, &lv = *(dp=new (buf) S7219C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7219C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7219C2)");
    check_base_class_offset(lv, (S7219C5*)(S7219C4*)(S7219C3*), ABISELECT(8,4), "S7219C2");
    check_base_class_offset(lv, (S7219C4*)(S7219C3*), ABISELECT(8,4), "S7219C2");
    check_base_class_offset(lv, (S7219C3*), ABISELECT(8,4), "S7219C2");
    test_class_info(&lv, &cd_S7219C2);
    dp->~S7219C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7219C2(Test_S7219C2, "S7219C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7219C2C1Ev();
extern void _ZN7S7219C2D1Ev();
Name_Map name_map_S7219C2[] = {
  NSPAIR(_ZN7S7219C2C1Ev),
  NSPAIR(_ZN7S7219C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7219C5;
extern VTBL_ENTRY _ZTI7S7219C5[];
extern  VTBL_ENTRY _ZTV7S7219C5[];
extern Class_Descriptor cd_S7219C4;
extern VTBL_ENTRY _ZTI7S7219C4[];
extern  VTBL_ENTRY _ZTV7S7219C4[];
extern Class_Descriptor cd_S7219C3;
extern VTBL_ENTRY _ZTI7S7219C3[];
extern  VTBL_ENTRY _ZTV7S7219C3[];
static Base_Class bases_S7219C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7219C5,    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_S7219C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7219C3,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7219C2[];
extern void _ZN7S7219C23v23Ev();
extern void _ZN7S7219C23v24Ev();
extern void _ZN7S7219C23v25Ev();
extern void _ZN7S7219C52v8Ev();
extern void _ZN7S7219C52v9Ev();
extern void _ZN7S7219C53v10Ev();
extern void _ZN7S7219C53v11Ev();
extern void _ZN7S7219C53v12Ev();
extern void _ZN7S7219C43v13Ev();
extern void _ZN7S7219C43v14Ev();
extern void _ZN7S7219C43v15Ev();
extern void _ZN7S7219C43v16Ev();
extern void _ZN7S7219C33v17Ev();
extern void _ZN7S7219C33v18Ev();
extern void _ZN7S7219C33v19Ev();
extern void _ZN7S7219C33v20Ev();
extern void _ZN7S7219C33v21Ev();
extern void _ZN7S7219C33v22Ev();
static  VTBL_ENTRY vtc_S7219C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7219C2[0]),
  (VTBL_ENTRY)&_ZN7S7219C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7219C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7219C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7219C2[0]),
  (VTBL_ENTRY)&_ZN7S7219C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7219C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v22Ev,
};
extern VTBL_ENTRY _ZTV7S7219C2[];
static  VTT_ENTRY vtt_S7219C2[] = {
  {&(_ZTV7S7219C2[3]),  3,38},
  {&(_ZTV7S7219C2[23]),  23,38},
};
extern VTBL_ENTRY _ZTI7S7219C2[];
extern  VTBL_ENTRY _ZTV7S7219C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7219C2[];
Class_Descriptor cd_S7219C2 = {  "S7219C2", // class name
  bases_S7219C2, 3,
  &(vtc_S7219C2[0]), // expected_vtbl_contents
  &(vtt_S7219C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7219C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7219C2),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7219C2),2, //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  S7219C6  {
  int s7219c6f0;
  ::S7219C5 s7219c6f1;
  virtual void  v26(); // _ZN7S7219C63v26Ev
  ~S7219C6(); // tgen
  S7219C6(); // tgen
};
//SIG(-1 S7219C6) C1{ v1 Fi FC2{ v2 v3 v4 v5 v6}}


void  S7219C6 ::v26(){vfunc_called(this, "_ZN7S7219C63v26Ev");}
S7219C6 ::~S7219C6(){ note_dtor("S7219C6", this);} // tgen
S7219C6 ::S7219C6(){ note_ctor("S7219C6", this);} // tgen

static void Test_S7219C6()
{
  extern Class_Descriptor cd_S7219C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7219C6, buf);
    S7219C6 *dp, &lv = *(dp=new (buf) S7219C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7219C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7219C6)");
    check_field_offset(lv, s7219c6f0, ABISELECT(8,4), "S7219C6.s7219c6f0");
    check_field_offset(lv, s7219c6f1, ABISELECT(16,8), "S7219C6.s7219c6f1");
    test_class_info(&lv, &cd_S7219C6);
    dp->~S7219C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7219C6(Test_S7219C6, "S7219C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7219C6C1Ev();
extern void _ZN7S7219C6D1Ev();
Name_Map name_map_S7219C6[] = {
  NSPAIR(_ZN7S7219C6C1Ev),
  NSPAIR(_ZN7S7219C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7219C6[];
extern void _ZN7S7219C63v26Ev();
static  VTBL_ENTRY vtc_S7219C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7219C6[0]),
  (VTBL_ENTRY)&_ZN7S7219C63v26Ev,
};
extern VTBL_ENTRY _ZTI7S7219C6[];
extern  VTBL_ENTRY _ZTV7S7219C6[];
Class_Descriptor cd_S7219C6 = {  "S7219C6", // class name
  0,0,//no base classes
  &(vtc_S7219C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7219C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7219C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7219C1  : S7219C2 , virtual S7219C6 {
  __tsi64 s7219c1f0;
  int s7219c1f1[6];
  ::S7219C5 s7219c1f2;
  virtual  ~S7219C1(); // _ZN7S7219C1D2Ev
  virtual void  v1(); // _ZN7S7219C12v1Ev
  virtual void  v2(); // _ZN7S7219C12v2Ev
  virtual void  v3(); // _ZN7S7219C12v3Ev
  virtual void  v4(); // _ZN7S7219C12v4Ev
  virtual void  v5(); // _ZN7S7219C12v5Ev
  virtual void  v6(); // _ZN7S7219C12v6Ev
  virtual void  v7(); // _ZN7S7219C12v7Ev
  S7219C1(); // tgen
};
//SIG(1 S7219C1) C1{ BC2{ VBC3{ BC4{ BC5{ v8 v9 v10 v11 v12} v13 v14 v15 v16 FC5} v17 v18 v19 v20 v21 v22} v23 v24 v25} VBC6{ v26 Fi FC5} vd v1 v2 v3 v4 v5 v6 v7 FL Fi[6] FC5}


 S7219C1 ::~S7219C1(){ note_dtor("S7219C1", this);}
void  S7219C1 ::v1(){vfunc_called(this, "_ZN7S7219C12v1Ev");}
void  S7219C1 ::v2(){vfunc_called(this, "_ZN7S7219C12v2Ev");}
void  S7219C1 ::v3(){vfunc_called(this, "_ZN7S7219C12v3Ev");}
void  S7219C1 ::v4(){vfunc_called(this, "_ZN7S7219C12v4Ev");}
void  S7219C1 ::v5(){vfunc_called(this, "_ZN7S7219C12v5Ev");}
void  S7219C1 ::v6(){vfunc_called(this, "_ZN7S7219C12v6Ev");}
void  S7219C1 ::v7(){vfunc_called(this, "_ZN7S7219C12v7Ev");}
S7219C1 ::S7219C1(){ note_ctor("S7219C1", this);} // tgen

static void Test_S7219C1()
{
  extern Class_Descriptor cd_S7219C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S7219C1, buf);
    S7219C1 *dp, &lv = *(dp=new (buf) S7219C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S7219C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7219C1)");
    check_base_class_offset(lv, (S7219C5*)(S7219C4*)(S7219C3*), ABISELECT(48,40), "S7219C1");
    check_base_class_offset(lv, (S7219C4*)(S7219C3*), ABISELECT(48,40), "S7219C1");
    check_base_class_offset(lv, (S7219C3*)(S7219C2*), ABISELECT(48,40), "S7219C1");
    check_base_class_offset(lv, (S7219C2*), 0, "S7219C1");
    check_base_class_offset(lv, (S7219C6*), ABISELECT(64,48), "S7219C1");
    check_field_offset(lv, s7219c1f0, ABISELECT(8,4), "S7219C1.s7219c1f0");
    check_field_offset(lv, s7219c1f1, ABISELECT(16,12), "S7219C1.s7219c1f1");
    check_field_offset(lv, s7219c1f2, ABISELECT(40,36), "S7219C1.s7219c1f2");
    test_class_info(&lv, &cd_S7219C1);
    dp->~S7219C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7219C1(Test_S7219C1, "S7219C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S7219C1C1Ev();
extern void _ZN7S7219C1D2Ev();
Name_Map name_map_S7219C1[] = {
  NSPAIR(_ZN7S7219C1C1Ev),
  NSPAIR(_ZN7S7219C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7219C5;
extern VTBL_ENTRY _ZTI7S7219C5[];
extern  VTBL_ENTRY _ZTV7S7219C5[];
extern Class_Descriptor cd_S7219C4;
extern VTBL_ENTRY _ZTI7S7219C4[];
extern  VTBL_ENTRY _ZTV7S7219C4[];
extern Class_Descriptor cd_S7219C3;
extern VTBL_ENTRY _ZTI7S7219C3[];
extern  VTBL_ENTRY _ZTV7S7219C3[];
extern Class_Descriptor cd_S7219C2;
extern VTBL_ENTRY _ZTI7S7219C2[];
extern  VTBL_ENTRY _ZTV7S7219C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7219C2[];
extern Class_Descriptor cd_S7219C6;
extern VTBL_ENTRY _ZTI7S7219C6[];
extern  VTBL_ENTRY _ZTV7S7219C6[];
static Base_Class bases_S7219C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7219C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7219C4,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7219C3,    ABISELECT(48,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7219C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7219C6,    ABISELECT(64,48), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7219C1[];
extern void _ZN7S7219C23v23Ev();
extern void _ZN7S7219C23v24Ev();
extern void _ZN7S7219C23v25Ev();
extern void _ZN7S7219C1D1Ev();
extern void _ZN7S7219C1D0Ev();
extern void _ZN7S7219C12v1Ev();
extern void _ZN7S7219C12v2Ev();
extern void _ZN7S7219C12v3Ev();
extern void _ZN7S7219C12v4Ev();
extern void _ZN7S7219C12v5Ev();
extern void _ZN7S7219C12v6Ev();
extern void _ZN7S7219C12v7Ev();
extern void _ZN7S7219C52v8Ev();
extern void _ZN7S7219C52v9Ev();
extern void _ZN7S7219C53v10Ev();
extern void _ZN7S7219C53v11Ev();
extern void _ZN7S7219C53v12Ev();
extern void _ZN7S7219C43v13Ev();
extern void _ZN7S7219C43v14Ev();
extern void _ZN7S7219C43v15Ev();
extern void _ZN7S7219C43v16Ev();
extern void _ZN7S7219C33v17Ev();
extern void _ZN7S7219C33v18Ev();
extern void _ZN7S7219C33v19Ev();
extern void _ZN7S7219C33v20Ev();
extern void _ZN7S7219C33v21Ev();
extern void _ZN7S7219C33v22Ev();
extern void _ZN7S7219C63v26Ev();
static  VTBL_ENTRY vtc_S7219C1[] = {
  ABISELECT(64,48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7219C1[0]),
  (VTBL_ENTRY)&_ZN7S7219C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7219C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7219C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7219C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7219C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7219C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7219C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7219C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7219C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7219C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7219C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7219C12v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-40),
  (VTBL_ENTRY)&(_ZTI7S7219C1[0]),
  (VTBL_ENTRY)&_ZN7S7219C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7219C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v22Ev,
  0,
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S7219C1[0]),
  (VTBL_ENTRY)&_ZN7S7219C63v26Ev,
};
extern VTBL_ENTRY _ZTV7S7219C1[];
extern void _ZN7S7219C23v23Ev();
extern void _ZN7S7219C23v24Ev();
extern void _ZN7S7219C23v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7219C2__7S7219C1[] = {
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7219C2[0]),
  (VTBL_ENTRY)&_ZN7S7219C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7219C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7219C23v25Ev,
};
extern void _ZN7S7219C52v8Ev();
extern void _ZN7S7219C52v9Ev();
extern void _ZN7S7219C53v10Ev();
extern void _ZN7S7219C53v11Ev();
extern void _ZN7S7219C53v12Ev();
extern void _ZN7S7219C43v13Ev();
extern void _ZN7S7219C43v14Ev();
extern void _ZN7S7219C43v15Ev();
extern void _ZN7S7219C43v16Ev();
extern void _ZN7S7219C33v17Ev();
extern void _ZN7S7219C33v18Ev();
extern void _ZN7S7219C33v19Ev();
extern void _ZN7S7219C33v20Ev();
extern void _ZN7S7219C33v21Ev();
extern void _ZN7S7219C33v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7219C3__7S7219C2__7S7219C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-40),
  (VTBL_ENTRY)&(_ZTI7S7219C2[0]),
  (VTBL_ENTRY)&_ZN7S7219C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7219C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7219C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7219C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7219C33v22Ev,
};
static  VTT_ENTRY vtt_S7219C1[] = {
  {&(_ZTV7S7219C1[4]),  4,52},
  {&(_tg__ZTV7S7219C2__7S7219C1[3]),  3,6},
  {&(_tg__ZTV7S7219C3__7S7219C2__7S7219C1[17]),  17,32},
  {&(_ZTV7S7219C1[33]),  33,52},
  {&(_ZTV7S7219C1[51]),  51,52},
};
extern VTBL_ENTRY _ZTI7S7219C1[];
extern  VTBL_ENTRY _ZTV7S7219C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7219C1[];
Class_Descriptor cd_S7219C1 = {  "S7219C1", // class name
  bases_S7219C1, 5,
  &(vtc_S7219C1[0]), // expected_vtbl_contents
  &(vtt_S7219C1[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S7219C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7219C1),52, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7219C1),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6118C6  : S2014C24 {
  ::S2014C24 s6118c6f0;
  virtual  ~S6118C6(); // _ZN7S6118C6D1Ev
  S6118C6(); // tgen
};
//SIG(-1 S6118C6) C1{ BC2{ m} vd FC2}


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

static void Test_S6118C6()
{
  extern Class_Descriptor cd_S6118C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6118C6, buf);
    S6118C6 *dp, &lv = *(dp=new (buf) S6118C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6118C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6118C6)");
    check_base_class_offset(lv, (S2014C24*), 0, "S6118C6");
    check_field_offset(lv, s6118c6f0, ABISELECT(8,4), "S6118C6.s6118c6f0");
    test_class_info(&lv, &cd_S6118C6);
    dp->~S6118C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6118C6(Test_S6118C6, "S6118C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6118C6C1Ev();
extern void _ZN7S6118C6D1Ev();
Name_Map name_map_S6118C6[] = {
  NSPAIR(_ZN7S6118C6C1Ev),
  NSPAIR(_ZN7S6118C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
static Base_Class bases_S6118C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6118C6[];
extern void _ZN7S6118C6D1Ev();
extern void _ZN7S6118C6D0Ev();
static  VTBL_ENTRY vtc_S6118C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6118C6[0]),
  (VTBL_ENTRY)&_ZN7S6118C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6118C6D0Ev,
};
extern VTBL_ENTRY _ZTI7S6118C6[];
extern  VTBL_ENTRY _ZTV7S6118C6[];
Class_Descriptor cd_S6118C6 = {  "S6118C6", // class name
  bases_S6118C6, 1,
  &(vtc_S6118C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6118C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6118C6),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  S6118C4  : virtual S2014C28 , virtual S6118C6 , virtual S3222C8_nt {
  void *s6118c4f0;
  ::S19762C18_nt s6118c4f1;
  virtual  ~S6118C4(); // _ZN7S6118C4D2Ev
  S6118C4(); // tgen
};
//SIG(-1 S6118C4) C1{ VBC2{ m} VBC3{ BC4{ m} vd FC4} VBC5{ m Fi} vd Fp FC6{}}


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

static void Test_S6118C4()
{
  extern Class_Descriptor cd_S6118C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S6118C4, buf);
    S6118C4 *dp, &lv = *(dp=new (buf) S6118C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S6118C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6118C4)");
    check_base_class_offset(lv, (S2014C28*), 0, "S6118C4");
    check_base_class_offset(lv, (S2014C24*)(S6118C6*), ABISELECT(24,12), "S6118C4");
    check_base_class_offset(lv, (S6118C6*), ABISELECT(24,12), "S6118C4");
    check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(36,20), "S6118C4");
    check_field_offset(lv, s6118c4f0, ABISELECT(8,4), "S6118C4.s6118c4f0");
    check_field_offset(lv, s6118c4f1, ABISELECT(16,8), "S6118C4.s6118c4f1");
    test_class_info(&lv, &cd_S6118C4);
    dp->~S6118C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6118C4(Test_S6118C4, "S6118C4", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S6118C4C1Ev();
extern void _ZN7S6118C4D2Ev();
Name_Map name_map_S6118C4[] = {
  NSPAIR(_ZN7S6118C4C1Ev),
  NSPAIR(_ZN7S6118C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S6118C6;
extern VTBL_ENTRY _ZTI7S6118C6[];
extern  VTBL_ENTRY _ZTV7S6118C6[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S6118C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C24,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6118C6,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_nt,    ABISELECT(36,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6118C4[];
extern void _ZN7S6118C4D1Ev();
extern void _ZN7S6118C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S6118C4D1Ev,_ZThn12_N7S6118C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S6118C4D0Ev,_ZThn12_N7S6118C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6118C4[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6118C4[0]),
  (VTBL_ENTRY)&_ZN7S6118C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6118C4D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6118C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S6118C4[];
static  VTT_ENTRY vtt_S6118C4[] = {
  {&(_ZTV7S6118C4[5]),  5,12},
  {&(_ZTV7S6118C4[10]),  10,12},
};
extern VTBL_ENTRY _ZTI7S6118C4[];
extern  VTBL_ENTRY _ZTV7S6118C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6118C4[];
static VTBL_ENTRY alt_thunk_names164[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C4D0Ev,_ZThn12_N7S6118C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C4D1Ev,_ZThn12_N7S6118C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6118C4 = {  "S6118C4", // class name
  bases_S6118C4, 4,
  &(vtc_S6118C4[0]), // expected_vtbl_contents
  &(vtt_S6118C4[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S6118C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6118C4),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6118C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names164,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6118C11  : S2014C24 , S6118C6 , virtual S2014C28 , virtual S6118C4 {
  virtual  ~S6118C11(); // _ZN8S6118C11D2Ev
  S6118C11(); // tgen
};
//SIG(-1 S6118C11) C1{ BC2{ m} BC3{ BC2 vd FC2} VBC4{ m} VBC5{ VBC4 VBC3 VBC6{ m Fi} vd Fp FC7{}} vd}


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

static void Test_S6118C11()
{
  extern Class_Descriptor cd_S6118C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S6118C11, buf);
    S6118C11 *dp, &lv = *(dp=new (buf) S6118C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S6118C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6118C11)");
    /*is_ambiguous_... S6118C11::S2014C24 */ AMB_check_base_class_offset(lv, (S2014C24*), ABISELECT(9,5), "S6118C11");
    /*is_ambiguous_... S6118C11::S6118C6 */ AMB_check_base_class_offset(lv, (S2014C24*)(S6118C6*), 0, "S6118C11");
    /*is_ambiguous_... S6118C11::S6118C6 */ AMB_check_base_class_offset(lv, (S6118C6*), 0, "S6118C11");
    check_base_class_offset(lv, (S2014C28*), 0, "S6118C11");
    check_base_class_offset(lv, (S2014C28*)(S6118C4*), 0, "S6118C11");
    /*is_ambiguous_... S6118C11::S6118C6 */ AMB_check_base_class_offset(lv, (S2014C24*)(S6118C6*), ABISELECT(40,20), "S6118C11");
    check_base_class_offset(lv, (S6118C6*)(S6118C4*), ABISELECT(40,20), "S6118C11");
    check_base_class_offset(lv, (S3222C8_nt*)(S6118C4*), ABISELECT(52,28), "S6118C11");
    check_base_class_offset(lv, (S6118C4*), ABISELECT(16,8), "S6118C11");
    test_class_info(&lv, &cd_S6118C11);
    dp->~S6118C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6118C11(Test_S6118C11, "S6118C11", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S6118C11C1Ev();
extern void _ZN8S6118C11D2Ev();
Name_Map name_map_S6118C11[] = {
  NSPAIR(_ZN8S6118C11C1Ev),
  NSPAIR(_ZN8S6118C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S6118C6;
extern VTBL_ENTRY _ZTI7S6118C6[];
extern  VTBL_ENTRY _ZTV7S6118C6[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S6118C6;
extern VTBL_ENTRY _ZTI7S6118C6[];
extern  VTBL_ENTRY _ZTV7S6118C6[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S6118C4;
extern VTBL_ENTRY _ZTI7S6118C4[];
extern  VTBL_ENTRY _ZTV7S6118C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6118C4[];
static Base_Class bases_S6118C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C24,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6118C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C24,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6118C6,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(52,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6118C4,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6118C11[];
extern void _ZN8S6118C11D1Ev();
extern void _ZN8S6118C11D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S6118C11D1Ev,_ZTv0_n24_N8S6118C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S6118C11D1Ev,_ZThn8_N8S6118C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S6118C11D0Ev,_ZTv0_n24_N8S6118C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S6118C11D0Ev,_ZThn8_N8S6118C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6118C11D1Ev,_ZTv0_n12_N8S6118C11D1Ev)();
extern void ABISELECT(_ZThn40_N8S6118C11D1Ev,_ZThn20_N8S6118C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6118C11D0Ev,_ZTv0_n12_N8S6118C11D0Ev)();
extern void ABISELECT(_ZThn40_N8S6118C11D0Ev,_ZThn20_N8S6118C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6118C11[] = {
  ABISELECT(52,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6118C11[0]),
  (VTBL_ENTRY)&_ZN8S6118C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6118C11D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6118C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6118C11D1Ev,_ZTv0_n24_N8S6118C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6118C11D0Ev,_ZTv0_n24_N8S6118C11D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6118C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6118C11D1Ev,_ZTv0_n12_N8S6118C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6118C11D0Ev,_ZTv0_n12_N8S6118C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S6118C11[];
extern void _ZN7S6118C4D1Ev();
extern void _ZN7S6118C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6118C4__8S6118C11[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6118C4[0]),
  (VTBL_ENTRY)&_ZN7S6118C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6118C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S6118C4D1Ev,_ZThn12_N7S6118C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S6118C4D0Ev,_ZThn12_N7S6118C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6118C6__7S6118C4__8S6118C11[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6118C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev),
};
static  VTT_ENTRY vtt_S6118C11[] = {
  {&(_ZTV8S6118C11[6]),  6,21},
  {&(_ZTV8S6118C11[14]),  14,21},
  {&(_ZTV8S6118C11[19]),  19,21},
  {&(_tg__ZTV7S6118C4__8S6118C11[5]),  5,7},
  {&(_tg__ZTV7S6118C6__7S6118C4__8S6118C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S6118C11[];
extern  VTBL_ENTRY _ZTV8S6118C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6118C11[];
static VTBL_ENTRY alt_thunk_names165[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C4D0Ev,_ZThn12_N7S6118C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C4D1Ev,_ZThn12_N7S6118C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6118C11D0Ev,_ZTv0_n12_N8S6118C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S6118C11D0Ev,_ZThn20_N8S6118C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6118C11D1Ev,_ZTv0_n12_N8S6118C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S6118C11D1Ev,_ZThn20_N8S6118C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6118C11D0Ev,_ZTv0_n24_N8S6118C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6118C11D0Ev,_ZThn8_N8S6118C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S6118C11D1Ev,_ZTv0_n24_N8S6118C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6118C11D1Ev,_ZThn8_N8S6118C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6118C11 = {  "S6118C11", // class name
  bases_S6118C11, 8,
  &(vtc_S6118C11[0]), // expected_vtbl_contents
  &(vtt_S6118C11[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S6118C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6118C11),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6118C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names165,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6118C3  : virtual S2014C38 , virtual S6118C4 , S2014C21 , virtual S6118C11 , S3222C8_nt {
  ::S19017C20_nt s6118c3f0[6];
  short s6118c3f1;
  virtual  ~S6118C3(); // _ZN7S6118C3D2Ev
  S6118C3(); // tgen
};
//SIG(-1 S6118C3) C1{ VBC2{ m} VBC3{ VBC4{ m} VBC5{ BC6{ m} vd FC6} VBC7{ m Fi} vd Fp FC8{}} BC9{ m} VBC10{ BC6 BC5 VBC4 VBC3 vd} BC7 vd FU11{ m}[6] Fs}


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

static void Test_S6118C3()
{
  extern Class_Descriptor cd_S6118C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S6118C3, buf);
    S6118C3 *dp, &lv = *(dp=new (buf) S6118C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S6118C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6118C3)");
    check_base_class_offset(lv, (S2014C38*), 0, "S6118C3");
    check_base_class_offset(lv, (S2014C28*)(S6118C4*), 0, "S6118C3");
    check_base_class_offset(lv, (S2014C28*)(S6118C11*), 0, "S6118C3");
    /*is_ambiguous_... S6118C3::S6118C6 */ AMB_check_base_class_offset(lv, (S2014C24*)(S6118C6*), ABISELECT(48,28), "S6118C3");
    check_base_class_offset(lv, (S6118C6*)(S6118C4*), ABISELECT(48,28), "S6118C3");
    check_base_class_offset(lv, (S3222C8_nt*)(S6118C4*), ABISELECT(60,36), "S6118C3");
    check_base_class_offset(lv, (S6118C4*), ABISELECT(24,16), "S6118C3");
    check_base_class_offset(lv, (S6118C4*)(S6118C11*), ABISELECT(24,16), "S6118C3");
    check_base_class_offset(lv, (S2014C21*), 0, "S6118C3");
    /*is_ambiguous_... S6118C11::S2014C24 */ AMB_check_base_class_offset(lv, (S2014C24*)(S6118C11*), ABISELECT(73,45), "S6118C3");
    /*is_ambiguous_... S6118C11::S6118C6 */ AMB_check_base_class_offset(lv, (S2014C24*)(S6118C6*)(S6118C11*), ABISELECT(64,40), "S6118C3");
    /*is_ambiguous_... S6118C11::S6118C6 */ AMB_check_base_class_offset(lv, (S6118C6*)(S6118C11*), ABISELECT(64,40), "S6118C3");
    check_base_class_offset(lv, (S6118C11*), ABISELECT(64,40), "S6118C3");
    /*is_ambiguous_... S6118C3::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*), ABISELECT(8,4), "S6118C3");
    check_field_offset(lv, s6118c3f0, ABISELECT(12,8), "S6118C3.s6118c3f0");
    check_field_offset(lv, s6118c3f1, ABISELECT(18,14), "S6118C3.s6118c3f1");
    test_class_info(&lv, &cd_S6118C3);
    dp->~S6118C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6118C3(Test_S6118C3, "S6118C3", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S6118C3C1Ev();
extern void _ZN7S6118C3D2Ev();
Name_Map name_map_S6118C3[] = {
  NSPAIR(_ZN7S6118C3C1Ev),
  NSPAIR(_ZN7S6118C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S6118C6;
extern VTBL_ENTRY _ZTI7S6118C6[];
extern  VTBL_ENTRY _ZTV7S6118C6[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S6118C4;
extern VTBL_ENTRY _ZTI7S6118C4[];
extern  VTBL_ENTRY _ZTV7S6118C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6118C4[];
extern Class_Descriptor cd_S2014C21;
extern VTBL_ENTRY _ZTI8S2014C21[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S6118C6;
extern VTBL_ENTRY _ZTI7S6118C6[];
extern  VTBL_ENTRY _ZTV7S6118C6[];
extern Class_Descriptor cd_S6118C11;
extern VTBL_ENTRY _ZTI8S6118C11[];
extern  VTBL_ENTRY _ZTV8S6118C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6118C11[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
static Base_Class bases_S6118C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C24,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6118C6,    ABISELECT(48,28), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6118C4,    ABISELECT(24,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C24,    ABISELECT(73,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C24,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6118C6,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6118C11,    ABISELECT(64,40), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3222C8_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 _ZTI7S6118C3[];
extern void _ZN7S6118C3D1Ev();
extern void _ZN7S6118C3D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S6118C3D1Ev,_ZTv0_n24_N7S6118C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S6118C3D1Ev,_ZThn16_N7S6118C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6118C3D0Ev,_ZTv0_n24_N7S6118C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S6118C3D0Ev,_ZThn16_N7S6118C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6118C3D1Ev,_ZTv0_n12_N7S6118C3D1Ev)();
extern void ABISELECT(_ZThn48_N7S6118C3D1Ev,_ZThn28_N7S6118C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6118C3D0Ev,_ZTv0_n12_N7S6118C3D0Ev)();
extern void ABISELECT(_ZThn48_N7S6118C3D0Ev,_ZThn28_N7S6118C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6118C3D1Ev,_ZTv0_n28_N7S6118C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S6118C3D1Ev,_ZThn40_N7S6118C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6118C3D0Ev,_ZTv0_n28_N7S6118C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S6118C3D0Ev,_ZThn40_N7S6118C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6118C3[] = {
  ABISELECT(64,40),
  ABISELECT(60,36),
  ABISELECT(48,28),
  0,
  ABISELECT(24,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6118C3[0]),
  (VTBL_ENTRY)&_ZN7S6118C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6118C3D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S6118C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6118C3D1Ev,_ZTv0_n24_N7S6118C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6118C3D0Ev,_ZTv0_n24_N7S6118C3D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6118C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C3D1Ev,_ZTv0_n12_N7S6118C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C3D0Ev,_ZTv0_n12_N7S6118C3D0Ev),
  ABISELECT(-64,-40),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S6118C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6118C3D1Ev,_ZTv0_n28_N7S6118C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6118C3D0Ev,_ZTv0_n28_N7S6118C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S6118C3[];
extern void _ZN7S6118C4D1Ev();
extern void _ZN7S6118C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6118C4__7S6118C3[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6118C4[0]),
  (VTBL_ENTRY)&_ZN7S6118C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6118C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S6118C4D1Ev,_ZThn12_N7S6118C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S6118C4D0Ev,_ZThn12_N7S6118C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6118C6__7S6118C4__7S6118C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6118C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev),
};
extern void _ZN8S6118C11D1Ev();
extern void _ZN8S6118C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6118C11__7S6118C3[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6118C11[0]),
  (VTBL_ENTRY)&_ZN8S6118C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6118C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S6118C11D1Ev,_ZTv0_n24_N8S6118C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S6118C11D0Ev,_ZTv0_n24_N8S6118C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6118C4__8S6118C11__7S6118C3[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S6118C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6118C11D1Ev,_ZTv0_n24_N8S6118C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6118C11D0Ev,_ZTv0_n24_N8S6118C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6118C11D1Ev,_ZTv0_n12_N8S6118C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S6118C11D0Ev,_ZTv0_n12_N8S6118C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6118C6__A1__8S6118C11__7S6118C3[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S6118C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6118C11D1Ev,_ZTv0_n12_N8S6118C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6118C11D0Ev,_ZTv0_n12_N8S6118C11D0Ev),
};
static  VTT_ENTRY vtt_S6118C3[] = {
  {&(_ZTV7S6118C3[8]),  8,32},
  {&(_ZTV7S6118C3[16]),  16,32},
  {&(_ZTV7S6118C3[21]),  21,32},
  {&(_ZTV7S6118C3[30]),  30,32},
  {&(_tg__ZTV7S6118C4__7S6118C3[5]),  5,7},
  {&(_tg__ZTV7S6118C6__7S6118C4__7S6118C3[3]),  3,5},
  {&(_tg__ZTV8S6118C11__7S6118C3[6]),  6,8},
  {&(_tg__ZTV7S6118C4__8S6118C11__7S6118C3[6]),  6,8},
  {&(_tg__ZTV7S6118C6__A1__8S6118C11__7S6118C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S6118C3[];
extern  VTBL_ENTRY _ZTV7S6118C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6118C3[];
static VTBL_ENTRY alt_thunk_names166[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C4D0Ev,_ZThn12_N7S6118C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C4D1Ev,_ZThn12_N7S6118C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6118C3D0Ev,_ZTv0_n28_N7S6118C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6118C3D0Ev,_ZThn40_N7S6118C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6118C3D1Ev,_ZTv0_n28_N7S6118C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6118C3D1Ev,_ZThn40_N7S6118C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C3D0Ev,_ZTv0_n12_N7S6118C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S6118C3D0Ev,_ZThn28_N7S6118C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C3D1Ev,_ZTv0_n12_N7S6118C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S6118C3D1Ev,_ZThn28_N7S6118C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6118C3D0Ev,_ZTv0_n24_N7S6118C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C3D0Ev,_ZThn16_N7S6118C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6118C3D1Ev,_ZTv0_n24_N7S6118C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C3D1Ev,_ZThn16_N7S6118C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6118C3 = {  "S6118C3", // class name
  bases_S6118C3, 12,
  &(vtc_S6118C3[0]), // expected_vtbl_contents
  &(vtt_S6118C3[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S6118C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6118C3),32, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6118C3),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names166,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6118C14_nt  {
  int s6118c14f0;
  void  mf6118c14(); // _ZN11S6118C14_nt9mf6118c14Ev
};
//SIG(-1 S6118C14_nt) C1{ m Fi}


void  S6118C14_nt ::mf6118c14(){}

//skip512 S6118C14_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S6118C14_nt[];
VTBL_ENTRY *P__ZTI11S6118C14_nt = _ZTI11S6118C14_nt; 
Class_Descriptor cd_S6118C14_nt = {  "S6118C14_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI11S6118C14_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  S6118C1  : S2014C38 , S6118C3 , S2014C7_nt , virtual S6118C14_nt {
  virtual  ~S6118C1(); // _ZN7S6118C1D2Ev
  S6118C1(); // tgen
};
//SIG(1 S6118C1) C1{ BC2{ m} BC3{ VBC2 VBC4{ VBC5{ m} VBC6{ BC7{ m} vd FC7} VBC8{ m Fi} vd Fp FC9{}} BC10{ m} VBC11{ BC7 BC6 VBC5 VBC4 vd} BC8 vd FU12{ m}[6] Fs} BC13{ m} VBC14{ m Fi} vd}


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

static void Test_S6118C1()
{
  extern Class_Descriptor cd_S6118C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S6118C1, buf);
    S6118C1 *dp, &lv = *(dp=new (buf) S6118C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S6118C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6118C1)");
    /*is_ambiguous_... S6118C1::S2014C38 */ AMB_check_base_class_offset(lv, (S2014C38*), 0, "S6118C1");
    check_base_class_offset(lv, (S2014C38*)(S6118C3*), ABISELECT(20,16), "S6118C1");
    check_base_class_offset(lv, (S2014C28*)(S6118C4*), 0, "S6118C1");
    check_base_class_offset(lv, (S2014C28*)(S6118C11*), 0, "S6118C1");
    /*is_ambiguous_... S6118C1::S6118C6 */ AMB_check_base_class_offset(lv, (S2014C24*)(S6118C6*), ABISELECT(48,28), "S6118C1");
    check_base_class_offset(lv, (S6118C6*)(S6118C4*), ABISELECT(48,28), "S6118C1");
    check_base_class_offset(lv, (S3222C8_nt*)(S6118C4*), ABISELECT(60,36), "S6118C1");
    check_base_class_offset(lv, (S6118C4*)(S6118C3*), ABISELECT(24,16), "S6118C1");
    check_base_class_offset(lv, (S6118C4*)(S6118C11*), ABISELECT(24,16), "S6118C1");
    check_base_class_offset(lv, (S2014C21*)(S6118C3*), 0, "S6118C1");
    /*is_ambiguous_... S6118C11::S2014C24 */ AMB_check_base_class_offset(lv, (S2014C24*)(S6118C11*), ABISELECT(73,45), "S6118C1");
    /*is_ambiguous_... S6118C11::S6118C6 */ AMB_check_base_class_offset(lv, (S2014C24*)(S6118C6*)(S6118C11*), ABISELECT(64,40), "S6118C1");
    /*is_ambiguous_... S6118C11::S6118C6 */ AMB_check_base_class_offset(lv, (S6118C6*)(S6118C11*), ABISELECT(64,40), "S6118C1");
    check_base_class_offset(lv, (S6118C11*)(S6118C3*), ABISELECT(64,40), "S6118C1");
    /*is_ambiguous_... S6118C3::S3222C8_nt */ AMB_check_base_class_offset(lv, (S3222C8_nt*)(S6118C3*), ABISELECT(8,4), "S6118C1");
    check_base_class_offset(lv, (S6118C3*), 0, "S6118C1");
    check_base_class_offset(lv, (S2014C7_nt*), 0, "S6118C1");
    check_base_class_offset(lv, (S6118C14_nt*), ABISELECT(76,48), "S6118C1");
    test_class_info(&lv, &cd_S6118C1);
    dp->~S6118C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6118C1(Test_S6118C1, "S6118C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S6118C1C1Ev();
extern void _ZN7S6118C1D2Ev();
Name_Map name_map_S6118C1[] = {
  NSPAIR(_ZN7S6118C1C1Ev),
  NSPAIR(_ZN7S6118C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S2014C28;
extern VTBL_ENTRY _ZTI8S2014C28[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S6118C6;
extern VTBL_ENTRY _ZTI7S6118C6[];
extern  VTBL_ENTRY _ZTV7S6118C6[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S6118C4;
extern VTBL_ENTRY _ZTI7S6118C4[];
extern  VTBL_ENTRY _ZTV7S6118C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6118C4[];
extern Class_Descriptor cd_S2014C21;
extern VTBL_ENTRY _ZTI8S2014C21[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S2014C24;
extern VTBL_ENTRY _ZTI8S2014C24[];
extern Class_Descriptor cd_S6118C6;
extern VTBL_ENTRY _ZTI7S6118C6[];
extern  VTBL_ENTRY _ZTV7S6118C6[];
extern Class_Descriptor cd_S6118C11;
extern VTBL_ENTRY _ZTI8S6118C11[];
extern  VTBL_ENTRY _ZTV8S6118C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6118C11[];
extern Class_Descriptor cd_S3222C8_nt;
extern VTBL_ENTRY _ZTI10S3222C8_nt[];
extern Class_Descriptor cd_S6118C3;
extern VTBL_ENTRY _ZTI7S6118C3[];
extern  VTBL_ENTRY _ZTV7S6118C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6118C3[];
extern Class_Descriptor cd_S2014C7_nt;
extern VTBL_ENTRY _ZTI10S2014C7_nt[];
extern Class_Descriptor cd_S6118C14_nt;
extern VTBL_ENTRY _ZTI11S6118C14_nt[];
static Base_Class bases_S6118C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2014C38,    ABISELECT(20,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S2014C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C24,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6118C6,    ABISELECT(48,28), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3222C8_nt,    ABISELECT(60,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6118C4,    ABISELECT(24,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2014C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C24,    ABISELECT(73,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2014C24,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6118C6,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6118C11,    ABISELECT(64,40), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3222C8_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
    13, //immediately_derived
  0, 0},
  {&cd_S6118C3,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2014C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6118C14_nt,    ABISELECT(76,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6118C1[];
extern void _ZN7S6118C1D1Ev();
extern void _ZN7S6118C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S6118C1D1Ev,_ZTv0_n24_N7S6118C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S6118C1D1Ev,_ZThn16_N7S6118C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6118C1D0Ev,_ZTv0_n24_N7S6118C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S6118C1D0Ev,_ZThn16_N7S6118C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6118C1D1Ev,_ZTv0_n12_N7S6118C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S6118C1D1Ev,_ZThn28_N7S6118C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6118C1D0Ev,_ZTv0_n12_N7S6118C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S6118C1D0Ev,_ZThn28_N7S6118C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6118C1D1Ev,_ZTv0_n28_N7S6118C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S6118C1D1Ev,_ZThn40_N7S6118C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6118C1D0Ev,_ZTv0_n28_N7S6118C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S6118C1D0Ev,_ZThn40_N7S6118C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6118C1[] = {
  ABISELECT(76,48),
  ABISELECT(64,40),
  ABISELECT(60,36),
  ABISELECT(48,28),
  0,
  ABISELECT(24,16),
  ABISELECT(20,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6118C1[0]),
  (VTBL_ENTRY)&_ZN7S6118C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6118C1D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S6118C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6118C1D1Ev,_ZTv0_n24_N7S6118C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6118C1D0Ev,_ZTv0_n24_N7S6118C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6118C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C1D1Ev,_ZTv0_n12_N7S6118C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C1D0Ev,_ZTv0_n12_N7S6118C1D0Ev),
  ABISELECT(-64,-40),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S6118C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6118C1D1Ev,_ZTv0_n28_N7S6118C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6118C1D0Ev,_ZTv0_n28_N7S6118C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6118C1[];
extern void _ZN7S6118C3D1Ev();
extern void _ZN7S6118C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6118C3__7S6118C1[] = {
  ABISELECT(64,40),
  ABISELECT(60,36),
  ABISELECT(48,28),
  0,
  ABISELECT(24,16),
  ABISELECT(20,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6118C3[0]),
  (VTBL_ENTRY)&_ZN7S6118C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6118C3D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S6118C3D1Ev,_ZTv0_n24_N7S6118C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S6118C3D1Ev,_ZThn16_N7S6118C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6118C3D0Ev,_ZTv0_n24_N7S6118C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S6118C3D0Ev,_ZThn16_N7S6118C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6118C4__7S6118C3__7S6118C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S6118C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6118C3D1Ev,_ZTv0_n24_N7S6118C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6118C3D0Ev,_ZTv0_n24_N7S6118C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S6118C3D1Ev,_ZTv0_n12_N7S6118C3D1Ev)();
extern void ABISELECT(_ZThn48_N7S6118C3D1Ev,_ZThn28_N7S6118C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6118C3D0Ev,_ZTv0_n12_N7S6118C3D0Ev)();
extern void ABISELECT(_ZThn48_N7S6118C3D0Ev,_ZThn28_N7S6118C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6118C6__7S6118C3__7S6118C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6118C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C3D1Ev,_ZTv0_n12_N7S6118C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C3D0Ev,_ZTv0_n12_N7S6118C3D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N7S6118C3D1Ev,_ZTv0_n28_N7S6118C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S6118C3D1Ev,_ZThn40_N7S6118C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6118C3D0Ev,_ZTv0_n28_N7S6118C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S6118C3D0Ev,_ZThn40_N7S6118C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6118C11__7S6118C3__7S6118C1[] = {
  ABISELECT(-64,-40),
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S6118C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6118C3D1Ev,_ZTv0_n28_N7S6118C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6118C3D0Ev,_ZTv0_n28_N7S6118C3D0Ev),
};
extern void _ZN7S6118C4D1Ev();
extern void _ZN7S6118C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6118C4__7S6118C1[] = {
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6118C4[0]),
  (VTBL_ENTRY)&_ZN7S6118C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6118C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S6118C4D1Ev,_ZThn12_N7S6118C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S6118C4D0Ev,_ZThn12_N7S6118C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6118C6__7S6118C4__7S6118C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6118C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev),
};
extern void _ZN8S6118C11D1Ev();
extern void _ZN8S6118C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6118C11__7S6118C1[] = {
  -4,
  ABISELECT(-16,-12),
  ABISELECT(-40,-24),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6118C11[0]),
  (VTBL_ENTRY)&_ZN8S6118C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6118C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S6118C11D1Ev,_ZTv0_n24_N8S6118C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S6118C11D0Ev,_ZTv0_n24_N8S6118C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6118C4__8S6118C11__7S6118C1[] = {
  ABISELECT(40,24),
  ABISELECT(36,20),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S6118C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6118C11D1Ev,_ZTv0_n24_N8S6118C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S6118C11D0Ev,_ZTv0_n24_N8S6118C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6118C11D1Ev,_ZTv0_n12_N8S6118C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S6118C11D0Ev,_ZTv0_n12_N8S6118C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6118C6__A1__8S6118C11__7S6118C1[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S6118C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6118C11D1Ev,_ZTv0_n12_N8S6118C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6118C11D0Ev,_ZTv0_n12_N8S6118C11D0Ev),
};
static  VTT_ENTRY vtt_S6118C1[] = {
  {&(_ZTV7S6118C1[9]),  9,33},
  {&(_tg__ZTV7S6118C3__7S6118C1[8]),  8,10},
  {&(_tg__ZTV7S6118C4__7S6118C3__7S6118C1[6]),  6,8},
  {&(_tg__ZTV7S6118C6__7S6118C3__7S6118C1[3]),  3,5},
  {&(_tg__ZTV8S6118C11__7S6118C3__7S6118C1[7]),  7,9},
  {&(_ZTV7S6118C1[17]),  17,33},
  {&(_ZTV7S6118C1[22]),  22,33},
  {&(_ZTV7S6118C1[31]),  31,33},
  {&(_tg__ZTV7S6118C4__7S6118C1[5]),  5,7},
  {&(_tg__ZTV7S6118C6__7S6118C4__7S6118C1[3]),  3,5},
  {&(_tg__ZTV8S6118C11__7S6118C1[6]),  6,8},
  {&(_tg__ZTV7S6118C4__8S6118C11__7S6118C1[6]),  6,8},
  {&(_tg__ZTV7S6118C6__A1__8S6118C11__7S6118C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S6118C1[];
extern  VTBL_ENTRY _ZTV7S6118C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6118C1[];
static VTBL_ENTRY alt_thunk_names167[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C4D0Ev,_ZTv0_n12_N7S6118C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C4D0Ev,_ZThn12_N7S6118C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C4D1Ev,_ZTv0_n12_N7S6118C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C4D1Ev,_ZThn12_N7S6118C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6118C3D0Ev,_ZTv0_n28_N7S6118C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6118C3D0Ev,_ZThn40_N7S6118C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6118C3D1Ev,_ZTv0_n28_N7S6118C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6118C3D1Ev,_ZThn40_N7S6118C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C3D0Ev,_ZTv0_n12_N7S6118C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S6118C3D0Ev,_ZThn28_N7S6118C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C3D1Ev,_ZTv0_n12_N7S6118C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S6118C3D1Ev,_ZThn28_N7S6118C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6118C3D0Ev,_ZTv0_n24_N7S6118C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C3D0Ev,_ZThn16_N7S6118C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6118C3D1Ev,_ZTv0_n24_N7S6118C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C3D1Ev,_ZThn16_N7S6118C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6118C1D0Ev,_ZTv0_n28_N7S6118C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6118C1D0Ev,_ZThn40_N7S6118C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6118C1D1Ev,_ZTv0_n28_N7S6118C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6118C1D1Ev,_ZThn40_N7S6118C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C1D0Ev,_ZTv0_n12_N7S6118C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S6118C1D0Ev,_ZThn28_N7S6118C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6118C1D1Ev,_ZTv0_n12_N7S6118C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S6118C1D1Ev,_ZThn28_N7S6118C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6118C1D0Ev,_ZTv0_n24_N7S6118C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C1D0Ev,_ZThn16_N7S6118C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6118C1D1Ev,_ZTv0_n24_N7S6118C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6118C1D1Ev,_ZThn16_N7S6118C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6118C1 = {  "S6118C1", // class name
  bases_S6118C1, 16,
  &(vtc_S6118C1[0]), // expected_vtbl_contents
  &(vtt_S6118C1[0]), // expected_vtt_contents
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S6118C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6118C1),33, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6118C1),13, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names167,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7359C5  {
  virtual void  v9(); // _ZN7S7359C52v9Ev
  ~S7359C5(); // tgen
  S7359C5(); // tgen
};
//SIG(-1 S7359C5) C1{ v1}


void  S7359C5 ::v9(){vfunc_called(this, "_ZN7S7359C52v9Ev");}
S7359C5 ::~S7359C5(){ note_dtor("S7359C5", this);} // tgen
S7359C5 ::S7359C5(){ note_ctor("S7359C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7359C5C1Ev();
extern void _ZN7S7359C5D1Ev();
Name_Map name_map_S7359C5[] = {
  NSPAIR(_ZN7S7359C5C1Ev),
  NSPAIR(_ZN7S7359C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7359C5[];
extern void _ZN7S7359C52v9Ev();
static  VTBL_ENTRY vtc_S7359C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C5[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
};
extern VTBL_ENTRY _ZTI7S7359C5[];
extern  VTBL_ENTRY _ZTV7S7359C5[];
Class_Descriptor cd_S7359C5 = {  "S7359C5", // class name
  0,0,//no base classes
  &(vtc_S7359C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7359C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7359C5),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  S7359C4  : virtual S7359C5 {
  int s7359c4f0;
  void *s7359c4f1;
  virtual  ~S7359C4(); // _ZN7S7359C4D2Ev
  virtual void  v10(); // _ZN7S7359C43v10Ev
  virtual void  v11(); // _ZN7S7359C43v11Ev
  S7359C4(); // tgen
};
//SIG(-1 S7359C4) C1{ VBC2{ v3} vd v1 v2 Fi Fp}


 S7359C4 ::~S7359C4(){ note_dtor("S7359C4", this);}
void  S7359C4 ::v10(){vfunc_called(this, "_ZN7S7359C43v10Ev");}
void  S7359C4 ::v11(){vfunc_called(this, "_ZN7S7359C43v11Ev");}
S7359C4 ::S7359C4(){ note_ctor("S7359C4", this);} // tgen

static void Test_S7359C4()
{
  extern Class_Descriptor cd_S7359C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7359C4, buf);
    S7359C4 *dp, &lv = *(dp=new (buf) S7359C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7359C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7359C4)");
    check_base_class_offset(lv, (S7359C5*), 0, "S7359C4");
    check_field_offset(lv, s7359c4f0, ABISELECT(8,4), "S7359C4.s7359c4f0");
    check_field_offset(lv, s7359c4f1, ABISELECT(16,8), "S7359C4.s7359c4f1");
    test_class_info(&lv, &cd_S7359C4);
    dp->~S7359C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7359C4(Test_S7359C4, "S7359C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7359C4C1Ev();
extern void _ZN7S7359C4D2Ev();
Name_Map name_map_S7359C4[] = {
  NSPAIR(_ZN7S7359C4C1Ev),
  NSPAIR(_ZN7S7359C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7359C5;
extern VTBL_ENTRY _ZTI7S7359C5[];
extern  VTBL_ENTRY _ZTV7S7359C5[];
static Base_Class bases_S7359C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7359C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7359C4[];
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C4D1Ev();
extern void _ZN7S7359C4D0Ev();
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
static  VTBL_ENTRY vtc_S7359C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C4[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S7359C4[];
static  VTT_ENTRY vtt_S7359C4[] = {
  {&(_ZTV7S7359C4[4]),  4,9},
  {&(_ZTV7S7359C4[4]),  4,9},
};
extern VTBL_ENTRY _ZTI7S7359C4[];
extern  VTBL_ENTRY _ZTV7S7359C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C4[];
Class_Descriptor cd_S7359C4 = {  "S7359C4", // class name
  bases_S7359C4, 1,
  &(vtc_S7359C4[0]), // expected_vtbl_contents
  &(vtt_S7359C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7359C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7359C4),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7359C4),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  S7359C3  : S7359C4 {
  long double s7359c3f0[8];
  virtual void  v12(); // _ZN7S7359C33v12Ev
  virtual void  v13(); // _ZN7S7359C33v13Ev
  ~S7359C3(); // tgen
  S7359C3(); // tgen
};
//SIG(-1 S7359C3) C1{ BC2{ VBC3{ v3} vd v4 v5 Fi Fp} v1 v2 FD[8]}


void  S7359C3 ::v12(){vfunc_called(this, "_ZN7S7359C33v12Ev");}
void  S7359C3 ::v13(){vfunc_called(this, "_ZN7S7359C33v13Ev");}
S7359C3 ::~S7359C3(){ note_dtor("S7359C3", this);} // tgen
S7359C3 ::S7359C3(){ note_ctor("S7359C3", this);} // tgen

static void Test_S7359C3()
{
  extern Class_Descriptor cd_S7359C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S7359C3, buf);
    S7359C3 *dp, &lv = *(dp=new (buf) S7359C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S7359C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7359C3)");
    check_base_class_offset(lv, (S7359C5*)(S7359C4*), 0, "S7359C3");
    check_base_class_offset(lv, (S7359C4*), 0, "S7359C3");
    check_field_offset(lv, s7359c3f0, ABISELECT(32,12), "S7359C3.s7359c3f0");
    test_class_info(&lv, &cd_S7359C3);
    dp->~S7359C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7359C3(Test_S7359C3, "S7359C3", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S7359C3C1Ev();
extern void _ZN7S7359C3D1Ev();
Name_Map name_map_S7359C3[] = {
  NSPAIR(_ZN7S7359C3C1Ev),
  NSPAIR(_ZN7S7359C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7359C5;
extern VTBL_ENTRY _ZTI7S7359C5[];
extern  VTBL_ENTRY _ZTV7S7359C5[];
extern Class_Descriptor cd_S7359C4;
extern VTBL_ENTRY _ZTI7S7359C4[];
extern  VTBL_ENTRY _ZTV7S7359C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C4[];
static Base_Class bases_S7359C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7359C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7359C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7359C3[];
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C3D1Ev();
extern void _ZN7S7359C3D0Ev();
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
extern void _ZN7S7359C33v12Ev();
extern void _ZN7S7359C33v13Ev();
static  VTBL_ENTRY vtc_S7359C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C3[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v13Ev,
};
extern VTBL_ENTRY _ZTV7S7359C3[];
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C4D1Ev();
extern void _ZN7S7359C4D0Ev();
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C4__7S7359C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C4[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
};
static  VTT_ENTRY vtt_S7359C3[] = {
  {&(_ZTV7S7359C3[4]),  4,11},
  {&(_tg__ZTV7S7359C4__7S7359C3[4]),  4,9},
  {&(_tg__ZTV7S7359C4__7S7359C3[4]),  4,9},
  {&(_ZTV7S7359C3[4]),  4,11},
};
extern VTBL_ENTRY _ZTI7S7359C3[];
extern  VTBL_ENTRY _ZTV7S7359C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C3[];
Class_Descriptor cd_S7359C3 = {  "S7359C3", // class name
  bases_S7359C3, 2,
  &(vtc_S7359C3[0]), // expected_vtbl_contents
  &(vtt_S7359C3[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S7359C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7359C3),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7359C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7359C6  {
  void *s7359c6f0;
  virtual void  v14(); // _ZN7S7359C63v14Ev
  virtual void  v15(); // _ZN7S7359C63v15Ev
  virtual void  v16(); // _ZN7S7359C63v16Ev
  virtual void  v17(); // _ZN7S7359C63v17Ev
  ~S7359C6(); // tgen
  S7359C6(); // tgen
};
//SIG(-1 S7359C6) C1{ v1 v2 v3 v4 Fp}


void  S7359C6 ::v14(){vfunc_called(this, "_ZN7S7359C63v14Ev");}
void  S7359C6 ::v15(){vfunc_called(this, "_ZN7S7359C63v15Ev");}
void  S7359C6 ::v16(){vfunc_called(this, "_ZN7S7359C63v16Ev");}
void  S7359C6 ::v17(){vfunc_called(this, "_ZN7S7359C63v17Ev");}
S7359C6 ::~S7359C6(){ note_dtor("S7359C6", this);} // tgen
S7359C6 ::S7359C6(){ note_ctor("S7359C6", this);} // tgen

static void Test_S7359C6()
{
  extern Class_Descriptor cd_S7359C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7359C6, buf);
    S7359C6 *dp, &lv = *(dp=new (buf) S7359C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7359C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7359C6)");
    check_field_offset(lv, s7359c6f0, ABISELECT(8,4), "S7359C6.s7359c6f0");
    test_class_info(&lv, &cd_S7359C6);
    dp->~S7359C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7359C6(Test_S7359C6, "S7359C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7359C6C1Ev();
extern void _ZN7S7359C6D1Ev();
Name_Map name_map_S7359C6[] = {
  NSPAIR(_ZN7S7359C6C1Ev),
  NSPAIR(_ZN7S7359C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7359C6[];
extern void _ZN7S7359C63v14Ev();
extern void _ZN7S7359C63v15Ev();
extern void _ZN7S7359C63v16Ev();
extern void _ZN7S7359C63v17Ev();
static  VTBL_ENTRY vtc_S7359C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C6[0]),
  (VTBL_ENTRY)&_ZN7S7359C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v17Ev,
};
extern VTBL_ENTRY _ZTI7S7359C6[];
extern  VTBL_ENTRY _ZTV7S7359C6[];
Class_Descriptor cd_S7359C6 = {  "S7359C6", // class name
  0,0,//no base classes
  &(vtc_S7359C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7359C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7359C6),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  S7359C2  : virtual S7359C3 , virtual S7359C6 {
  long double s7359c2f0[8];
  ::S7359C6 s7359c2f1;
  __tsi64 s7359c2f2;
  void *s7359c2f3;
  virtual void  v18(); // _ZN7S7359C23v18Ev
  virtual void  v19(); // _ZN7S7359C23v19Ev
  ~S7359C2(); // tgen
  S7359C2(); // tgen
};
//SIG(-1 S7359C2) C1{ VBC2{ BC3{ VBC4{ v3} vd v4 v5 Fi Fp} v6 v7 FD[8]} VBC5{ v8 v9 v10 v11 Fp} v1 v2 FD[8] FC5 FL Fp}


void  S7359C2 ::v18(){vfunc_called(this, "_ZN7S7359C23v18Ev");}
void  S7359C2 ::v19(){vfunc_called(this, "_ZN7S7359C23v19Ev");}
S7359C2 ::~S7359C2(){ note_dtor("S7359C2", this);} // tgen
S7359C2 ::S7359C2(){ note_ctor("S7359C2", this);} // tgen

static void Test_S7359C2()
{
  extern Class_Descriptor cd_S7359C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,60)];
    init_test(&cd_S7359C2, buf);
    S7359C2 *dp, &lv = *(dp=new (buf) S7359C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,236), "sizeof(S7359C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7359C2)");
    check_base_class_offset(lv, (S7359C5*)(S7359C4*)(S7359C3*), 0, "S7359C2");
    check_base_class_offset(lv, (S7359C4*)(S7359C3*), ABISELECT(176,120), "S7359C2");
    check_base_class_offset(lv, (S7359C3*), ABISELECT(176,120), "S7359C2");
    check_base_class_offset(lv, (S7359C6*), ABISELECT(336,228), "S7359C2");
    check_field_offset(lv, s7359c2f0, ABISELECT(16,4), "S7359C2.s7359c2f0");
    check_field_offset(lv, s7359c2f1, ABISELECT(144,100), "S7359C2.s7359c2f1");
    check_field_offset(lv, s7359c2f2, ABISELECT(160,108), "S7359C2.s7359c2f2");
    check_field_offset(lv, s7359c2f3, ABISELECT(168,116), "S7359C2.s7359c2f3");
    test_class_info(&lv, &cd_S7359C2);
    dp->~S7359C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7359C2(Test_S7359C2, "S7359C2", ABISELECT(352,236));

#else // __cplusplus

extern void _ZN7S7359C2C1Ev();
extern void _ZN7S7359C2D1Ev();
Name_Map name_map_S7359C2[] = {
  NSPAIR(_ZN7S7359C2C1Ev),
  NSPAIR(_ZN7S7359C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7359C5;
extern VTBL_ENTRY _ZTI7S7359C5[];
extern  VTBL_ENTRY _ZTV7S7359C5[];
extern Class_Descriptor cd_S7359C4;
extern VTBL_ENTRY _ZTI7S7359C4[];
extern  VTBL_ENTRY _ZTV7S7359C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C4[];
extern Class_Descriptor cd_S7359C3;
extern VTBL_ENTRY _ZTI7S7359C3[];
extern  VTBL_ENTRY _ZTV7S7359C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C3[];
extern Class_Descriptor cd_S7359C6;
extern VTBL_ENTRY _ZTI7S7359C6[];
extern  VTBL_ENTRY _ZTV7S7359C6[];
static Base_Class bases_S7359C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7359C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7359C4,    ABISELECT(176,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7359C3,    ABISELECT(176,120), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7359C6,    ABISELECT(336,228), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7359C2[];
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C23v18Ev();
extern void _ZN7S7359C23v19Ev();
extern void _ZN7S7359C2D1Ev();
extern void _ZN7S7359C2D0Ev();
extern void _ZN7S7359C52v9Ev();
extern void ABISELECT(_ZTv0_n40_N7S7359C2D1Ev,_ZTv0_n20_N7S7359C2D1Ev)();
extern void ABISELECT(_ZThn176_N7S7359C2D1Ev,_ZThn120_N7S7359C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7359C2D0Ev,_ZTv0_n20_N7S7359C2D0Ev)();
extern void ABISELECT(_ZThn176_N7S7359C2D0Ev,_ZThn120_N7S7359C2D0Ev)() __attribute__((weak));
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
extern void _ZN7S7359C33v12Ev();
extern void _ZN7S7359C33v13Ev();
extern void _ZN7S7359C63v14Ev();
extern void _ZN7S7359C63v15Ev();
extern void _ZN7S7359C63v16Ev();
extern void _ZN7S7359C63v17Ev();
static  VTBL_ENTRY vtc_S7359C2[] = {
  ABISELECT(336,228),
  0,
  ABISELECT(176,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C2[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7359C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7359C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C2D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-120),
  ABISELECT(-176,-120),
  ABISELECT(-176,-120),
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S7359C2[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7359C2D1Ev,_ZTv0_n20_N7S7359C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7359C2D0Ev,_ZTv0_n20_N7S7359C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v13Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-228),
  (VTBL_ENTRY)&(_ZTI7S7359C2[0]),
  (VTBL_ENTRY)&_ZN7S7359C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v17Ev,
};
extern VTBL_ENTRY _ZTV7S7359C2[];
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C3D1Ev();
extern void _ZN7S7359C3D0Ev();
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
extern void _ZN7S7359C33v12Ev();
extern void _ZN7S7359C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C3__7S7359C2[] = {
  ABISELECT(-176,-120),
  ABISELECT(-176,-120),
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C3[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v13Ev,
};
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C4D1Ev();
extern void _ZN7S7359C4D0Ev();
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C47S7359C3__7S7359C2[] = {
  ABISELECT(-176,-120),
  ABISELECT(-176,-120),
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C4[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
};
extern void _ZN7S7359C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C5__7S7359C47S7359C3__7S7359C2[] = {
  0,
  ABISELECT(176,120),
  (VTBL_ENTRY)&(_ZTI7S7359C4[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
};
extern void _ZN7S7359C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C5__7S7359C3__7S7359C2[] = {
  0,
  ABISELECT(176,120),
  (VTBL_ENTRY)&(_ZTI7S7359C3[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
};
static  VTT_ENTRY vtt_S7359C2[] = {
  {&(_ZTV7S7359C2[6]),  6,37},
  {&(_ZTV7S7359C2[20]),  20,37},
  {&(_ZTV7S7359C2[6]),  6,37},
  {&(_ZTV7S7359C2[33]),  33,37},
  {&(_tg__ZTV7S7359C3__7S7359C2[4]),  4,11},
  {&(_tg__ZTV7S7359C47S7359C3__7S7359C2[4]),  4,9},
  {&(_tg__ZTV7S7359C5__7S7359C47S7359C3__7S7359C2[3]),  3,4},
  {&(_tg__ZTV7S7359C5__7S7359C3__7S7359C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7359C2[];
extern  VTBL_ENTRY _ZTV7S7359C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C2[];
static VTBL_ENTRY alt_thunk_names168[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7359C2D0Ev,_ZTv0_n20_N7S7359C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7359C2D0Ev,_ZThn120_N7S7359C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7359C2D1Ev,_ZTv0_n20_N7S7359C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7359C2D1Ev,_ZThn120_N7S7359C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7359C2 = {  "S7359C2", // class name
  bases_S7359C2, 4,
  &(vtc_S7359C2[0]), // expected_vtbl_contents
  &(vtt_S7359C2[0]), // expected_vtt_contents
  ABISELECT(352,236), // object size
  NSPAIRA(_ZTI7S7359C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7359C2),37, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7359C2),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names168,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7359C1  : S7359C2 , S7359C5 {
  void *s7359c1f0[7];
  int s7359c1f1;
  virtual  ~S7359C1(); // _ZN7S7359C1D2Ev
  virtual void  v1(); // _ZN7S7359C12v1Ev
  virtual void  v2(); // _ZN7S7359C12v2Ev
  virtual void  v3(); // _ZN7S7359C12v3Ev
  virtual void  v4(); // _ZN7S7359C12v4Ev
  virtual void  v5(); // _ZN7S7359C12v5Ev
  virtual void  v6(); // _ZN7S7359C12v6Ev
  virtual void  v7(); // _ZN7S7359C12v7Ev
  virtual void  v8(); // _ZN7S7359C12v8Ev
  S7359C1(); // tgen
};
//SIG(1 S7359C1) C1{ BC2{ VBC3{ BC4{ VBC5{ v9} vd v10 v11 Fi Fp} v12 v13 FD[8]} VBC6{ v14 v15 v16 v17 Fp} v18 v19 FD[8] FC6 FL Fp} BC5 vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[7] Fi}


 S7359C1 ::~S7359C1(){ note_dtor("S7359C1", this);}
void  S7359C1 ::v1(){vfunc_called(this, "_ZN7S7359C12v1Ev");}
void  S7359C1 ::v2(){vfunc_called(this, "_ZN7S7359C12v2Ev");}
void  S7359C1 ::v3(){vfunc_called(this, "_ZN7S7359C12v3Ev");}
void  S7359C1 ::v4(){vfunc_called(this, "_ZN7S7359C12v4Ev");}
void  S7359C1 ::v5(){vfunc_called(this, "_ZN7S7359C12v5Ev");}
void  S7359C1 ::v6(){vfunc_called(this, "_ZN7S7359C12v6Ev");}
void  S7359C1 ::v7(){vfunc_called(this, "_ZN7S7359C12v7Ev");}
void  S7359C1 ::v8(){vfunc_called(this, "_ZN7S7359C12v8Ev");}
S7359C1 ::S7359C1(){ note_ctor("S7359C1", this);} // tgen

static void Test_S7359C1()
{
  extern Class_Descriptor cd_S7359C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,69)];
    init_test(&cd_S7359C1, buf);
    S7359C1 *dp, &lv = *(dp=new (buf) S7359C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,272), "sizeof(S7359C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7359C1)");
    check_base_class_offset(lv, (S7359C5*)(S7359C4*)(S7359C3*), 0, "S7359C1");
    check_base_class_offset(lv, (S7359C4*)(S7359C3*), ABISELECT(256,156), "S7359C1");
    check_base_class_offset(lv, (S7359C3*)(S7359C2*), ABISELECT(256,156), "S7359C1");
    check_base_class_offset(lv, (S7359C6*)(S7359C2*), ABISELECT(416,264), "S7359C1");
    check_base_class_offset(lv, (S7359C2*), 0, "S7359C1");
    /*is_ambiguous_... S7359C1::S7359C5 */ AMB_check_base_class_offset(lv, (S7359C5*), ABISELECT(176,120), "S7359C1");
    check_field_offset(lv, s7359c1f0, ABISELECT(184,124), "S7359C1.s7359c1f0");
    check_field_offset(lv, s7359c1f1, ABISELECT(240,152), "S7359C1.s7359c1f1");
    test_class_info(&lv, &cd_S7359C1);
    dp->~S7359C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7359C1(Test_S7359C1, "S7359C1", ABISELECT(432,272));

#else // __cplusplus

extern void _ZN7S7359C1C1Ev();
extern void _ZN7S7359C1D2Ev();
Name_Map name_map_S7359C1[] = {
  NSPAIR(_ZN7S7359C1C1Ev),
  NSPAIR(_ZN7S7359C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7359C5;
extern VTBL_ENTRY _ZTI7S7359C5[];
extern  VTBL_ENTRY _ZTV7S7359C5[];
extern Class_Descriptor cd_S7359C4;
extern VTBL_ENTRY _ZTI7S7359C4[];
extern  VTBL_ENTRY _ZTV7S7359C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C4[];
extern Class_Descriptor cd_S7359C3;
extern VTBL_ENTRY _ZTI7S7359C3[];
extern  VTBL_ENTRY _ZTV7S7359C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C3[];
extern Class_Descriptor cd_S7359C6;
extern VTBL_ENTRY _ZTI7S7359C6[];
extern  VTBL_ENTRY _ZTV7S7359C6[];
extern Class_Descriptor cd_S7359C2;
extern VTBL_ENTRY _ZTI7S7359C2[];
extern  VTBL_ENTRY _ZTV7S7359C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C2[];
extern Class_Descriptor cd_S7359C5;
extern VTBL_ENTRY _ZTI7S7359C5[];
extern  VTBL_ENTRY _ZTV7S7359C5[];
static Base_Class bases_S7359C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7359C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7359C4,    ABISELECT(256,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7359C3,    ABISELECT(256,156), //bcp->offset
    22, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7359C6,    ABISELECT(416,264), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7359C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7359C5,    ABISELECT(176,120), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7359C1[];
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C23v18Ev();
extern void _ZN7S7359C23v19Ev();
extern void _ZN7S7359C1D1Ev();
extern void _ZN7S7359C1D0Ev();
extern void _ZN7S7359C12v1Ev();
extern void _ZN7S7359C12v2Ev();
extern void _ZN7S7359C12v3Ev();
extern void _ZN7S7359C12v4Ev();
extern void _ZN7S7359C12v5Ev();
extern void _ZN7S7359C12v6Ev();
extern void _ZN7S7359C12v7Ev();
extern void _ZN7S7359C12v8Ev();
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C52v9Ev();
extern void ABISELECT(_ZTv0_n40_N7S7359C1D1Ev,_ZTv0_n20_N7S7359C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S7359C1D1Ev,_ZThn156_N7S7359C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7359C1D0Ev,_ZTv0_n20_N7S7359C1D0Ev)();
extern void ABISELECT(_ZThn256_N7S7359C1D0Ev,_ZThn156_N7S7359C1D0Ev)() __attribute__((weak));
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
extern void _ZN7S7359C33v12Ev();
extern void _ZN7S7359C33v13Ev();
extern void _ZN7S7359C63v14Ev();
extern void _ZN7S7359C63v15Ev();
extern void _ZN7S7359C63v16Ev();
extern void _ZN7S7359C63v17Ev();
static  VTBL_ENTRY vtc_S7359C1[] = {
  ABISELECT(416,264),
  0,
  ABISELECT(256,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C1[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7359C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7359C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7359C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7359C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7359C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7359C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7359C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7359C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7359C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7359C12v8Ev,
  ABISELECT(-176,-120),
  (VTBL_ENTRY)&(_ZTI7S7359C1[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S7359C1[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7359C1D1Ev,_ZTv0_n20_N7S7359C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7359C1D0Ev,_ZTv0_n20_N7S7359C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v13Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI7S7359C1[0]),
  (VTBL_ENTRY)&_ZN7S7359C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v17Ev,
};
extern VTBL_ENTRY _ZTV7S7359C1[];
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C23v18Ev();
extern void _ZN7S7359C23v19Ev();
extern void _ZN7S7359C2D1Ev();
extern void _ZN7S7359C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C2__7S7359C1[] = {
  ABISELECT(416,264),
  0,
  ABISELECT(256,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C2[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7359C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7359C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C2D0Ev,
};
extern void _ZN7S7359C52v9Ev();
extern void ABISELECT(_ZTv0_n40_N7S7359C2D1Ev,_ZTv0_n20_N7S7359C2D1Ev)();
extern void ABISELECT(_ZThn256_N7S7359C2D1Ev,_ZThn156_N7S7359C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7359C2D0Ev,_ZTv0_n20_N7S7359C2D0Ev)();
extern void ABISELECT(_ZThn256_N7S7359C2D0Ev,_ZThn156_N7S7359C2D0Ev)() __attribute__((weak));
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
extern void _ZN7S7359C33v12Ev();
extern void _ZN7S7359C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C3__7S7359C2__7S7359C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  (VTBL_ENTRY)&(_ZTI7S7359C2[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7359C2D1Ev,_ZTv0_n20_N7S7359C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7359C2D0Ev,_ZTv0_n20_N7S7359C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v13Ev,
};
extern void _ZN7S7359C63v14Ev();
extern void _ZN7S7359C63v15Ev();
extern void _ZN7S7359C63v16Ev();
extern void _ZN7S7359C63v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C6__7S7359C2__7S7359C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI7S7359C2[0]),
  (VTBL_ENTRY)&_ZN7S7359C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7359C63v17Ev,
};
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C3D1Ev();
extern void _ZN7S7359C3D0Ev();
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
extern void _ZN7S7359C33v12Ev();
extern void _ZN7S7359C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C3__7S7359C1[] = {
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C3[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7359C33v13Ev,
};
extern void _ZN7S7359C52v9Ev();
extern void _ZN7S7359C4D1Ev();
extern void _ZN7S7359C4D0Ev();
extern void _ZN7S7359C43v10Ev();
extern void _ZN7S7359C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C47S7359C3__7S7359C1[] = {
  ABISELECT(-256,-156),
  ABISELECT(-256,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7359C4[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7359C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7359C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7359C43v11Ev,
};
extern void _ZN7S7359C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C5__7S7359C47S7359C3__7S7359C1[] = {
  0,
  ABISELECT(256,156),
  (VTBL_ENTRY)&(_ZTI7S7359C4[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
};
extern void _ZN7S7359C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7359C5__7S7359C3__7S7359C1[] = {
  0,
  ABISELECT(256,156),
  (VTBL_ENTRY)&(_ZTI7S7359C3[0]),
  (VTBL_ENTRY)&_ZN7S7359C52v9Ev,
};
static  VTT_ENTRY vtt_S7359C1[] = {
  {&(_ZTV7S7359C1[6]),  6,48},
  {&(_tg__ZTV7S7359C2__7S7359C1[6]),  6,11},
  {&(_tg__ZTV7S7359C3__7S7359C2__7S7359C1[9]),  9,16},
  {&(_tg__ZTV7S7359C2__7S7359C1[6]),  6,11},
  {&(_tg__ZTV7S7359C6__7S7359C2__7S7359C1[6]),  6,10},
  {&(_ZTV7S7359C1[31]),  31,48},
  {&(_ZTV7S7359C1[6]),  6,48},
  {&(_ZTV7S7359C1[44]),  44,48},
  {&(_tg__ZTV7S7359C3__7S7359C1[4]),  4,11},
  {&(_tg__ZTV7S7359C47S7359C3__7S7359C1[4]),  4,9},
  {&(_tg__ZTV7S7359C5__7S7359C47S7359C3__7S7359C1[3]),  3,4},
  {&(_tg__ZTV7S7359C5__7S7359C3__7S7359C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7359C1[];
extern  VTBL_ENTRY _ZTV7S7359C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7359C1[];
static VTBL_ENTRY alt_thunk_names169[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7359C2D0Ev,_ZTv0_n20_N7S7359C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7359C2D0Ev,_ZThn156_N7S7359C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7359C2D1Ev,_ZTv0_n20_N7S7359C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7359C2D1Ev,_ZThn156_N7S7359C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7359C1D0Ev,_ZTv0_n20_N7S7359C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7359C1D0Ev,_ZThn156_N7S7359C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7359C1D1Ev,_ZTv0_n20_N7S7359C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7359C1D1Ev,_ZThn156_N7S7359C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7359C1 = {  "S7359C1", // class name
  bases_S7359C1, 6,
  &(vtc_S7359C1[0]), // expected_vtbl_contents
  &(vtt_S7359C1[0]), // expected_vtt_contents
  ABISELECT(432,272), // object size
  NSPAIRA(_ZTI7S7359C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7359C1),48, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7359C1),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names169,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7358C5  {
  virtual void  v9(); // _ZN7S7358C52v9Ev
  ~S7358C5(); // tgen
  S7358C5(); // tgen
};
//SIG(-1 S7358C5) C1{ v1}


void  S7358C5 ::v9(){vfunc_called(this, "_ZN7S7358C52v9Ev");}
S7358C5 ::~S7358C5(){ note_dtor("S7358C5", this);} // tgen
S7358C5 ::S7358C5(){ note_ctor("S7358C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7358C5C1Ev();
extern void _ZN7S7358C5D1Ev();
Name_Map name_map_S7358C5[] = {
  NSPAIR(_ZN7S7358C5C1Ev),
  NSPAIR(_ZN7S7358C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7358C5[];
extern void _ZN7S7358C52v9Ev();
static  VTBL_ENTRY vtc_S7358C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C5[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
};
extern VTBL_ENTRY _ZTI7S7358C5[];
extern  VTBL_ENTRY _ZTV7S7358C5[];
Class_Descriptor cd_S7358C5 = {  "S7358C5", // class name
  0,0,//no base classes
  &(vtc_S7358C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7358C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7358C5),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  S7358C4  : virtual S7358C5 {
  int s7358c4f0;
  void *s7358c4f1;
  virtual  ~S7358C4(); // _ZN7S7358C4D2Ev
  virtual void  v10(); // _ZN7S7358C43v10Ev
  virtual void  v11(); // _ZN7S7358C43v11Ev
  S7358C4(); // tgen
};
//SIG(-1 S7358C4) C1{ VBC2{ v3} vd v1 v2 Fi Fp}


 S7358C4 ::~S7358C4(){ note_dtor("S7358C4", this);}
void  S7358C4 ::v10(){vfunc_called(this, "_ZN7S7358C43v10Ev");}
void  S7358C4 ::v11(){vfunc_called(this, "_ZN7S7358C43v11Ev");}
S7358C4 ::S7358C4(){ note_ctor("S7358C4", this);} // tgen

static void Test_S7358C4()
{
  extern Class_Descriptor cd_S7358C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7358C4, buf);
    S7358C4 *dp, &lv = *(dp=new (buf) S7358C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7358C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7358C4)");
    check_base_class_offset(lv, (S7358C5*), 0, "S7358C4");
    check_field_offset(lv, s7358c4f0, ABISELECT(8,4), "S7358C4.s7358c4f0");
    check_field_offset(lv, s7358c4f1, ABISELECT(16,8), "S7358C4.s7358c4f1");
    test_class_info(&lv, &cd_S7358C4);
    dp->~S7358C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7358C4(Test_S7358C4, "S7358C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7358C4C1Ev();
extern void _ZN7S7358C4D2Ev();
Name_Map name_map_S7358C4[] = {
  NSPAIR(_ZN7S7358C4C1Ev),
  NSPAIR(_ZN7S7358C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7358C5;
extern VTBL_ENTRY _ZTI7S7358C5[];
extern  VTBL_ENTRY _ZTV7S7358C5[];
static Base_Class bases_S7358C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7358C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7358C4[];
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C4D1Ev();
extern void _ZN7S7358C4D0Ev();
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
static  VTBL_ENTRY vtc_S7358C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C4[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S7358C4[];
static  VTT_ENTRY vtt_S7358C4[] = {
  {&(_ZTV7S7358C4[4]),  4,9},
  {&(_ZTV7S7358C4[4]),  4,9},
};
extern VTBL_ENTRY _ZTI7S7358C4[];
extern  VTBL_ENTRY _ZTV7S7358C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C4[];
Class_Descriptor cd_S7358C4 = {  "S7358C4", // class name
  bases_S7358C4, 1,
  &(vtc_S7358C4[0]), // expected_vtbl_contents
  &(vtt_S7358C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7358C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7358C4),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7358C4),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  S7358C3  : S7358C4 {
  long double s7358c3f0[8];
  virtual void  v12(); // _ZN7S7358C33v12Ev
  virtual void  v13(); // _ZN7S7358C33v13Ev
  ~S7358C3(); // tgen
  S7358C3(); // tgen
};
//SIG(-1 S7358C3) C1{ BC2{ VBC3{ v3} vd v4 v5 Fi Fp} v1 v2 FD[8]}


void  S7358C3 ::v12(){vfunc_called(this, "_ZN7S7358C33v12Ev");}
void  S7358C3 ::v13(){vfunc_called(this, "_ZN7S7358C33v13Ev");}
S7358C3 ::~S7358C3(){ note_dtor("S7358C3", this);} // tgen
S7358C3 ::S7358C3(){ note_ctor("S7358C3", this);} // tgen

static void Test_S7358C3()
{
  extern Class_Descriptor cd_S7358C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S7358C3, buf);
    S7358C3 *dp, &lv = *(dp=new (buf) S7358C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S7358C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7358C3)");
    check_base_class_offset(lv, (S7358C5*)(S7358C4*), 0, "S7358C3");
    check_base_class_offset(lv, (S7358C4*), 0, "S7358C3");
    check_field_offset(lv, s7358c3f0, ABISELECT(32,12), "S7358C3.s7358c3f0");
    test_class_info(&lv, &cd_S7358C3);
    dp->~S7358C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7358C3(Test_S7358C3, "S7358C3", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S7358C3C1Ev();
extern void _ZN7S7358C3D1Ev();
Name_Map name_map_S7358C3[] = {
  NSPAIR(_ZN7S7358C3C1Ev),
  NSPAIR(_ZN7S7358C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7358C5;
extern VTBL_ENTRY _ZTI7S7358C5[];
extern  VTBL_ENTRY _ZTV7S7358C5[];
extern Class_Descriptor cd_S7358C4;
extern VTBL_ENTRY _ZTI7S7358C4[];
extern  VTBL_ENTRY _ZTV7S7358C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C4[];
static Base_Class bases_S7358C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7358C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7358C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7358C3[];
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C3D1Ev();
extern void _ZN7S7358C3D0Ev();
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
extern void _ZN7S7358C33v12Ev();
extern void _ZN7S7358C33v13Ev();
static  VTBL_ENTRY vtc_S7358C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C3[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v13Ev,
};
extern VTBL_ENTRY _ZTV7S7358C3[];
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C4D1Ev();
extern void _ZN7S7358C4D0Ev();
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C4__7S7358C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C4[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
};
static  VTT_ENTRY vtt_S7358C3[] = {
  {&(_ZTV7S7358C3[4]),  4,11},
  {&(_tg__ZTV7S7358C4__7S7358C3[4]),  4,9},
  {&(_tg__ZTV7S7358C4__7S7358C3[4]),  4,9},
  {&(_ZTV7S7358C3[4]),  4,11},
};
extern VTBL_ENTRY _ZTI7S7358C3[];
extern  VTBL_ENTRY _ZTV7S7358C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C3[];
Class_Descriptor cd_S7358C3 = {  "S7358C3", // class name
  bases_S7358C3, 2,
  &(vtc_S7358C3[0]), // expected_vtbl_contents
  &(vtt_S7358C3[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S7358C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7358C3),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7358C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7358C6  {
  void *s7358c6f0;
  virtual void  v14(); // _ZN7S7358C63v14Ev
  virtual void  v15(); // _ZN7S7358C63v15Ev
  virtual void  v16(); // _ZN7S7358C63v16Ev
  virtual void  v17(); // _ZN7S7358C63v17Ev
  ~S7358C6(); // tgen
  S7358C6(); // tgen
};
//SIG(-1 S7358C6) C1{ v1 v2 v3 v4 Fp}


void  S7358C6 ::v14(){vfunc_called(this, "_ZN7S7358C63v14Ev");}
void  S7358C6 ::v15(){vfunc_called(this, "_ZN7S7358C63v15Ev");}
void  S7358C6 ::v16(){vfunc_called(this, "_ZN7S7358C63v16Ev");}
void  S7358C6 ::v17(){vfunc_called(this, "_ZN7S7358C63v17Ev");}
S7358C6 ::~S7358C6(){ note_dtor("S7358C6", this);} // tgen
S7358C6 ::S7358C6(){ note_ctor("S7358C6", this);} // tgen

static void Test_S7358C6()
{
  extern Class_Descriptor cd_S7358C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7358C6, buf);
    S7358C6 *dp, &lv = *(dp=new (buf) S7358C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7358C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7358C6)");
    check_field_offset(lv, s7358c6f0, ABISELECT(8,4), "S7358C6.s7358c6f0");
    test_class_info(&lv, &cd_S7358C6);
    dp->~S7358C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7358C6(Test_S7358C6, "S7358C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7358C6C1Ev();
extern void _ZN7S7358C6D1Ev();
Name_Map name_map_S7358C6[] = {
  NSPAIR(_ZN7S7358C6C1Ev),
  NSPAIR(_ZN7S7358C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7358C6[];
extern void _ZN7S7358C63v14Ev();
extern void _ZN7S7358C63v15Ev();
extern void _ZN7S7358C63v16Ev();
extern void _ZN7S7358C63v17Ev();
static  VTBL_ENTRY vtc_S7358C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C6[0]),
  (VTBL_ENTRY)&_ZN7S7358C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v17Ev,
};
extern VTBL_ENTRY _ZTI7S7358C6[];
extern  VTBL_ENTRY _ZTV7S7358C6[];
Class_Descriptor cd_S7358C6 = {  "S7358C6", // class name
  0,0,//no base classes
  &(vtc_S7358C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7358C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7358C6),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  S7358C2  : virtual S7358C3 , virtual S7358C6 {
  long double s7358c2f0[8];
  ::S7358C6 s7358c2f1;
  long s7358c2f2;
  void *s7358c2f3;
  virtual void  v18(); // _ZN7S7358C23v18Ev
  virtual void  v19(); // _ZN7S7358C23v19Ev
  ~S7358C2(); // tgen
  S7358C2(); // tgen
};
//SIG(-1 S7358C2) C1{ VBC2{ BC3{ VBC4{ v3} vd v4 v5 Fi Fp} v6 v7 FD[8]} VBC5{ v8 v9 v10 v11 Fp} v1 v2 FD[8] FC5 Fl Fp}


void  S7358C2 ::v18(){vfunc_called(this, "_ZN7S7358C23v18Ev");}
void  S7358C2 ::v19(){vfunc_called(this, "_ZN7S7358C23v19Ev");}
S7358C2 ::~S7358C2(){ note_dtor("S7358C2", this);} // tgen
S7358C2 ::S7358C2(){ note_ctor("S7358C2", this);} // tgen

static void Test_S7358C2()
{
  extern Class_Descriptor cd_S7358C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,59)];
    init_test(&cd_S7358C2, buf);
    S7358C2 *dp, &lv = *(dp=new (buf) S7358C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,232), "sizeof(S7358C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7358C2)");
    check_base_class_offset(lv, (S7358C5*)(S7358C4*)(S7358C3*), 0, "S7358C2");
    check_base_class_offset(lv, (S7358C4*)(S7358C3*), ABISELECT(176,116), "S7358C2");
    check_base_class_offset(lv, (S7358C3*), ABISELECT(176,116), "S7358C2");
    check_base_class_offset(lv, (S7358C6*), ABISELECT(336,224), "S7358C2");
    check_field_offset(lv, s7358c2f0, ABISELECT(16,4), "S7358C2.s7358c2f0");
    check_field_offset(lv, s7358c2f1, ABISELECT(144,100), "S7358C2.s7358c2f1");
    check_field_offset(lv, s7358c2f2, ABISELECT(160,108), "S7358C2.s7358c2f2");
    check_field_offset(lv, s7358c2f3, ABISELECT(168,112), "S7358C2.s7358c2f3");
    test_class_info(&lv, &cd_S7358C2);
    dp->~S7358C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7358C2(Test_S7358C2, "S7358C2", ABISELECT(352,232));

#else // __cplusplus

extern void _ZN7S7358C2C1Ev();
extern void _ZN7S7358C2D1Ev();
Name_Map name_map_S7358C2[] = {
  NSPAIR(_ZN7S7358C2C1Ev),
  NSPAIR(_ZN7S7358C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7358C5;
extern VTBL_ENTRY _ZTI7S7358C5[];
extern  VTBL_ENTRY _ZTV7S7358C5[];
extern Class_Descriptor cd_S7358C4;
extern VTBL_ENTRY _ZTI7S7358C4[];
extern  VTBL_ENTRY _ZTV7S7358C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C4[];
extern Class_Descriptor cd_S7358C3;
extern VTBL_ENTRY _ZTI7S7358C3[];
extern  VTBL_ENTRY _ZTV7S7358C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C3[];
extern Class_Descriptor cd_S7358C6;
extern VTBL_ENTRY _ZTI7S7358C6[];
extern  VTBL_ENTRY _ZTV7S7358C6[];
static Base_Class bases_S7358C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7358C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7358C4,    ABISELECT(176,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7358C3,    ABISELECT(176,116), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7358C6,    ABISELECT(336,224), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7358C2[];
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C23v18Ev();
extern void _ZN7S7358C23v19Ev();
extern void _ZN7S7358C2D1Ev();
extern void _ZN7S7358C2D0Ev();
extern void _ZN7S7358C52v9Ev();
extern void ABISELECT(_ZTv0_n40_N7S7358C2D1Ev,_ZTv0_n20_N7S7358C2D1Ev)();
extern void ABISELECT(_ZThn176_N7S7358C2D1Ev,_ZThn116_N7S7358C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7358C2D0Ev,_ZTv0_n20_N7S7358C2D0Ev)();
extern void ABISELECT(_ZThn176_N7S7358C2D0Ev,_ZThn116_N7S7358C2D0Ev)() __attribute__((weak));
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
extern void _ZN7S7358C33v12Ev();
extern void _ZN7S7358C33v13Ev();
extern void _ZN7S7358C63v14Ev();
extern void _ZN7S7358C63v15Ev();
extern void _ZN7S7358C63v16Ev();
extern void _ZN7S7358C63v17Ev();
static  VTBL_ENTRY vtc_S7358C2[] = {
  ABISELECT(336,224),
  0,
  ABISELECT(176,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C2[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7358C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7358C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C2D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S7358C2[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7358C2D1Ev,_ZTv0_n20_N7S7358C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7358C2D0Ev,_ZTv0_n20_N7S7358C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v13Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-224),
  (VTBL_ENTRY)&(_ZTI7S7358C2[0]),
  (VTBL_ENTRY)&_ZN7S7358C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v17Ev,
};
extern VTBL_ENTRY _ZTV7S7358C2[];
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C3D1Ev();
extern void _ZN7S7358C3D0Ev();
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
extern void _ZN7S7358C33v12Ev();
extern void _ZN7S7358C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C3__7S7358C2[] = {
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C3[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v13Ev,
};
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C4D1Ev();
extern void _ZN7S7358C4D0Ev();
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C47S7358C3__7S7358C2[] = {
  ABISELECT(-176,-116),
  ABISELECT(-176,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C4[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
};
extern void _ZN7S7358C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C5__7S7358C47S7358C3__7S7358C2[] = {
  0,
  ABISELECT(176,116),
  (VTBL_ENTRY)&(_ZTI7S7358C4[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
};
extern void _ZN7S7358C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C5__7S7358C3__7S7358C2[] = {
  0,
  ABISELECT(176,116),
  (VTBL_ENTRY)&(_ZTI7S7358C3[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
};
static  VTT_ENTRY vtt_S7358C2[] = {
  {&(_ZTV7S7358C2[6]),  6,37},
  {&(_ZTV7S7358C2[20]),  20,37},
  {&(_ZTV7S7358C2[6]),  6,37},
  {&(_ZTV7S7358C2[33]),  33,37},
  {&(_tg__ZTV7S7358C3__7S7358C2[4]),  4,11},
  {&(_tg__ZTV7S7358C47S7358C3__7S7358C2[4]),  4,9},
  {&(_tg__ZTV7S7358C5__7S7358C47S7358C3__7S7358C2[3]),  3,4},
  {&(_tg__ZTV7S7358C5__7S7358C3__7S7358C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7358C2[];
extern  VTBL_ENTRY _ZTV7S7358C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C2[];
static VTBL_ENTRY alt_thunk_names170[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7358C2D0Ev,_ZTv0_n20_N7S7358C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7358C2D0Ev,_ZThn116_N7S7358C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7358C2D1Ev,_ZTv0_n20_N7S7358C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7358C2D1Ev,_ZThn116_N7S7358C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7358C2 = {  "S7358C2", // class name
  bases_S7358C2, 4,
  &(vtc_S7358C2[0]), // expected_vtbl_contents
  &(vtt_S7358C2[0]), // expected_vtt_contents
  ABISELECT(352,232), // object size
  NSPAIRA(_ZTI7S7358C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7358C2),37, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7358C2),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names170,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7358C1  : S7358C2 , S7358C5 {
  void *s7358c1f0[7];
  int s7358c1f1;
  virtual  ~S7358C1(); // _ZN7S7358C1D2Ev
  virtual void  v1(); // _ZN7S7358C12v1Ev
  virtual void  v2(); // _ZN7S7358C12v2Ev
  virtual void  v3(); // _ZN7S7358C12v3Ev
  virtual void  v4(); // _ZN7S7358C12v4Ev
  virtual void  v5(); // _ZN7S7358C12v5Ev
  virtual void  v6(); // _ZN7S7358C12v6Ev
  virtual void  v7(); // _ZN7S7358C12v7Ev
  virtual void  v8(); // _ZN7S7358C12v8Ev
  S7358C1(); // tgen
};
//SIG(1 S7358C1) C1{ BC2{ VBC3{ BC4{ VBC5{ v9} vd v10 v11 Fi Fp} v12 v13 FD[8]} VBC6{ v14 v15 v16 v17 Fp} v18 v19 FD[8] FC6 Fl Fp} BC5 vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[7] Fi}


 S7358C1 ::~S7358C1(){ note_dtor("S7358C1", this);}
void  S7358C1 ::v1(){vfunc_called(this, "_ZN7S7358C12v1Ev");}
void  S7358C1 ::v2(){vfunc_called(this, "_ZN7S7358C12v2Ev");}
void  S7358C1 ::v3(){vfunc_called(this, "_ZN7S7358C12v3Ev");}
void  S7358C1 ::v4(){vfunc_called(this, "_ZN7S7358C12v4Ev");}
void  S7358C1 ::v5(){vfunc_called(this, "_ZN7S7358C12v5Ev");}
void  S7358C1 ::v6(){vfunc_called(this, "_ZN7S7358C12v6Ev");}
void  S7358C1 ::v7(){vfunc_called(this, "_ZN7S7358C12v7Ev");}
void  S7358C1 ::v8(){vfunc_called(this, "_ZN7S7358C12v8Ev");}
S7358C1 ::S7358C1(){ note_ctor("S7358C1", this);} // tgen

static void Test_S7358C1()
{
  extern Class_Descriptor cd_S7358C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,68)];
    init_test(&cd_S7358C1, buf);
    S7358C1 *dp, &lv = *(dp=new (buf) S7358C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,268), "sizeof(S7358C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7358C1)");
    check_base_class_offset(lv, (S7358C5*)(S7358C4*)(S7358C3*), 0, "S7358C1");
    check_base_class_offset(lv, (S7358C4*)(S7358C3*), ABISELECT(256,152), "S7358C1");
    check_base_class_offset(lv, (S7358C3*)(S7358C2*), ABISELECT(256,152), "S7358C1");
    check_base_class_offset(lv, (S7358C6*)(S7358C2*), ABISELECT(416,260), "S7358C1");
    check_base_class_offset(lv, (S7358C2*), 0, "S7358C1");
    /*is_ambiguous_... S7358C1::S7358C5 */ AMB_check_base_class_offset(lv, (S7358C5*), ABISELECT(176,116), "S7358C1");
    check_field_offset(lv, s7358c1f0, ABISELECT(184,120), "S7358C1.s7358c1f0");
    check_field_offset(lv, s7358c1f1, ABISELECT(240,148), "S7358C1.s7358c1f1");
    test_class_info(&lv, &cd_S7358C1);
    dp->~S7358C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7358C1(Test_S7358C1, "S7358C1", ABISELECT(432,268));

#else // __cplusplus

extern void _ZN7S7358C1C1Ev();
extern void _ZN7S7358C1D2Ev();
Name_Map name_map_S7358C1[] = {
  NSPAIR(_ZN7S7358C1C1Ev),
  NSPAIR(_ZN7S7358C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7358C5;
extern VTBL_ENTRY _ZTI7S7358C5[];
extern  VTBL_ENTRY _ZTV7S7358C5[];
extern Class_Descriptor cd_S7358C4;
extern VTBL_ENTRY _ZTI7S7358C4[];
extern  VTBL_ENTRY _ZTV7S7358C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C4[];
extern Class_Descriptor cd_S7358C3;
extern VTBL_ENTRY _ZTI7S7358C3[];
extern  VTBL_ENTRY _ZTV7S7358C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C3[];
extern Class_Descriptor cd_S7358C6;
extern VTBL_ENTRY _ZTI7S7358C6[];
extern  VTBL_ENTRY _ZTV7S7358C6[];
extern Class_Descriptor cd_S7358C2;
extern VTBL_ENTRY _ZTI7S7358C2[];
extern  VTBL_ENTRY _ZTV7S7358C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C2[];
extern Class_Descriptor cd_S7358C5;
extern VTBL_ENTRY _ZTI7S7358C5[];
extern  VTBL_ENTRY _ZTV7S7358C5[];
static Base_Class bases_S7358C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7358C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7358C4,    ABISELECT(256,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7358C3,    ABISELECT(256,152), //bcp->offset
    22, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7358C6,    ABISELECT(416,260), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7358C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7358C5,    ABISELECT(176,116), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7358C1[];
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C23v18Ev();
extern void _ZN7S7358C23v19Ev();
extern void _ZN7S7358C1D1Ev();
extern void _ZN7S7358C1D0Ev();
extern void _ZN7S7358C12v1Ev();
extern void _ZN7S7358C12v2Ev();
extern void _ZN7S7358C12v3Ev();
extern void _ZN7S7358C12v4Ev();
extern void _ZN7S7358C12v5Ev();
extern void _ZN7S7358C12v6Ev();
extern void _ZN7S7358C12v7Ev();
extern void _ZN7S7358C12v8Ev();
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C52v9Ev();
extern void ABISELECT(_ZTv0_n40_N7S7358C1D1Ev,_ZTv0_n20_N7S7358C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S7358C1D1Ev,_ZThn152_N7S7358C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7358C1D0Ev,_ZTv0_n20_N7S7358C1D0Ev)();
extern void ABISELECT(_ZThn256_N7S7358C1D0Ev,_ZThn152_N7S7358C1D0Ev)() __attribute__((weak));
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
extern void _ZN7S7358C33v12Ev();
extern void _ZN7S7358C33v13Ev();
extern void _ZN7S7358C63v14Ev();
extern void _ZN7S7358C63v15Ev();
extern void _ZN7S7358C63v16Ev();
extern void _ZN7S7358C63v17Ev();
static  VTBL_ENTRY vtc_S7358C1[] = {
  ABISELECT(416,260),
  0,
  ABISELECT(256,152),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C1[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7358C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7358C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7358C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7358C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7358C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7358C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7358C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7358C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7358C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7358C12v8Ev,
  ABISELECT(-176,-116),
  (VTBL_ENTRY)&(_ZTI7S7358C1[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7358C1[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7358C1D1Ev,_ZTv0_n20_N7S7358C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7358C1D0Ev,_ZTv0_n20_N7S7358C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v13Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-260),
  (VTBL_ENTRY)&(_ZTI7S7358C1[0]),
  (VTBL_ENTRY)&_ZN7S7358C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v17Ev,
};
extern VTBL_ENTRY _ZTV7S7358C1[];
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C23v18Ev();
extern void _ZN7S7358C23v19Ev();
extern void _ZN7S7358C2D1Ev();
extern void _ZN7S7358C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C2__7S7358C1[] = {
  ABISELECT(416,260),
  0,
  ABISELECT(256,152),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C2[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7358C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7358C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C2D0Ev,
};
extern void _ZN7S7358C52v9Ev();
extern void ABISELECT(_ZTv0_n40_N7S7358C2D1Ev,_ZTv0_n20_N7S7358C2D1Ev)();
extern void ABISELECT(_ZThn256_N7S7358C2D1Ev,_ZThn152_N7S7358C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7358C2D0Ev,_ZTv0_n20_N7S7358C2D0Ev)();
extern void ABISELECT(_ZThn256_N7S7358C2D0Ev,_ZThn152_N7S7358C2D0Ev)() __attribute__((weak));
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
extern void _ZN7S7358C33v12Ev();
extern void _ZN7S7358C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C3__7S7358C2__7S7358C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  (VTBL_ENTRY)&(_ZTI7S7358C2[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7358C2D1Ev,_ZTv0_n20_N7S7358C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7358C2D0Ev,_ZTv0_n20_N7S7358C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v13Ev,
};
extern void _ZN7S7358C63v14Ev();
extern void _ZN7S7358C63v15Ev();
extern void _ZN7S7358C63v16Ev();
extern void _ZN7S7358C63v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C6__7S7358C2__7S7358C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-416,-260),
  (VTBL_ENTRY)&(_ZTI7S7358C2[0]),
  (VTBL_ENTRY)&_ZN7S7358C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7358C63v17Ev,
};
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C3D1Ev();
extern void _ZN7S7358C3D0Ev();
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
extern void _ZN7S7358C33v12Ev();
extern void _ZN7S7358C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C3__7S7358C1[] = {
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C3[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7358C33v13Ev,
};
extern void _ZN7S7358C52v9Ev();
extern void _ZN7S7358C4D1Ev();
extern void _ZN7S7358C4D0Ev();
extern void _ZN7S7358C43v10Ev();
extern void _ZN7S7358C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C47S7358C3__7S7358C1[] = {
  ABISELECT(-256,-152),
  ABISELECT(-256,-152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7358C4[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7358C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7358C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7358C43v11Ev,
};
extern void _ZN7S7358C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C5__7S7358C47S7358C3__7S7358C1[] = {
  0,
  ABISELECT(256,152),
  (VTBL_ENTRY)&(_ZTI7S7358C4[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
};
extern void _ZN7S7358C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7358C5__7S7358C3__7S7358C1[] = {
  0,
  ABISELECT(256,152),
  (VTBL_ENTRY)&(_ZTI7S7358C3[0]),
  (VTBL_ENTRY)&_ZN7S7358C52v9Ev,
};
static  VTT_ENTRY vtt_S7358C1[] = {
  {&(_ZTV7S7358C1[6]),  6,48},
  {&(_tg__ZTV7S7358C2__7S7358C1[6]),  6,11},
  {&(_tg__ZTV7S7358C3__7S7358C2__7S7358C1[9]),  9,16},
  {&(_tg__ZTV7S7358C2__7S7358C1[6]),  6,11},
  {&(_tg__ZTV7S7358C6__7S7358C2__7S7358C1[6]),  6,10},
  {&(_ZTV7S7358C1[31]),  31,48},
  {&(_ZTV7S7358C1[6]),  6,48},
  {&(_ZTV7S7358C1[44]),  44,48},
  {&(_tg__ZTV7S7358C3__7S7358C1[4]),  4,11},
  {&(_tg__ZTV7S7358C47S7358C3__7S7358C1[4]),  4,9},
  {&(_tg__ZTV7S7358C5__7S7358C47S7358C3__7S7358C1[3]),  3,4},
  {&(_tg__ZTV7S7358C5__7S7358C3__7S7358C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7358C1[];
extern  VTBL_ENTRY _ZTV7S7358C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7358C1[];
static VTBL_ENTRY alt_thunk_names171[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7358C2D0Ev,_ZTv0_n20_N7S7358C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7358C2D0Ev,_ZThn152_N7S7358C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7358C2D1Ev,_ZTv0_n20_N7S7358C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7358C2D1Ev,_ZThn152_N7S7358C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7358C1D0Ev,_ZTv0_n20_N7S7358C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7358C1D0Ev,_ZThn152_N7S7358C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7358C1D1Ev,_ZTv0_n20_N7S7358C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7358C1D1Ev,_ZThn152_N7S7358C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7358C1 = {  "S7358C1", // class name
  bases_S7358C1, 6,
  &(vtc_S7358C1[0]), // expected_vtbl_contents
  &(vtt_S7358C1[0]), // expected_vtt_contents
  ABISELECT(432,268), // object size
  NSPAIRA(_ZTI7S7358C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7358C1),48, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7358C1),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names171,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9969C2_nt  {
  virtual  ~S9969C2_nt(); // _ZN10S9969C2_ntD1Ev
  virtual void  v5(); // _ZN10S9969C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9969C2_nt2v6Ev
  virtual void  v7(); // _ZN10S9969C2_nt2v7Ev
  virtual void  v8(); // _ZN10S9969C2_nt2v8Ev
  S9969C2_nt(); // tgen
};
//SIG(-1 S9969C2_nt) C1{ vd v1 v2 v3 v4}


 S9969C2_nt ::~S9969C2_nt(){ note_dtor("S9969C2_nt", this);}
void  S9969C2_nt ::v5(){vfunc_called(this, "_ZN10S9969C2_nt2v5Ev");}
void  S9969C2_nt ::v6(){vfunc_called(this, "_ZN10S9969C2_nt2v6Ev");}
void  S9969C2_nt ::v7(){vfunc_called(this, "_ZN10S9969C2_nt2v7Ev");}
void  S9969C2_nt ::v8(){vfunc_called(this, "_ZN10S9969C2_nt2v8Ev");}
S9969C2_nt ::S9969C2_nt(){ note_ctor("S9969C2_nt", this);} // tgen

//skip512 S9969C2_nt

#else // __cplusplus

extern void _ZN10S9969C2_ntC1Ev();
extern void _ZN10S9969C2_ntD1Ev();
Name_Map name_map_S9969C2_nt[] = {
  NSPAIR(_ZN10S9969C2_ntC1Ev),
  NSPAIR(_ZN10S9969C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9969C2_nt[];
extern void _ZN10S9969C2_ntD1Ev();
extern void _ZN10S9969C2_ntD0Ev();
extern void _ZN10S9969C2_nt2v5Ev();
extern void _ZN10S9969C2_nt2v6Ev();
extern void _ZN10S9969C2_nt2v7Ev();
extern void _ZN10S9969C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S9969C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9969C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9969C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9969C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9969C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9969C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9969C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S9969C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S9969C2_nt[];
VTBL_ENTRY *P__ZTI10S9969C2_nt = _ZTI10S9969C2_nt; 
extern  VTBL_ENTRY _ZTV10S9969C2_nt[];
Class_Descriptor cd_S9969C2_nt = {  "S9969C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9969C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9969C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9969C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9969C6_nt  {
  virtual  ~S9969C6_nt(); // _ZN10S9969C6_ntD1Ev
  virtual void  v11(); // _ZN10S9969C6_nt3v11Ev
  virtual void  v12(); // _ZN10S9969C6_nt3v12Ev
  S9969C6_nt(); // tgen
};
//SIG(-1 S9969C6_nt) C1{ vd v1 v2}


 S9969C6_nt ::~S9969C6_nt(){ note_dtor("S9969C6_nt", this);}
void  S9969C6_nt ::v11(){vfunc_called(this, "_ZN10S9969C6_nt3v11Ev");}
void  S9969C6_nt ::v12(){vfunc_called(this, "_ZN10S9969C6_nt3v12Ev");}
S9969C6_nt ::S9969C6_nt(){ note_ctor("S9969C6_nt", this);} // tgen

//skip512 S9969C6_nt

#else // __cplusplus

extern void _ZN10S9969C6_ntC1Ev();
extern void _ZN10S9969C6_ntD1Ev();
Name_Map name_map_S9969C6_nt[] = {
  NSPAIR(_ZN10S9969C6_ntC1Ev),
  NSPAIR(_ZN10S9969C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9969C6_nt[];
extern void _ZN10S9969C6_ntD1Ev();
extern void _ZN10S9969C6_ntD0Ev();
extern void _ZN10S9969C6_nt3v11Ev();
extern void _ZN10S9969C6_nt3v12Ev();
static  VTBL_ENTRY vtc_S9969C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9969C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S9969C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9969C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9969C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S9969C6_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI10S9969C6_nt[];
VTBL_ENTRY *P__ZTI10S9969C6_nt = _ZTI10S9969C6_nt; 
extern  VTBL_ENTRY _ZTV10S9969C6_nt[];
Class_Descriptor cd_S9969C6_nt = {  "S9969C6_nt", // class name
  0,0,//no base classes
  &(vtc_S9969C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9969C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9969C6_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  S9969C3_nt  : S2014C37 , S9969C6_nt {
  virtual  ~S9969C3_nt(); // _ZN10S9969C3_ntD1Ev
  virtual void  v9(); // _ZN10S9969C3_nt2v9Ev
  virtual void  v10(); // _ZN10S9969C3_nt3v10Ev
  S9969C3_nt(); // tgen
};
//SIG(-1 S9969C3_nt) C1{ BC2{ m Fp Fi[2] FC3{ m}} BC4{ vd v3 v4} vd v1 v2}


 S9969C3_nt ::~S9969C3_nt(){ note_dtor("S9969C3_nt", this);}
void  S9969C3_nt ::v9(){vfunc_called(this, "_ZN10S9969C3_nt2v9Ev");}
void  S9969C3_nt ::v10(){vfunc_called(this, "_ZN10S9969C3_nt3v10Ev");}
S9969C3_nt ::S9969C3_nt(){ note_ctor("S9969C3_nt", this);} // tgen

//skip512 S9969C3_nt

#else // __cplusplus

extern void _ZN10S9969C3_ntC1Ev();
extern void _ZN10S9969C3_ntD1Ev();
Name_Map name_map_S9969C3_nt[] = {
  NSPAIR(_ZN10S9969C3_ntC1Ev),
  NSPAIR(_ZN10S9969C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2014C37;
extern VTBL_ENTRY _ZTI8S2014C37[];
extern Class_Descriptor cd_S9969C6_nt;
extern VTBL_ENTRY _ZTI10S9969C6_nt[];
extern  VTBL_ENTRY _ZTV10S9969C6_nt[];
static Base_Class bases_S9969C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C37,    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_S9969C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S9969C3_nt[];
extern void _ZN10S9969C3_ntD1Ev();
extern void _ZN10S9969C3_ntD0Ev();
extern void _ZN10S9969C6_nt3v11Ev();
extern void _ZN10S9969C6_nt3v12Ev();
extern void _ZN10S9969C3_nt2v9Ev();
extern void _ZN10S9969C3_nt3v10Ev();
static  VTBL_ENTRY vtc_S9969C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9969C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S9969C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9969C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9969C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S9969C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S9969C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S9969C3_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S9969C3_nt[];
VTBL_ENTRY *P__ZTI10S9969C3_nt = _ZTI10S9969C3_nt; 
extern  VTBL_ENTRY _ZTV10S9969C3_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9969C1  : S9969C2_nt {
  void *s9969c1f0;
  ::S9969C3_nt s9969c1f1;
  void *s9969c1f2[3];
  ::S9969C3_nt s9969c1f3;
  int s9969c1f4;
  ::S2014C25 s9969c1f5;
  virtual  ~S9969C1(); // _ZN7S9969C1D1Ev
  virtual void  v1(); // _ZN7S9969C12v1Ev
  virtual void  v2(); // _ZN7S9969C12v2Ev
  virtual void  v3(); // _ZN7S9969C12v3Ev
  virtual void  v4(); // _ZN7S9969C12v4Ev
  S9969C1(); // tgen
};
//SIG(1 S9969C1) C1{ BC2{ vd v5 v6 v7 v8} vd v1 v2 v3 v4 Fp FC3{ BC4{ m Fp Fi[2] FC5{ m}} BC6{ vd v11 v12} vd v9 v10} Fp[3] FC3 Fi FC7{ BC8{ m Fp Fi FC9{ m} FC10{ m}}}}


 S9969C1 ::~S9969C1(){ note_dtor("S9969C1", this);}
void  S9969C1 ::v1(){vfunc_called(this, "_ZN7S9969C12v1Ev");}
void  S9969C1 ::v2(){vfunc_called(this, "_ZN7S9969C12v2Ev");}
void  S9969C1 ::v3(){vfunc_called(this, "_ZN7S9969C12v3Ev");}
void  S9969C1 ::v4(){vfunc_called(this, "_ZN7S9969C12v4Ev");}
S9969C1 ::S9969C1(){ note_ctor("S9969C1", this);} // tgen

static void Test_S9969C1()
{
  extern Class_Descriptor cd_S9969C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,20)];
    init_test(&cd_S9969C1, buf);
    S9969C1 *dp, &lv = *(dp=new (buf) S9969C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S9969C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9969C1)");
    check_base_class_offset(lv, (S9969C2_nt*), 0, "S9969C1");
    check_field_offset(lv, s9969c1f0, ABISELECT(8,4), "S9969C1.s9969c1f0");
    check_field_offset(lv, s9969c1f1, ABISELECT(16,8), "S9969C1.s9969c1f1");
    check_field_offset(lv, s9969c1f2, ABISELECT(48,28), "S9969C1.s9969c1f2");
    check_field_offset(lv, s9969c1f3, ABISELECT(72,40), "S9969C1.s9969c1f3");
    check_field_offset(lv, s9969c1f4, ABISELECT(104,60), "S9969C1.s9969c1f4");
    check_field_offset(lv, s9969c1f5, ABISELECT(112,64), "S9969C1.s9969c1f5");
    test_class_info(&lv, &cd_S9969C1);
    dp->~S9969C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9969C1(Test_S9969C1, "S9969C1", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN7S9969C1C1Ev();
extern void _ZN7S9969C1D1Ev();
Name_Map name_map_S9969C1[] = {
  NSPAIR(_ZN7S9969C1C1Ev),
  NSPAIR(_ZN7S9969C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9969C2_nt;
extern VTBL_ENTRY _ZTI10S9969C2_nt[];
extern  VTBL_ENTRY _ZTV10S9969C2_nt[];
static Base_Class bases_S9969C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9969C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9969C1[];
extern void _ZN7S9969C1D1Ev();
extern void _ZN7S9969C1D0Ev();
extern void _ZN10S9969C2_nt2v5Ev();
extern void _ZN10S9969C2_nt2v6Ev();
extern void _ZN10S9969C2_nt2v7Ev();
extern void _ZN10S9969C2_nt2v8Ev();
extern void _ZN7S9969C12v1Ev();
extern void _ZN7S9969C12v2Ev();
extern void _ZN7S9969C12v3Ev();
extern void _ZN7S9969C12v4Ev();
static  VTBL_ENTRY vtc_S9969C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9969C1[0]),
  (VTBL_ENTRY)&_ZN7S9969C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9969C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9969C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9969C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9969C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S9969C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S9969C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9969C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9969C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9969C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9969C1[];
extern  VTBL_ENTRY _ZTV7S9969C1[];
Class_Descriptor cd_S9969C1 = {  "S9969C1", // class name
  bases_S9969C1, 1,
  &(vtc_S9969C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S9969C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9969C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20092C2_nt  {
  int s20092c2f0;
  virtual  ~S20092C2_nt(); // _ZN11S20092C2_ntD1Ev
  virtual void  v2(); // _ZN11S20092C2_nt2v2Ev
  S20092C2_nt(); // tgen
};
//SIG(-1 S20092C2_nt) C1{ vd v1 Fi}


 S20092C2_nt ::~S20092C2_nt(){ note_dtor("S20092C2_nt", this);}
void  S20092C2_nt ::v2(){vfunc_called(this, "_ZN11S20092C2_nt2v2Ev");}
S20092C2_nt ::S20092C2_nt(){ note_ctor("S20092C2_nt", this);} // tgen

//skip512 S20092C2_nt

#else // __cplusplus

extern void _ZN11S20092C2_ntC1Ev();
extern void _ZN11S20092C2_ntD1Ev();
Name_Map name_map_S20092C2_nt[] = {
  NSPAIR(_ZN11S20092C2_ntC1Ev),
  NSPAIR(_ZN11S20092C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20092C2_nt[];
extern void _ZN11S20092C2_ntD1Ev();
extern void _ZN11S20092C2_ntD0Ev();
extern void _ZN11S20092C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S20092C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20092C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20092C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20092C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S20092C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI11S20092C2_nt[];
VTBL_ENTRY *P__ZTI11S20092C2_nt = _ZTI11S20092C2_nt; 
extern  VTBL_ENTRY _ZTV11S20092C2_nt[];
Class_Descriptor cd_S20092C2_nt = {  "S20092C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20092C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S20092C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20092C2_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  S20092C5_nt  {
  int s20092c5f0;
  void *s20092c5f1;
  virtual void  v20(); // _ZN11S20092C5_nt3v20Ev
  ~S20092C5_nt(); // tgen
  S20092C5_nt(); // tgen
};
//SIG(-1 S20092C5_nt) C1{ v1 Fi Fp}


void  S20092C5_nt ::v20(){vfunc_called(this, "_ZN11S20092C5_nt3v20Ev");}
S20092C5_nt ::~S20092C5_nt(){ note_dtor("S20092C5_nt", this);} // tgen
S20092C5_nt ::S20092C5_nt(){ note_ctor("S20092C5_nt", this);} // tgen

//skip512 S20092C5_nt

#else // __cplusplus

extern void _ZN11S20092C5_ntC1Ev();
extern void _ZN11S20092C5_ntD1Ev();
Name_Map name_map_S20092C5_nt[] = {
  NSPAIR(_ZN11S20092C5_ntC1Ev),
  NSPAIR(_ZN11S20092C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20092C5_nt[];
extern void _ZN11S20092C5_nt3v20Ev();
static  VTBL_ENTRY vtc_S20092C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20092C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S20092C5_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI11S20092C5_nt[];
VTBL_ENTRY *P__ZTI11S20092C5_nt = _ZTI11S20092C5_nt; 
extern  VTBL_ENTRY _ZTV11S20092C5_nt[];
Class_Descriptor cd_S20092C5_nt = {  "S20092C5_nt", // class name
  0,0,//no base classes
  &(vtc_S20092C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI11S20092C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20092C5_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20092C4  : virtual S20092C5_nt {
  virtual void  v18(); // _ZN8S20092C43v18Ev
  virtual void  v19(); // _ZN8S20092C43v19Ev
  ~S20092C4(); // tgen
  S20092C4(); // tgen
};
//SIG(-1 S20092C4) C1{ VBC2{ v3 Fi Fp} v1 v2}


void  S20092C4 ::v18(){vfunc_called(this, "_ZN8S20092C43v18Ev");}
void  S20092C4 ::v19(){vfunc_called(this, "_ZN8S20092C43v19Ev");}
S20092C4 ::~S20092C4(){ note_dtor("S20092C4", this);} // tgen
S20092C4 ::S20092C4(){ note_ctor("S20092C4", this);} // tgen

static void Test_S20092C4()
{
  extern Class_Descriptor cd_S20092C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20092C4, buf);
    S20092C4 *dp, &lv = *(dp=new (buf) S20092C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20092C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20092C4)");
    check_base_class_offset(lv, (S20092C5_nt*), ABISELECT(8,4), "S20092C4");
    test_class_info(&lv, &cd_S20092C4);
    dp->~S20092C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20092C4(Test_S20092C4, "S20092C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20092C4C1Ev();
extern void _ZN8S20092C4D1Ev();
Name_Map name_map_S20092C4[] = {
  NSPAIR(_ZN8S20092C4C1Ev),
  NSPAIR(_ZN8S20092C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20092C5_nt;
extern VTBL_ENTRY _ZTI11S20092C5_nt[];
extern  VTBL_ENTRY _ZTV11S20092C5_nt[];
static Base_Class bases_S20092C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20092C5_nt,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20092C4[];
extern void _ZN8S20092C43v18Ev();
extern void _ZN8S20092C43v19Ev();
extern void _ZN11S20092C5_nt3v20Ev();
static  VTBL_ENTRY vtc_S20092C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20092C4[0]),
  (VTBL_ENTRY)&_ZN8S20092C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20092C43v19Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20092C4[0]),
  (VTBL_ENTRY)&_ZN11S20092C5_nt3v20Ev,
};
extern VTBL_ENTRY _ZTV8S20092C4[];
static  VTT_ENTRY vtt_S20092C4[] = {
  {&(_ZTV8S20092C4[3]),  3,9},
  {&(_ZTV8S20092C4[8]),  8,9},
};
extern VTBL_ENTRY _ZTI8S20092C4[];
extern  VTBL_ENTRY _ZTV8S20092C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20092C4[];
Class_Descriptor cd_S20092C4 = {  "S20092C4", // class name
  bases_S20092C4, 1,
  &(vtc_S20092C4[0]), // expected_vtbl_contents
  &(vtt_S20092C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20092C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20092C4),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20092C4),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  S20092C3  {
  ::S20092C4 s20092c3f0;
  virtual void  v3(); // _ZN8S20092C32v3Ev
  virtual void  v4(); // _ZN8S20092C32v4Ev
  ~S20092C3(); // tgen
  S20092C3(); // tgen
};
//SIG(-1 S20092C3) C1{ v1 v2 FC2{ VBC3{ v5 Fi Fp} v3 v4}}


void  S20092C3 ::v3(){vfunc_called(this, "_ZN8S20092C32v3Ev");}
void  S20092C3 ::v4(){vfunc_called(this, "_ZN8S20092C32v4Ev");}
S20092C3 ::~S20092C3(){ note_dtor("S20092C3", this);} // tgen
S20092C3 ::S20092C3(){ note_ctor("S20092C3", this);} // tgen

static void Test_S20092C3()
{
  extern Class_Descriptor cd_S20092C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20092C3, buf);
    S20092C3 *dp, &lv = *(dp=new (buf) S20092C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20092C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20092C3)");
    check_field_offset(lv, s20092c3f0, ABISELECT(8,4), "S20092C3.s20092c3f0");
    test_class_info(&lv, &cd_S20092C3);
    dp->~S20092C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20092C3(Test_S20092C3, "S20092C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20092C3C1Ev();
extern void _ZN8S20092C3D1Ev();
Name_Map name_map_S20092C3[] = {
  NSPAIR(_ZN8S20092C3C1Ev),
  NSPAIR(_ZN8S20092C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20092C3[];
extern void _ZN8S20092C32v3Ev();
extern void _ZN8S20092C32v4Ev();
static  VTBL_ENTRY vtc_S20092C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20092C3[0]),
  (VTBL_ENTRY)&_ZN8S20092C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20092C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S20092C3[];
extern  VTBL_ENTRY _ZTV8S20092C3[];
Class_Descriptor cd_S20092C3 = {  "S20092C3", // class name
  0,0,//no base classes
  &(vtc_S20092C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20092C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20092C3),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  S20092C7_nt  {
  virtual void  v10(); // _ZN11S20092C7_nt3v10Ev
  virtual void  v11(); // _ZN11S20092C7_nt3v11Ev
  virtual void  v12(); // _ZN11S20092C7_nt3v12Ev
  virtual void  v13(); // _ZN11S20092C7_nt3v13Ev
  ~S20092C7_nt(); // tgen
  S20092C7_nt(); // tgen
};
//SIG(-1 S20092C7_nt) C1{ v1 v2 v3 v4}


void  S20092C7_nt ::v10(){vfunc_called(this, "_ZN11S20092C7_nt3v10Ev");}
void  S20092C7_nt ::v11(){vfunc_called(this, "_ZN11S20092C7_nt3v11Ev");}
void  S20092C7_nt ::v12(){vfunc_called(this, "_ZN11S20092C7_nt3v12Ev");}
void  S20092C7_nt ::v13(){vfunc_called(this, "_ZN11S20092C7_nt3v13Ev");}
S20092C7_nt ::~S20092C7_nt(){ note_dtor("S20092C7_nt", this);} // tgen
S20092C7_nt ::S20092C7_nt(){ note_ctor("S20092C7_nt", this);} // tgen

//skip512 S20092C7_nt

#else // __cplusplus

extern void _ZN11S20092C7_ntC1Ev();
extern void _ZN11S20092C7_ntD1Ev();
Name_Map name_map_S20092C7_nt[] = {
  NSPAIR(_ZN11S20092C7_ntC1Ev),
  NSPAIR(_ZN11S20092C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20092C7_nt[];
extern void _ZN11S20092C7_nt3v10Ev();
extern void _ZN11S20092C7_nt3v11Ev();
extern void _ZN11S20092C7_nt3v12Ev();
extern void _ZN11S20092C7_nt3v13Ev();
static  VTBL_ENTRY vtc_S20092C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20092C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20092C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20092C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20092C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20092C7_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI11S20092C7_nt[];
VTBL_ENTRY *P__ZTI11S20092C7_nt = _ZTI11S20092C7_nt; 
extern  VTBL_ENTRY _ZTV11S20092C7_nt[];
Class_Descriptor cd_S20092C7_nt = {  "S20092C7_nt", // class name
  0,0,//no base classes
  &(vtc_S20092C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20092C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20092C7_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  S20092C8  {
  void *s20092c8f0;
  virtual void  v14(); // _ZN8S20092C83v14Ev
  virtual void  v15(); // _ZN8S20092C83v15Ev
  virtual void  v16(); // _ZN8S20092C83v16Ev
  virtual void  v17(); // _ZN8S20092C83v17Ev
  ~S20092C8(); // tgen
  S20092C8(); // tgen
};
//SIG(-1 S20092C8) C1{ v1 v2 v3 v4 Fp}


void  S20092C8 ::v14(){vfunc_called(this, "_ZN8S20092C83v14Ev");}
void  S20092C8 ::v15(){vfunc_called(this, "_ZN8S20092C83v15Ev");}
void  S20092C8 ::v16(){vfunc_called(this, "_ZN8S20092C83v16Ev");}
void  S20092C8 ::v17(){vfunc_called(this, "_ZN8S20092C83v17Ev");}
S20092C8 ::~S20092C8(){ note_dtor("S20092C8", this);} // tgen
S20092C8 ::S20092C8(){ note_ctor("S20092C8", this);} // tgen

static void Test_S20092C8()
{
  extern Class_Descriptor cd_S20092C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20092C8, buf);
    S20092C8 *dp, &lv = *(dp=new (buf) S20092C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20092C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20092C8)");
    check_field_offset(lv, s20092c8f0, ABISELECT(8,4), "S20092C8.s20092c8f0");
    test_class_info(&lv, &cd_S20092C8);
    dp->~S20092C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20092C8(Test_S20092C8, "S20092C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20092C8C1Ev();
extern void _ZN8S20092C8D1Ev();
Name_Map name_map_S20092C8[] = {
  NSPAIR(_ZN8S20092C8C1Ev),
  NSPAIR(_ZN8S20092C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20092C8[];
extern void _ZN8S20092C83v14Ev();
extern void _ZN8S20092C83v15Ev();
extern void _ZN8S20092C83v16Ev();
extern void _ZN8S20092C83v17Ev();
static  VTBL_ENTRY vtc_S20092C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20092C8[0]),
  (VTBL_ENTRY)&_ZN8S20092C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20092C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20092C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20092C83v17Ev,
};
extern VTBL_ENTRY _ZTI8S20092C8[];
extern  VTBL_ENTRY _ZTV8S20092C8[];
Class_Descriptor cd_S20092C8 = {  "S20092C8", // class name
  0,0,//no base classes
  &(vtc_S20092C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20092C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20092C8),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  S20092C6  : virtual S20092C7_nt , virtual S20092C8 {
  long s20092c6f0[2];
  int s20092c6f1;
  virtual void  v5(); // _ZN8S20092C62v5Ev
  virtual void  v6(); // _ZN8S20092C62v6Ev
  virtual void  v7(); // _ZN8S20092C62v7Ev
  virtual void  v8(); // _ZN8S20092C62v8Ev
  virtual void  v9(); // _ZN8S20092C62v9Ev
  ~S20092C6(); // tgen
  S20092C6(); // tgen
};
//SIG(-1 S20092C6) C1{ VBC2{ v6 v7 v8 v9} VBC3{ v10 v11 v12 v13 Fp} v1 v2 v3 v4 v5 Fl[2] Fi}


void  S20092C6 ::v5(){vfunc_called(this, "_ZN8S20092C62v5Ev");}
void  S20092C6 ::v6(){vfunc_called(this, "_ZN8S20092C62v6Ev");}
void  S20092C6 ::v7(){vfunc_called(this, "_ZN8S20092C62v7Ev");}
void  S20092C6 ::v8(){vfunc_called(this, "_ZN8S20092C62v8Ev");}
void  S20092C6 ::v9(){vfunc_called(this, "_ZN8S20092C62v9Ev");}
S20092C6 ::~S20092C6(){ note_dtor("S20092C6", this);} // tgen
S20092C6 ::S20092C6(){ note_ctor("S20092C6", this);} // tgen

static void Test_S20092C6()
{
  extern Class_Descriptor cd_S20092C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20092C6, buf);
    S20092C6 *dp, &lv = *(dp=new (buf) S20092C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20092C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20092C6)");
    check_base_class_offset(lv, (S20092C7_nt*), 0, "S20092C6");
    check_base_class_offset(lv, (S20092C8*), ABISELECT(32,16), "S20092C6");
    check_field_offset(lv, s20092c6f0, ABISELECT(8,4), "S20092C6.s20092c6f0");
    check_field_offset(lv, s20092c6f1, ABISELECT(24,12), "S20092C6.s20092c6f1");
    test_class_info(&lv, &cd_S20092C6);
    dp->~S20092C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20092C6(Test_S20092C6, "S20092C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20092C6C1Ev();
extern void _ZN8S20092C6D1Ev();
Name_Map name_map_S20092C6[] = {
  NSPAIR(_ZN8S20092C6C1Ev),
  NSPAIR(_ZN8S20092C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20092C7_nt;
extern VTBL_ENTRY _ZTI11S20092C7_nt[];
extern  VTBL_ENTRY _ZTV11S20092C7_nt[];
extern Class_Descriptor cd_S20092C8;
extern VTBL_ENTRY _ZTI8S20092C8[];
extern  VTBL_ENTRY _ZTV8S20092C8[];
static Base_Class bases_S20092C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20092C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20092C8,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20092C6[];
extern void _ZN11S20092C7_nt3v10Ev();
extern void _ZN11S20092C7_nt3v11Ev();
extern void _ZN11S20092C7_nt3v12Ev();
extern void _ZN11S20092C7_nt3v13Ev();
extern void _ZN8S20092C62v5Ev();
extern void _ZN8S20092C62v6Ev();
extern void _ZN8S20092C62v7Ev();
extern void _ZN8S20092C62v8Ev();
extern void _ZN8S20092C62v9Ev();
extern void _ZN8S20092C83v14Ev();
extern void _ZN8S20092C83v15Ev();
extern void _ZN8S20092C83v16Ev();
extern void _ZN8S20092C83v17Ev();
static  VTBL_ENTRY vtc_S20092C6[] = {
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20092C6[0]),
  (VTBL_ENTRY)&_ZN11S20092C7_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20092C7_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20092C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20092C7_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S20092C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20092C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20092C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20092C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20092C62v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20092C6[0]),
  (VTBL_ENTRY)&_ZN8S20092C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20092C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20092C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20092C83v17Ev,
};
extern VTBL_ENTRY _ZTV8S20092C6[];
static  VTT_ENTRY vtt_S20092C6[] = {
  {&(_ZTV8S20092C6[8]),  8,27},
  {&(_ZTV8S20092C6[8]),  8,27},
  {&(_ZTV8S20092C6[23]),  23,27},
};
extern VTBL_ENTRY _ZTI8S20092C6[];
extern  VTBL_ENTRY _ZTV8S20092C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20092C6[];
Class_Descriptor cd_S20092C6 = {  "S20092C6", // class name
  bases_S20092C6, 2,
  &(vtc_S20092C6[0]), // expected_vtbl_contents
  &(vtt_S20092C6[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20092C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20092C6),27, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20092C6),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  S20092C1  : virtual S20092C2_nt , virtual S20092C3 {
  ::S20092C6 s20092c1f0;
  virtual  ~S20092C1(); // _ZN8S20092C1D2Ev
  virtual void  v1(); // _ZN8S20092C12v1Ev
  S20092C1(); // tgen
};
//SIG(1 S20092C1) C1{ VBC2{ vd v2 Fi} VBC3{ v3 v4 FC4{ VBC5{ v20 Fi Fp} v18 v19}} vd v1 FC6{ VBC7{ v10 v11 v12 v13} VBC8{ v14 v15 v16 v17 Fp} v5 v6 v7 v8 v9 Fl[2] Fi}}


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

static void Test_S20092C1()
{
  extern Class_Descriptor cd_S20092C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S20092C1, buf);
    S20092C1 *dp, &lv = *(dp=new (buf) S20092C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20092C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20092C1)");
    check_base_class_offset(lv, (S20092C2_nt*), ABISELECT(56,28), "S20092C1");
    check_base_class_offset(lv, (S20092C3*), ABISELECT(72,36), "S20092C1");
    check_field_offset(lv, s20092c1f0, ABISELECT(8,4), "S20092C1.s20092c1f0");
    test_class_info(&lv, &cd_S20092C1);
    dp->~S20092C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20092C1(Test_S20092C1, "S20092C1", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S20092C1C1Ev();
extern void _ZN8S20092C1D2Ev();
Name_Map name_map_S20092C1[] = {
  NSPAIR(_ZN8S20092C1C1Ev),
  NSPAIR(_ZN8S20092C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20092C2_nt;
extern VTBL_ENTRY _ZTI11S20092C2_nt[];
extern  VTBL_ENTRY _ZTV11S20092C2_nt[];
extern Class_Descriptor cd_S20092C3;
extern VTBL_ENTRY _ZTI8S20092C3[];
extern  VTBL_ENTRY _ZTV8S20092C3[];
static Base_Class bases_S20092C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20092C2_nt,    ABISELECT(56,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20092C3,    ABISELECT(72,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20092C1[];
extern void _ZN8S20092C1D1Ev();
extern void _ZN8S20092C1D0Ev();
extern void _ZN8S20092C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S20092C1D1Ev,_ZTv0_n12_N8S20092C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S20092C1D1Ev,_ZThn28_N8S20092C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20092C1D0Ev,_ZTv0_n12_N8S20092C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S20092C1D0Ev,_ZThn28_N8S20092C1D0Ev)() __attribute__((weak));
extern void _ZN11S20092C2_nt2v2Ev();
extern void _ZN8S20092C32v3Ev();
extern void _ZN8S20092C32v4Ev();
static  VTBL_ENTRY vtc_S20092C1[] = {
  ABISELECT(72,36),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20092C1[0]),
  (VTBL_ENTRY)&_ZN8S20092C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20092C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20092C12v1Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20092C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20092C1D1Ev,_ZTv0_n12_N8S20092C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20092C1D0Ev,_ZTv0_n12_N8S20092C1D0Ev),
  (VTBL_ENTRY)&_ZN11S20092C2_nt2v2Ev,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20092C1[0]),
  (VTBL_ENTRY)&_ZN8S20092C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20092C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S20092C1[];
static  VTT_ENTRY vtt_S20092C1[] = {
  {&(_ZTV8S20092C1[4]),  4,20},
  {&(_ZTV8S20092C1[11]),  11,20},
  {&(_ZTV8S20092C1[18]),  18,20},
};
extern VTBL_ENTRY _ZTI8S20092C1[];
extern  VTBL_ENTRY _ZTV8S20092C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20092C1[];
static VTBL_ENTRY alt_thunk_names172[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20092C1D0Ev,_ZTv0_n12_N8S20092C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20092C1D0Ev,_ZThn28_N8S20092C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20092C1D1Ev,_ZTv0_n12_N8S20092C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20092C1D1Ev,_ZThn28_N8S20092C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20092C1 = {  "S20092C1", // class name
  bases_S20092C1, 2,
  &(vtc_S20092C1[0]), // expected_vtbl_contents
  &(vtt_S20092C1[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S20092C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20092C1),20, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20092C1),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names172,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20443C5  {
  virtual void  v6(); // _ZN8S20443C52v6Ev
  virtual void  v7(); // _ZN8S20443C52v7Ev
  virtual void  v8(); // _ZN8S20443C52v8Ev
  virtual void  v9(); // _ZN8S20443C52v9Ev
  virtual void  v10(); // _ZN8S20443C53v10Ev
  ~S20443C5(); // tgen
  S20443C5(); // tgen
};
//SIG(-1 S20443C5) C1{ v1 v2 v3 v4 v5}


void  S20443C5 ::v6(){vfunc_called(this, "_ZN8S20443C52v6Ev");}
void  S20443C5 ::v7(){vfunc_called(this, "_ZN8S20443C52v7Ev");}
void  S20443C5 ::v8(){vfunc_called(this, "_ZN8S20443C52v8Ev");}
void  S20443C5 ::v9(){vfunc_called(this, "_ZN8S20443C52v9Ev");}
void  S20443C5 ::v10(){vfunc_called(this, "_ZN8S20443C53v10Ev");}
S20443C5 ::~S20443C5(){ note_dtor("S20443C5", this);} // tgen
S20443C5 ::S20443C5(){ note_ctor("S20443C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20443C5C1Ev();
extern void _ZN8S20443C5D1Ev();
Name_Map name_map_S20443C5[] = {
  NSPAIR(_ZN8S20443C5C1Ev),
  NSPAIR(_ZN8S20443C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20443C5[];
extern void _ZN8S20443C52v6Ev();
extern void _ZN8S20443C52v7Ev();
extern void _ZN8S20443C52v8Ev();
extern void _ZN8S20443C52v9Ev();
extern void _ZN8S20443C53v10Ev();
static  VTBL_ENTRY vtc_S20443C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20443C5[0]),
  (VTBL_ENTRY)&_ZN8S20443C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20443C53v10Ev,
};
extern VTBL_ENTRY _ZTI8S20443C5[];
extern  VTBL_ENTRY _ZTV8S20443C5[];
Class_Descriptor cd_S20443C5 = {  "S20443C5", // class name
  0,0,//no base classes
  &(vtc_S20443C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20443C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20443C5),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  S20443C4  : S20443C5 {
  ::S20443C5 s20443c4f0;
  virtual void  v11(); // _ZN8S20443C43v11Ev
  virtual void  v12(); // _ZN8S20443C43v12Ev
  virtual void  v13(); // _ZN8S20443C43v13Ev
  virtual void  v14(); // _ZN8S20443C43v14Ev
  ~S20443C4(); // tgen
  S20443C4(); // tgen
};
//SIG(-1 S20443C4) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S20443C4 ::v11(){vfunc_called(this, "_ZN8S20443C43v11Ev");}
void  S20443C4 ::v12(){vfunc_called(this, "_ZN8S20443C43v12Ev");}
void  S20443C4 ::v13(){vfunc_called(this, "_ZN8S20443C43v13Ev");}
void  S20443C4 ::v14(){vfunc_called(this, "_ZN8S20443C43v14Ev");}
S20443C4 ::~S20443C4(){ note_dtor("S20443C4", this);} // tgen
S20443C4 ::S20443C4(){ note_ctor("S20443C4", this);} // tgen

static void Test_S20443C4()
{
  extern Class_Descriptor cd_S20443C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20443C4, buf);
    S20443C4 *dp, &lv = *(dp=new (buf) S20443C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20443C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20443C4)");
    check_base_class_offset(lv, (S20443C5*), 0, "S20443C4");
    check_field_offset(lv, s20443c4f0, ABISELECT(8,4), "S20443C4.s20443c4f0");
    test_class_info(&lv, &cd_S20443C4);
    dp->~S20443C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20443C4(Test_S20443C4, "S20443C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20443C4C1Ev();
extern void _ZN8S20443C4D1Ev();
Name_Map name_map_S20443C4[] = {
  NSPAIR(_ZN8S20443C4C1Ev),
  NSPAIR(_ZN8S20443C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20443C5;
extern VTBL_ENTRY _ZTI8S20443C5[];
extern  VTBL_ENTRY _ZTV8S20443C5[];
static Base_Class bases_S20443C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20443C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20443C4[];
extern void _ZN8S20443C52v6Ev();
extern void _ZN8S20443C52v7Ev();
extern void _ZN8S20443C52v8Ev();
extern void _ZN8S20443C52v9Ev();
extern void _ZN8S20443C53v10Ev();
extern void _ZN8S20443C43v11Ev();
extern void _ZN8S20443C43v12Ev();
extern void _ZN8S20443C43v13Ev();
extern void _ZN8S20443C43v14Ev();
static  VTBL_ENTRY vtc_S20443C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20443C4[0]),
  (VTBL_ENTRY)&_ZN8S20443C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20443C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v14Ev,
};
extern VTBL_ENTRY _ZTI8S20443C4[];
extern  VTBL_ENTRY _ZTV8S20443C4[];
Class_Descriptor cd_S20443C4 = {  "S20443C4", // class name
  bases_S20443C4, 1,
  &(vtc_S20443C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20443C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20443C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20443C3  : S20443C4 {
  virtual void  v15(); // _ZN8S20443C33v15Ev
  virtual void  v16(); // _ZN8S20443C33v16Ev
  virtual void  v17(); // _ZN8S20443C33v17Ev
  virtual void  v18(); // _ZN8S20443C33v18Ev
  virtual void  v19(); // _ZN8S20443C33v19Ev
  virtual void  v20(); // _ZN8S20443C33v20Ev
  ~S20443C3(); // tgen
  S20443C3(); // tgen
};
//SIG(-1 S20443C3) C1{ BC2{ BC3{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 v6}


void  S20443C3 ::v15(){vfunc_called(this, "_ZN8S20443C33v15Ev");}
void  S20443C3 ::v16(){vfunc_called(this, "_ZN8S20443C33v16Ev");}
void  S20443C3 ::v17(){vfunc_called(this, "_ZN8S20443C33v17Ev");}
void  S20443C3 ::v18(){vfunc_called(this, "_ZN8S20443C33v18Ev");}
void  S20443C3 ::v19(){vfunc_called(this, "_ZN8S20443C33v19Ev");}
void  S20443C3 ::v20(){vfunc_called(this, "_ZN8S20443C33v20Ev");}
S20443C3 ::~S20443C3(){ note_dtor("S20443C3", this);} // tgen
S20443C3 ::S20443C3(){ note_ctor("S20443C3", this);} // tgen

static void Test_S20443C3()
{
  extern Class_Descriptor cd_S20443C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20443C3, buf);
    S20443C3 *dp, &lv = *(dp=new (buf) S20443C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20443C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20443C3)");
    check_base_class_offset(lv, (S20443C5*)(S20443C4*), 0, "S20443C3");
    check_base_class_offset(lv, (S20443C4*), 0, "S20443C3");
    test_class_info(&lv, &cd_S20443C3);
    dp->~S20443C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20443C3(Test_S20443C3, "S20443C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20443C3C1Ev();
extern void _ZN8S20443C3D1Ev();
Name_Map name_map_S20443C3[] = {
  NSPAIR(_ZN8S20443C3C1Ev),
  NSPAIR(_ZN8S20443C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20443C5;
extern VTBL_ENTRY _ZTI8S20443C5[];
extern  VTBL_ENTRY _ZTV8S20443C5[];
extern Class_Descriptor cd_S20443C4;
extern VTBL_ENTRY _ZTI8S20443C4[];
extern  VTBL_ENTRY _ZTV8S20443C4[];
static Base_Class bases_S20443C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20443C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20443C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20443C3[];
extern void _ZN8S20443C52v6Ev();
extern void _ZN8S20443C52v7Ev();
extern void _ZN8S20443C52v8Ev();
extern void _ZN8S20443C52v9Ev();
extern void _ZN8S20443C53v10Ev();
extern void _ZN8S20443C43v11Ev();
extern void _ZN8S20443C43v12Ev();
extern void _ZN8S20443C43v13Ev();
extern void _ZN8S20443C43v14Ev();
extern void _ZN8S20443C33v15Ev();
extern void _ZN8S20443C33v16Ev();
extern void _ZN8S20443C33v17Ev();
extern void _ZN8S20443C33v18Ev();
extern void _ZN8S20443C33v19Ev();
extern void _ZN8S20443C33v20Ev();
static  VTBL_ENTRY vtc_S20443C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20443C3[0]),
  (VTBL_ENTRY)&_ZN8S20443C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20443C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v20Ev,
};
extern VTBL_ENTRY _ZTI8S20443C3[];
extern  VTBL_ENTRY _ZTV8S20443C3[];
Class_Descriptor cd_S20443C3 = {  "S20443C3", // class name
  bases_S20443C3, 2,
  &(vtc_S20443C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20443C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20443C3),17, //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  S20443C2  : virtual S20443C3 {
  virtual void  v21(); // _ZN8S20443C23v21Ev
  virtual void  v22(); // _ZN8S20443C23v22Ev
  virtual void  v23(); // _ZN8S20443C23v23Ev
  ~S20443C2(); // tgen
  S20443C2(); // tgen
};
//SIG(-1 S20443C2) C1{ VBC2{ BC3{ BC4{ v4 v5 v6 v7 v8} v9 v10 v11 v12 FC4} v13 v14 v15 v16 v17 v18} v1 v2 v3}


void  S20443C2 ::v21(){vfunc_called(this, "_ZN8S20443C23v21Ev");}
void  S20443C2 ::v22(){vfunc_called(this, "_ZN8S20443C23v22Ev");}
void  S20443C2 ::v23(){vfunc_called(this, "_ZN8S20443C23v23Ev");}
S20443C2 ::~S20443C2(){ note_dtor("S20443C2", this);} // tgen
S20443C2 ::S20443C2(){ note_ctor("S20443C2", this);} // tgen

static void Test_S20443C2()
{
  extern Class_Descriptor cd_S20443C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20443C2, buf);
    S20443C2 *dp, &lv = *(dp=new (buf) S20443C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20443C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20443C2)");
    check_base_class_offset(lv, (S20443C5*)(S20443C4*)(S20443C3*), ABISELECT(8,4), "S20443C2");
    check_base_class_offset(lv, (S20443C4*)(S20443C3*), ABISELECT(8,4), "S20443C2");
    check_base_class_offset(lv, (S20443C3*), ABISELECT(8,4), "S20443C2");
    test_class_info(&lv, &cd_S20443C2);
    dp->~S20443C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20443C2(Test_S20443C2, "S20443C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20443C2C1Ev();
extern void _ZN8S20443C2D1Ev();
Name_Map name_map_S20443C2[] = {
  NSPAIR(_ZN8S20443C2C1Ev),
  NSPAIR(_ZN8S20443C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20443C5;
extern VTBL_ENTRY _ZTI8S20443C5[];
extern  VTBL_ENTRY _ZTV8S20443C5[];
extern Class_Descriptor cd_S20443C4;
extern VTBL_ENTRY _ZTI8S20443C4[];
extern  VTBL_ENTRY _ZTV8S20443C4[];
extern Class_Descriptor cd_S20443C3;
extern VTBL_ENTRY _ZTI8S20443C3[];
extern  VTBL_ENTRY _ZTV8S20443C3[];
static Base_Class bases_S20443C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20443C5,    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_S20443C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20443C3,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20443C2[];
extern void _ZN8S20443C23v21Ev();
extern void _ZN8S20443C23v22Ev();
extern void _ZN8S20443C23v23Ev();
extern void _ZN8S20443C52v6Ev();
extern void _ZN8S20443C52v7Ev();
extern void _ZN8S20443C52v8Ev();
extern void _ZN8S20443C52v9Ev();
extern void _ZN8S20443C53v10Ev();
extern void _ZN8S20443C43v11Ev();
extern void _ZN8S20443C43v12Ev();
extern void _ZN8S20443C43v13Ev();
extern void _ZN8S20443C43v14Ev();
extern void _ZN8S20443C33v15Ev();
extern void _ZN8S20443C33v16Ev();
extern void _ZN8S20443C33v17Ev();
extern void _ZN8S20443C33v18Ev();
extern void _ZN8S20443C33v19Ev();
extern void _ZN8S20443C33v20Ev();
static  VTBL_ENTRY vtc_S20443C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20443C2[0]),
  (VTBL_ENTRY)&_ZN8S20443C23v21Ev,
  (VTBL_ENTRY)&_ZN8S20443C23v22Ev,
  (VTBL_ENTRY)&_ZN8S20443C23v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20443C2[0]),
  (VTBL_ENTRY)&_ZN8S20443C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20443C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v20Ev,
};
extern VTBL_ENTRY _ZTV8S20443C2[];
static  VTT_ENTRY vtt_S20443C2[] = {
  {&(_ZTV8S20443C2[3]),  3,38},
  {&(_ZTV8S20443C2[23]),  23,38},
};
extern VTBL_ENTRY _ZTI8S20443C2[];
extern  VTBL_ENTRY _ZTV8S20443C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20443C2[];
Class_Descriptor cd_S20443C2 = {  "S20443C2", // class name
  bases_S20443C2, 3,
  &(vtc_S20443C2[0]), // expected_vtbl_contents
  &(vtt_S20443C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20443C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20443C2),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20443C2),2, //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  S20443C1  : virtual S20443C2 {
  int s20443c1f0[4];
  ::S19762C18_nt s20443c1f1;
  int s20443c1f2[4];
  __tsi64 s20443c1f3:41;
  virtual  ~S20443C1(); // _ZN8S20443C1D2Ev
  virtual void  v1(); // _ZN8S20443C12v1Ev
  virtual void  v2(); // _ZN8S20443C12v2Ev
  virtual void  v3(); // _ZN8S20443C12v3Ev
  virtual void  v4(); // _ZN8S20443C12v4Ev
  virtual void  v5(); // _ZN8S20443C12v5Ev
  S20443C1(); // tgen
};
//SIG(1 S20443C1) C1{ VBC2{ VBC3{ BC4{ BC5{ v6 v7 v8 v9 v10} v11 v12 v13 v14 FC5} v15 v16 v17 v18 v19 v20} v21 v22 v23} vd v1 v2 v3 v4 v5 Fi[4] FC6{} Fi[4] FL:41}


 S20443C1 ::~S20443C1(){ note_dtor("S20443C1", this);}
void  S20443C1 ::v1(){vfunc_called(this, "_ZN8S20443C12v1Ev");}
void  S20443C1 ::v2(){vfunc_called(this, "_ZN8S20443C12v2Ev");}
void  S20443C1 ::v3(){vfunc_called(this, "_ZN8S20443C12v3Ev");}
void  S20443C1 ::v4(){vfunc_called(this, "_ZN8S20443C12v4Ev");}
void  S20443C1 ::v5(){vfunc_called(this, "_ZN8S20443C12v5Ev");}
S20443C1 ::S20443C1(){ note_ctor("S20443C1", this);} // tgen

static void Test_S20443C1()
{
  extern Class_Descriptor cd_S20443C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S20443C1, buf);
    S20443C1 *dp, &lv = *(dp=new (buf) S20443C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S20443C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20443C1)");
    check_base_class_offset(lv, (S20443C5*)(S20443C4*)(S20443C3*), ABISELECT(56,48), "S20443C1");
    check_base_class_offset(lv, (S20443C4*)(S20443C3*), ABISELECT(56,48), "S20443C1");
    check_base_class_offset(lv, (S20443C3*)(S20443C2*), ABISELECT(56,48), "S20443C1");
    check_base_class_offset(lv, (S20443C2*), 0, "S20443C1");
    check_field_offset(lv, s20443c1f0, ABISELECT(8,4), "S20443C1.s20443c1f0");
    check_field_offset(lv, s20443c1f1, ABISELECT(24,20), "S20443C1.s20443c1f1");
    check_field_offset(lv, s20443c1f2, ABISELECT(28,24), "S20443C1.s20443c1f2");
    set_bf_and_test(lv, s20443c1f3, ABISELECT(48,40), 0, 41, 1, "S20443C1");
    set_bf_and_test(lv, s20443c1f3, ABISELECT(48,40), 0, 41, hide_sll(1LL<<40), "S20443C1");
    test_class_info(&lv, &cd_S20443C1);
    dp->~S20443C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20443C1(Test_S20443C1, "S20443C1", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S20443C1C1Ev();
extern void _ZN8S20443C1D2Ev();
Name_Map name_map_S20443C1[] = {
  NSPAIR(_ZN8S20443C1C1Ev),
  NSPAIR(_ZN8S20443C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20443C5;
extern VTBL_ENTRY _ZTI8S20443C5[];
extern  VTBL_ENTRY _ZTV8S20443C5[];
extern Class_Descriptor cd_S20443C4;
extern VTBL_ENTRY _ZTI8S20443C4[];
extern  VTBL_ENTRY _ZTV8S20443C4[];
extern Class_Descriptor cd_S20443C3;
extern VTBL_ENTRY _ZTI8S20443C3[];
extern  VTBL_ENTRY _ZTV8S20443C3[];
extern Class_Descriptor cd_S20443C2;
extern VTBL_ENTRY _ZTI8S20443C2[];
extern  VTBL_ENTRY _ZTV8S20443C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20443C2[];
static Base_Class bases_S20443C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20443C5,    ABISELECT(56,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20443C4,    ABISELECT(56,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20443C3,    ABISELECT(56,48), //bcp->offset
    17, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20443C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20443C1[];
extern void _ZN8S20443C23v21Ev();
extern void _ZN8S20443C23v22Ev();
extern void _ZN8S20443C23v23Ev();
extern void _ZN8S20443C1D1Ev();
extern void _ZN8S20443C1D0Ev();
extern void _ZN8S20443C12v1Ev();
extern void _ZN8S20443C12v2Ev();
extern void _ZN8S20443C12v3Ev();
extern void _ZN8S20443C12v4Ev();
extern void _ZN8S20443C12v5Ev();
extern void _ZN8S20443C52v6Ev();
extern void _ZN8S20443C52v7Ev();
extern void _ZN8S20443C52v8Ev();
extern void _ZN8S20443C52v9Ev();
extern void _ZN8S20443C53v10Ev();
extern void _ZN8S20443C43v11Ev();
extern void _ZN8S20443C43v12Ev();
extern void _ZN8S20443C43v13Ev();
extern void _ZN8S20443C43v14Ev();
extern void _ZN8S20443C33v15Ev();
extern void _ZN8S20443C33v16Ev();
extern void _ZN8S20443C33v17Ev();
extern void _ZN8S20443C33v18Ev();
extern void _ZN8S20443C33v19Ev();
extern void _ZN8S20443C33v20Ev();
static  VTBL_ENTRY vtc_S20443C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20443C1[0]),
  (VTBL_ENTRY)&_ZN8S20443C23v21Ev,
  (VTBL_ENTRY)&_ZN8S20443C23v22Ev,
  (VTBL_ENTRY)&_ZN8S20443C23v23Ev,
  (VTBL_ENTRY)&_ZN8S20443C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20443C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20443C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20443C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20443C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20443C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20443C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S20443C1[0]),
  (VTBL_ENTRY)&_ZN8S20443C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20443C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v20Ev,
};
extern VTBL_ENTRY _ZTV8S20443C1[];
extern void _ZN8S20443C23v21Ev();
extern void _ZN8S20443C23v22Ev();
extern void _ZN8S20443C23v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20443C2__8S20443C1[] = {
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20443C2[0]),
  (VTBL_ENTRY)&_ZN8S20443C23v21Ev,
  (VTBL_ENTRY)&_ZN8S20443C23v22Ev,
  (VTBL_ENTRY)&_ZN8S20443C23v23Ev,
};
extern void _ZN8S20443C52v6Ev();
extern void _ZN8S20443C52v7Ev();
extern void _ZN8S20443C52v8Ev();
extern void _ZN8S20443C52v9Ev();
extern void _ZN8S20443C53v10Ev();
extern void _ZN8S20443C43v11Ev();
extern void _ZN8S20443C43v12Ev();
extern void _ZN8S20443C43v13Ev();
extern void _ZN8S20443C43v14Ev();
extern void _ZN8S20443C33v15Ev();
extern void _ZN8S20443C33v16Ev();
extern void _ZN8S20443C33v17Ev();
extern void _ZN8S20443C33v18Ev();
extern void _ZN8S20443C33v19Ev();
extern void _ZN8S20443C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20443C3__8S20443C2__8S20443C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S20443C2[0]),
  (VTBL_ENTRY)&_ZN8S20443C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20443C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20443C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20443C43v14Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20443C33v20Ev,
};
static  VTT_ENTRY vtt_S20443C1[] = {
  {&(_ZTV8S20443C1[7]),  7,49},
  {&(_ZTV8S20443C1[7]),  7,49},
  {&(_ZTV8S20443C1[34]),  34,49},
  {&(_tg__ZTV8S20443C2__8S20443C1[3]),  3,6},
  {&(_tg__ZTV8S20443C3__8S20443C2__8S20443C1[17]),  17,32},
};
extern VTBL_ENTRY _ZTI8S20443C1[];
extern  VTBL_ENTRY _ZTV8S20443C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20443C1[];
Class_Descriptor cd_S20443C1 = {  "S20443C1", // class name
  bases_S20443C1, 4,
  &(vtc_S20443C1[0]), // expected_vtbl_contents
  &(vtt_S20443C1[0]), // expected_vtt_contents
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S20443C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20443C1),49, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20443C1),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7696C6  {
  virtual void  v5(); // _ZN7S7696C62v5Ev
  virtual void  v6(); // _ZN7S7696C62v6Ev
  virtual void  v7(); // _ZN7S7696C62v7Ev
  virtual void  v8(); // _ZN7S7696C62v8Ev
  virtual void  v9(); // _ZN7S7696C62v9Ev
  ~S7696C6(); // tgen
  S7696C6(); // tgen
};
//SIG(-1 S7696C6) C1{ v1 v2 v3 v4 v5}


void  S7696C6 ::v5(){vfunc_called(this, "_ZN7S7696C62v5Ev");}
void  S7696C6 ::v6(){vfunc_called(this, "_ZN7S7696C62v6Ev");}
void  S7696C6 ::v7(){vfunc_called(this, "_ZN7S7696C62v7Ev");}
void  S7696C6 ::v8(){vfunc_called(this, "_ZN7S7696C62v8Ev");}
void  S7696C6 ::v9(){vfunc_called(this, "_ZN7S7696C62v9Ev");}
S7696C6 ::~S7696C6(){ note_dtor("S7696C6", this);} // tgen
S7696C6 ::S7696C6(){ note_ctor("S7696C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7696C6C1Ev();
extern void _ZN7S7696C6D1Ev();
Name_Map name_map_S7696C6[] = {
  NSPAIR(_ZN7S7696C6C1Ev),
  NSPAIR(_ZN7S7696C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7696C6[];
extern void _ZN7S7696C62v5Ev();
extern void _ZN7S7696C62v6Ev();
extern void _ZN7S7696C62v7Ev();
extern void _ZN7S7696C62v8Ev();
extern void _ZN7S7696C62v9Ev();
static  VTBL_ENTRY vtc_S7696C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7696C6[0]),
  (VTBL_ENTRY)&_ZN7S7696C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v9Ev,
};
extern VTBL_ENTRY _ZTI7S7696C6[];
extern  VTBL_ENTRY _ZTV7S7696C6[];
Class_Descriptor cd_S7696C6 = {  "S7696C6", // class name
  0,0,//no base classes
  &(vtc_S7696C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7696C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7696C6),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  S7696C5  : S7696C6 {
  ::S7696C6 s7696c5f0;
  virtual void  v10(); // _ZN7S7696C53v10Ev
  virtual void  v11(); // _ZN7S7696C53v11Ev
  virtual void  v12(); // _ZN7S7696C53v12Ev
  virtual void  v13(); // _ZN7S7696C53v13Ev
  ~S7696C5(); // tgen
  S7696C5(); // tgen
};
//SIG(-1 S7696C5) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S7696C5 ::v10(){vfunc_called(this, "_ZN7S7696C53v10Ev");}
void  S7696C5 ::v11(){vfunc_called(this, "_ZN7S7696C53v11Ev");}
void  S7696C5 ::v12(){vfunc_called(this, "_ZN7S7696C53v12Ev");}
void  S7696C5 ::v13(){vfunc_called(this, "_ZN7S7696C53v13Ev");}
S7696C5 ::~S7696C5(){ note_dtor("S7696C5", this);} // tgen
S7696C5 ::S7696C5(){ note_ctor("S7696C5", this);} // tgen

static void Test_S7696C5()
{
  extern Class_Descriptor cd_S7696C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7696C5, buf);
    S7696C5 *dp, &lv = *(dp=new (buf) S7696C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7696C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7696C5)");
    check_base_class_offset(lv, (S7696C6*), 0, "S7696C5");
    check_field_offset(lv, s7696c5f0, ABISELECT(8,4), "S7696C5.s7696c5f0");
    test_class_info(&lv, &cd_S7696C5);
    dp->~S7696C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7696C5(Test_S7696C5, "S7696C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7696C5C1Ev();
extern void _ZN7S7696C5D1Ev();
Name_Map name_map_S7696C5[] = {
  NSPAIR(_ZN7S7696C5C1Ev),
  NSPAIR(_ZN7S7696C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7696C6;
extern VTBL_ENTRY _ZTI7S7696C6[];
extern  VTBL_ENTRY _ZTV7S7696C6[];
static Base_Class bases_S7696C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7696C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7696C5[];
extern void _ZN7S7696C62v5Ev();
extern void _ZN7S7696C62v6Ev();
extern void _ZN7S7696C62v7Ev();
extern void _ZN7S7696C62v8Ev();
extern void _ZN7S7696C62v9Ev();
extern void _ZN7S7696C53v10Ev();
extern void _ZN7S7696C53v11Ev();
extern void _ZN7S7696C53v12Ev();
extern void _ZN7S7696C53v13Ev();
static  VTBL_ENTRY vtc_S7696C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7696C5[0]),
  (VTBL_ENTRY)&_ZN7S7696C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v13Ev,
};
extern VTBL_ENTRY _ZTI7S7696C5[];
extern  VTBL_ENTRY _ZTV7S7696C5[];
Class_Descriptor cd_S7696C5 = {  "S7696C5", // class name
  bases_S7696C5, 1,
  &(vtc_S7696C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7696C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7696C5),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7696C4  : S7696C5 {
  virtual void  v14(); // _ZN7S7696C43v14Ev
  virtual void  v15(); // _ZN7S7696C43v15Ev
  virtual void  v16(); // _ZN7S7696C43v16Ev
  virtual void  v17(); // _ZN7S7696C43v17Ev
  virtual void  v18(); // _ZN7S7696C43v18Ev
  virtual void  v19(); // _ZN7S7696C43v19Ev
  ~S7696C4(); // tgen
  S7696C4(); // tgen
};
//SIG(-1 S7696C4) C1{ BC2{ BC3{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 v6}


void  S7696C4 ::v14(){vfunc_called(this, "_ZN7S7696C43v14Ev");}
void  S7696C4 ::v15(){vfunc_called(this, "_ZN7S7696C43v15Ev");}
void  S7696C4 ::v16(){vfunc_called(this, "_ZN7S7696C43v16Ev");}
void  S7696C4 ::v17(){vfunc_called(this, "_ZN7S7696C43v17Ev");}
void  S7696C4 ::v18(){vfunc_called(this, "_ZN7S7696C43v18Ev");}
void  S7696C4 ::v19(){vfunc_called(this, "_ZN7S7696C43v19Ev");}
S7696C4 ::~S7696C4(){ note_dtor("S7696C4", this);} // tgen
S7696C4 ::S7696C4(){ note_ctor("S7696C4", this);} // tgen

static void Test_S7696C4()
{
  extern Class_Descriptor cd_S7696C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7696C4, buf);
    S7696C4 *dp, &lv = *(dp=new (buf) S7696C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7696C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7696C4)");
    check_base_class_offset(lv, (S7696C6*)(S7696C5*), 0, "S7696C4");
    check_base_class_offset(lv, (S7696C5*), 0, "S7696C4");
    test_class_info(&lv, &cd_S7696C4);
    dp->~S7696C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7696C4(Test_S7696C4, "S7696C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7696C4C1Ev();
extern void _ZN7S7696C4D1Ev();
Name_Map name_map_S7696C4[] = {
  NSPAIR(_ZN7S7696C4C1Ev),
  NSPAIR(_ZN7S7696C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7696C6;
extern VTBL_ENTRY _ZTI7S7696C6[];
extern  VTBL_ENTRY _ZTV7S7696C6[];
extern Class_Descriptor cd_S7696C5;
extern VTBL_ENTRY _ZTI7S7696C5[];
extern  VTBL_ENTRY _ZTV7S7696C5[];
static Base_Class bases_S7696C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7696C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7696C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7696C4[];
extern void _ZN7S7696C62v5Ev();
extern void _ZN7S7696C62v6Ev();
extern void _ZN7S7696C62v7Ev();
extern void _ZN7S7696C62v8Ev();
extern void _ZN7S7696C62v9Ev();
extern void _ZN7S7696C53v10Ev();
extern void _ZN7S7696C53v11Ev();
extern void _ZN7S7696C53v12Ev();
extern void _ZN7S7696C53v13Ev();
extern void _ZN7S7696C43v14Ev();
extern void _ZN7S7696C43v15Ev();
extern void _ZN7S7696C43v16Ev();
extern void _ZN7S7696C43v17Ev();
extern void _ZN7S7696C43v18Ev();
extern void _ZN7S7696C43v19Ev();
static  VTBL_ENTRY vtc_S7696C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7696C4[0]),
  (VTBL_ENTRY)&_ZN7S7696C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v19Ev,
};
extern VTBL_ENTRY _ZTI7S7696C4[];
extern  VTBL_ENTRY _ZTV7S7696C4[];
Class_Descriptor cd_S7696C4 = {  "S7696C4", // class name
  bases_S7696C4, 2,
  &(vtc_S7696C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7696C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7696C4),17, //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  S7696C3  : virtual S7696C4 {
  virtual void  v20(); // _ZN7S7696C33v20Ev
  virtual void  v21(); // _ZN7S7696C33v21Ev
  virtual void  v22(); // _ZN7S7696C33v22Ev
  ~S7696C3(); // tgen
  S7696C3(); // tgen
};
//SIG(-1 S7696C3) C1{ VBC2{ BC3{ BC4{ v4 v5 v6 v7 v8} v9 v10 v11 v12 FC4} v13 v14 v15 v16 v17 v18} v1 v2 v3}


void  S7696C3 ::v20(){vfunc_called(this, "_ZN7S7696C33v20Ev");}
void  S7696C3 ::v21(){vfunc_called(this, "_ZN7S7696C33v21Ev");}
void  S7696C3 ::v22(){vfunc_called(this, "_ZN7S7696C33v22Ev");}
S7696C3 ::~S7696C3(){ note_dtor("S7696C3", this);} // tgen
S7696C3 ::S7696C3(){ note_ctor("S7696C3", this);} // tgen

static void Test_S7696C3()
{
  extern Class_Descriptor cd_S7696C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7696C3, buf);
    S7696C3 *dp, &lv = *(dp=new (buf) S7696C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7696C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7696C3)");
    check_base_class_offset(lv, (S7696C6*)(S7696C5*)(S7696C4*), ABISELECT(8,4), "S7696C3");
    check_base_class_offset(lv, (S7696C5*)(S7696C4*), ABISELECT(8,4), "S7696C3");
    check_base_class_offset(lv, (S7696C4*), ABISELECT(8,4), "S7696C3");
    test_class_info(&lv, &cd_S7696C3);
    dp->~S7696C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7696C3(Test_S7696C3, "S7696C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7696C3C1Ev();
extern void _ZN7S7696C3D1Ev();
Name_Map name_map_S7696C3[] = {
  NSPAIR(_ZN7S7696C3C1Ev),
  NSPAIR(_ZN7S7696C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7696C6;
extern VTBL_ENTRY _ZTI7S7696C6[];
extern  VTBL_ENTRY _ZTV7S7696C6[];
extern Class_Descriptor cd_S7696C5;
extern VTBL_ENTRY _ZTI7S7696C5[];
extern  VTBL_ENTRY _ZTV7S7696C5[];
extern Class_Descriptor cd_S7696C4;
extern VTBL_ENTRY _ZTI7S7696C4[];
extern  VTBL_ENTRY _ZTV7S7696C4[];
static Base_Class bases_S7696C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7696C6,    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_S7696C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7696C4,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7696C3[];
extern void _ZN7S7696C33v20Ev();
extern void _ZN7S7696C33v21Ev();
extern void _ZN7S7696C33v22Ev();
extern void _ZN7S7696C62v5Ev();
extern void _ZN7S7696C62v6Ev();
extern void _ZN7S7696C62v7Ev();
extern void _ZN7S7696C62v8Ev();
extern void _ZN7S7696C62v9Ev();
extern void _ZN7S7696C53v10Ev();
extern void _ZN7S7696C53v11Ev();
extern void _ZN7S7696C53v12Ev();
extern void _ZN7S7696C53v13Ev();
extern void _ZN7S7696C43v14Ev();
extern void _ZN7S7696C43v15Ev();
extern void _ZN7S7696C43v16Ev();
extern void _ZN7S7696C43v17Ev();
extern void _ZN7S7696C43v18Ev();
extern void _ZN7S7696C43v19Ev();
static  VTBL_ENTRY vtc_S7696C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7696C3[0]),
  (VTBL_ENTRY)&_ZN7S7696C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7696C3[0]),
  (VTBL_ENTRY)&_ZN7S7696C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v19Ev,
};
extern VTBL_ENTRY _ZTV7S7696C3[];
static  VTT_ENTRY vtt_S7696C3[] = {
  {&(_ZTV7S7696C3[3]),  3,38},
  {&(_ZTV7S7696C3[23]),  23,38},
};
extern VTBL_ENTRY _ZTI7S7696C3[];
extern  VTBL_ENTRY _ZTV7S7696C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7696C3[];
Class_Descriptor cd_S7696C3 = {  "S7696C3", // class name
  bases_S7696C3, 3,
  &(vtc_S7696C3[0]), // expected_vtbl_contents
  &(vtt_S7696C3[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7696C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7696C3),38, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7696C3),2, //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  S7696C2  : virtual S7696C3 {
  virtual  ~S7696C2(); // _ZN7S7696C2D2Ev
  virtual void  v23(); // _ZN7S7696C23v23Ev
  virtual void  v24(); // _ZN7S7696C23v24Ev
  virtual void  v25(); // _ZN7S7696C23v25Ev
  virtual void  v26(); // _ZN7S7696C23v26Ev
  S7696C2(); // tgen
};
//SIG(-1 S7696C2) C1{ VBC2{ VBC3{ BC4{ BC5{ v5 v6 v7 v8 v9} v10 v11 v12 v13 FC5} v14 v15 v16 v17 v18 v19} v20 v21 v22} vd v1 v2 v3 v4}


 S7696C2 ::~S7696C2(){ note_dtor("S7696C2", this);}
void  S7696C2 ::v23(){vfunc_called(this, "_ZN7S7696C23v23Ev");}
void  S7696C2 ::v24(){vfunc_called(this, "_ZN7S7696C23v24Ev");}
void  S7696C2 ::v25(){vfunc_called(this, "_ZN7S7696C23v25Ev");}
void  S7696C2 ::v26(){vfunc_called(this, "_ZN7S7696C23v26Ev");}
S7696C2 ::S7696C2(){ note_ctor("S7696C2", this);} // tgen

static void Test_S7696C2()
{
  extern Class_Descriptor cd_S7696C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7696C2, buf);
    S7696C2 *dp, &lv = *(dp=new (buf) S7696C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7696C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7696C2)");
    check_base_class_offset(lv, (S7696C6*)(S7696C5*)(S7696C4*), ABISELECT(8,4), "S7696C2");
    check_base_class_offset(lv, (S7696C5*)(S7696C4*), ABISELECT(8,4), "S7696C2");
    check_base_class_offset(lv, (S7696C4*)(S7696C3*), ABISELECT(8,4), "S7696C2");
    check_base_class_offset(lv, (S7696C3*), 0, "S7696C2");
    test_class_info(&lv, &cd_S7696C2);
    dp->~S7696C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7696C2(Test_S7696C2, "S7696C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7696C2C1Ev();
extern void _ZN7S7696C2D2Ev();
Name_Map name_map_S7696C2[] = {
  NSPAIR(_ZN7S7696C2C1Ev),
  NSPAIR(_ZN7S7696C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7696C6;
extern VTBL_ENTRY _ZTI7S7696C6[];
extern  VTBL_ENTRY _ZTV7S7696C6[];
extern Class_Descriptor cd_S7696C5;
extern VTBL_ENTRY _ZTI7S7696C5[];
extern  VTBL_ENTRY _ZTV7S7696C5[];
extern Class_Descriptor cd_S7696C4;
extern VTBL_ENTRY _ZTI7S7696C4[];
extern  VTBL_ENTRY _ZTV7S7696C4[];
extern Class_Descriptor cd_S7696C3;
extern VTBL_ENTRY _ZTI7S7696C3[];
extern  VTBL_ENTRY _ZTV7S7696C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7696C3[];
static Base_Class bases_S7696C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7696C6,    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_S7696C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7696C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7696C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7696C2[];
extern void _ZN7S7696C33v20Ev();
extern void _ZN7S7696C33v21Ev();
extern void _ZN7S7696C33v22Ev();
extern void _ZN7S7696C2D1Ev();
extern void _ZN7S7696C2D0Ev();
extern void _ZN7S7696C23v23Ev();
extern void _ZN7S7696C23v24Ev();
extern void _ZN7S7696C23v25Ev();
extern void _ZN7S7696C23v26Ev();
extern void _ZN7S7696C62v5Ev();
extern void _ZN7S7696C62v6Ev();
extern void _ZN7S7696C62v7Ev();
extern void _ZN7S7696C62v8Ev();
extern void _ZN7S7696C62v9Ev();
extern void _ZN7S7696C53v10Ev();
extern void _ZN7S7696C53v11Ev();
extern void _ZN7S7696C53v12Ev();
extern void _ZN7S7696C53v13Ev();
extern void _ZN7S7696C43v14Ev();
extern void _ZN7S7696C43v15Ev();
extern void _ZN7S7696C43v16Ev();
extern void _ZN7S7696C43v17Ev();
extern void _ZN7S7696C43v18Ev();
extern void _ZN7S7696C43v19Ev();
static  VTBL_ENTRY vtc_S7696C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7696C2[0]),
  (VTBL_ENTRY)&_ZN7S7696C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7696C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7696C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v26Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7696C2[0]),
  (VTBL_ENTRY)&_ZN7S7696C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v19Ev,
};
extern VTBL_ENTRY _ZTV7S7696C2[];
extern void _ZN7S7696C33v20Ev();
extern void _ZN7S7696C33v21Ev();
extern void _ZN7S7696C33v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7696C3__7S7696C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7696C3[0]),
  (VTBL_ENTRY)&_ZN7S7696C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v22Ev,
};
extern void _ZN7S7696C62v5Ev();
extern void _ZN7S7696C62v6Ev();
extern void _ZN7S7696C62v7Ev();
extern void _ZN7S7696C62v8Ev();
extern void _ZN7S7696C62v9Ev();
extern void _ZN7S7696C53v10Ev();
extern void _ZN7S7696C53v11Ev();
extern void _ZN7S7696C53v12Ev();
extern void _ZN7S7696C53v13Ev();
extern void _ZN7S7696C43v14Ev();
extern void _ZN7S7696C43v15Ev();
extern void _ZN7S7696C43v16Ev();
extern void _ZN7S7696C43v17Ev();
extern void _ZN7S7696C43v18Ev();
extern void _ZN7S7696C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7696C4__7S7696C3__7S7696C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7696C3[0]),
  (VTBL_ENTRY)&_ZN7S7696C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v19Ev,
};
static  VTT_ENTRY vtt_S7696C2[] = {
  {&(_ZTV7S7696C2[7]),  7,48},
  {&(_ZTV7S7696C2[7]),  7,48},
  {&(_ZTV7S7696C2[33]),  33,48},
  {&(_tg__ZTV7S7696C3__7S7696C2[3]),  3,6},
  {&(_tg__ZTV7S7696C4__7S7696C3__7S7696C2[17]),  17,32},
};
extern VTBL_ENTRY _ZTI7S7696C2[];
extern  VTBL_ENTRY _ZTV7S7696C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7696C2[];
Class_Descriptor cd_S7696C2 = {  "S7696C2", // class name
  bases_S7696C2, 4,
  &(vtc_S7696C2[0]), // expected_vtbl_contents
  &(vtt_S7696C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7696C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7696C2),48, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7696C2),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7696C1  : S7696C2 {
  virtual  ~S7696C1(); // _ZN7S7696C1D2Ev
  virtual void  v1(); // _ZN7S7696C12v1Ev
  virtual void  v2(); // _ZN7S7696C12v2Ev
  virtual void  v3(); // _ZN7S7696C12v3Ev
  virtual void  v4(); // _ZN7S7696C12v4Ev
  S7696C1(); // tgen
};
//SIG(1 S7696C1) C1{ BC2{ VBC3{ VBC4{ BC5{ BC6{ v5 v6 v7 v8 v9} v10 v11 v12 v13 FC6} v14 v15 v16 v17 v18 v19} v20 v21 v22} vd v23 v24 v25 v26} vd v1 v2 v3 v4}


 S7696C1 ::~S7696C1(){ note_dtor("S7696C1", this);}
void  S7696C1 ::v1(){vfunc_called(this, "_ZN7S7696C12v1Ev");}
void  S7696C1 ::v2(){vfunc_called(this, "_ZN7S7696C12v2Ev");}
void  S7696C1 ::v3(){vfunc_called(this, "_ZN7S7696C12v3Ev");}
void  S7696C1 ::v4(){vfunc_called(this, "_ZN7S7696C12v4Ev");}
S7696C1 ::S7696C1(){ note_ctor("S7696C1", this);} // tgen

static void Test_S7696C1()
{
  extern Class_Descriptor cd_S7696C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7696C1, buf);
    S7696C1 *dp, &lv = *(dp=new (buf) S7696C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7696C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7696C1)");
    check_base_class_offset(lv, (S7696C6*)(S7696C5*)(S7696C4*), ABISELECT(8,4), "S7696C1");
    check_base_class_offset(lv, (S7696C5*)(S7696C4*), ABISELECT(8,4), "S7696C1");
    check_base_class_offset(lv, (S7696C4*)(S7696C3*), ABISELECT(8,4), "S7696C1");
    check_base_class_offset(lv, (S7696C3*)(S7696C2*), 0, "S7696C1");
    check_base_class_offset(lv, (S7696C2*), 0, "S7696C1");
    test_class_info(&lv, &cd_S7696C1);
    dp->~S7696C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7696C1(Test_S7696C1, "S7696C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7696C1C1Ev();
extern void _ZN7S7696C1D2Ev();
Name_Map name_map_S7696C1[] = {
  NSPAIR(_ZN7S7696C1C1Ev),
  NSPAIR(_ZN7S7696C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7696C6;
extern VTBL_ENTRY _ZTI7S7696C6[];
extern  VTBL_ENTRY _ZTV7S7696C6[];
extern Class_Descriptor cd_S7696C5;
extern VTBL_ENTRY _ZTI7S7696C5[];
extern  VTBL_ENTRY _ZTV7S7696C5[];
extern Class_Descriptor cd_S7696C4;
extern VTBL_ENTRY _ZTI7S7696C4[];
extern  VTBL_ENTRY _ZTV7S7696C4[];
extern Class_Descriptor cd_S7696C3;
extern VTBL_ENTRY _ZTI7S7696C3[];
extern  VTBL_ENTRY _ZTV7S7696C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7696C3[];
extern Class_Descriptor cd_S7696C2;
extern VTBL_ENTRY _ZTI7S7696C2[];
extern  VTBL_ENTRY _ZTV7S7696C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7696C2[];
static Base_Class bases_S7696C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7696C6,    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_S7696C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7696C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7696C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7696C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7696C1[];
extern void _ZN7S7696C33v20Ev();
extern void _ZN7S7696C33v21Ev();
extern void _ZN7S7696C33v22Ev();
extern void _ZN7S7696C1D1Ev();
extern void _ZN7S7696C1D0Ev();
extern void _ZN7S7696C23v23Ev();
extern void _ZN7S7696C23v24Ev();
extern void _ZN7S7696C23v25Ev();
extern void _ZN7S7696C23v26Ev();
extern void _ZN7S7696C12v1Ev();
extern void _ZN7S7696C12v2Ev();
extern void _ZN7S7696C12v3Ev();
extern void _ZN7S7696C12v4Ev();
extern void _ZN7S7696C62v5Ev();
extern void _ZN7S7696C62v6Ev();
extern void _ZN7S7696C62v7Ev();
extern void _ZN7S7696C62v8Ev();
extern void _ZN7S7696C62v9Ev();
extern void _ZN7S7696C53v10Ev();
extern void _ZN7S7696C53v11Ev();
extern void _ZN7S7696C53v12Ev();
extern void _ZN7S7696C53v13Ev();
extern void _ZN7S7696C43v14Ev();
extern void _ZN7S7696C43v15Ev();
extern void _ZN7S7696C43v16Ev();
extern void _ZN7S7696C43v17Ev();
extern void _ZN7S7696C43v18Ev();
extern void _ZN7S7696C43v19Ev();
static  VTBL_ENTRY vtc_S7696C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7696C1[0]),
  (VTBL_ENTRY)&_ZN7S7696C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7696C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7696C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7696C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7696C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7696C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7696C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7696C1[0]),
  (VTBL_ENTRY)&_ZN7S7696C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v19Ev,
};
extern VTBL_ENTRY _ZTV7S7696C1[];
extern void _ZN7S7696C33v20Ev();
extern void _ZN7S7696C33v21Ev();
extern void _ZN7S7696C33v22Ev();
extern void _ZN7S7696C2D1Ev();
extern void _ZN7S7696C2D0Ev();
extern void _ZN7S7696C23v23Ev();
extern void _ZN7S7696C23v24Ev();
extern void _ZN7S7696C23v25Ev();
extern void _ZN7S7696C23v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7696C2__7S7696C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7696C2[0]),
  (VTBL_ENTRY)&_ZN7S7696C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7696C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7696C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7696C23v26Ev,
};
extern void _ZN7S7696C62v5Ev();
extern void _ZN7S7696C62v6Ev();
extern void _ZN7S7696C62v7Ev();
extern void _ZN7S7696C62v8Ev();
extern void _ZN7S7696C62v9Ev();
extern void _ZN7S7696C53v10Ev();
extern void _ZN7S7696C53v11Ev();
extern void _ZN7S7696C53v12Ev();
extern void _ZN7S7696C53v13Ev();
extern void _ZN7S7696C43v14Ev();
extern void _ZN7S7696C43v15Ev();
extern void _ZN7S7696C43v16Ev();
extern void _ZN7S7696C43v17Ev();
extern void _ZN7S7696C43v18Ev();
extern void _ZN7S7696C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7696C4__7S7696C2__7S7696C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7696C2[0]),
  (VTBL_ENTRY)&_ZN7S7696C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v19Ev,
};
extern void _ZN7S7696C33v20Ev();
extern void _ZN7S7696C33v21Ev();
extern void _ZN7S7696C33v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7696C3__7S7696C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7696C3[0]),
  (VTBL_ENTRY)&_ZN7S7696C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7696C33v22Ev,
};
extern void _ZN7S7696C62v5Ev();
extern void _ZN7S7696C62v6Ev();
extern void _ZN7S7696C62v7Ev();
extern void _ZN7S7696C62v8Ev();
extern void _ZN7S7696C62v9Ev();
extern void _ZN7S7696C53v10Ev();
extern void _ZN7S7696C53v11Ev();
extern void _ZN7S7696C53v12Ev();
extern void _ZN7S7696C53v13Ev();
extern void _ZN7S7696C43v14Ev();
extern void _ZN7S7696C43v15Ev();
extern void _ZN7S7696C43v16Ev();
extern void _ZN7S7696C43v17Ev();
extern void _ZN7S7696C43v18Ev();
extern void _ZN7S7696C43v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7696C4__7S7696C3__7S7696C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7696C3[0]),
  (VTBL_ENTRY)&_ZN7S7696C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7696C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7696C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7696C43v19Ev,
};
static  VTT_ENTRY vtt_S7696C1[] = {
  {&(_ZTV7S7696C1[7]),  7,52},
  {&(_tg__ZTV7S7696C2__7S7696C1[7]),  7,16},
  {&(_tg__ZTV7S7696C2__7S7696C1[7]),  7,16},
  {&(_tg__ZTV7S7696C4__7S7696C2__7S7696C1[17]),  17,32},
  {&(_ZTV7S7696C1[7]),  7,52},
  {&(_ZTV7S7696C1[37]),  37,52},
  {&(_tg__ZTV7S7696C3__7S7696C1[3]),  3,6},
  {&(_tg__ZTV7S7696C4__7S7696C3__7S7696C1[17]),  17,32},
};
extern VTBL_ENTRY _ZTI7S7696C1[];
extern  VTBL_ENTRY _ZTV7S7696C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7696C1[];
Class_Descriptor cd_S7696C1 = {  "S7696C1", // class name
  bases_S7696C1, 5,
  &(vtc_S7696C1[0]), // expected_vtbl_contents
  &(vtt_S7696C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7696C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7696C1),52, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7696C1),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6950C2  {
  virtual void  v5(); // _ZN7S6950C22v5Ev
  virtual void  v6(); // _ZN7S6950C22v6Ev
  virtual void  v7(); // _ZN7S6950C22v7Ev
  ~S6950C2(); // tgen
  S6950C2(); // tgen
};
//SIG(-1 S6950C2) C1{ v1 v2 v3}


void  S6950C2 ::v5(){vfunc_called(this, "_ZN7S6950C22v5Ev");}
void  S6950C2 ::v6(){vfunc_called(this, "_ZN7S6950C22v6Ev");}
void  S6950C2 ::v7(){vfunc_called(this, "_ZN7S6950C22v7Ev");}
S6950C2 ::~S6950C2(){ note_dtor("S6950C2", this);} // tgen
S6950C2 ::S6950C2(){ note_ctor("S6950C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6950C2C1Ev();
extern void _ZN7S6950C2D1Ev();
Name_Map name_map_S6950C2[] = {
  NSPAIR(_ZN7S6950C2C1Ev),
  NSPAIR(_ZN7S6950C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6950C2[];
extern void _ZN7S6950C22v5Ev();
extern void _ZN7S6950C22v6Ev();
extern void _ZN7S6950C22v7Ev();
static  VTBL_ENTRY vtc_S6950C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6950C2[0]),
  (VTBL_ENTRY)&_ZN7S6950C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6950C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6950C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S6950C2[];
extern  VTBL_ENTRY _ZTV7S6950C2[];
Class_Descriptor cd_S6950C2 = {  "S6950C2", // class name
  0,0,//no base classes
  &(vtc_S6950C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6950C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6950C2),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  S6950C3  {
  __tsi64 s6950c3f0;
  char s6950c3f1;
  virtual void  v8(); // _ZN7S6950C32v8Ev
  virtual void  v9(); // _ZN7S6950C32v9Ev
  virtual void  v10(); // _ZN7S6950C33v10Ev
  virtual void  v11(); // _ZN7S6950C33v11Ev
  virtual void  v12(); // _ZN7S6950C33v12Ev
  virtual void  v13(); // _ZN7S6950C33v13Ev
  virtual void  v14(); // _ZN7S6950C33v14Ev
  ~S6950C3(); // tgen
  S6950C3(); // tgen
};
//SIG(-1 S6950C3) C1{ v1 v2 v3 v4 v5 v6 v7 FL Fc}


void  S6950C3 ::v8(){vfunc_called(this, "_ZN7S6950C32v8Ev");}
void  S6950C3 ::v9(){vfunc_called(this, "_ZN7S6950C32v9Ev");}
void  S6950C3 ::v10(){vfunc_called(this, "_ZN7S6950C33v10Ev");}
void  S6950C3 ::v11(){vfunc_called(this, "_ZN7S6950C33v11Ev");}
void  S6950C3 ::v12(){vfunc_called(this, "_ZN7S6950C33v12Ev");}
void  S6950C3 ::v13(){vfunc_called(this, "_ZN7S6950C33v13Ev");}
void  S6950C3 ::v14(){vfunc_called(this, "_ZN7S6950C33v14Ev");}
S6950C3 ::~S6950C3(){ note_dtor("S6950C3", this);} // tgen
S6950C3 ::S6950C3(){ note_ctor("S6950C3", this);} // tgen

static void Test_S6950C3()
{
  extern Class_Descriptor cd_S6950C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6950C3, buf);
    S6950C3 *dp, &lv = *(dp=new (buf) S6950C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6950C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6950C3)");
    check_field_offset(lv, s6950c3f0, ABISELECT(8,4), "S6950C3.s6950c3f0");
    check_field_offset(lv, s6950c3f1, ABISELECT(16,12), "S6950C3.s6950c3f1");
    test_class_info(&lv, &cd_S6950C3);
    dp->~S6950C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6950C3(Test_S6950C3, "S6950C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6950C3C1Ev();
extern void _ZN7S6950C3D1Ev();
Name_Map name_map_S6950C3[] = {
  NSPAIR(_ZN7S6950C3C1Ev),
  NSPAIR(_ZN7S6950C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6950C3[];
extern void _ZN7S6950C32v8Ev();
extern void _ZN7S6950C32v9Ev();
extern void _ZN7S6950C33v10Ev();
extern void _ZN7S6950C33v11Ev();
extern void _ZN7S6950C33v12Ev();
extern void _ZN7S6950C33v13Ev();
extern void _ZN7S6950C33v14Ev();
static  VTBL_ENTRY vtc_S6950C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6950C3[0]),
  (VTBL_ENTRY)&_ZN7S6950C32v8Ev,
  (VTBL_ENTRY)&_ZN7S6950C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S6950C3[];
extern  VTBL_ENTRY _ZTV7S6950C3[];
Class_Descriptor cd_S6950C3 = {  "S6950C3", // class name
  0,0,//no base classes
  &(vtc_S6950C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6950C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6950C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6950C5  {
  virtual  ~S6950C5(); // _ZN7S6950C5D1Ev
  virtual void  v17(); // _ZN7S6950C53v17Ev
  virtual void  v18(); // _ZN7S6950C53v18Ev
  virtual void  v19(); // _ZN7S6950C53v19Ev
  virtual void  v20(); // _ZN7S6950C53v20Ev
  S6950C5(); // tgen
};
//SIG(-1 S6950C5) C1{ vd v1 v2 v3 v4}


 S6950C5 ::~S6950C5(){ note_dtor("S6950C5", this);}
void  S6950C5 ::v17(){vfunc_called(this, "_ZN7S6950C53v17Ev");}
void  S6950C5 ::v18(){vfunc_called(this, "_ZN7S6950C53v18Ev");}
void  S6950C5 ::v19(){vfunc_called(this, "_ZN7S6950C53v19Ev");}
void  S6950C5 ::v20(){vfunc_called(this, "_ZN7S6950C53v20Ev");}
S6950C5 ::S6950C5(){ note_ctor("S6950C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6950C5C1Ev();
extern void _ZN7S6950C5D1Ev();
Name_Map name_map_S6950C5[] = {
  NSPAIR(_ZN7S6950C5C1Ev),
  NSPAIR(_ZN7S6950C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6950C5[];
extern void _ZN7S6950C5D1Ev();
extern void _ZN7S6950C5D0Ev();
extern void _ZN7S6950C53v17Ev();
extern void _ZN7S6950C53v18Ev();
extern void _ZN7S6950C53v19Ev();
extern void _ZN7S6950C53v20Ev();
static  VTBL_ENTRY vtc_S6950C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6950C5[0]),
  (VTBL_ENTRY)&_ZN7S6950C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6950C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6950C53v17Ev,
  (VTBL_ENTRY)&_ZN7S6950C53v18Ev,
  (VTBL_ENTRY)&_ZN7S6950C53v19Ev,
  (VTBL_ENTRY)&_ZN7S6950C53v20Ev,
};
extern VTBL_ENTRY _ZTI7S6950C5[];
extern  VTBL_ENTRY _ZTV7S6950C5[];
Class_Descriptor cd_S6950C5 = {  "S6950C5", // class name
  0,0,//no base classes
  &(vtc_S6950C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6950C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6950C5),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6950C6  : S6950C2 {
  ::S6950C2 s6950c6f0;
  virtual void  v21(); // _ZN7S6950C63v21Ev
  virtual void  v22(); // _ZN7S6950C63v22Ev
  virtual void  v23(); // _ZN7S6950C63v23Ev
  ~S6950C6(); // tgen
  S6950C6(); // tgen
};
//SIG(-1 S6950C6) C1{ BC2{ v4 v5 v6} v1 v2 v3 FC2}


void  S6950C6 ::v21(){vfunc_called(this, "_ZN7S6950C63v21Ev");}
void  S6950C6 ::v22(){vfunc_called(this, "_ZN7S6950C63v22Ev");}
void  S6950C6 ::v23(){vfunc_called(this, "_ZN7S6950C63v23Ev");}
S6950C6 ::~S6950C6(){ note_dtor("S6950C6", this);} // tgen
S6950C6 ::S6950C6(){ note_ctor("S6950C6", this);} // tgen

static void Test_S6950C6()
{
  extern Class_Descriptor cd_S6950C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6950C6, buf);
    S6950C6 *dp, &lv = *(dp=new (buf) S6950C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6950C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6950C6)");
    check_base_class_offset(lv, (S6950C2*), 0, "S6950C6");
    check_field_offset(lv, s6950c6f0, ABISELECT(8,4), "S6950C6.s6950c6f0");
    test_class_info(&lv, &cd_S6950C6);
    dp->~S6950C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6950C6(Test_S6950C6, "S6950C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6950C6C1Ev();
extern void _ZN7S6950C6D1Ev();
Name_Map name_map_S6950C6[] = {
  NSPAIR(_ZN7S6950C6C1Ev),
  NSPAIR(_ZN7S6950C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6950C2;
extern VTBL_ENTRY _ZTI7S6950C2[];
extern  VTBL_ENTRY _ZTV7S6950C2[];
static Base_Class bases_S6950C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6950C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6950C6[];
extern void _ZN7S6950C22v5Ev();
extern void _ZN7S6950C22v6Ev();
extern void _ZN7S6950C22v7Ev();
extern void _ZN7S6950C63v21Ev();
extern void _ZN7S6950C63v22Ev();
extern void _ZN7S6950C63v23Ev();
static  VTBL_ENTRY vtc_S6950C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6950C6[0]),
  (VTBL_ENTRY)&_ZN7S6950C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6950C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6950C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6950C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6950C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6950C63v23Ev,
};
extern VTBL_ENTRY _ZTI7S6950C6[];
extern  VTBL_ENTRY _ZTV7S6950C6[];
Class_Descriptor cd_S6950C6 = {  "S6950C6", // class name
  bases_S6950C6, 1,
  &(vtc_S6950C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6950C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6950C6),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  S6950C4  : S6950C5 , virtual S6950C6 {
  virtual  ~S6950C4(); // _ZN7S6950C4D2Ev
  virtual void  v15(); // _ZN7S6950C43v15Ev
  virtual void  v16(); // _ZN7S6950C43v16Ev
  S6950C4(); // tgen
};
//SIG(-1 S6950C4) C1{ BC2{ vd v3 v4 v5 v6} VBC3{ BC4{ v7 v8 v9} v10 v11 v12 FC4} vd v1 v2}


 S6950C4 ::~S6950C4(){ note_dtor("S6950C4", this);}
void  S6950C4 ::v15(){vfunc_called(this, "_ZN7S6950C43v15Ev");}
void  S6950C4 ::v16(){vfunc_called(this, "_ZN7S6950C43v16Ev");}
S6950C4 ::S6950C4(){ note_ctor("S6950C4", this);} // tgen

static void Test_S6950C4()
{
  extern Class_Descriptor cd_S6950C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6950C4, buf);
    S6950C4 *dp, &lv = *(dp=new (buf) S6950C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6950C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6950C4)");
    check_base_class_offset(lv, (S6950C5*), 0, "S6950C4");
    check_base_class_offset(lv, (S6950C2*)(S6950C6*), ABISELECT(8,4), "S6950C4");
    check_base_class_offset(lv, (S6950C6*), ABISELECT(8,4), "S6950C4");
    test_class_info(&lv, &cd_S6950C4);
    dp->~S6950C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6950C4(Test_S6950C4, "S6950C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6950C4C1Ev();
extern void _ZN7S6950C4D2Ev();
Name_Map name_map_S6950C4[] = {
  NSPAIR(_ZN7S6950C4C1Ev),
  NSPAIR(_ZN7S6950C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6950C5;
extern VTBL_ENTRY _ZTI7S6950C5[];
extern  VTBL_ENTRY _ZTV7S6950C5[];
extern Class_Descriptor cd_S6950C2;
extern VTBL_ENTRY _ZTI7S6950C2[];
extern  VTBL_ENTRY _ZTV7S6950C2[];
extern Class_Descriptor cd_S6950C6;
extern VTBL_ENTRY _ZTI7S6950C6[];
extern  VTBL_ENTRY _ZTV7S6950C6[];
static Base_Class bases_S6950C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6950C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6950C2,    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_S6950C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6950C4[];
extern void _ZN7S6950C4D1Ev();
extern void _ZN7S6950C4D0Ev();
extern void _ZN7S6950C53v17Ev();
extern void _ZN7S6950C53v18Ev();
extern void _ZN7S6950C53v19Ev();
extern void _ZN7S6950C53v20Ev();
extern void _ZN7S6950C43v15Ev();
extern void _ZN7S6950C43v16Ev();
extern void _ZN7S6950C22v5Ev();
extern void _ZN7S6950C22v6Ev();
extern void _ZN7S6950C22v7Ev();
extern void _ZN7S6950C63v21Ev();
extern void _ZN7S6950C63v22Ev();
extern void _ZN7S6950C63v23Ev();
static  VTBL_ENTRY vtc_S6950C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6950C4[0]),
  (VTBL_ENTRY)&_ZN7S6950C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6950C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6950C53v17Ev,
  (VTBL_ENTRY)&_ZN7S6950C53v18Ev,
  (VTBL_ENTRY)&_ZN7S6950C53v19Ev,
  (VTBL_ENTRY)&_ZN7S6950C53v20Ev,
  (VTBL_ENTRY)&_ZN7S6950C43v15Ev,
  (VTBL_ENTRY)&_ZN7S6950C43v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6950C4[0]),
  (VTBL_ENTRY)&_ZN7S6950C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6950C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6950C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6950C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6950C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6950C63v23Ev,
};
extern VTBL_ENTRY _ZTV7S6950C4[];
static  VTT_ENTRY vtt_S6950C4[] = {
  {&(_ZTV7S6950C4[3]),  3,25},
  {&(_ZTV7S6950C4[19]),  19,25},
};
extern VTBL_ENTRY _ZTI7S6950C4[];
extern  VTBL_ENTRY _ZTV7S6950C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6950C4[];
Class_Descriptor cd_S6950C4 = {  "S6950C4", // class name
  bases_S6950C4, 3,
  &(vtc_S6950C4[0]), // expected_vtbl_contents
  &(vtt_S6950C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6950C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6950C4),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6950C4),2, //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  S6950C1  : S6950C2 , S6950C3 {
  ::S6950C4 s6950c1f0;
  virtual void  v1(); // _ZN7S6950C12v1Ev
  virtual void  v2(); // _ZN7S6950C12v2Ev
  virtual void  v3(); // _ZN7S6950C12v3Ev
  virtual void  v4(); // _ZN7S6950C12v4Ev
  ~S6950C1(); // tgen
  S6950C1(); // tgen
};
//SIG(1 S6950C1) C1{ BC2{ v5 v6 v7} BC3{ v8 v9 v10 v11 v12 v13 v14 FL Fc} v1 v2 v3 v4 FC4{ BC5{ vd v17 v18 v19 v20} VBC6{ BC2 v21 v22 v23 FC2} vd v15 v16}}


void  S6950C1 ::v1(){vfunc_called(this, "_ZN7S6950C12v1Ev");}
void  S6950C1 ::v2(){vfunc_called(this, "_ZN7S6950C12v2Ev");}
void  S6950C1 ::v3(){vfunc_called(this, "_ZN7S6950C12v3Ev");}
void  S6950C1 ::v4(){vfunc_called(this, "_ZN7S6950C12v4Ev");}
S6950C1 ::~S6950C1(){ note_dtor("S6950C1", this);} // tgen
S6950C1 ::S6950C1(){ note_ctor("S6950C1", this);} // tgen

static void Test_S6950C1()
{
  extern Class_Descriptor cd_S6950C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S6950C1, buf);
    S6950C1 *dp, &lv = *(dp=new (buf) S6950C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S6950C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6950C1)");
    check_base_class_offset(lv, (S6950C2*), 0, "S6950C1");
    check_base_class_offset(lv, (S6950C3*), ABISELECT(8,4), "S6950C1");
    check_field_offset(lv, s6950c1f0, ABISELECT(32,20), "S6950C1.s6950c1f0");
    test_class_info(&lv, &cd_S6950C1);
    dp->~S6950C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6950C1(Test_S6950C1, "S6950C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S6950C1C1Ev();
extern void _ZN7S6950C1D1Ev();
Name_Map name_map_S6950C1[] = {
  NSPAIR(_ZN7S6950C1C1Ev),
  NSPAIR(_ZN7S6950C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6950C2;
extern VTBL_ENTRY _ZTI7S6950C2[];
extern  VTBL_ENTRY _ZTV7S6950C2[];
extern Class_Descriptor cd_S6950C3;
extern VTBL_ENTRY _ZTI7S6950C3[];
extern  VTBL_ENTRY _ZTV7S6950C3[];
static Base_Class bases_S6950C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6950C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6950C3,    ABISELECT(8,4), //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 _ZTI7S6950C1[];
extern void _ZN7S6950C22v5Ev();
extern void _ZN7S6950C22v6Ev();
extern void _ZN7S6950C22v7Ev();
extern void _ZN7S6950C12v1Ev();
extern void _ZN7S6950C12v2Ev();
extern void _ZN7S6950C12v3Ev();
extern void _ZN7S6950C12v4Ev();
extern void _ZN7S6950C32v8Ev();
extern void _ZN7S6950C32v9Ev();
extern void _ZN7S6950C33v10Ev();
extern void _ZN7S6950C33v11Ev();
extern void _ZN7S6950C33v12Ev();
extern void _ZN7S6950C33v13Ev();
extern void _ZN7S6950C33v14Ev();
static  VTBL_ENTRY vtc_S6950C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6950C1[0]),
  (VTBL_ENTRY)&_ZN7S6950C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6950C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6950C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6950C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6950C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6950C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6950C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6950C1[0]),
  (VTBL_ENTRY)&_ZN7S6950C32v8Ev,
  (VTBL_ENTRY)&_ZN7S6950C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6950C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S6950C1[];
extern  VTBL_ENTRY _ZTV7S6950C1[];
Class_Descriptor cd_S6950C1 = {  "S6950C1", // class name
  bases_S6950C1, 2,
  &(vtc_S6950C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S6950C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6950C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1363C4  {
  void *s1363c4f0;
  virtual void  v3(); // _ZN7S1363C42v3Ev
  virtual void  v4(); // _ZN7S1363C42v4Ev
  virtual void  v5(); // _ZN7S1363C42v5Ev
  virtual void  v6(); // _ZN7S1363C42v6Ev
  ~S1363C4(); // tgen
  S1363C4(); // tgen
};
//SIG(-1 S1363C4) C1{ v1 v2 v3 v4 Fp}


void  S1363C4 ::v3(){vfunc_called(this, "_ZN7S1363C42v3Ev");}
void  S1363C4 ::v4(){vfunc_called(this, "_ZN7S1363C42v4Ev");}
void  S1363C4 ::v5(){vfunc_called(this, "_ZN7S1363C42v5Ev");}
void  S1363C4 ::v6(){vfunc_called(this, "_ZN7S1363C42v6Ev");}
S1363C4 ::~S1363C4(){ note_dtor("S1363C4", this);} // tgen
S1363C4 ::S1363C4(){ note_ctor("S1363C4", this);} // tgen

static void Test_S1363C4()
{
  extern Class_Descriptor cd_S1363C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1363C4, buf);
    S1363C4 *dp, &lv = *(dp=new (buf) S1363C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1363C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1363C4)");
    check_field_offset(lv, s1363c4f0, ABISELECT(8,4), "S1363C4.s1363c4f0");
    test_class_info(&lv, &cd_S1363C4);
    dp->~S1363C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1363C4(Test_S1363C4, "S1363C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1363C4C1Ev();
extern void _ZN7S1363C4D1Ev();
Name_Map name_map_S1363C4[] = {
  NSPAIR(_ZN7S1363C4C1Ev),
  NSPAIR(_ZN7S1363C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1363C4[];
extern void _ZN7S1363C42v3Ev();
extern void _ZN7S1363C42v4Ev();
extern void _ZN7S1363C42v5Ev();
extern void _ZN7S1363C42v6Ev();
static  VTBL_ENTRY vtc_S1363C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1363C4[0]),
  (VTBL_ENTRY)&_ZN7S1363C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S1363C4[];
extern  VTBL_ENTRY _ZTV7S1363C4[];
Class_Descriptor cd_S1363C4 = {  "S1363C4", // class name
  0,0,//no base classes
  &(vtc_S1363C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1363C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1363C4),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  S1363C3  : S1363C4 {
  void *s1363c3f0;
  __tsi64 s1363c3f1;
  virtual void  v7(); // _ZN7S1363C32v7Ev
  virtual void  v8(); // _ZN7S1363C32v8Ev
  ~S1363C3(); // tgen
  S1363C3(); // tgen
};
//SIG(-1 S1363C3) C1{ BC2{ v3 v4 v5 v6 Fp} v1 v2 Fp FL}


void  S1363C3 ::v7(){vfunc_called(this, "_ZN7S1363C32v7Ev");}
void  S1363C3 ::v8(){vfunc_called(this, "_ZN7S1363C32v8Ev");}
S1363C3 ::~S1363C3(){ note_dtor("S1363C3", this);} // tgen
S1363C3 ::S1363C3(){ note_ctor("S1363C3", this);} // tgen

static void Test_S1363C3()
{
  extern Class_Descriptor cd_S1363C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1363C3, buf);
    S1363C3 *dp, &lv = *(dp=new (buf) S1363C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1363C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1363C3)");
    check_base_class_offset(lv, (S1363C4*), 0, "S1363C3");
    check_field_offset(lv, s1363c3f0, ABISELECT(16,8), "S1363C3.s1363c3f0");
    check_field_offset(lv, s1363c3f1, ABISELECT(24,12), "S1363C3.s1363c3f1");
    test_class_info(&lv, &cd_S1363C3);
    dp->~S1363C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1363C3(Test_S1363C3, "S1363C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1363C3C1Ev();
extern void _ZN7S1363C3D1Ev();
Name_Map name_map_S1363C3[] = {
  NSPAIR(_ZN7S1363C3C1Ev),
  NSPAIR(_ZN7S1363C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1363C4;
extern VTBL_ENTRY _ZTI7S1363C4[];
extern  VTBL_ENTRY _ZTV7S1363C4[];
static Base_Class bases_S1363C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1363C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1363C3[];
extern void _ZN7S1363C42v3Ev();
extern void _ZN7S1363C42v4Ev();
extern void _ZN7S1363C42v5Ev();
extern void _ZN7S1363C42v6Ev();
extern void _ZN7S1363C32v7Ev();
extern void _ZN7S1363C32v8Ev();
static  VTBL_ENTRY vtc_S1363C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1363C3[0]),
  (VTBL_ENTRY)&_ZN7S1363C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1363C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1363C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S1363C3[];
extern  VTBL_ENTRY _ZTV7S1363C3[];
Class_Descriptor cd_S1363C3 = {  "S1363C3", // class name
  bases_S1363C3, 1,
  &(vtc_S1363C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1363C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1363C3),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  S1363C5  : S1363C4 {
  virtual void  v9(); // _ZN7S1363C52v9Ev
  virtual void  v10(); // _ZN7S1363C53v10Ev
  virtual void  v11(); // _ZN7S1363C53v11Ev
  virtual void  v12(); // _ZN7S1363C53v12Ev
  virtual void  v13(); // _ZN7S1363C53v13Ev
  virtual void  v14(); // _ZN7S1363C53v14Ev
  ~S1363C5(); // tgen
  S1363C5(); // tgen
};
//SIG(-1 S1363C5) C1{ BC2{ v7 v8 v9 v10 Fp} v1 v2 v3 v4 v5 v6}


void  S1363C5 ::v9(){vfunc_called(this, "_ZN7S1363C52v9Ev");}
void  S1363C5 ::v10(){vfunc_called(this, "_ZN7S1363C53v10Ev");}
void  S1363C5 ::v11(){vfunc_called(this, "_ZN7S1363C53v11Ev");}
void  S1363C5 ::v12(){vfunc_called(this, "_ZN7S1363C53v12Ev");}
void  S1363C5 ::v13(){vfunc_called(this, "_ZN7S1363C53v13Ev");}
void  S1363C5 ::v14(){vfunc_called(this, "_ZN7S1363C53v14Ev");}
S1363C5 ::~S1363C5(){ note_dtor("S1363C5", this);} // tgen
S1363C5 ::S1363C5(){ note_ctor("S1363C5", this);} // tgen

static void Test_S1363C5()
{
  extern Class_Descriptor cd_S1363C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1363C5, buf);
    S1363C5 *dp, &lv = *(dp=new (buf) S1363C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1363C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1363C5)");
    check_base_class_offset(lv, (S1363C4*), 0, "S1363C5");
    test_class_info(&lv, &cd_S1363C5);
    dp->~S1363C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1363C5(Test_S1363C5, "S1363C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1363C5C1Ev();
extern void _ZN7S1363C5D1Ev();
Name_Map name_map_S1363C5[] = {
  NSPAIR(_ZN7S1363C5C1Ev),
  NSPAIR(_ZN7S1363C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1363C4;
extern VTBL_ENTRY _ZTI7S1363C4[];
extern  VTBL_ENTRY _ZTV7S1363C4[];
static Base_Class bases_S1363C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1363C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1363C5[];
extern void _ZN7S1363C42v3Ev();
extern void _ZN7S1363C42v4Ev();
extern void _ZN7S1363C42v5Ev();
extern void _ZN7S1363C42v6Ev();
extern void _ZN7S1363C52v9Ev();
extern void _ZN7S1363C53v10Ev();
extern void _ZN7S1363C53v11Ev();
extern void _ZN7S1363C53v12Ev();
extern void _ZN7S1363C53v13Ev();
extern void _ZN7S1363C53v14Ev();
static  VTBL_ENTRY vtc_S1363C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1363C5[0]),
  (VTBL_ENTRY)&_ZN7S1363C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1363C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S1363C5[];
extern  VTBL_ENTRY _ZTV7S1363C5[];
Class_Descriptor cd_S1363C5 = {  "S1363C5", // class name
  bases_S1363C5, 1,
  &(vtc_S1363C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1363C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1363C5),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1363C2  : S1363C3 , S1363C5 {
  char s1363c2f0[8];
  long double s1363c2f1;
  virtual  ~S1363C2(); // _ZN7S1363C2D1Ev
  virtual void  v15(); // _ZN7S1363C23v15Ev
  virtual void  v16(); // _ZN7S1363C23v16Ev
  virtual void  v17(); // _ZN7S1363C23v17Ev
  virtual void  v18(); // _ZN7S1363C23v18Ev
  virtual void  v19(); // _ZN7S1363C23v19Ev
  virtual void  v20(); // _ZN7S1363C23v20Ev
  virtual void  v21(); // _ZN7S1363C23v21Ev
  virtual void  v22(); // _ZN7S1363C23v22Ev
  S1363C2(); // tgen
};
//SIG(-1 S1363C2) C1{ BC2{ BC3{ v9 v10 v11 v12 Fp} v13 v14 Fp FL} BC4{ BC3 v15 v16 v17 v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc[8] FD}


 S1363C2 ::~S1363C2(){ note_dtor("S1363C2", this);}
void  S1363C2 ::v15(){vfunc_called(this, "_ZN7S1363C23v15Ev");}
void  S1363C2 ::v16(){vfunc_called(this, "_ZN7S1363C23v16Ev");}
void  S1363C2 ::v17(){vfunc_called(this, "_ZN7S1363C23v17Ev");}
void  S1363C2 ::v18(){vfunc_called(this, "_ZN7S1363C23v18Ev");}
void  S1363C2 ::v19(){vfunc_called(this, "_ZN7S1363C23v19Ev");}
void  S1363C2 ::v20(){vfunc_called(this, "_ZN7S1363C23v20Ev");}
void  S1363C2 ::v21(){vfunc_called(this, "_ZN7S1363C23v21Ev");}
void  S1363C2 ::v22(){vfunc_called(this, "_ZN7S1363C23v22Ev");}
S1363C2 ::S1363C2(){ note_ctor("S1363C2", this);} // tgen

static void Test_S1363C2()
{
  extern Class_Descriptor cd_S1363C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S1363C2, buf);
    S1363C2 *dp, &lv = *(dp=new (buf) S1363C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S1363C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1363C2)");
    check_base_class_offset(lv, (S1363C4*)(S1363C3*), 0, "S1363C2");
    check_base_class_offset(lv, (S1363C3*), 0, "S1363C2");
    check_base_class_offset(lv, (S1363C4*)(S1363C5*), ABISELECT(32,20), "S1363C2");
    check_base_class_offset(lv, (S1363C5*), ABISELECT(32,20), "S1363C2");
    check_field_offset(lv, s1363c2f0, ABISELECT(48,28), "S1363C2.s1363c2f0");
    check_field_offset(lv, s1363c2f1, ABISELECT(64,36), "S1363C2.s1363c2f1");
    test_class_info(&lv, &cd_S1363C2);
    dp->~S1363C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1363C2(Test_S1363C2, "S1363C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S1363C2C1Ev();
extern void _ZN7S1363C2D1Ev();
Name_Map name_map_S1363C2[] = {
  NSPAIR(_ZN7S1363C2C1Ev),
  NSPAIR(_ZN7S1363C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1363C4;
extern VTBL_ENTRY _ZTI7S1363C4[];
extern  VTBL_ENTRY _ZTV7S1363C4[];
extern Class_Descriptor cd_S1363C3;
extern VTBL_ENTRY _ZTI7S1363C3[];
extern  VTBL_ENTRY _ZTV7S1363C3[];
extern Class_Descriptor cd_S1363C4;
extern VTBL_ENTRY _ZTI7S1363C4[];
extern  VTBL_ENTRY _ZTV7S1363C4[];
extern Class_Descriptor cd_S1363C5;
extern VTBL_ENTRY _ZTI7S1363C5[];
extern  VTBL_ENTRY _ZTV7S1363C5[];
static Base_Class bases_S1363C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1363C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1363C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1363C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1363C5,    ABISELECT(32,20), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1363C2[];
extern void _ZN7S1363C42v3Ev();
extern void _ZN7S1363C42v4Ev();
extern void _ZN7S1363C42v5Ev();
extern void _ZN7S1363C42v6Ev();
extern void _ZN7S1363C32v7Ev();
extern void _ZN7S1363C32v8Ev();
extern void _ZN7S1363C2D1Ev();
extern void _ZN7S1363C2D0Ev();
extern void _ZN7S1363C23v15Ev();
extern void _ZN7S1363C23v16Ev();
extern void _ZN7S1363C23v17Ev();
extern void _ZN7S1363C23v18Ev();
extern void _ZN7S1363C23v19Ev();
extern void _ZN7S1363C23v20Ev();
extern void _ZN7S1363C23v21Ev();
extern void _ZN7S1363C23v22Ev();
extern void _ZN7S1363C42v3Ev();
extern void _ZN7S1363C42v4Ev();
extern void _ZN7S1363C42v5Ev();
extern void _ZN7S1363C42v6Ev();
extern void _ZN7S1363C52v9Ev();
extern void _ZN7S1363C53v10Ev();
extern void _ZN7S1363C53v11Ev();
extern void _ZN7S1363C53v12Ev();
extern void _ZN7S1363C53v13Ev();
extern void _ZN7S1363C53v14Ev();
static  VTBL_ENTRY vtc_S1363C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1363C2[0]),
  (VTBL_ENTRY)&_ZN7S1363C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1363C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1363C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1363C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1363C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v22Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1363C2[0]),
  (VTBL_ENTRY)&_ZN7S1363C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1363C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S1363C2[];
extern  VTBL_ENTRY _ZTV7S1363C2[];
Class_Descriptor cd_S1363C2 = {  "S1363C2", // class name
  bases_S1363C2, 4,
  &(vtc_S1363C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S1363C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1363C2),30, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1363C1  : S1363C2 {
  short s1363c1f0;
  virtual void  v1(); // _ZN7S1363C12v1Ev
  virtual void  v2(); // _ZN7S1363C12v2Ev
  ~S1363C1(); // tgen
  S1363C1(); // tgen
};
//SIG(1 S1363C1) C1{ BC2{ BC3{ BC4{ v3 v4 v5 v6 Fp} v7 v8 Fp FL} BC5{ BC4 v9 v10 v11 v12 v13 v14} vd v15 v16 v17 v18 v19 v20 v21 v22 Fc[8] FD} v1 v2 Fs}


void  S1363C1 ::v1(){vfunc_called(this, "_ZN7S1363C12v1Ev");}
void  S1363C1 ::v2(){vfunc_called(this, "_ZN7S1363C12v2Ev");}
S1363C1 ::~S1363C1(){ note_dtor("S1363C1", this);} // tgen
S1363C1 ::S1363C1(){ note_ctor("S1363C1", this);} // tgen

static void Test_S1363C1()
{
  extern Class_Descriptor cd_S1363C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S1363C1, buf);
    S1363C1 *dp, &lv = *(dp=new (buf) S1363C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S1363C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1363C1)");
    check_base_class_offset(lv, (S1363C4*)(S1363C3*)(S1363C2*), 0, "S1363C1");
    check_base_class_offset(lv, (S1363C3*)(S1363C2*), 0, "S1363C1");
    check_base_class_offset(lv, (S1363C4*)(S1363C5*)(S1363C2*), ABISELECT(32,20), "S1363C1");
    check_base_class_offset(lv, (S1363C5*)(S1363C2*), ABISELECT(32,20), "S1363C1");
    check_base_class_offset(lv, (S1363C2*), 0, "S1363C1");
    check_field_offset(lv, s1363c1f0, ABISELECT(80,48), "S1363C1.s1363c1f0");
    test_class_info(&lv, &cd_S1363C1);
    dp->~S1363C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1363C1(Test_S1363C1, "S1363C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S1363C1C1Ev();
extern void _ZN7S1363C1D1Ev();
Name_Map name_map_S1363C1[] = {
  NSPAIR(_ZN7S1363C1C1Ev),
  NSPAIR(_ZN7S1363C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1363C4;
extern VTBL_ENTRY _ZTI7S1363C4[];
extern  VTBL_ENTRY _ZTV7S1363C4[];
extern Class_Descriptor cd_S1363C3;
extern VTBL_ENTRY _ZTI7S1363C3[];
extern  VTBL_ENTRY _ZTV7S1363C3[];
extern Class_Descriptor cd_S1363C4;
extern VTBL_ENTRY _ZTI7S1363C4[];
extern  VTBL_ENTRY _ZTV7S1363C4[];
extern Class_Descriptor cd_S1363C5;
extern VTBL_ENTRY _ZTI7S1363C5[];
extern  VTBL_ENTRY _ZTV7S1363C5[];
extern Class_Descriptor cd_S1363C2;
extern VTBL_ENTRY _ZTI7S1363C2[];
extern  VTBL_ENTRY _ZTV7S1363C2[];
static Base_Class bases_S1363C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1363C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1363C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1363C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1363C5,    ABISELECT(32,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1363C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1363C1[];
extern void _ZN7S1363C42v3Ev();
extern void _ZN7S1363C42v4Ev();
extern void _ZN7S1363C42v5Ev();
extern void _ZN7S1363C42v6Ev();
extern void _ZN7S1363C32v7Ev();
extern void _ZN7S1363C32v8Ev();
extern void _ZN7S1363C1D1Ev();
extern void _ZN7S1363C1D0Ev();
extern void _ZN7S1363C23v15Ev();
extern void _ZN7S1363C23v16Ev();
extern void _ZN7S1363C23v17Ev();
extern void _ZN7S1363C23v18Ev();
extern void _ZN7S1363C23v19Ev();
extern void _ZN7S1363C23v20Ev();
extern void _ZN7S1363C23v21Ev();
extern void _ZN7S1363C23v22Ev();
extern void _ZN7S1363C12v1Ev();
extern void _ZN7S1363C12v2Ev();
extern void _ZN7S1363C42v3Ev();
extern void _ZN7S1363C42v4Ev();
extern void _ZN7S1363C42v5Ev();
extern void _ZN7S1363C42v6Ev();
extern void _ZN7S1363C52v9Ev();
extern void _ZN7S1363C53v10Ev();
extern void _ZN7S1363C53v11Ev();
extern void _ZN7S1363C53v12Ev();
extern void _ZN7S1363C53v13Ev();
extern void _ZN7S1363C53v14Ev();
static  VTBL_ENTRY vtc_S1363C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1363C1[0]),
  (VTBL_ENTRY)&_ZN7S1363C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1363C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1363C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1363C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1363C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1363C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1363C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1363C12v2Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1363C1[0]),
  (VTBL_ENTRY)&_ZN7S1363C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1363C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1363C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S1363C1[];
extern  VTBL_ENTRY _ZTV7S1363C1[];
Class_Descriptor cd_S1363C1 = {  "S1363C1", // class name
  bases_S1363C1, 5,
  &(vtc_S1363C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S1363C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1363C1),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7157C2  {
  virtual void  v8(); // _ZN7S7157C22v8Ev
  virtual void  v9(); // _ZN7S7157C22v9Ev
  virtual void  v10(); // _ZN7S7157C23v10Ev
  ~S7157C2(); // tgen
  S7157C2(); // tgen
};
//SIG(-1 S7157C2) C1{ v1 v2 v3}


void  S7157C2 ::v8(){vfunc_called(this, "_ZN7S7157C22v8Ev");}
void  S7157C2 ::v9(){vfunc_called(this, "_ZN7S7157C22v9Ev");}
void  S7157C2 ::v10(){vfunc_called(this, "_ZN7S7157C23v10Ev");}
S7157C2 ::~S7157C2(){ note_dtor("S7157C2", this);} // tgen
S7157C2 ::S7157C2(){ note_ctor("S7157C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7157C2C1Ev();
extern void _ZN7S7157C2D1Ev();
Name_Map name_map_S7157C2[] = {
  NSPAIR(_ZN7S7157C2C1Ev),
  NSPAIR(_ZN7S7157C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7157C2[];
extern void _ZN7S7157C22v8Ev();
extern void _ZN7S7157C22v9Ev();
extern void _ZN7S7157C23v10Ev();
static  VTBL_ENTRY vtc_S7157C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7157C2[0]),
  (VTBL_ENTRY)&_ZN7S7157C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7157C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7157C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7157C2[];
extern  VTBL_ENTRY _ZTV7S7157C2[];
Class_Descriptor cd_S7157C2 = {  "S7157C2", // class name
  0,0,//no base classes
  &(vtc_S7157C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7157C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7157C2),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  S7157C4  {
  virtual void  v11(); // _ZN7S7157C43v11Ev
  virtual void  v12(); // _ZN7S7157C43v12Ev
  virtual void  v13(); // _ZN7S7157C43v13Ev
  virtual void  v14(); // _ZN7S7157C43v14Ev
  ~S7157C4(); // tgen
  S7157C4(); // tgen
};
//SIG(-1 S7157C4) C1{ v1 v2 v3 v4}


void  S7157C4 ::v11(){vfunc_called(this, "_ZN7S7157C43v11Ev");}
void  S7157C4 ::v12(){vfunc_called(this, "_ZN7S7157C43v12Ev");}
void  S7157C4 ::v13(){vfunc_called(this, "_ZN7S7157C43v13Ev");}
void  S7157C4 ::v14(){vfunc_called(this, "_ZN7S7157C43v14Ev");}
S7157C4 ::~S7157C4(){ note_dtor("S7157C4", this);} // tgen
S7157C4 ::S7157C4(){ note_ctor("S7157C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7157C4C1Ev();
extern void _ZN7S7157C4D1Ev();
Name_Map name_map_S7157C4[] = {
  NSPAIR(_ZN7S7157C4C1Ev),
  NSPAIR(_ZN7S7157C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7157C4[];
extern void _ZN7S7157C43v11Ev();
extern void _ZN7S7157C43v12Ev();
extern void _ZN7S7157C43v13Ev();
extern void _ZN7S7157C43v14Ev();
static  VTBL_ENTRY vtc_S7157C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7157C4[0]),
  (VTBL_ENTRY)&_ZN7S7157C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S7157C4[];
extern  VTBL_ENTRY _ZTV7S7157C4[];
Class_Descriptor cd_S7157C4 = {  "S7157C4", // class name
  0,0,//no base classes
  &(vtc_S7157C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7157C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7157C4),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  S7157C5  {
  void *s7157c5f0;
  virtual void  v15(); // _ZN7S7157C53v15Ev
  virtual void  v16(); // _ZN7S7157C53v16Ev
  virtual void  v17(); // _ZN7S7157C53v17Ev
  virtual void  v18(); // _ZN7S7157C53v18Ev
  ~S7157C5(); // tgen
  S7157C5(); // tgen
};
//SIG(-1 S7157C5) C1{ v1 v2 v3 v4 Fp}


void  S7157C5 ::v15(){vfunc_called(this, "_ZN7S7157C53v15Ev");}
void  S7157C5 ::v16(){vfunc_called(this, "_ZN7S7157C53v16Ev");}
void  S7157C5 ::v17(){vfunc_called(this, "_ZN7S7157C53v17Ev");}
void  S7157C5 ::v18(){vfunc_called(this, "_ZN7S7157C53v18Ev");}
S7157C5 ::~S7157C5(){ note_dtor("S7157C5", this);} // tgen
S7157C5 ::S7157C5(){ note_ctor("S7157C5", this);} // tgen

static void Test_S7157C5()
{
  extern Class_Descriptor cd_S7157C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7157C5, buf);
    S7157C5 *dp, &lv = *(dp=new (buf) S7157C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7157C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7157C5)");
    check_field_offset(lv, s7157c5f0, ABISELECT(8,4), "S7157C5.s7157c5f0");
    test_class_info(&lv, &cd_S7157C5);
    dp->~S7157C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7157C5(Test_S7157C5, "S7157C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7157C5C1Ev();
extern void _ZN7S7157C5D1Ev();
Name_Map name_map_S7157C5[] = {
  NSPAIR(_ZN7S7157C5C1Ev),
  NSPAIR(_ZN7S7157C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7157C5[];
extern void _ZN7S7157C53v15Ev();
extern void _ZN7S7157C53v16Ev();
extern void _ZN7S7157C53v17Ev();
extern void _ZN7S7157C53v18Ev();
static  VTBL_ENTRY vtc_S7157C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7157C5[0]),
  (VTBL_ENTRY)&_ZN7S7157C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v18Ev,
};
extern VTBL_ENTRY _ZTI7S7157C5[];
extern  VTBL_ENTRY _ZTV7S7157C5[];
Class_Descriptor cd_S7157C5 = {  "S7157C5", // class name
  0,0,//no base classes
  &(vtc_S7157C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7157C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7157C5),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  S7157C3  : virtual S7157C4 , virtual S7157C5 {
  long s7157c3f0[2];
  int s7157c3f1;
  virtual void  v19(); // _ZN7S7157C33v19Ev
  virtual void  v20(); // _ZN7S7157C33v20Ev
  virtual void  v21(); // _ZN7S7157C33v21Ev
  virtual void  v22(); // _ZN7S7157C33v22Ev
  virtual void  v23(); // _ZN7S7157C33v23Ev
  ~S7157C3(); // tgen
  S7157C3(); // tgen
};
//SIG(-1 S7157C3) C1{ VBC2{ v6 v7 v8 v9} VBC3{ v10 v11 v12 v13 Fp} v1 v2 v3 v4 v5 Fl[2] Fi}


void  S7157C3 ::v19(){vfunc_called(this, "_ZN7S7157C33v19Ev");}
void  S7157C3 ::v20(){vfunc_called(this, "_ZN7S7157C33v20Ev");}
void  S7157C3 ::v21(){vfunc_called(this, "_ZN7S7157C33v21Ev");}
void  S7157C3 ::v22(){vfunc_called(this, "_ZN7S7157C33v22Ev");}
void  S7157C3 ::v23(){vfunc_called(this, "_ZN7S7157C33v23Ev");}
S7157C3 ::~S7157C3(){ note_dtor("S7157C3", this);} // tgen
S7157C3 ::S7157C3(){ note_ctor("S7157C3", this);} // tgen

static void Test_S7157C3()
{
  extern Class_Descriptor cd_S7157C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7157C3, buf);
    S7157C3 *dp, &lv = *(dp=new (buf) S7157C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7157C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7157C3)");
    check_base_class_offset(lv, (S7157C4*), 0, "S7157C3");
    check_base_class_offset(lv, (S7157C5*), ABISELECT(32,16), "S7157C3");
    check_field_offset(lv, s7157c3f0, ABISELECT(8,4), "S7157C3.s7157c3f0");
    check_field_offset(lv, s7157c3f1, ABISELECT(24,12), "S7157C3.s7157c3f1");
    test_class_info(&lv, &cd_S7157C3);
    dp->~S7157C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7157C3(Test_S7157C3, "S7157C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7157C3C1Ev();
extern void _ZN7S7157C3D1Ev();
Name_Map name_map_S7157C3[] = {
  NSPAIR(_ZN7S7157C3C1Ev),
  NSPAIR(_ZN7S7157C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7157C4;
extern VTBL_ENTRY _ZTI7S7157C4[];
extern  VTBL_ENTRY _ZTV7S7157C4[];
extern Class_Descriptor cd_S7157C5;
extern VTBL_ENTRY _ZTI7S7157C5[];
extern  VTBL_ENTRY _ZTV7S7157C5[];
static Base_Class bases_S7157C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7157C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7157C5,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7157C3[];
extern void _ZN7S7157C43v11Ev();
extern void _ZN7S7157C43v12Ev();
extern void _ZN7S7157C43v13Ev();
extern void _ZN7S7157C43v14Ev();
extern void _ZN7S7157C33v19Ev();
extern void _ZN7S7157C33v20Ev();
extern void _ZN7S7157C33v21Ev();
extern void _ZN7S7157C33v22Ev();
extern void _ZN7S7157C33v23Ev();
extern void _ZN7S7157C53v15Ev();
extern void _ZN7S7157C53v16Ev();
extern void _ZN7S7157C53v17Ev();
extern void _ZN7S7157C53v18Ev();
static  VTBL_ENTRY vtc_S7157C3[] = {
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7157C3[0]),
  (VTBL_ENTRY)&_ZN7S7157C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7157C3[0]),
  (VTBL_ENTRY)&_ZN7S7157C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v18Ev,
};
extern VTBL_ENTRY _ZTV7S7157C3[];
static  VTT_ENTRY vtt_S7157C3[] = {
  {&(_ZTV7S7157C3[8]),  8,27},
  {&(_ZTV7S7157C3[8]),  8,27},
  {&(_ZTV7S7157C3[23]),  23,27},
};
extern VTBL_ENTRY _ZTI7S7157C3[];
extern  VTBL_ENTRY _ZTV7S7157C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7157C3[];
Class_Descriptor cd_S7157C3 = {  "S7157C3", // class name
  bases_S7157C3, 2,
  &(vtc_S7157C3[0]), // expected_vtbl_contents
  &(vtt_S7157C3[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7157C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7157C3),27, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7157C3),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  S7157C1  : S7157C2 , virtual S7157C3 {
  int s7157c1f0;
  __tsi64 s7157c1f1:33;
  virtual void  v1(); // _ZN7S7157C12v1Ev
  virtual void  v2(); // _ZN7S7157C12v2Ev
  virtual void  v3(); // _ZN7S7157C12v3Ev
  virtual void  v4(); // _ZN7S7157C12v4Ev
  virtual void  v5(); // _ZN7S7157C12v5Ev
  virtual void  v6(); // _ZN7S7157C12v6Ev
  virtual void  v7(); // _ZN7S7157C12v7Ev
  ~S7157C1(); // tgen
  S7157C1(); // tgen
};
//SIG(1 S7157C1) C1{ BC2{ v8 v9 v10} VBC3{ VBC4{ v11 v12 v13 v14} VBC5{ v15 v16 v17 v18 Fp} v19 v20 v21 v22 v23 Fl[2] Fi} v1 v2 v3 v4 v5 v6 v7 Fi FL:33}


void  S7157C1 ::v1(){vfunc_called(this, "_ZN7S7157C12v1Ev");}
void  S7157C1 ::v2(){vfunc_called(this, "_ZN7S7157C12v2Ev");}
void  S7157C1 ::v3(){vfunc_called(this, "_ZN7S7157C12v3Ev");}
void  S7157C1 ::v4(){vfunc_called(this, "_ZN7S7157C12v4Ev");}
void  S7157C1 ::v5(){vfunc_called(this, "_ZN7S7157C12v5Ev");}
void  S7157C1 ::v6(){vfunc_called(this, "_ZN7S7157C12v6Ev");}
void  S7157C1 ::v7(){vfunc_called(this, "_ZN7S7157C12v7Ev");}
S7157C1 ::~S7157C1(){ note_dtor("S7157C1", this);} // tgen
S7157C1 ::S7157C1(){ note_ctor("S7157C1", this);} // tgen

static void Test_S7157C1()
{
  extern Class_Descriptor cd_S7157C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S7157C1, buf);
    S7157C1 *dp, &lv = *(dp=new (buf) S7157C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S7157C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7157C1)");
    check_base_class_offset(lv, (S7157C2*), 0, "S7157C1");
    check_base_class_offset(lv, (S7157C4*)(S7157C3*), ABISELECT(24,16), "S7157C1");
    check_base_class_offset(lv, (S7157C5*)(S7157C3*), ABISELECT(56,32), "S7157C1");
    check_base_class_offset(lv, (S7157C3*), ABISELECT(24,16), "S7157C1");
    check_field_offset(lv, s7157c1f0, ABISELECT(8,4), "S7157C1.s7157c1f0");
    set_bf_and_test(lv, s7157c1f1, ABISELECT(16,8), 0, 33, 1, "S7157C1");
    set_bf_and_test(lv, s7157c1f1, ABISELECT(16,8), 0, 33, hide_sll(1LL<<32), "S7157C1");
    test_class_info(&lv, &cd_S7157C1);
    dp->~S7157C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7157C1(Test_S7157C1, "S7157C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S7157C1C1Ev();
extern void _ZN7S7157C1D1Ev();
Name_Map name_map_S7157C1[] = {
  NSPAIR(_ZN7S7157C1C1Ev),
  NSPAIR(_ZN7S7157C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7157C2;
extern VTBL_ENTRY _ZTI7S7157C2[];
extern  VTBL_ENTRY _ZTV7S7157C2[];
extern Class_Descriptor cd_S7157C4;
extern VTBL_ENTRY _ZTI7S7157C4[];
extern  VTBL_ENTRY _ZTV7S7157C4[];
extern Class_Descriptor cd_S7157C5;
extern VTBL_ENTRY _ZTI7S7157C5[];
extern  VTBL_ENTRY _ZTV7S7157C5[];
extern Class_Descriptor cd_S7157C3;
extern VTBL_ENTRY _ZTI7S7157C3[];
extern  VTBL_ENTRY _ZTV7S7157C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7157C3[];
static Base_Class bases_S7157C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7157C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7157C4,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7157C5,    ABISELECT(56,32), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7157C3,    ABISELECT(24,16), //bcp->offset
    15, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7157C1[];
extern void _ZN7S7157C22v8Ev();
extern void _ZN7S7157C22v9Ev();
extern void _ZN7S7157C23v10Ev();
extern void _ZN7S7157C12v1Ev();
extern void _ZN7S7157C12v2Ev();
extern void _ZN7S7157C12v3Ev();
extern void _ZN7S7157C12v4Ev();
extern void _ZN7S7157C12v5Ev();
extern void _ZN7S7157C12v6Ev();
extern void _ZN7S7157C12v7Ev();
extern void _ZN7S7157C43v11Ev();
extern void _ZN7S7157C43v12Ev();
extern void _ZN7S7157C43v13Ev();
extern void _ZN7S7157C43v14Ev();
extern void _ZN7S7157C33v19Ev();
extern void _ZN7S7157C33v20Ev();
extern void _ZN7S7157C33v21Ev();
extern void _ZN7S7157C33v22Ev();
extern void _ZN7S7157C33v23Ev();
extern void _ZN7S7157C53v15Ev();
extern void _ZN7S7157C53v16Ev();
extern void _ZN7S7157C53v17Ev();
extern void _ZN7S7157C53v18Ev();
static  VTBL_ENTRY vtc_S7157C1[] = {
  ABISELECT(56,32),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7157C1[0]),
  (VTBL_ENTRY)&_ZN7S7157C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7157C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7157C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7157C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7157C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7157C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7157C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7157C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7157C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7157C12v7Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7157C1[0]),
  (VTBL_ENTRY)&_ZN7S7157C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v23Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7157C1[0]),
  (VTBL_ENTRY)&_ZN7S7157C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v18Ev,
};
extern VTBL_ENTRY _ZTV7S7157C1[];
extern void _ZN7S7157C43v11Ev();
extern void _ZN7S7157C43v12Ev();
extern void _ZN7S7157C43v13Ev();
extern void _ZN7S7157C43v14Ev();
extern void _ZN7S7157C33v19Ev();
extern void _ZN7S7157C33v20Ev();
extern void _ZN7S7157C33v21Ev();
extern void _ZN7S7157C33v22Ev();
extern void _ZN7S7157C33v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7157C3__7S7157C1[] = {
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7157C3[0]),
  (VTBL_ENTRY)&_ZN7S7157C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7157C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7157C33v23Ev,
};
extern void _ZN7S7157C53v15Ev();
extern void _ZN7S7157C53v16Ev();
extern void _ZN7S7157C53v17Ev();
extern void _ZN7S7157C53v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7157C5__7S7157C3__7S7157C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7157C3[0]),
  (VTBL_ENTRY)&_ZN7S7157C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7157C53v18Ev,
};
static  VTT_ENTRY vtt_S7157C1[] = {
  {&(_ZTV7S7157C1[5]),  5,47},
  {&(_ZTV7S7157C1[28]),  28,47},
  {&(_ZTV7S7157C1[28]),  28,47},
  {&(_ZTV7S7157C1[43]),  43,47},
  {&(_tg__ZTV7S7157C3__7S7157C1[8]),  8,17},
  {&(_tg__ZTV7S7157C3__7S7157C1[8]),  8,17},
  {&(_tg__ZTV7S7157C5__7S7157C3__7S7157C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7157C1[];
extern  VTBL_ENTRY _ZTV7S7157C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7157C1[];
Class_Descriptor cd_S7157C1 = {  "S7157C1", // class name
  bases_S7157C1, 4,
  &(vtc_S7157C1[0]), // expected_vtbl_contents
  &(vtt_S7157C1[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S7157C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7157C1),47, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7157C1),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21088C4  {
  virtual void  v6(); // _ZN8S21088C42v6Ev
  virtual void  v7(); // _ZN8S21088C42v7Ev
  virtual void  v8(); // _ZN8S21088C42v8Ev
  ~S21088C4(); // tgen
  S21088C4(); // tgen
};
//SIG(-1 S21088C4) C1{ v1 v2 v3}


void  S21088C4 ::v6(){vfunc_called(this, "_ZN8S21088C42v6Ev");}
void  S21088C4 ::v7(){vfunc_called(this, "_ZN8S21088C42v7Ev");}
void  S21088C4 ::v8(){vfunc_called(this, "_ZN8S21088C42v8Ev");}
S21088C4 ::~S21088C4(){ note_dtor("S21088C4", this);} // tgen
S21088C4 ::S21088C4(){ note_ctor("S21088C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S21088C4C1Ev();
extern void _ZN8S21088C4D1Ev();
Name_Map name_map_S21088C4[] = {
  NSPAIR(_ZN8S21088C4C1Ev),
  NSPAIR(_ZN8S21088C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21088C4[];
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
static  VTBL_ENTRY vtc_S21088C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21088C4[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S21088C4[];
extern  VTBL_ENTRY _ZTV8S21088C4[];
Class_Descriptor cd_S21088C4 = {  "S21088C4", // class name
  0,0,//no base classes
  &(vtc_S21088C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21088C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21088C4),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  S21088C3_nt  : virtual S21088C4 {
  virtual void  v9(); // _ZN11S21088C3_nt2v9Ev
  ~S21088C3_nt(); // tgen
  S21088C3_nt(); // tgen
};
//SIG(-1 S21088C3_nt) C1{ VBC2{ v2 v3 v4} v1}


void  S21088C3_nt ::v9(){vfunc_called(this, "_ZN11S21088C3_nt2v9Ev");}
S21088C3_nt ::~S21088C3_nt(){ note_dtor("S21088C3_nt", this);} // tgen
S21088C3_nt ::S21088C3_nt(){ note_ctor("S21088C3_nt", this);} // tgen

//skip512 S21088C3_nt

#else // __cplusplus

extern void _ZN11S21088C3_ntC1Ev();
extern void _ZN11S21088C3_ntD1Ev();
Name_Map name_map_S21088C3_nt[] = {
  NSPAIR(_ZN11S21088C3_ntC1Ev),
  NSPAIR(_ZN11S21088C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21088C4;
extern VTBL_ENTRY _ZTI8S21088C4[];
extern  VTBL_ENTRY _ZTV8S21088C4[];
static Base_Class bases_S21088C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21088C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S21088C3_nt[];
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
static  VTBL_ENTRY vtc_S21088C3_nt[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S21088C3_nt[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
};
extern VTBL_ENTRY _ZTV11S21088C3_nt[];
static  VTT_ENTRY vtt_S21088C3_nt[] = {
  {&(_ZTV11S21088C3_nt[6]),  6,10},
  {&(_ZTV11S21088C3_nt[6]),  6,10},
};
extern VTBL_ENTRY _ZTI11S21088C3_nt[];
VTBL_ENTRY *P__ZTI11S21088C3_nt = _ZTI11S21088C3_nt; 
extern  VTBL_ENTRY _ZTV11S21088C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S21088C3_nt[];
Class_Descriptor cd_S21088C3_nt = {  "S21088C3_nt", // class name
  bases_S21088C3_nt, 1,
  &(vtc_S21088C3_nt[0]), // expected_vtbl_contents
  &(vtt_S21088C3_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S21088C3_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S21088C3_nt),10, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S21088C3_nt),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21088C2_nt  : virtual S21088C3_nt {
  void *s21088c2f0;
  virtual void  v10(); // _ZN11S21088C2_nt3v10Ev
  virtual void  v11(); // _ZN11S21088C2_nt3v11Ev
  ~S21088C2_nt(); // tgen
  S21088C2_nt(); // tgen
};
//SIG(-1 S21088C2_nt) C1{ VBC2{ VBC3{ v3 v4 v5} v6} v1 v2 Fp}


void  S21088C2_nt ::v10(){vfunc_called(this, "_ZN11S21088C2_nt3v10Ev");}
void  S21088C2_nt ::v11(){vfunc_called(this, "_ZN11S21088C2_nt3v11Ev");}
S21088C2_nt ::~S21088C2_nt(){ note_dtor("S21088C2_nt", this);} // tgen
S21088C2_nt ::S21088C2_nt(){ note_ctor("S21088C2_nt", this);} // tgen

//skip512 S21088C2_nt

#else // __cplusplus

extern void _ZN11S21088C2_ntC1Ev();
extern void _ZN11S21088C2_ntD1Ev();
Name_Map name_map_S21088C2_nt[] = {
  NSPAIR(_ZN11S21088C2_ntC1Ev),
  NSPAIR(_ZN11S21088C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21088C4;
extern VTBL_ENTRY _ZTI8S21088C4[];
extern  VTBL_ENTRY _ZTV8S21088C4[];
extern Class_Descriptor cd_S21088C3_nt;
extern VTBL_ENTRY _ZTI11S21088C3_nt[];
extern  VTBL_ENTRY _ZTV11S21088C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S21088C3_nt[];
static Base_Class bases_S21088C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21088C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21088C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S21088C2_nt[];
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
extern void _ZN11S21088C2_nt3v10Ev();
extern void _ZN11S21088C2_nt3v11Ev();
static  VTBL_ENTRY vtc_S21088C2_nt[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S21088C2_nt[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21088C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21088C2_nt3v11Ev,
};
extern VTBL_ENTRY _ZTV11S21088C2_nt[];
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
static  VTBL_ENTRY _tg__ZTV11S21088C3_nt__11S21088C2_nt[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S21088C3_nt[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
};
static  VTT_ENTRY vtt_S21088C2_nt[] = {
  {&(_ZTV11S21088C2_nt[8]),  8,14},
  {&(_ZTV11S21088C2_nt[8]),  8,14},
  {&(_ZTV11S21088C2_nt[8]),  8,14},
  {&(_tg__ZTV11S21088C3_nt__11S21088C2_nt[6]),  6,10},
  {&(_tg__ZTV11S21088C3_nt__11S21088C2_nt[6]),  6,10},
};
extern VTBL_ENTRY _ZTI11S21088C2_nt[];
VTBL_ENTRY *P__ZTI11S21088C2_nt = _ZTI11S21088C2_nt; 
extern  VTBL_ENTRY _ZTV11S21088C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S21088C2_nt[];
Class_Descriptor cd_S21088C2_nt = {  "S21088C2_nt", // class name
  bases_S21088C2_nt, 2,
  &(vtc_S21088C2_nt[0]), // expected_vtbl_contents
  &(vtt_S21088C2_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S21088C2_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S21088C2_nt),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S21088C2_nt),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21088C5  : S21088C3_nt {
  ::S20092C8 s21088c5f0;
  void *s21088c5f1;
  virtual void  v12(); // _ZN8S21088C53v12Ev
  virtual void  v13(); // _ZN8S21088C53v13Ev
  virtual void  v14(); // _ZN8S21088C53v14Ev
  virtual void  v15(); // _ZN8S21088C53v15Ev
  ~S21088C5(); // tgen
  S21088C5(); // tgen
};
//SIG(-1 S21088C5) C1{ BC2{ VBC3{ v5 v6 v7} v8} v1 v2 v3 v4 FC4{ v9 v10 v11 v12 Fp} Fp}


void  S21088C5 ::v12(){vfunc_called(this, "_ZN8S21088C53v12Ev");}
void  S21088C5 ::v13(){vfunc_called(this, "_ZN8S21088C53v13Ev");}
void  S21088C5 ::v14(){vfunc_called(this, "_ZN8S21088C53v14Ev");}
void  S21088C5 ::v15(){vfunc_called(this, "_ZN8S21088C53v15Ev");}
S21088C5 ::~S21088C5(){ note_dtor("S21088C5", this);} // tgen
S21088C5 ::S21088C5(){ note_ctor("S21088C5", this);} // tgen

static void Test_S21088C5()
{
  extern Class_Descriptor cd_S21088C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21088C5, buf);
    S21088C5 *dp, &lv = *(dp=new (buf) S21088C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21088C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21088C5)");
    check_base_class_offset(lv, (S21088C4*)(S21088C3_nt*), 0, "S21088C5");
    check_base_class_offset(lv, (S21088C3_nt*), 0, "S21088C5");
    check_field_offset(lv, s21088c5f0, ABISELECT(8,4), "S21088C5.s21088c5f0");
    check_field_offset(lv, s21088c5f1, ABISELECT(24,12), "S21088C5.s21088c5f1");
    test_class_info(&lv, &cd_S21088C5);
    dp->~S21088C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21088C5(Test_S21088C5, "S21088C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21088C5C1Ev();
extern void _ZN8S21088C5D1Ev();
Name_Map name_map_S21088C5[] = {
  NSPAIR(_ZN8S21088C5C1Ev),
  NSPAIR(_ZN8S21088C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21088C4;
extern VTBL_ENTRY _ZTI8S21088C4[];
extern  VTBL_ENTRY _ZTV8S21088C4[];
extern Class_Descriptor cd_S21088C3_nt;
extern VTBL_ENTRY _ZTI11S21088C3_nt[];
extern  VTBL_ENTRY _ZTV11S21088C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S21088C3_nt[];
static Base_Class bases_S21088C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21088C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21088C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21088C5[];
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
extern void _ZN8S21088C53v12Ev();
extern void _ZN8S21088C53v13Ev();
extern void _ZN8S21088C53v14Ev();
extern void _ZN8S21088C53v15Ev();
static  VTBL_ENTRY vtc_S21088C5[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21088C5[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S21088C53v12Ev,
  (VTBL_ENTRY)&_ZN8S21088C53v13Ev,
  (VTBL_ENTRY)&_ZN8S21088C53v14Ev,
  (VTBL_ENTRY)&_ZN8S21088C53v15Ev,
};
extern VTBL_ENTRY _ZTV8S21088C5[];
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
static  VTBL_ENTRY _tg__ZTV11S21088C3_nt__8S21088C5[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S21088C3_nt[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
};
static  VTT_ENTRY vtt_S21088C5[] = {
  {&(_ZTV8S21088C5[6]),  6,14},
  {&(_tg__ZTV11S21088C3_nt__8S21088C5[6]),  6,10},
  {&(_tg__ZTV11S21088C3_nt__8S21088C5[6]),  6,10},
  {&(_ZTV8S21088C5[6]),  6,14},
};
extern VTBL_ENTRY _ZTI8S21088C5[];
extern  VTBL_ENTRY _ZTV8S21088C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21088C5[];
Class_Descriptor cd_S21088C5 = {  "S21088C5", // class name
  bases_S21088C5, 2,
  &(vtc_S21088C5[0]), // expected_vtbl_contents
  &(vtt_S21088C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21088C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S21088C5),14, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21088C5),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21088C1  : virtual S21088C2_nt {
  char  :0;
  int s21088c1f1;
  void *s21088c1f2[2];
  long double s21088c1f3;
  ::S21088C5 s21088c1f4;
  virtual void  v1(); // _ZN8S21088C12v1Ev
  virtual void  v2(); // _ZN8S21088C12v2Ev
  virtual void  v3(); // _ZN8S21088C12v3Ev
  virtual void  v4(); // _ZN8S21088C12v4Ev
  virtual void  v5(); // _ZN8S21088C12v5Ev
  ~S21088C1(); // tgen
  S21088C1(); // tgen
};
//SIG(1 S21088C1) C1{ VBC2{ VBC3{ VBC4{ v6 v7 v8} v9} v10 v11 Fp} v1 v2 v3 v4 v5 Fc:0 Fi Fp[2] FD FC5{ BC3 v12 v13 v14 v15 FC6{ v16 v17 v18 v19 Fp} Fp}}


void  S21088C1 ::v1(){vfunc_called(this, "_ZN8S21088C12v1Ev");}
void  S21088C1 ::v2(){vfunc_called(this, "_ZN8S21088C12v2Ev");}
void  S21088C1 ::v3(){vfunc_called(this, "_ZN8S21088C12v3Ev");}
void  S21088C1 ::v4(){vfunc_called(this, "_ZN8S21088C12v4Ev");}
void  S21088C1 ::v5(){vfunc_called(this, "_ZN8S21088C12v5Ev");}
S21088C1 ::~S21088C1(){ note_dtor("S21088C1", this);} // tgen
S21088C1 ::S21088C1(){ note_ctor("S21088C1", this);} // tgen

static void Test_S21088C1()
{
  extern Class_Descriptor cd_S21088C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S21088C1, buf);
    S21088C1 *dp, &lv = *(dp=new (buf) S21088C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S21088C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21088C1)");
    check_base_class_offset(lv, (S21088C4*)(S21088C3_nt*), 0, "S21088C1");
    check_base_class_offset(lv, (S21088C3_nt*)(S21088C2_nt*), 0, "S21088C1");
    check_base_class_offset(lv, (S21088C2_nt*), ABISELECT(80,44), "S21088C1");
    check_field_offset(lv, s21088c1f1, ABISELECT(8,4), "S21088C1.s21088c1f1");
    check_field_offset(lv, s21088c1f2, ABISELECT(16,8), "S21088C1.s21088c1f2");
    check_field_offset(lv, s21088c1f3, ABISELECT(32,16), "S21088C1.s21088c1f3");
    check_field_offset(lv, s21088c1f4, ABISELECT(48,28), "S21088C1.s21088c1f4");
    test_class_info(&lv, &cd_S21088C1);
    dp->~S21088C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21088C1(Test_S21088C1, "S21088C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S21088C1C1Ev();
extern void _ZN8S21088C1D1Ev();
Name_Map name_map_S21088C1[] = {
  NSPAIR(_ZN8S21088C1C1Ev),
  NSPAIR(_ZN8S21088C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21088C4;
extern VTBL_ENTRY _ZTI8S21088C4[];
extern  VTBL_ENTRY _ZTV8S21088C4[];
extern Class_Descriptor cd_S21088C3_nt;
extern VTBL_ENTRY _ZTI11S21088C3_nt[];
extern  VTBL_ENTRY _ZTV11S21088C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S21088C3_nt[];
extern Class_Descriptor cd_S21088C2_nt;
extern VTBL_ENTRY _ZTI11S21088C2_nt[];
extern  VTBL_ENTRY _ZTV11S21088C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S21088C2_nt[];
static Base_Class bases_S21088C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21088C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21088C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21088C2_nt,    ABISELECT(80,44), //bcp->offset
    18, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21088C1[];
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
extern void _ZN8S21088C12v1Ev();
extern void _ZN8S21088C12v2Ev();
extern void _ZN8S21088C12v3Ev();
extern void _ZN8S21088C12v4Ev();
extern void _ZN8S21088C12v5Ev();
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
extern void _ZN11S21088C2_nt3v10Ev();
extern void _ZN11S21088C2_nt3v11Ev();
static  VTBL_ENTRY vtc_S21088C1[] = {
  0,
  ABISELECT(80,44),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21088C1[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S21088C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21088C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21088C12v3Ev,
  (VTBL_ENTRY)&_ZN8S21088C12v4Ev,
  (VTBL_ENTRY)&_ZN8S21088C12v5Ev,
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S21088C1[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21088C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21088C2_nt3v11Ev,
};
extern VTBL_ENTRY _ZTV8S21088C1[];
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
extern void _ZN11S21088C2_nt3v10Ev();
extern void _ZN11S21088C2_nt3v11Ev();
static  VTBL_ENTRY _tg__ZTV11S21088C2_nt__8S21088C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI11S21088C2_nt[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S21088C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S21088C2_nt3v11Ev,
};
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
static  VTBL_ENTRY _tg__ZTV11S21088C3_nt__11S21088C2_nt__8S21088C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI11S21088C2_nt[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
};
extern void _ZN8S21088C42v6Ev();
extern void _ZN8S21088C42v7Ev();
extern void _ZN8S21088C42v8Ev();
extern void _ZN11S21088C3_nt2v9Ev();
static  VTBL_ENTRY _tg__ZTV11S21088C3_nt__8S21088C1[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S21088C3_nt[0]),
  (VTBL_ENTRY)&_ZN8S21088C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21088C42v8Ev,
  (VTBL_ENTRY)&_ZN11S21088C3_nt2v9Ev,
};
static  VTT_ENTRY vtt_S21088C1[] = {
  {&(_ZTV8S21088C1[9]),  9,34},
  {&(_ZTV8S21088C1[28]),  28,34},
  {&(_ZTV8S21088C1[9]),  9,34},
  {&(_ZTV8S21088C1[9]),  9,34},
  {&(_tg__ZTV11S21088C2_nt__8S21088C1[8]),  8,14},
  {&(_tg__ZTV11S21088C3_nt__11S21088C2_nt__8S21088C1[7]),  7,11},
  {&(_tg__ZTV11S21088C3_nt__11S21088C2_nt__8S21088C1[7]),  7,11},
  {&(_tg__ZTV11S21088C3_nt__8S21088C1[6]),  6,10},
  {&(_tg__ZTV11S21088C3_nt__8S21088C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S21088C1[];
extern  VTBL_ENTRY _ZTV8S21088C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21088C1[];
Class_Descriptor cd_S21088C1 = {  "S21088C1", // class name
  bases_S21088C1, 3,
  &(vtc_S21088C1[0]), // expected_vtbl_contents
  &(vtt_S21088C1[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S21088C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21088C1),34, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21088C1),9, //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  S20246C2  {
  void *s20246c2f0;
  virtual void  v5(); // _ZN8S20246C22v5Ev
  virtual void  v6(); // _ZN8S20246C22v6Ev
  virtual void  v7(); // _ZN8S20246C22v7Ev
  virtual void  v8(); // _ZN8S20246C22v8Ev
  ~S20246C2(); // tgen
  S20246C2(); // tgen
};
//SIG(-1 S20246C2) C1{ v1 v2 v3 v4 Fp}


void  S20246C2 ::v5(){vfunc_called(this, "_ZN8S20246C22v5Ev");}
void  S20246C2 ::v6(){vfunc_called(this, "_ZN8S20246C22v6Ev");}
void  S20246C2 ::v7(){vfunc_called(this, "_ZN8S20246C22v7Ev");}
void  S20246C2 ::v8(){vfunc_called(this, "_ZN8S20246C22v8Ev");}
S20246C2 ::~S20246C2(){ note_dtor("S20246C2", this);} // tgen
S20246C2 ::S20246C2(){ note_ctor("S20246C2", this);} // tgen

static void Test_S20246C2()
{
  extern Class_Descriptor cd_S20246C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20246C2, buf);
    S20246C2 *dp, &lv = *(dp=new (buf) S20246C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20246C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20246C2)");
    check_field_offset(lv, s20246c2f0, ABISELECT(8,4), "S20246C2.s20246c2f0");
    test_class_info(&lv, &cd_S20246C2);
    dp->~S20246C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20246C2(Test_S20246C2, "S20246C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20246C2C1Ev();
extern void _ZN8S20246C2D1Ev();
Name_Map name_map_S20246C2[] = {
  NSPAIR(_ZN8S20246C2C1Ev),
  NSPAIR(_ZN8S20246C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20246C2[];
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
static  VTBL_ENTRY vtc_S20246C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20246C2[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
};
extern VTBL_ENTRY _ZTI8S20246C2[];
extern  VTBL_ENTRY _ZTV8S20246C2[];
Class_Descriptor cd_S20246C2 = {  "S20246C2", // class name
  0,0,//no base classes
  &(vtc_S20246C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20246C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20246C2),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  S20246C4  : S20246C2 {
  void *s20246c4f0;
  __tsi64 s20246c4f1;
  virtual void  v9(); // _ZN8S20246C42v9Ev
  virtual void  v10(); // _ZN8S20246C43v10Ev
  ~S20246C4(); // tgen
  S20246C4(); // tgen
};
//SIG(-1 S20246C4) C1{ BC2{ v3 v4 v5 v6 Fp} v1 v2 Fp FL}


void  S20246C4 ::v9(){vfunc_called(this, "_ZN8S20246C42v9Ev");}
void  S20246C4 ::v10(){vfunc_called(this, "_ZN8S20246C43v10Ev");}
S20246C4 ::~S20246C4(){ note_dtor("S20246C4", this);} // tgen
S20246C4 ::S20246C4(){ note_ctor("S20246C4", this);} // tgen

static void Test_S20246C4()
{
  extern Class_Descriptor cd_S20246C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20246C4, buf);
    S20246C4 *dp, &lv = *(dp=new (buf) S20246C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20246C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20246C4)");
    check_base_class_offset(lv, (S20246C2*), 0, "S20246C4");
    check_field_offset(lv, s20246c4f0, ABISELECT(16,8), "S20246C4.s20246c4f0");
    check_field_offset(lv, s20246c4f1, ABISELECT(24,12), "S20246C4.s20246c4f1");
    test_class_info(&lv, &cd_S20246C4);
    dp->~S20246C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20246C4(Test_S20246C4, "S20246C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20246C4C1Ev();
extern void _ZN8S20246C4D1Ev();
Name_Map name_map_S20246C4[] = {
  NSPAIR(_ZN8S20246C4C1Ev),
  NSPAIR(_ZN8S20246C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20246C2;
extern VTBL_ENTRY _ZTI8S20246C2[];
extern  VTBL_ENTRY _ZTV8S20246C2[];
static Base_Class bases_S20246C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20246C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20246C4[];
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
extern void _ZN8S20246C42v9Ev();
extern void _ZN8S20246C43v10Ev();
static  VTBL_ENTRY vtc_S20246C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20246C4[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20246C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20246C43v10Ev,
};
extern VTBL_ENTRY _ZTI8S20246C4[];
extern  VTBL_ENTRY _ZTV8S20246C4[];
Class_Descriptor cd_S20246C4 = {  "S20246C4", // class name
  bases_S20246C4, 1,
  &(vtc_S20246C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20246C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20246C4),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  S20246C5  : S20246C2 {
  int s20246c5f0;
  virtual  ~S20246C5(); // _ZN8S20246C5D1Ev
  virtual void  v11(); // _ZN8S20246C53v11Ev
  virtual void  v12(); // _ZN8S20246C53v12Ev
  virtual void  v13(); // _ZN8S20246C53v13Ev
  virtual void  v14(); // _ZN8S20246C53v14Ev
  S20246C5(); // tgen
};
//SIG(-1 S20246C5) C1{ BC2{ v5 v6 v7 v8 Fp} vd v1 v2 v3 v4 Fi}


 S20246C5 ::~S20246C5(){ note_dtor("S20246C5", this);}
void  S20246C5 ::v11(){vfunc_called(this, "_ZN8S20246C53v11Ev");}
void  S20246C5 ::v12(){vfunc_called(this, "_ZN8S20246C53v12Ev");}
void  S20246C5 ::v13(){vfunc_called(this, "_ZN8S20246C53v13Ev");}
void  S20246C5 ::v14(){vfunc_called(this, "_ZN8S20246C53v14Ev");}
S20246C5 ::S20246C5(){ note_ctor("S20246C5", this);} // tgen

static void Test_S20246C5()
{
  extern Class_Descriptor cd_S20246C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20246C5, buf);
    S20246C5 *dp, &lv = *(dp=new (buf) S20246C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20246C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20246C5)");
    check_base_class_offset(lv, (S20246C2*), 0, "S20246C5");
    check_field_offset(lv, s20246c5f0, ABISELECT(16,8), "S20246C5.s20246c5f0");
    test_class_info(&lv, &cd_S20246C5);
    dp->~S20246C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20246C5(Test_S20246C5, "S20246C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20246C5C1Ev();
extern void _ZN8S20246C5D1Ev();
Name_Map name_map_S20246C5[] = {
  NSPAIR(_ZN8S20246C5C1Ev),
  NSPAIR(_ZN8S20246C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20246C2;
extern VTBL_ENTRY _ZTI8S20246C2[];
extern  VTBL_ENTRY _ZTV8S20246C2[];
static Base_Class bases_S20246C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20246C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20246C5[];
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
extern void _ZN8S20246C5D1Ev();
extern void _ZN8S20246C5D0Ev();
extern void _ZN8S20246C53v11Ev();
extern void _ZN8S20246C53v12Ev();
extern void _ZN8S20246C53v13Ev();
extern void _ZN8S20246C53v14Ev();
static  VTBL_ENTRY vtc_S20246C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20246C5[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20246C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20246C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S20246C5[];
extern  VTBL_ENTRY _ZTV8S20246C5[];
Class_Descriptor cd_S20246C5 = {  "S20246C5", // class name
  bases_S20246C5, 1,
  &(vtc_S20246C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20246C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20246C5),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20246C3  : virtual S20246C4 , S20246C5 {
  char s20246c3f0[7];
  virtual  ~S20246C3(); // _ZN8S20246C3D2Ev
  virtual void  v15(); // _ZN8S20246C33v15Ev
  virtual void  v16(); // _ZN8S20246C33v16Ev
  virtual void  v17(); // _ZN8S20246C33v17Ev
  virtual void  v18(); // _ZN8S20246C33v18Ev
  virtual void  v19(); // _ZN8S20246C33v19Ev
  S20246C3(); // tgen
};
//SIG(-1 S20246C3) C1{ VBC2{ BC3{ v6 v7 v8 v9 Fp} v10 v11 Fp FL} BC4{ BC3 vd v12 v13 v14 v15 Fi} vd v1 v2 v3 v4 v5 Fc[7]}


 S20246C3 ::~S20246C3(){ note_dtor("S20246C3", this);}
void  S20246C3 ::v15(){vfunc_called(this, "_ZN8S20246C33v15Ev");}
void  S20246C3 ::v16(){vfunc_called(this, "_ZN8S20246C33v16Ev");}
void  S20246C3 ::v17(){vfunc_called(this, "_ZN8S20246C33v17Ev");}
void  S20246C3 ::v18(){vfunc_called(this, "_ZN8S20246C33v18Ev");}
void  S20246C3 ::v19(){vfunc_called(this, "_ZN8S20246C33v19Ev");}
S20246C3 ::S20246C3(){ note_ctor("S20246C3", this);} // tgen

static void Test_S20246C3()
{
  extern Class_Descriptor cd_S20246C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S20246C3, buf);
    S20246C3 *dp, &lv = *(dp=new (buf) S20246C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20246C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20246C3)");
    check_base_class_offset(lv, (S20246C2*)(S20246C4*), ABISELECT(32,20), "S20246C3");
    check_base_class_offset(lv, (S20246C4*), ABISELECT(32,20), "S20246C3");
    check_base_class_offset(lv, (S20246C2*)(S20246C5*), 0, "S20246C3");
    check_base_class_offset(lv, (S20246C5*), 0, "S20246C3");
    check_field_offset(lv, s20246c3f0, ABISELECT(20,12), "S20246C3.s20246c3f0");
    test_class_info(&lv, &cd_S20246C3);
    dp->~S20246C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20246C3(Test_S20246C3, "S20246C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S20246C3C1Ev();
extern void _ZN8S20246C3D2Ev();
Name_Map name_map_S20246C3[] = {
  NSPAIR(_ZN8S20246C3C1Ev),
  NSPAIR(_ZN8S20246C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20246C2;
extern VTBL_ENTRY _ZTI8S20246C2[];
extern  VTBL_ENTRY _ZTV8S20246C2[];
extern Class_Descriptor cd_S20246C4;
extern VTBL_ENTRY _ZTI8S20246C4[];
extern  VTBL_ENTRY _ZTV8S20246C4[];
extern Class_Descriptor cd_S20246C2;
extern VTBL_ENTRY _ZTI8S20246C2[];
extern  VTBL_ENTRY _ZTV8S20246C2[];
extern Class_Descriptor cd_S20246C5;
extern VTBL_ENTRY _ZTI8S20246C5[];
extern  VTBL_ENTRY _ZTV8S20246C5[];
static Base_Class bases_S20246C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20246C2,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20246C4,    ABISELECT(32,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20246C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20246C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20246C3[];
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
extern void _ZN8S20246C3D1Ev();
extern void _ZN8S20246C3D0Ev();
extern void _ZN8S20246C53v11Ev();
extern void _ZN8S20246C53v12Ev();
extern void _ZN8S20246C53v13Ev();
extern void _ZN8S20246C53v14Ev();
extern void _ZN8S20246C33v15Ev();
extern void _ZN8S20246C33v16Ev();
extern void _ZN8S20246C33v17Ev();
extern void _ZN8S20246C33v18Ev();
extern void _ZN8S20246C33v19Ev();
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
extern void _ZN8S20246C42v9Ev();
extern void _ZN8S20246C43v10Ev();
static  VTBL_ENTRY vtc_S20246C3[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20246C3[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20246C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20246C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20246C3[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20246C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20246C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20246C3[];
static  VTT_ENTRY vtt_S20246C3[] = {
  {&(_ZTV8S20246C3[3]),  3,32},
  {&(_ZTV8S20246C3[26]),  26,32},
};
extern VTBL_ENTRY _ZTI8S20246C3[];
extern  VTBL_ENTRY _ZTV8S20246C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20246C3[];
Class_Descriptor cd_S20246C3 = {  "S20246C3", // class name
  bases_S20246C3, 4,
  &(vtc_S20246C3[0]), // expected_vtbl_contents
  &(vtt_S20246C3[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S20246C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20246C3),32, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20246C3),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20246C1  : virtual S20246C2 , S20246C3 {
  virtual  ~S20246C1(); // _ZN8S20246C1D2Ev
  virtual void  v1(); // _ZN8S20246C12v1Ev
  virtual void  v2(); // _ZN8S20246C12v2Ev
  virtual void  v3(); // _ZN8S20246C12v3Ev
  virtual void  v4(); // _ZN8S20246C12v4Ev
  S20246C1(); // tgen
};
//SIG(1 S20246C1) C1{ VBC2{ v5 v6 v7 v8 Fp} BC3{ VBC4{ BC2 v9 v10 Fp FL} BC5{ BC2 vd v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 Fc[7]} vd v1 v2 v3 v4}


 S20246C1 ::~S20246C1(){ note_dtor("S20246C1", this);}
void  S20246C1 ::v1(){vfunc_called(this, "_ZN8S20246C12v1Ev");}
void  S20246C1 ::v2(){vfunc_called(this, "_ZN8S20246C12v2Ev");}
void  S20246C1 ::v3(){vfunc_called(this, "_ZN8S20246C12v3Ev");}
void  S20246C1 ::v4(){vfunc_called(this, "_ZN8S20246C12v4Ev");}
S20246C1 ::S20246C1(){ note_ctor("S20246C1", this);} // tgen

static void Test_S20246C1()
{
  extern Class_Descriptor cd_S20246C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S20246C1, buf);
    S20246C1 *dp, &lv = *(dp=new (buf) S20246C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S20246C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20246C1)");
    /*is_ambiguous_... S20246C1::S20246C2 */ AMB_check_base_class_offset(lv, (S20246C2*), ABISELECT(32,20), "S20246C1");
    check_base_class_offset(lv, (S20246C2*)(S20246C4*), ABISELECT(48,28), "S20246C1");
    check_base_class_offset(lv, (S20246C4*)(S20246C3*), ABISELECT(48,28), "S20246C1");
    check_base_class_offset(lv, (S20246C2*)(S20246C5*)(S20246C3*), 0, "S20246C1");
    check_base_class_offset(lv, (S20246C5*)(S20246C3*), 0, "S20246C1");
    check_base_class_offset(lv, (S20246C3*), 0, "S20246C1");
    test_class_info(&lv, &cd_S20246C1);
    dp->~S20246C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20246C1(Test_S20246C1, "S20246C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S20246C1C1Ev();
extern void _ZN8S20246C1D2Ev();
Name_Map name_map_S20246C1[] = {
  NSPAIR(_ZN8S20246C1C1Ev),
  NSPAIR(_ZN8S20246C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20246C2;
extern VTBL_ENTRY _ZTI8S20246C2[];
extern  VTBL_ENTRY _ZTV8S20246C2[];
extern Class_Descriptor cd_S20246C2;
extern VTBL_ENTRY _ZTI8S20246C2[];
extern  VTBL_ENTRY _ZTV8S20246C2[];
extern Class_Descriptor cd_S20246C4;
extern VTBL_ENTRY _ZTI8S20246C4[];
extern  VTBL_ENTRY _ZTV8S20246C4[];
extern Class_Descriptor cd_S20246C2;
extern VTBL_ENTRY _ZTI8S20246C2[];
extern  VTBL_ENTRY _ZTV8S20246C2[];
extern Class_Descriptor cd_S20246C5;
extern VTBL_ENTRY _ZTI8S20246C5[];
extern  VTBL_ENTRY _ZTV8S20246C5[];
extern Class_Descriptor cd_S20246C3;
extern VTBL_ENTRY _ZTI8S20246C3[];
extern  VTBL_ENTRY _ZTV8S20246C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20246C3[];
static Base_Class bases_S20246C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20246C2,    ABISELECT(32,20), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20246C2,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20246C4,    ABISELECT(48,28), //bcp->offset
    33, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20246C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20246C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20246C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20246C1[];
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
extern void _ZN8S20246C1D1Ev();
extern void _ZN8S20246C1D0Ev();
extern void _ZN8S20246C53v11Ev();
extern void _ZN8S20246C53v12Ev();
extern void _ZN8S20246C53v13Ev();
extern void _ZN8S20246C53v14Ev();
extern void _ZN8S20246C33v15Ev();
extern void _ZN8S20246C33v16Ev();
extern void _ZN8S20246C33v17Ev();
extern void _ZN8S20246C33v18Ev();
extern void _ZN8S20246C33v19Ev();
extern void _ZN8S20246C12v1Ev();
extern void _ZN8S20246C12v2Ev();
extern void _ZN8S20246C12v3Ev();
extern void _ZN8S20246C12v4Ev();
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
extern void _ZN8S20246C42v9Ev();
extern void _ZN8S20246C43v10Ev();
static  VTBL_ENTRY vtc_S20246C1[] = {
  ABISELECT(32,20),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20246C1[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20246C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20246C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20246C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20246C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20246C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20246C12v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20246C1[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20246C1[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20246C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20246C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20246C1[];
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
extern void _ZN8S20246C3D1Ev();
extern void _ZN8S20246C3D0Ev();
extern void _ZN8S20246C53v11Ev();
extern void _ZN8S20246C53v12Ev();
extern void _ZN8S20246C53v13Ev();
extern void _ZN8S20246C53v14Ev();
extern void _ZN8S20246C33v15Ev();
extern void _ZN8S20246C33v16Ev();
extern void _ZN8S20246C33v17Ev();
extern void _ZN8S20246C33v18Ev();
extern void _ZN8S20246C33v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20246C3__8S20246C1[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20246C3[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20246C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20246C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20246C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20246C33v19Ev,
};
extern void _ZN8S20246C22v5Ev();
extern void _ZN8S20246C22v6Ev();
extern void _ZN8S20246C22v7Ev();
extern void _ZN8S20246C22v8Ev();
extern void _ZN8S20246C42v9Ev();
extern void _ZN8S20246C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20246C4__8S20246C3__8S20246C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20246C3[0]),
  (VTBL_ENTRY)&_ZN8S20246C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20246C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20246C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20246C43v10Ev,
};
static  VTT_ENTRY vtt_S20246C1[] = {
  {&(_ZTV8S20246C1[4]),  4,47},
  {&(_tg__ZTV8S20246C3__8S20246C1[3]),  3,18},
  {&(_tg__ZTV8S20246C4__8S20246C3__8S20246C1[8]),  8,14},
  {&(_ZTV8S20246C1[29]),  29,47},
  {&(_ZTV8S20246C1[41]),  41,47},
};
extern VTBL_ENTRY _ZTI8S20246C1[];
extern  VTBL_ENTRY _ZTV8S20246C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20246C1[];
Class_Descriptor cd_S20246C1 = {  "S20246C1", // class name
  bases_S20246C1, 6,
  &(vtc_S20246C1[0]), // expected_vtbl_contents
  &(vtt_S20246C1[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S20246C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20246C1),47, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20246C1),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20549C4  {
  void *s20549c4f0;
  virtual void  v5(); // _ZN8S20549C42v5Ev
  virtual void  v6(); // _ZN8S20549C42v6Ev
  virtual void  v7(); // _ZN8S20549C42v7Ev
  virtual void  v8(); // _ZN8S20549C42v8Ev
  ~S20549C4(); // tgen
  S20549C4(); // tgen
};
//SIG(-1 S20549C4) C1{ v1 v2 v3 v4 Fp}


void  S20549C4 ::v5(){vfunc_called(this, "_ZN8S20549C42v5Ev");}
void  S20549C4 ::v6(){vfunc_called(this, "_ZN8S20549C42v6Ev");}
void  S20549C4 ::v7(){vfunc_called(this, "_ZN8S20549C42v7Ev");}
void  S20549C4 ::v8(){vfunc_called(this, "_ZN8S20549C42v8Ev");}
S20549C4 ::~S20549C4(){ note_dtor("S20549C4", this);} // tgen
S20549C4 ::S20549C4(){ note_ctor("S20549C4", this);} // tgen

static void Test_S20549C4()
{
  extern Class_Descriptor cd_S20549C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20549C4, buf);
    S20549C4 *dp, &lv = *(dp=new (buf) S20549C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20549C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20549C4)");
    check_field_offset(lv, s20549c4f0, ABISELECT(8,4), "S20549C4.s20549c4f0");
    test_class_info(&lv, &cd_S20549C4);
    dp->~S20549C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20549C4(Test_S20549C4, "S20549C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20549C4C1Ev();
extern void _ZN8S20549C4D1Ev();
Name_Map name_map_S20549C4[] = {
  NSPAIR(_ZN8S20549C4C1Ev),
  NSPAIR(_ZN8S20549C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20549C4[];
extern void _ZN8S20549C42v5Ev();
extern void _ZN8S20549C42v6Ev();
extern void _ZN8S20549C42v7Ev();
extern void _ZN8S20549C42v8Ev();
static  VTBL_ENTRY vtc_S20549C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20549C4[0]),
  (VTBL_ENTRY)&_ZN8S20549C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S20549C4[];
extern  VTBL_ENTRY _ZTV8S20549C4[];
Class_Descriptor cd_S20549C4 = {  "S20549C4", // class name
  0,0,//no base classes
  &(vtc_S20549C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20549C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20549C4),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  S20549C3  : S20549C4 {
  void *s20549c3f0;
  __tsi64 s20549c3f1;
  virtual void  v9(); // _ZN8S20549C32v9Ev
  virtual void  v10(); // _ZN8S20549C33v10Ev
  ~S20549C3(); // tgen
  S20549C3(); // tgen
};
//SIG(-1 S20549C3) C1{ BC2{ v3 v4 v5 v6 Fp} v1 v2 Fp FL}


void  S20549C3 ::v9(){vfunc_called(this, "_ZN8S20549C32v9Ev");}
void  S20549C3 ::v10(){vfunc_called(this, "_ZN8S20549C33v10Ev");}
S20549C3 ::~S20549C3(){ note_dtor("S20549C3", this);} // tgen
S20549C3 ::S20549C3(){ note_ctor("S20549C3", this);} // tgen

static void Test_S20549C3()
{
  extern Class_Descriptor cd_S20549C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20549C3, buf);
    S20549C3 *dp, &lv = *(dp=new (buf) S20549C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20549C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20549C3)");
    check_base_class_offset(lv, (S20549C4*), 0, "S20549C3");
    check_field_offset(lv, s20549c3f0, ABISELECT(16,8), "S20549C3.s20549c3f0");
    check_field_offset(lv, s20549c3f1, ABISELECT(24,12), "S20549C3.s20549c3f1");
    test_class_info(&lv, &cd_S20549C3);
    dp->~S20549C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20549C3(Test_S20549C3, "S20549C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20549C3C1Ev();
extern void _ZN8S20549C3D1Ev();
Name_Map name_map_S20549C3[] = {
  NSPAIR(_ZN8S20549C3C1Ev),
  NSPAIR(_ZN8S20549C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20549C4;
extern VTBL_ENTRY _ZTI8S20549C4[];
extern  VTBL_ENTRY _ZTV8S20549C4[];
static Base_Class bases_S20549C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20549C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20549C3[];
extern void _ZN8S20549C42v5Ev();
extern void _ZN8S20549C42v6Ev();
extern void _ZN8S20549C42v7Ev();
extern void _ZN8S20549C42v8Ev();
extern void _ZN8S20549C32v9Ev();
extern void _ZN8S20549C33v10Ev();
static  VTBL_ENTRY vtc_S20549C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20549C3[0]),
  (VTBL_ENTRY)&_ZN8S20549C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20549C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20549C33v10Ev,
};
extern VTBL_ENTRY _ZTI8S20549C3[];
extern  VTBL_ENTRY _ZTV8S20549C3[];
Class_Descriptor cd_S20549C3 = {  "S20549C3", // class name
  bases_S20549C3, 1,
  &(vtc_S20549C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20549C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20549C3),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  S20549C5  : S20549C4 {
  int s20549c5f0;
  virtual  ~S20549C5(); // _ZN8S20549C5D1Ev
  virtual void  v11(); // _ZN8S20549C53v11Ev
  virtual void  v12(); // _ZN8S20549C53v12Ev
  virtual void  v13(); // _ZN8S20549C53v13Ev
  virtual void  v14(); // _ZN8S20549C53v14Ev
  S20549C5(); // tgen
};
//SIG(-1 S20549C5) C1{ BC2{ v5 v6 v7 v8 Fp} vd v1 v2 v3 v4 Fi}


 S20549C5 ::~S20549C5(){ note_dtor("S20549C5", this);}
void  S20549C5 ::v11(){vfunc_called(this, "_ZN8S20549C53v11Ev");}
void  S20549C5 ::v12(){vfunc_called(this, "_ZN8S20549C53v12Ev");}
void  S20549C5 ::v13(){vfunc_called(this, "_ZN8S20549C53v13Ev");}
void  S20549C5 ::v14(){vfunc_called(this, "_ZN8S20549C53v14Ev");}
S20549C5 ::S20549C5(){ note_ctor("S20549C5", this);} // tgen

static void Test_S20549C5()
{
  extern Class_Descriptor cd_S20549C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20549C5, buf);
    S20549C5 *dp, &lv = *(dp=new (buf) S20549C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20549C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20549C5)");
    check_base_class_offset(lv, (S20549C4*), 0, "S20549C5");
    check_field_offset(lv, s20549c5f0, ABISELECT(16,8), "S20549C5.s20549c5f0");
    test_class_info(&lv, &cd_S20549C5);
    dp->~S20549C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20549C5(Test_S20549C5, "S20549C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20549C5C1Ev();
extern void _ZN8S20549C5D1Ev();
Name_Map name_map_S20549C5[] = {
  NSPAIR(_ZN8S20549C5C1Ev),
  NSPAIR(_ZN8S20549C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20549C4;
extern VTBL_ENTRY _ZTI8S20549C4[];
extern  VTBL_ENTRY _ZTV8S20549C4[];
static Base_Class bases_S20549C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20549C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20549C5[];
extern void _ZN8S20549C42v5Ev();
extern void _ZN8S20549C42v6Ev();
extern void _ZN8S20549C42v7Ev();
extern void _ZN8S20549C42v8Ev();
extern void _ZN8S20549C5D1Ev();
extern void _ZN8S20549C5D0Ev();
extern void _ZN8S20549C53v11Ev();
extern void _ZN8S20549C53v12Ev();
extern void _ZN8S20549C53v13Ev();
extern void _ZN8S20549C53v14Ev();
static  VTBL_ENTRY vtc_S20549C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20549C5[0]),
  (VTBL_ENTRY)&_ZN8S20549C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20549C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20549C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S20549C5[];
extern  VTBL_ENTRY _ZTV8S20549C5[];
Class_Descriptor cd_S20549C5 = {  "S20549C5", // class name
  bases_S20549C5, 1,
  &(vtc_S20549C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20549C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20549C5),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20549C2  : virtual S20549C3 , S20549C5 {
  char s20549c2f0[7];
  virtual  ~S20549C2(); // _ZN8S20549C2D2Ev
  virtual void  v15(); // _ZN8S20549C23v15Ev
  virtual void  v16(); // _ZN8S20549C23v16Ev
  virtual void  v17(); // _ZN8S20549C23v17Ev
  virtual void  v18(); // _ZN8S20549C23v18Ev
  virtual void  v19(); // _ZN8S20549C23v19Ev
  S20549C2(); // tgen
};
//SIG(-1 S20549C2) C1{ VBC2{ BC3{ v6 v7 v8 v9 Fp} v10 v11 Fp FL} BC4{ BC3 vd v12 v13 v14 v15 Fi} vd v1 v2 v3 v4 v5 Fc[7]}


 S20549C2 ::~S20549C2(){ note_dtor("S20549C2", this);}
void  S20549C2 ::v15(){vfunc_called(this, "_ZN8S20549C23v15Ev");}
void  S20549C2 ::v16(){vfunc_called(this, "_ZN8S20549C23v16Ev");}
void  S20549C2 ::v17(){vfunc_called(this, "_ZN8S20549C23v17Ev");}
void  S20549C2 ::v18(){vfunc_called(this, "_ZN8S20549C23v18Ev");}
void  S20549C2 ::v19(){vfunc_called(this, "_ZN8S20549C23v19Ev");}
S20549C2 ::S20549C2(){ note_ctor("S20549C2", this);} // tgen

static void Test_S20549C2()
{
  extern Class_Descriptor cd_S20549C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S20549C2, buf);
    S20549C2 *dp, &lv = *(dp=new (buf) S20549C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20549C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20549C2)");
    check_base_class_offset(lv, (S20549C4*)(S20549C3*), ABISELECT(32,20), "S20549C2");
    check_base_class_offset(lv, (S20549C3*), ABISELECT(32,20), "S20549C2");
    check_base_class_offset(lv, (S20549C4*)(S20549C5*), 0, "S20549C2");
    check_base_class_offset(lv, (S20549C5*), 0, "S20549C2");
    check_field_offset(lv, s20549c2f0, ABISELECT(20,12), "S20549C2.s20549c2f0");
    test_class_info(&lv, &cd_S20549C2);
    dp->~S20549C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20549C2(Test_S20549C2, "S20549C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S20549C2C1Ev();
extern void _ZN8S20549C2D2Ev();
Name_Map name_map_S20549C2[] = {
  NSPAIR(_ZN8S20549C2C1Ev),
  NSPAIR(_ZN8S20549C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20549C4;
extern VTBL_ENTRY _ZTI8S20549C4[];
extern  VTBL_ENTRY _ZTV8S20549C4[];
extern Class_Descriptor cd_S20549C3;
extern VTBL_ENTRY _ZTI8S20549C3[];
extern  VTBL_ENTRY _ZTV8S20549C3[];
extern Class_Descriptor cd_S20549C4;
extern VTBL_ENTRY _ZTI8S20549C4[];
extern  VTBL_ENTRY _ZTV8S20549C4[];
extern Class_Descriptor cd_S20549C5;
extern VTBL_ENTRY _ZTI8S20549C5[];
extern  VTBL_ENTRY _ZTV8S20549C5[];
static Base_Class bases_S20549C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20549C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20549C3,    ABISELECT(32,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20549C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20549C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20549C2[];
extern void _ZN8S20549C42v5Ev();
extern void _ZN8S20549C42v6Ev();
extern void _ZN8S20549C42v7Ev();
extern void _ZN8S20549C42v8Ev();
extern void _ZN8S20549C2D1Ev();
extern void _ZN8S20549C2D0Ev();
extern void _ZN8S20549C53v11Ev();
extern void _ZN8S20549C53v12Ev();
extern void _ZN8S20549C53v13Ev();
extern void _ZN8S20549C53v14Ev();
extern void _ZN8S20549C23v15Ev();
extern void _ZN8S20549C23v16Ev();
extern void _ZN8S20549C23v17Ev();
extern void _ZN8S20549C23v18Ev();
extern void _ZN8S20549C23v19Ev();
extern void _ZN8S20549C42v5Ev();
extern void _ZN8S20549C42v6Ev();
extern void _ZN8S20549C42v7Ev();
extern void _ZN8S20549C42v8Ev();
extern void _ZN8S20549C32v9Ev();
extern void _ZN8S20549C33v10Ev();
static  VTBL_ENTRY vtc_S20549C2[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20549C2[0]),
  (VTBL_ENTRY)&_ZN8S20549C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20549C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20549C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20549C2[0]),
  (VTBL_ENTRY)&_ZN8S20549C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20549C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20549C33v10Ev,
};
extern VTBL_ENTRY _ZTV8S20549C2[];
static  VTT_ENTRY vtt_S20549C2[] = {
  {&(_ZTV8S20549C2[3]),  3,32},
  {&(_ZTV8S20549C2[26]),  26,32},
};
extern VTBL_ENTRY _ZTI8S20549C2[];
extern  VTBL_ENTRY _ZTV8S20549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20549C2[];
Class_Descriptor cd_S20549C2 = {  "S20549C2", // class name
  bases_S20549C2, 4,
  &(vtc_S20549C2[0]), // expected_vtbl_contents
  &(vtt_S20549C2[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S20549C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20549C2),32, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20549C2),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20549C1  : virtual S20549C2 {
  long double s20549c1f0;
  virtual  ~S20549C1(); // _ZN8S20549C1D2Ev
  virtual void  v1(); // _ZN8S20549C12v1Ev
  virtual void  v2(); // _ZN8S20549C12v2Ev
  virtual void  v3(); // _ZN8S20549C12v3Ev
  virtual void  v4(); // _ZN8S20549C12v4Ev
  S20549C1(); // tgen
};
//SIG(1 S20549C1) C1{ VBC2{ VBC3{ BC4{ v5 v6 v7 v8 Fp} v9 v10 Fp FL} BC5{ BC4 vd v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 Fc[7]} vd v1 v2 v3 v4 FD}


 S20549C1 ::~S20549C1(){ note_dtor("S20549C1", this);}
void  S20549C1 ::v1(){vfunc_called(this, "_ZN8S20549C12v1Ev");}
void  S20549C1 ::v2(){vfunc_called(this, "_ZN8S20549C12v2Ev");}
void  S20549C1 ::v3(){vfunc_called(this, "_ZN8S20549C12v3Ev");}
void  S20549C1 ::v4(){vfunc_called(this, "_ZN8S20549C12v4Ev");}
S20549C1 ::S20549C1(){ note_ctor("S20549C1", this);} // tgen

static void Test_S20549C1()
{
  extern Class_Descriptor cd_S20549C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S20549C1, buf);
    S20549C1 *dp, &lv = *(dp=new (buf) S20549C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S20549C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20549C1)");
    check_base_class_offset(lv, (S20549C4*)(S20549C3*), ABISELECT(64,36), "S20549C1");
    check_base_class_offset(lv, (S20549C3*)(S20549C2*), ABISELECT(64,36), "S20549C1");
    check_base_class_offset(lv, (S20549C4*)(S20549C5*)(S20549C2*), ABISELECT(32,16), "S20549C1");
    check_base_class_offset(lv, (S20549C5*)(S20549C2*), ABISELECT(32,16), "S20549C1");
    check_base_class_offset(lv, (S20549C2*), ABISELECT(32,16), "S20549C1");
    check_field_offset(lv, s20549c1f0, ABISELECT(16,4), "S20549C1.s20549c1f0");
    test_class_info(&lv, &cd_S20549C1);
    dp->~S20549C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20549C1(Test_S20549C1, "S20549C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S20549C1C1Ev();
extern void _ZN8S20549C1D2Ev();
Name_Map name_map_S20549C1[] = {
  NSPAIR(_ZN8S20549C1C1Ev),
  NSPAIR(_ZN8S20549C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20549C4;
extern VTBL_ENTRY _ZTI8S20549C4[];
extern  VTBL_ENTRY _ZTV8S20549C4[];
extern Class_Descriptor cd_S20549C3;
extern VTBL_ENTRY _ZTI8S20549C3[];
extern  VTBL_ENTRY _ZTV8S20549C3[];
extern Class_Descriptor cd_S20549C4;
extern VTBL_ENTRY _ZTI8S20549C4[];
extern  VTBL_ENTRY _ZTV8S20549C4[];
extern Class_Descriptor cd_S20549C5;
extern VTBL_ENTRY _ZTI8S20549C5[];
extern  VTBL_ENTRY _ZTV8S20549C5[];
extern Class_Descriptor cd_S20549C2;
extern VTBL_ENTRY _ZTI8S20549C2[];
extern  VTBL_ENTRY _ZTV8S20549C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20549C2[];
static Base_Class bases_S20549C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20549C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20549C3,    ABISELECT(64,36), //bcp->offset
    42, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20549C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20549C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20549C2,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20549C1[];
extern void _ZN8S20549C1D1Ev();
extern void _ZN8S20549C1D0Ev();
extern void _ZN8S20549C12v1Ev();
extern void _ZN8S20549C12v2Ev();
extern void _ZN8S20549C12v3Ev();
extern void _ZN8S20549C12v4Ev();
extern void _ZN8S20549C42v5Ev();
extern void _ZN8S20549C42v6Ev();
extern void _ZN8S20549C42v7Ev();
extern void _ZN8S20549C42v8Ev();
extern void ABISELECT(_ZTv0_n64_N8S20549C1D1Ev,_ZTv0_n32_N8S20549C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20549C1D1Ev,_ZThn16_N8S20549C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20549C1D0Ev,_ZTv0_n32_N8S20549C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20549C1D0Ev,_ZThn16_N8S20549C1D0Ev)() __attribute__((weak));
extern void _ZN8S20549C53v11Ev();
extern void _ZN8S20549C53v12Ev();
extern void _ZN8S20549C53v13Ev();
extern void _ZN8S20549C53v14Ev();
extern void _ZN8S20549C23v15Ev();
extern void _ZN8S20549C23v16Ev();
extern void _ZN8S20549C23v17Ev();
extern void _ZN8S20549C23v18Ev();
extern void _ZN8S20549C23v19Ev();
extern void _ZN8S20549C42v5Ev();
extern void _ZN8S20549C42v6Ev();
extern void _ZN8S20549C42v7Ev();
extern void _ZN8S20549C42v8Ev();
extern void _ZN8S20549C32v9Ev();
extern void _ZN8S20549C33v10Ev();
static  VTBL_ENTRY vtc_S20549C1[] = {
  ABISELECT(64,36),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20549C1[0]),
  (VTBL_ENTRY)&_ZN8S20549C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20549C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20549C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20549C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20549C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20549C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20549C1[0]),
  (VTBL_ENTRY)&_ZN8S20549C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20549C1D1Ev,_ZTv0_n32_N8S20549C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20549C1D0Ev,_ZTv0_n32_N8S20549C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20549C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20549C1[0]),
  (VTBL_ENTRY)&_ZN8S20549C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20549C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20549C33v10Ev,
};
extern VTBL_ENTRY _ZTV8S20549C1[];
extern void _ZN8S20549C42v5Ev();
extern void _ZN8S20549C42v6Ev();
extern void _ZN8S20549C42v7Ev();
extern void _ZN8S20549C42v8Ev();
extern void _ZN8S20549C2D1Ev();
extern void _ZN8S20549C2D0Ev();
extern void _ZN8S20549C53v11Ev();
extern void _ZN8S20549C53v12Ev();
extern void _ZN8S20549C53v13Ev();
extern void _ZN8S20549C53v14Ev();
extern void _ZN8S20549C23v15Ev();
extern void _ZN8S20549C23v16Ev();
extern void _ZN8S20549C23v17Ev();
extern void _ZN8S20549C23v18Ev();
extern void _ZN8S20549C23v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20549C2__8S20549C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20549C2[0]),
  (VTBL_ENTRY)&_ZN8S20549C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20549C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20549C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20549C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20549C23v19Ev,
};
extern void _ZN8S20549C42v5Ev();
extern void _ZN8S20549C42v6Ev();
extern void _ZN8S20549C42v7Ev();
extern void _ZN8S20549C42v8Ev();
extern void _ZN8S20549C32v9Ev();
extern void _ZN8S20549C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20549C3__8S20549C2__8S20549C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20549C2[0]),
  (VTBL_ENTRY)&_ZN8S20549C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20549C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20549C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20549C33v10Ev,
};
static  VTT_ENTRY vtt_S20549C1[] = {
  {&(_ZTV8S20549C1[4]),  4,56},
  {&(_ZTV8S20549C1[27]),  27,56},
  {&(_ZTV8S20549C1[50]),  50,56},
  {&(_tg__ZTV8S20549C2__8S20549C1[3]),  3,18},
  {&(_tg__ZTV8S20549C3__8S20549C2__8S20549C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20549C1[];
extern  VTBL_ENTRY _ZTV8S20549C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20549C1[];
static VTBL_ENTRY alt_thunk_names173[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20549C1D0Ev,_ZTv0_n32_N8S20549C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20549C1D0Ev,_ZThn16_N8S20549C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20549C1D1Ev,_ZTv0_n32_N8S20549C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20549C1D1Ev,_ZThn16_N8S20549C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20549C1 = {  "S20549C1", // class name
  bases_S20549C1, 5,
  &(vtc_S20549C1[0]), // expected_vtbl_contents
  &(vtt_S20549C1[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S20549C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20549C1),56, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20549C1),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names173,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20216C2  {
  void *s20216c2f0[11];
  ::S20092C6 s20216c2f1;
  long double s20216c2f2[3];
  virtual  ~S20216C2(); // _ZN8S20216C2D1Ev
  virtual void  v4(); // _ZN8S20216C22v4Ev
  virtual void  v5(); // _ZN8S20216C22v5Ev
  virtual void  v6(); // _ZN8S20216C22v6Ev
  S20216C2(); // tgen
};
//SIG(-1 S20216C2) C1{ vd v1 v2 v3 Fp[11] FC2{ VBC3{ v9 v10 v11 v12} VBC4{ v13 v14 v15 v16 Fp} v4 v5 v6 v7 v8 Fl[2] Fi} FD[3]}


 S20216C2 ::~S20216C2(){ note_dtor("S20216C2", this);}
void  S20216C2 ::v4(){vfunc_called(this, "_ZN8S20216C22v4Ev");}
void  S20216C2 ::v5(){vfunc_called(this, "_ZN8S20216C22v5Ev");}
void  S20216C2 ::v6(){vfunc_called(this, "_ZN8S20216C22v6Ev");}
S20216C2 ::S20216C2(){ note_ctor("S20216C2", this);} // tgen

static void Test_S20216C2()
{
  extern Class_Descriptor cd_S20216C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,28)];
    init_test(&cd_S20216C2, buf);
    S20216C2 *dp, &lv = *(dp=new (buf) S20216C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,108), "sizeof(S20216C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20216C2)");
    check_field_offset(lv, s20216c2f0, ABISELECT(8,4), "S20216C2.s20216c2f0");
    check_field_offset(lv, s20216c2f1, ABISELECT(96,48), "S20216C2.s20216c2f1");
    check_field_offset(lv, s20216c2f2, ABISELECT(144,72), "S20216C2.s20216c2f2");
    test_class_info(&lv, &cd_S20216C2);
    dp->~S20216C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20216C2(Test_S20216C2, "S20216C2", ABISELECT(192,108));

#else // __cplusplus

extern void _ZN8S20216C2C1Ev();
extern void _ZN8S20216C2D1Ev();
Name_Map name_map_S20216C2[] = {
  NSPAIR(_ZN8S20216C2C1Ev),
  NSPAIR(_ZN8S20216C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20216C2[];
extern void _ZN8S20216C2D1Ev();
extern void _ZN8S20216C2D0Ev();
extern void _ZN8S20216C22v4Ev();
extern void _ZN8S20216C22v5Ev();
extern void _ZN8S20216C22v6Ev();
static  VTBL_ENTRY vtc_S20216C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20216C2[0]),
  (VTBL_ENTRY)&_ZN8S20216C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20216C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20216C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20216C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20216C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20216C2[];
extern  VTBL_ENTRY _ZTV8S20216C2[];
Class_Descriptor cd_S20216C2 = {  "S20216C2", // class name
  0,0,//no base classes
  &(vtc_S20216C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,108), // object size
  NSPAIRA(_ZTI8S20216C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20216C2),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  S20216C1  : virtual S20216C2 {
  __tsi64 s20216c1f0;
  virtual void  v1(); // _ZN8S20216C12v1Ev
  virtual void  v2(); // _ZN8S20216C12v2Ev
  virtual void  v3(); // _ZN8S20216C12v3Ev
  ~S20216C1(); // tgen
  S20216C1(); // tgen
};
//SIG(1 S20216C1) C1{ VBC2{ vd v4 v5 v6 Fp[11] FC3{ VBC4{ v12 v13 v14 v15} VBC5{ v16 v17 v18 v19 Fp} v7 v8 v9 v10 v11 Fl[2] Fi} FD[3]} v1 v2 v3 FL}


void  S20216C1 ::v1(){vfunc_called(this, "_ZN8S20216C12v1Ev");}
void  S20216C1 ::v2(){vfunc_called(this, "_ZN8S20216C12v2Ev");}
void  S20216C1 ::v3(){vfunc_called(this, "_ZN8S20216C12v3Ev");}
S20216C1 ::~S20216C1(){ note_dtor("S20216C1", this);} // tgen
S20216C1 ::S20216C1(){ note_ctor("S20216C1", this);} // tgen

static void Test_S20216C1()
{
  extern Class_Descriptor cd_S20216C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,31)];
    init_test(&cd_S20216C1, buf);
    S20216C1 *dp, &lv = *(dp=new (buf) S20216C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,120), "sizeof(S20216C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20216C1)");
    check_base_class_offset(lv, (S20216C2*), ABISELECT(16,12), "S20216C1");
    check_field_offset(lv, s20216c1f0, ABISELECT(8,4), "S20216C1.s20216c1f0");
    test_class_info(&lv, &cd_S20216C1);
    dp->~S20216C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20216C1(Test_S20216C1, "S20216C1", ABISELECT(208,120));

#else // __cplusplus

extern void _ZN8S20216C1C1Ev();
extern void _ZN8S20216C1D1Ev();
Name_Map name_map_S20216C1[] = {
  NSPAIR(_ZN8S20216C1C1Ev),
  NSPAIR(_ZN8S20216C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20216C2;
extern VTBL_ENTRY _ZTI8S20216C2[];
extern  VTBL_ENTRY _ZTV8S20216C2[];
static Base_Class bases_S20216C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20216C2,    ABISELECT(16,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20216C1[];
extern void _ZN8S20216C12v1Ev();
extern void _ZN8S20216C12v2Ev();
extern void _ZN8S20216C12v3Ev();
extern void _ZN8S20216C1D1Ev();
extern void _ZN8S20216C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20216C1D1Ev,_ZTv0_n12_N8S20216C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20216C1D1Ev,_ZThn12_N8S20216C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20216C1D0Ev,_ZTv0_n12_N8S20216C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20216C1D0Ev,_ZThn12_N8S20216C1D0Ev)() __attribute__((weak));
extern void _ZN8S20216C22v4Ev();
extern void _ZN8S20216C22v5Ev();
extern void _ZN8S20216C22v6Ev();
static  VTBL_ENTRY vtc_S20216C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20216C1[0]),
  (VTBL_ENTRY)&_ZN8S20216C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20216C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20216C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20216C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20216C1D0Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20216C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20216C1D1Ev,_ZTv0_n12_N8S20216C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20216C1D0Ev,_ZTv0_n12_N8S20216C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20216C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20216C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20216C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S20216C1[];
static  VTT_ENTRY vtt_S20216C1[] = {
  {&(_ZTV8S20216C1[3]),  3,19},
  {&(_ZTV8S20216C1[14]),  14,19},
};
extern VTBL_ENTRY _ZTI8S20216C1[];
extern  VTBL_ENTRY _ZTV8S20216C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20216C1[];
static VTBL_ENTRY alt_thunk_names174[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20216C1D0Ev,_ZTv0_n12_N8S20216C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20216C1D0Ev,_ZThn12_N8S20216C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20216C1D1Ev,_ZTv0_n12_N8S20216C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20216C1D1Ev,_ZThn12_N8S20216C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20216C1 = {  "S20216C1", // class name
  bases_S20216C1, 1,
  &(vtc_S20216C1[0]), // expected_vtbl_contents
  &(vtt_S20216C1[0]), // expected_vtt_contents
  ABISELECT(208,120), // object size
  NSPAIRA(_ZTI8S20216C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20216C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20216C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names174,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20215C2  {
  void *s20215c2f0[11];
  ::S20092C6 s20215c2f1;
  long double s20215c2f2[3];
  virtual  ~S20215C2(); // _ZN8S20215C2D1Ev
  virtual void  v4(); // _ZN8S20215C22v4Ev
  virtual void  v5(); // _ZN8S20215C22v5Ev
  virtual void  v6(); // _ZN8S20215C22v6Ev
  S20215C2(); // tgen
};
//SIG(-1 S20215C2) C1{ vd v1 v2 v3 Fp[11] FC2{ VBC3{ v9 v10 v11 v12} VBC4{ v13 v14 v15 v16 Fp} v4 v5 v6 v7 v8 Fl[2] Fi} FD[3]}


 S20215C2 ::~S20215C2(){ note_dtor("S20215C2", this);}
void  S20215C2 ::v4(){vfunc_called(this, "_ZN8S20215C22v4Ev");}
void  S20215C2 ::v5(){vfunc_called(this, "_ZN8S20215C22v5Ev");}
void  S20215C2 ::v6(){vfunc_called(this, "_ZN8S20215C22v6Ev");}
S20215C2 ::S20215C2(){ note_ctor("S20215C2", this);} // tgen

static void Test_S20215C2()
{
  extern Class_Descriptor cd_S20215C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,28)];
    init_test(&cd_S20215C2, buf);
    S20215C2 *dp, &lv = *(dp=new (buf) S20215C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,108), "sizeof(S20215C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20215C2)");
    check_field_offset(lv, s20215c2f0, ABISELECT(8,4), "S20215C2.s20215c2f0");
    check_field_offset(lv, s20215c2f1, ABISELECT(96,48), "S20215C2.s20215c2f1");
    check_field_offset(lv, s20215c2f2, ABISELECT(144,72), "S20215C2.s20215c2f2");
    test_class_info(&lv, &cd_S20215C2);
    dp->~S20215C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20215C2(Test_S20215C2, "S20215C2", ABISELECT(192,108));

#else // __cplusplus

extern void _ZN8S20215C2C1Ev();
extern void _ZN8S20215C2D1Ev();
Name_Map name_map_S20215C2[] = {
  NSPAIR(_ZN8S20215C2C1Ev),
  NSPAIR(_ZN8S20215C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20215C2[];
extern void _ZN8S20215C2D1Ev();
extern void _ZN8S20215C2D0Ev();
extern void _ZN8S20215C22v4Ev();
extern void _ZN8S20215C22v5Ev();
extern void _ZN8S20215C22v6Ev();
static  VTBL_ENTRY vtc_S20215C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20215C2[0]),
  (VTBL_ENTRY)&_ZN8S20215C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20215C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20215C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20215C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20215C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20215C2[];
extern  VTBL_ENTRY _ZTV8S20215C2[];
Class_Descriptor cd_S20215C2 = {  "S20215C2", // class name
  0,0,//no base classes
  &(vtc_S20215C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,108), // object size
  NSPAIRA(_ZTI8S20215C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20215C2),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  S20215C1  : virtual S20215C2 {
  long s20215c1f0;
  virtual void  v1(); // _ZN8S20215C12v1Ev
  virtual void  v2(); // _ZN8S20215C12v2Ev
  virtual void  v3(); // _ZN8S20215C12v3Ev
  ~S20215C1(); // tgen
  S20215C1(); // tgen
};
//SIG(1 S20215C1) C1{ VBC2{ vd v4 v5 v6 Fp[11] FC3{ VBC4{ v12 v13 v14 v15} VBC5{ v16 v17 v18 v19 Fp} v7 v8 v9 v10 v11 Fl[2] Fi} FD[3]} v1 v2 v3 Fl}


void  S20215C1 ::v1(){vfunc_called(this, "_ZN8S20215C12v1Ev");}
void  S20215C1 ::v2(){vfunc_called(this, "_ZN8S20215C12v2Ev");}
void  S20215C1 ::v3(){vfunc_called(this, "_ZN8S20215C12v3Ev");}
S20215C1 ::~S20215C1(){ note_dtor("S20215C1", this);} // tgen
S20215C1 ::S20215C1(){ note_ctor("S20215C1", this);} // tgen

static void Test_S20215C1()
{
  extern Class_Descriptor cd_S20215C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,30)];
    init_test(&cd_S20215C1, buf);
    S20215C1 *dp, &lv = *(dp=new (buf) S20215C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,116), "sizeof(S20215C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20215C1)");
    check_base_class_offset(lv, (S20215C2*), ABISELECT(16,8), "S20215C1");
    check_field_offset(lv, s20215c1f0, ABISELECT(8,4), "S20215C1.s20215c1f0");
    test_class_info(&lv, &cd_S20215C1);
    dp->~S20215C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20215C1(Test_S20215C1, "S20215C1", ABISELECT(208,116));

#else // __cplusplus

extern void _ZN8S20215C1C1Ev();
extern void _ZN8S20215C1D1Ev();
Name_Map name_map_S20215C1[] = {
  NSPAIR(_ZN8S20215C1C1Ev),
  NSPAIR(_ZN8S20215C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20215C2;
extern VTBL_ENTRY _ZTI8S20215C2[];
extern  VTBL_ENTRY _ZTV8S20215C2[];
static Base_Class bases_S20215C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20215C2,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20215C1[];
extern void _ZN8S20215C12v1Ev();
extern void _ZN8S20215C12v2Ev();
extern void _ZN8S20215C12v3Ev();
extern void _ZN8S20215C1D1Ev();
extern void _ZN8S20215C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20215C1D1Ev,_ZTv0_n12_N8S20215C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20215C1D1Ev,_ZThn8_N8S20215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20215C1D0Ev,_ZTv0_n12_N8S20215C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20215C1D0Ev,_ZThn8_N8S20215C1D0Ev)() __attribute__((weak));
extern void _ZN8S20215C22v4Ev();
extern void _ZN8S20215C22v5Ev();
extern void _ZN8S20215C22v6Ev();
static  VTBL_ENTRY vtc_S20215C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20215C1[0]),
  (VTBL_ENTRY)&_ZN8S20215C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20215C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20215C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20215C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20215C1D0Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20215C1D1Ev,_ZTv0_n12_N8S20215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20215C1D0Ev,_ZTv0_n12_N8S20215C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20215C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20215C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20215C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S20215C1[];
static  VTT_ENTRY vtt_S20215C1[] = {
  {&(_ZTV8S20215C1[3]),  3,19},
  {&(_ZTV8S20215C1[14]),  14,19},
};
extern VTBL_ENTRY _ZTI8S20215C1[];
extern  VTBL_ENTRY _ZTV8S20215C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20215C1[];
static VTBL_ENTRY alt_thunk_names175[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20215C1D0Ev,_ZTv0_n12_N8S20215C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20215C1D0Ev,_ZThn8_N8S20215C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20215C1D1Ev,_ZTv0_n12_N8S20215C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20215C1D1Ev,_ZThn8_N8S20215C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20215C1 = {  "S20215C1", // class name
  bases_S20215C1, 1,
  &(vtc_S20215C1[0]), // expected_vtbl_contents
  &(vtt_S20215C1[0]), // expected_vtt_contents
  ABISELECT(208,116), // object size
  NSPAIRA(_ZTI8S20215C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20215C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20215C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names175,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19078C4  {
  virtual void  v7(); // _ZN8S19078C42v7Ev
  virtual void  v8(); // _ZN8S19078C42v8Ev
  virtual void  v9(); // _ZN8S19078C42v9Ev
  virtual void  v10(); // _ZN8S19078C43v10Ev
  virtual void  v11(); // _ZN8S19078C43v11Ev
  ~S19078C4(); // tgen
  S19078C4(); // tgen
};
//SIG(-1 S19078C4) C1{ v1 v2 v3 v4 v5}


void  S19078C4 ::v7(){vfunc_called(this, "_ZN8S19078C42v7Ev");}
void  S19078C4 ::v8(){vfunc_called(this, "_ZN8S19078C42v8Ev");}
void  S19078C4 ::v9(){vfunc_called(this, "_ZN8S19078C42v9Ev");}
void  S19078C4 ::v10(){vfunc_called(this, "_ZN8S19078C43v10Ev");}
void  S19078C4 ::v11(){vfunc_called(this, "_ZN8S19078C43v11Ev");}
S19078C4 ::~S19078C4(){ note_dtor("S19078C4", this);} // tgen
S19078C4 ::S19078C4(){ note_ctor("S19078C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19078C4C1Ev();
extern void _ZN8S19078C4D1Ev();
Name_Map name_map_S19078C4[] = {
  NSPAIR(_ZN8S19078C4C1Ev),
  NSPAIR(_ZN8S19078C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19078C4[];
extern void _ZN8S19078C42v7Ev();
extern void _ZN8S19078C42v8Ev();
extern void _ZN8S19078C42v9Ev();
extern void _ZN8S19078C43v10Ev();
extern void _ZN8S19078C43v11Ev();
static  VTBL_ENTRY vtc_S19078C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19078C4[0]),
  (VTBL_ENTRY)&_ZN8S19078C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19078C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19078C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19078C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19078C43v11Ev,
};
extern VTBL_ENTRY _ZTI8S19078C4[];
extern  VTBL_ENTRY _ZTV8S19078C4[];
Class_Descriptor cd_S19078C4 = {  "S19078C4", // class name
  0,0,//no base classes
  &(vtc_S19078C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19078C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19078C4),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  S19078C3  : S19078C4 {
  ::S19078C4 s19078c3f0;
  virtual void  v12(); // _ZN8S19078C33v12Ev
  virtual void  v13(); // _ZN8S19078C33v13Ev
  virtual void  v14(); // _ZN8S19078C33v14Ev
  virtual void  v15(); // _ZN8S19078C33v15Ev
  ~S19078C3(); // tgen
  S19078C3(); // tgen
};
//SIG(-1 S19078C3) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S19078C3 ::v12(){vfunc_called(this, "_ZN8S19078C33v12Ev");}
void  S19078C3 ::v13(){vfunc_called(this, "_ZN8S19078C33v13Ev");}
void  S19078C3 ::v14(){vfunc_called(this, "_ZN8S19078C33v14Ev");}
void  S19078C3 ::v15(){vfunc_called(this, "_ZN8S19078C33v15Ev");}
S19078C3 ::~S19078C3(){ note_dtor("S19078C3", this);} // tgen
S19078C3 ::S19078C3(){ note_ctor("S19078C3", this);} // tgen

static void Test_S19078C3()
{
  extern Class_Descriptor cd_S19078C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19078C3, buf);
    S19078C3 *dp, &lv = *(dp=new (buf) S19078C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19078C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19078C3)");
    check_base_class_offset(lv, (S19078C4*), 0, "S19078C3");
    check_field_offset(lv, s19078c3f0, ABISELECT(8,4), "S19078C3.s19078c3f0");
    test_class_info(&lv, &cd_S19078C3);
    dp->~S19078C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19078C3(Test_S19078C3, "S19078C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19078C3C1Ev();
extern void _ZN8S19078C3D1Ev();
Name_Map name_map_S19078C3[] = {
  NSPAIR(_ZN8S19078C3C1Ev),
  NSPAIR(_ZN8S19078C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19078C4;
extern VTBL_ENTRY _ZTI8S19078C4[];
extern  VTBL_ENTRY _ZTV8S19078C4[];
static Base_Class bases_S19078C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19078C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19078C3[];
extern void _ZN8S19078C42v7Ev();
extern void _ZN8S19078C42v8Ev();
extern void _ZN8S19078C42v9Ev();
extern void _ZN8S19078C43v10Ev();
extern void _ZN8S19078C43v11Ev();
extern void _ZN8S19078C33v12Ev();
extern void _ZN8S19078C33v13Ev();
extern void _ZN8S19078C33v14Ev();
extern void _ZN8S19078C33v15Ev();
static  VTBL_ENTRY vtc_S19078C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19078C3[0]),
  (VTBL_ENTRY)&_ZN8S19078C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19078C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19078C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19078C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19078C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v15Ev,
};
extern VTBL_ENTRY _ZTI8S19078C3[];
extern  VTBL_ENTRY _ZTV8S19078C3[];
Class_Descriptor cd_S19078C3 = {  "S19078C3", // class name
  bases_S19078C3, 1,
  &(vtc_S19078C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19078C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19078C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19078C2  : S19078C3 {
  virtual void  v16(); // _ZN8S19078C23v16Ev
  virtual void  v17(); // _ZN8S19078C23v17Ev
  virtual void  v18(); // _ZN8S19078C23v18Ev
  virtual void  v19(); // _ZN8S19078C23v19Ev
  virtual void  v20(); // _ZN8S19078C23v20Ev
  virtual void  v21(); // _ZN8S19078C23v21Ev
  ~S19078C2(); // tgen
  S19078C2(); // tgen
};
//SIG(-1 S19078C2) C1{ BC2{ BC3{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 v6}


void  S19078C2 ::v16(){vfunc_called(this, "_ZN8S19078C23v16Ev");}
void  S19078C2 ::v17(){vfunc_called(this, "_ZN8S19078C23v17Ev");}
void  S19078C2 ::v18(){vfunc_called(this, "_ZN8S19078C23v18Ev");}
void  S19078C2 ::v19(){vfunc_called(this, "_ZN8S19078C23v19Ev");}
void  S19078C2 ::v20(){vfunc_called(this, "_ZN8S19078C23v20Ev");}
void  S19078C2 ::v21(){vfunc_called(this, "_ZN8S19078C23v21Ev");}
S19078C2 ::~S19078C2(){ note_dtor("S19078C2", this);} // tgen
S19078C2 ::S19078C2(){ note_ctor("S19078C2", this);} // tgen

static void Test_S19078C2()
{
  extern Class_Descriptor cd_S19078C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19078C2, buf);
    S19078C2 *dp, &lv = *(dp=new (buf) S19078C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19078C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19078C2)");
    check_base_class_offset(lv, (S19078C4*)(S19078C3*), 0, "S19078C2");
    check_base_class_offset(lv, (S19078C3*), 0, "S19078C2");
    test_class_info(&lv, &cd_S19078C2);
    dp->~S19078C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19078C2(Test_S19078C2, "S19078C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19078C2C1Ev();
extern void _ZN8S19078C2D1Ev();
Name_Map name_map_S19078C2[] = {
  NSPAIR(_ZN8S19078C2C1Ev),
  NSPAIR(_ZN8S19078C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19078C4;
extern VTBL_ENTRY _ZTI8S19078C4[];
extern  VTBL_ENTRY _ZTV8S19078C4[];
extern Class_Descriptor cd_S19078C3;
extern VTBL_ENTRY _ZTI8S19078C3[];
extern  VTBL_ENTRY _ZTV8S19078C3[];
static Base_Class bases_S19078C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19078C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19078C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19078C2[];
extern void _ZN8S19078C42v7Ev();
extern void _ZN8S19078C42v8Ev();
extern void _ZN8S19078C42v9Ev();
extern void _ZN8S19078C43v10Ev();
extern void _ZN8S19078C43v11Ev();
extern void _ZN8S19078C33v12Ev();
extern void _ZN8S19078C33v13Ev();
extern void _ZN8S19078C33v14Ev();
extern void _ZN8S19078C33v15Ev();
extern void _ZN8S19078C23v16Ev();
extern void _ZN8S19078C23v17Ev();
extern void _ZN8S19078C23v18Ev();
extern void _ZN8S19078C23v19Ev();
extern void _ZN8S19078C23v20Ev();
extern void _ZN8S19078C23v21Ev();
static  VTBL_ENTRY vtc_S19078C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19078C2[0]),
  (VTBL_ENTRY)&_ZN8S19078C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19078C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19078C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19078C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19078C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v21Ev,
};
extern VTBL_ENTRY _ZTI8S19078C2[];
extern  VTBL_ENTRY _ZTV8S19078C2[];
Class_Descriptor cd_S19078C2 = {  "S19078C2", // class name
  bases_S19078C2, 2,
  &(vtc_S19078C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19078C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19078C2),17, //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  S19078C5  {
  virtual void  v22(); // _ZN8S19078C53v22Ev
  ~S19078C5(); // tgen
  S19078C5(); // tgen
};
//SIG(-1 S19078C5) C1{ v1}


void  S19078C5 ::v22(){vfunc_called(this, "_ZN8S19078C53v22Ev");}
S19078C5 ::~S19078C5(){ note_dtor("S19078C5", this);} // tgen
S19078C5 ::S19078C5(){ note_ctor("S19078C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19078C5C1Ev();
extern void _ZN8S19078C5D1Ev();
Name_Map name_map_S19078C5[] = {
  NSPAIR(_ZN8S19078C5C1Ev),
  NSPAIR(_ZN8S19078C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19078C5[];
extern void _ZN8S19078C53v22Ev();
static  VTBL_ENTRY vtc_S19078C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19078C5[0]),
  (VTBL_ENTRY)&_ZN8S19078C53v22Ev,
};
extern VTBL_ENTRY _ZTI8S19078C5[];
extern  VTBL_ENTRY _ZTV8S19078C5[];
Class_Descriptor cd_S19078C5 = {  "S19078C5", // class name
  0,0,//no base classes
  &(vtc_S19078C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19078C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19078C5),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  S19078C1  : virtual S19078C2 , virtual S19078C5 {
  char s19078c1f0;
  int s19078c1f1;
  __tsi64 s19078c1f2;
  long double s19078c1f3[6];
  virtual void  v1(); // _ZN8S19078C12v1Ev
  virtual void  v2(); // _ZN8S19078C12v2Ev
  virtual void  v3(); // _ZN8S19078C12v3Ev
  virtual void  v4(); // _ZN8S19078C12v4Ev
  virtual void  v5(); // _ZN8S19078C12v5Ev
  virtual void  v6(); // _ZN8S19078C12v6Ev
  ~S19078C1(); // tgen
  S19078C1(); // tgen
};
//SIG(1 S19078C1) C1{ VBC2{ BC3{ BC4{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC4} v16 v17 v18 v19 v20 v21} VBC5{ v22} v1 v2 v3 v4 v5 v6 Fc Fi FL FD[6]}


void  S19078C1 ::v1(){vfunc_called(this, "_ZN8S19078C12v1Ev");}
void  S19078C1 ::v2(){vfunc_called(this, "_ZN8S19078C12v2Ev");}
void  S19078C1 ::v3(){vfunc_called(this, "_ZN8S19078C12v3Ev");}
void  S19078C1 ::v4(){vfunc_called(this, "_ZN8S19078C12v4Ev");}
void  S19078C1 ::v5(){vfunc_called(this, "_ZN8S19078C12v5Ev");}
void  S19078C1 ::v6(){vfunc_called(this, "_ZN8S19078C12v6Ev");}
S19078C1 ::~S19078C1(){ note_dtor("S19078C1", this);} // tgen
S19078C1 ::S19078C1(){ note_ctor("S19078C1", this);} // tgen

static void Test_S19078C1()
{
  extern Class_Descriptor cd_S19078C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S19078C1, buf);
    S19078C1 *dp, &lv = *(dp=new (buf) S19078C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S19078C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19078C1)");
    check_base_class_offset(lv, (S19078C4*)(S19078C3*)(S19078C2*), ABISELECT(128,92), "S19078C1");
    check_base_class_offset(lv, (S19078C3*)(S19078C2*), ABISELECT(128,92), "S19078C1");
    check_base_class_offset(lv, (S19078C2*), ABISELECT(128,92), "S19078C1");
    check_base_class_offset(lv, (S19078C5*), 0, "S19078C1");
    check_field_offset(lv, s19078c1f0, ABISELECT(8,4), "S19078C1.s19078c1f0");
    check_field_offset(lv, s19078c1f1, ABISELECT(12,8), "S19078C1.s19078c1f1");
    check_field_offset(lv, s19078c1f2, ABISELECT(16,12), "S19078C1.s19078c1f2");
    check_field_offset(lv, s19078c1f3, ABISELECT(32,20), "S19078C1.s19078c1f3");
    test_class_info(&lv, &cd_S19078C1);
    dp->~S19078C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19078C1(Test_S19078C1, "S19078C1", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN8S19078C1C1Ev();
extern void _ZN8S19078C1D1Ev();
Name_Map name_map_S19078C1[] = {
  NSPAIR(_ZN8S19078C1C1Ev),
  NSPAIR(_ZN8S19078C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19078C4;
extern VTBL_ENTRY _ZTI8S19078C4[];
extern  VTBL_ENTRY _ZTV8S19078C4[];
extern Class_Descriptor cd_S19078C3;
extern VTBL_ENTRY _ZTI8S19078C3[];
extern  VTBL_ENTRY _ZTV8S19078C3[];
extern Class_Descriptor cd_S19078C2;
extern VTBL_ENTRY _ZTI8S19078C2[];
extern  VTBL_ENTRY _ZTV8S19078C2[];
extern Class_Descriptor cd_S19078C5;
extern VTBL_ENTRY _ZTI8S19078C5[];
extern  VTBL_ENTRY _ZTV8S19078C5[];
static Base_Class bases_S19078C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19078C4,    ABISELECT(128,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19078C3,    ABISELECT(128,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19078C2,    ABISELECT(128,92), //bcp->offset
    12, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19078C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19078C1[];
extern void _ZN8S19078C53v22Ev();
extern void _ZN8S19078C12v1Ev();
extern void _ZN8S19078C12v2Ev();
extern void _ZN8S19078C12v3Ev();
extern void _ZN8S19078C12v4Ev();
extern void _ZN8S19078C12v5Ev();
extern void _ZN8S19078C12v6Ev();
extern void _ZN8S19078C42v7Ev();
extern void _ZN8S19078C42v8Ev();
extern void _ZN8S19078C42v9Ev();
extern void _ZN8S19078C43v10Ev();
extern void _ZN8S19078C43v11Ev();
extern void _ZN8S19078C33v12Ev();
extern void _ZN8S19078C33v13Ev();
extern void _ZN8S19078C33v14Ev();
extern void _ZN8S19078C33v15Ev();
extern void _ZN8S19078C23v16Ev();
extern void _ZN8S19078C23v17Ev();
extern void _ZN8S19078C23v18Ev();
extern void _ZN8S19078C23v19Ev();
extern void _ZN8S19078C23v20Ev();
extern void _ZN8S19078C23v21Ev();
static  VTBL_ENTRY vtc_S19078C1[] = {
  0,
  ABISELECT(128,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19078C1[0]),
  (VTBL_ENTRY)&_ZN8S19078C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19078C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19078C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19078C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19078C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19078C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19078C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI8S19078C1[0]),
  (VTBL_ENTRY)&_ZN8S19078C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19078C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19078C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19078C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19078C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19078C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19078C23v21Ev,
};
extern VTBL_ENTRY _ZTV8S19078C1[];
static  VTT_ENTRY vtt_S19078C1[] = {
  {&(_ZTV8S19078C1[5]),  5,44},
  {&(_ZTV8S19078C1[29]),  29,44},
  {&(_ZTV8S19078C1[5]),  5,44},
};
extern VTBL_ENTRY _ZTI8S19078C1[];
extern  VTBL_ENTRY _ZTV8S19078C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19078C1[];
Class_Descriptor cd_S19078C1 = {  "S19078C1", // class name
  bases_S19078C1, 4,
  &(vtc_S19078C1[0]), // expected_vtbl_contents
  &(vtt_S19078C1[0]), // expected_vtt_contents
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI8S19078C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19078C1),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19078C1),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19077C4  {
  virtual void  v7(); // _ZN8S19077C42v7Ev
  virtual void  v8(); // _ZN8S19077C42v8Ev
  virtual void  v9(); // _ZN8S19077C42v9Ev
  virtual void  v10(); // _ZN8S19077C43v10Ev
  virtual void  v11(); // _ZN8S19077C43v11Ev
  ~S19077C4(); // tgen
  S19077C4(); // tgen
};
//SIG(-1 S19077C4) C1{ v1 v2 v3 v4 v5}


void  S19077C4 ::v7(){vfunc_called(this, "_ZN8S19077C42v7Ev");}
void  S19077C4 ::v8(){vfunc_called(this, "_ZN8S19077C42v8Ev");}
void  S19077C4 ::v9(){vfunc_called(this, "_ZN8S19077C42v9Ev");}
void  S19077C4 ::v10(){vfunc_called(this, "_ZN8S19077C43v10Ev");}
void  S19077C4 ::v11(){vfunc_called(this, "_ZN8S19077C43v11Ev");}
S19077C4 ::~S19077C4(){ note_dtor("S19077C4", this);} // tgen
S19077C4 ::S19077C4(){ note_ctor("S19077C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19077C4C1Ev();
extern void _ZN8S19077C4D1Ev();
Name_Map name_map_S19077C4[] = {
  NSPAIR(_ZN8S19077C4C1Ev),
  NSPAIR(_ZN8S19077C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19077C4[];
extern void _ZN8S19077C42v7Ev();
extern void _ZN8S19077C42v8Ev();
extern void _ZN8S19077C42v9Ev();
extern void _ZN8S19077C43v10Ev();
extern void _ZN8S19077C43v11Ev();
static  VTBL_ENTRY vtc_S19077C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19077C4[0]),
  (VTBL_ENTRY)&_ZN8S19077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19077C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19077C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19077C43v11Ev,
};
extern VTBL_ENTRY _ZTI8S19077C4[];
extern  VTBL_ENTRY _ZTV8S19077C4[];
Class_Descriptor cd_S19077C4 = {  "S19077C4", // class name
  0,0,//no base classes
  &(vtc_S19077C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19077C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19077C4),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  S19077C3  : S19077C4 {
  ::S19077C4 s19077c3f0;
  virtual void  v12(); // _ZN8S19077C33v12Ev
  virtual void  v13(); // _ZN8S19077C33v13Ev
  virtual void  v14(); // _ZN8S19077C33v14Ev
  virtual void  v15(); // _ZN8S19077C33v15Ev
  ~S19077C3(); // tgen
  S19077C3(); // tgen
};
//SIG(-1 S19077C3) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S19077C3 ::v12(){vfunc_called(this, "_ZN8S19077C33v12Ev");}
void  S19077C3 ::v13(){vfunc_called(this, "_ZN8S19077C33v13Ev");}
void  S19077C3 ::v14(){vfunc_called(this, "_ZN8S19077C33v14Ev");}
void  S19077C3 ::v15(){vfunc_called(this, "_ZN8S19077C33v15Ev");}
S19077C3 ::~S19077C3(){ note_dtor("S19077C3", this);} // tgen
S19077C3 ::S19077C3(){ note_ctor("S19077C3", this);} // tgen

static void Test_S19077C3()
{
  extern Class_Descriptor cd_S19077C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19077C3, buf);
    S19077C3 *dp, &lv = *(dp=new (buf) S19077C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19077C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19077C3)");
    check_base_class_offset(lv, (S19077C4*), 0, "S19077C3");
    check_field_offset(lv, s19077c3f0, ABISELECT(8,4), "S19077C3.s19077c3f0");
    test_class_info(&lv, &cd_S19077C3);
    dp->~S19077C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19077C3(Test_S19077C3, "S19077C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19077C3C1Ev();
extern void _ZN8S19077C3D1Ev();
Name_Map name_map_S19077C3[] = {
  NSPAIR(_ZN8S19077C3C1Ev),
  NSPAIR(_ZN8S19077C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19077C4;
extern VTBL_ENTRY _ZTI8S19077C4[];
extern  VTBL_ENTRY _ZTV8S19077C4[];
static Base_Class bases_S19077C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19077C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19077C3[];
extern void _ZN8S19077C42v7Ev();
extern void _ZN8S19077C42v8Ev();
extern void _ZN8S19077C42v9Ev();
extern void _ZN8S19077C43v10Ev();
extern void _ZN8S19077C43v11Ev();
extern void _ZN8S19077C33v12Ev();
extern void _ZN8S19077C33v13Ev();
extern void _ZN8S19077C33v14Ev();
extern void _ZN8S19077C33v15Ev();
static  VTBL_ENTRY vtc_S19077C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19077C3[0]),
  (VTBL_ENTRY)&_ZN8S19077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19077C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19077C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19077C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v15Ev,
};
extern VTBL_ENTRY _ZTI8S19077C3[];
extern  VTBL_ENTRY _ZTV8S19077C3[];
Class_Descriptor cd_S19077C3 = {  "S19077C3", // class name
  bases_S19077C3, 1,
  &(vtc_S19077C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19077C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19077C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19077C2  : S19077C3 {
  virtual void  v16(); // _ZN8S19077C23v16Ev
  virtual void  v17(); // _ZN8S19077C23v17Ev
  virtual void  v18(); // _ZN8S19077C23v18Ev
  virtual void  v19(); // _ZN8S19077C23v19Ev
  virtual void  v20(); // _ZN8S19077C23v20Ev
  virtual void  v21(); // _ZN8S19077C23v21Ev
  ~S19077C2(); // tgen
  S19077C2(); // tgen
};
//SIG(-1 S19077C2) C1{ BC2{ BC3{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 v6}


void  S19077C2 ::v16(){vfunc_called(this, "_ZN8S19077C23v16Ev");}
void  S19077C2 ::v17(){vfunc_called(this, "_ZN8S19077C23v17Ev");}
void  S19077C2 ::v18(){vfunc_called(this, "_ZN8S19077C23v18Ev");}
void  S19077C2 ::v19(){vfunc_called(this, "_ZN8S19077C23v19Ev");}
void  S19077C2 ::v20(){vfunc_called(this, "_ZN8S19077C23v20Ev");}
void  S19077C2 ::v21(){vfunc_called(this, "_ZN8S19077C23v21Ev");}
S19077C2 ::~S19077C2(){ note_dtor("S19077C2", this);} // tgen
S19077C2 ::S19077C2(){ note_ctor("S19077C2", this);} // tgen

static void Test_S19077C2()
{
  extern Class_Descriptor cd_S19077C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19077C2, buf);
    S19077C2 *dp, &lv = *(dp=new (buf) S19077C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19077C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19077C2)");
    check_base_class_offset(lv, (S19077C4*)(S19077C3*), 0, "S19077C2");
    check_base_class_offset(lv, (S19077C3*), 0, "S19077C2");
    test_class_info(&lv, &cd_S19077C2);
    dp->~S19077C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19077C2(Test_S19077C2, "S19077C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19077C2C1Ev();
extern void _ZN8S19077C2D1Ev();
Name_Map name_map_S19077C2[] = {
  NSPAIR(_ZN8S19077C2C1Ev),
  NSPAIR(_ZN8S19077C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19077C4;
extern VTBL_ENTRY _ZTI8S19077C4[];
extern  VTBL_ENTRY _ZTV8S19077C4[];
extern Class_Descriptor cd_S19077C3;
extern VTBL_ENTRY _ZTI8S19077C3[];
extern  VTBL_ENTRY _ZTV8S19077C3[];
static Base_Class bases_S19077C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19077C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19077C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19077C2[];
extern void _ZN8S19077C42v7Ev();
extern void _ZN8S19077C42v8Ev();
extern void _ZN8S19077C42v9Ev();
extern void _ZN8S19077C43v10Ev();
extern void _ZN8S19077C43v11Ev();
extern void _ZN8S19077C33v12Ev();
extern void _ZN8S19077C33v13Ev();
extern void _ZN8S19077C33v14Ev();
extern void _ZN8S19077C33v15Ev();
extern void _ZN8S19077C23v16Ev();
extern void _ZN8S19077C23v17Ev();
extern void _ZN8S19077C23v18Ev();
extern void _ZN8S19077C23v19Ev();
extern void _ZN8S19077C23v20Ev();
extern void _ZN8S19077C23v21Ev();
static  VTBL_ENTRY vtc_S19077C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19077C2[0]),
  (VTBL_ENTRY)&_ZN8S19077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19077C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19077C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19077C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v21Ev,
};
extern VTBL_ENTRY _ZTI8S19077C2[];
extern  VTBL_ENTRY _ZTV8S19077C2[];
Class_Descriptor cd_S19077C2 = {  "S19077C2", // class name
  bases_S19077C2, 2,
  &(vtc_S19077C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19077C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19077C2),17, //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  S19077C5  {
  virtual void  v22(); // _ZN8S19077C53v22Ev
  ~S19077C5(); // tgen
  S19077C5(); // tgen
};
//SIG(-1 S19077C5) C1{ v1}


void  S19077C5 ::v22(){vfunc_called(this, "_ZN8S19077C53v22Ev");}
S19077C5 ::~S19077C5(){ note_dtor("S19077C5", this);} // tgen
S19077C5 ::S19077C5(){ note_ctor("S19077C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19077C5C1Ev();
extern void _ZN8S19077C5D1Ev();
Name_Map name_map_S19077C5[] = {
  NSPAIR(_ZN8S19077C5C1Ev),
  NSPAIR(_ZN8S19077C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19077C5[];
extern void _ZN8S19077C53v22Ev();
static  VTBL_ENTRY vtc_S19077C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19077C5[0]),
  (VTBL_ENTRY)&_ZN8S19077C53v22Ev,
};
extern VTBL_ENTRY _ZTI8S19077C5[];
extern  VTBL_ENTRY _ZTV8S19077C5[];
Class_Descriptor cd_S19077C5 = {  "S19077C5", // class name
  0,0,//no base classes
  &(vtc_S19077C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19077C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19077C5),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  S19077C1  : virtual S19077C2 , virtual S19077C5 {
  char s19077c1f0;
  int s19077c1f1;
  long s19077c1f2;
  long double s19077c1f3[6];
  virtual void  v1(); // _ZN8S19077C12v1Ev
  virtual void  v2(); // _ZN8S19077C12v2Ev
  virtual void  v3(); // _ZN8S19077C12v3Ev
  virtual void  v4(); // _ZN8S19077C12v4Ev
  virtual void  v5(); // _ZN8S19077C12v5Ev
  virtual void  v6(); // _ZN8S19077C12v6Ev
  ~S19077C1(); // tgen
  S19077C1(); // tgen
};
//SIG(1 S19077C1) C1{ VBC2{ BC3{ BC4{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC4} v16 v17 v18 v19 v20 v21} VBC5{ v22} v1 v2 v3 v4 v5 v6 Fc Fi Fl FD[6]}


void  S19077C1 ::v1(){vfunc_called(this, "_ZN8S19077C12v1Ev");}
void  S19077C1 ::v2(){vfunc_called(this, "_ZN8S19077C12v2Ev");}
void  S19077C1 ::v3(){vfunc_called(this, "_ZN8S19077C12v3Ev");}
void  S19077C1 ::v4(){vfunc_called(this, "_ZN8S19077C12v4Ev");}
void  S19077C1 ::v5(){vfunc_called(this, "_ZN8S19077C12v5Ev");}
void  S19077C1 ::v6(){vfunc_called(this, "_ZN8S19077C12v6Ev");}
S19077C1 ::~S19077C1(){ note_dtor("S19077C1", this);} // tgen
S19077C1 ::S19077C1(){ note_ctor("S19077C1", this);} // tgen

static void Test_S19077C1()
{
  extern Class_Descriptor cd_S19077C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,25)];
    init_test(&cd_S19077C1, buf);
    S19077C1 *dp, &lv = *(dp=new (buf) S19077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S19077C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19077C1)");
    check_base_class_offset(lv, (S19077C4*)(S19077C3*)(S19077C2*), ABISELECT(128,88), "S19077C1");
    check_base_class_offset(lv, (S19077C3*)(S19077C2*), ABISELECT(128,88), "S19077C1");
    check_base_class_offset(lv, (S19077C2*), ABISELECT(128,88), "S19077C1");
    check_base_class_offset(lv, (S19077C5*), 0, "S19077C1");
    check_field_offset(lv, s19077c1f0, ABISELECT(8,4), "S19077C1.s19077c1f0");
    check_field_offset(lv, s19077c1f1, ABISELECT(12,8), "S19077C1.s19077c1f1");
    check_field_offset(lv, s19077c1f2, ABISELECT(16,12), "S19077C1.s19077c1f2");
    check_field_offset(lv, s19077c1f3, ABISELECT(32,16), "S19077C1.s19077c1f3");
    test_class_info(&lv, &cd_S19077C1);
    dp->~S19077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19077C1(Test_S19077C1, "S19077C1", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN8S19077C1C1Ev();
extern void _ZN8S19077C1D1Ev();
Name_Map name_map_S19077C1[] = {
  NSPAIR(_ZN8S19077C1C1Ev),
  NSPAIR(_ZN8S19077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19077C4;
extern VTBL_ENTRY _ZTI8S19077C4[];
extern  VTBL_ENTRY _ZTV8S19077C4[];
extern Class_Descriptor cd_S19077C3;
extern VTBL_ENTRY _ZTI8S19077C3[];
extern  VTBL_ENTRY _ZTV8S19077C3[];
extern Class_Descriptor cd_S19077C2;
extern VTBL_ENTRY _ZTI8S19077C2[];
extern  VTBL_ENTRY _ZTV8S19077C2[];
extern Class_Descriptor cd_S19077C5;
extern VTBL_ENTRY _ZTI8S19077C5[];
extern  VTBL_ENTRY _ZTV8S19077C5[];
static Base_Class bases_S19077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19077C4,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19077C3,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19077C2,    ABISELECT(128,88), //bcp->offset
    12, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19077C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19077C1[];
extern void _ZN8S19077C53v22Ev();
extern void _ZN8S19077C12v1Ev();
extern void _ZN8S19077C12v2Ev();
extern void _ZN8S19077C12v3Ev();
extern void _ZN8S19077C12v4Ev();
extern void _ZN8S19077C12v5Ev();
extern void _ZN8S19077C12v6Ev();
extern void _ZN8S19077C42v7Ev();
extern void _ZN8S19077C42v8Ev();
extern void _ZN8S19077C42v9Ev();
extern void _ZN8S19077C43v10Ev();
extern void _ZN8S19077C43v11Ev();
extern void _ZN8S19077C33v12Ev();
extern void _ZN8S19077C33v13Ev();
extern void _ZN8S19077C33v14Ev();
extern void _ZN8S19077C33v15Ev();
extern void _ZN8S19077C23v16Ev();
extern void _ZN8S19077C23v17Ev();
extern void _ZN8S19077C23v18Ev();
extern void _ZN8S19077C23v19Ev();
extern void _ZN8S19077C23v20Ev();
extern void _ZN8S19077C23v21Ev();
static  VTBL_ENTRY vtc_S19077C1[] = {
  0,
  ABISELECT(128,88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19077C1[0]),
  (VTBL_ENTRY)&_ZN8S19077C53v22Ev,
  (VTBL_ENTRY)&_ZN8S19077C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19077C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19077C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19077C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19077C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19077C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S19077C1[0]),
  (VTBL_ENTRY)&_ZN8S19077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19077C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19077C43v10Ev,
  (VTBL_ENTRY)&_ZN8S19077C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v12Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v13Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19077C33v15Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v16Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19077C23v21Ev,
};
extern VTBL_ENTRY _ZTV8S19077C1[];
static  VTT_ENTRY vtt_S19077C1[] = {
  {&(_ZTV8S19077C1[5]),  5,44},
  {&(_ZTV8S19077C1[29]),  29,44},
  {&(_ZTV8S19077C1[5]),  5,44},
};
extern VTBL_ENTRY _ZTI8S19077C1[];
extern  VTBL_ENTRY _ZTV8S19077C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19077C1[];
Class_Descriptor cd_S19077C1 = {  "S19077C1", // class name
  bases_S19077C1, 4,
  &(vtc_S19077C1[0]), // expected_vtbl_contents
  &(vtt_S19077C1[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI8S19077C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19077C1),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19077C1),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1498C4  {
  virtual void  v6(); // _ZN7S1498C42v6Ev
  virtual void  v7(); // _ZN7S1498C42v7Ev
  virtual void  v8(); // _ZN7S1498C42v8Ev
  virtual void  v9(); // _ZN7S1498C42v9Ev
  virtual void  v10(); // _ZN7S1498C43v10Ev
  ~S1498C4(); // tgen
  S1498C4(); // tgen
};
//SIG(-1 S1498C4) C1{ v1 v2 v3 v4 v5}


void  S1498C4 ::v6(){vfunc_called(this, "_ZN7S1498C42v6Ev");}
void  S1498C4 ::v7(){vfunc_called(this, "_ZN7S1498C42v7Ev");}
void  S1498C4 ::v8(){vfunc_called(this, "_ZN7S1498C42v8Ev");}
void  S1498C4 ::v9(){vfunc_called(this, "_ZN7S1498C42v9Ev");}
void  S1498C4 ::v10(){vfunc_called(this, "_ZN7S1498C43v10Ev");}
S1498C4 ::~S1498C4(){ note_dtor("S1498C4", this);} // tgen
S1498C4 ::S1498C4(){ note_ctor("S1498C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1498C4C1Ev();
extern void _ZN7S1498C4D1Ev();
Name_Map name_map_S1498C4[] = {
  NSPAIR(_ZN7S1498C4C1Ev),
  NSPAIR(_ZN7S1498C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1498C4[];
extern void _ZN7S1498C42v6Ev();
extern void _ZN7S1498C42v7Ev();
extern void _ZN7S1498C42v8Ev();
extern void _ZN7S1498C42v9Ev();
extern void _ZN7S1498C43v10Ev();
static  VTBL_ENTRY vtc_S1498C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1498C4[0]),
  (VTBL_ENTRY)&_ZN7S1498C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1498C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S1498C4[];
extern  VTBL_ENTRY _ZTV7S1498C4[];
Class_Descriptor cd_S1498C4 = {  "S1498C4", // class name
  0,0,//no base classes
  &(vtc_S1498C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1498C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1498C4),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  S1498C3  : S1498C4 {
  ::S1498C4 s1498c3f0;
  virtual void  v11(); // _ZN7S1498C33v11Ev
  virtual void  v12(); // _ZN7S1498C33v12Ev
  virtual void  v13(); // _ZN7S1498C33v13Ev
  virtual void  v14(); // _ZN7S1498C33v14Ev
  ~S1498C3(); // tgen
  S1498C3(); // tgen
};
//SIG(-1 S1498C3) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S1498C3 ::v11(){vfunc_called(this, "_ZN7S1498C33v11Ev");}
void  S1498C3 ::v12(){vfunc_called(this, "_ZN7S1498C33v12Ev");}
void  S1498C3 ::v13(){vfunc_called(this, "_ZN7S1498C33v13Ev");}
void  S1498C3 ::v14(){vfunc_called(this, "_ZN7S1498C33v14Ev");}
S1498C3 ::~S1498C3(){ note_dtor("S1498C3", this);} // tgen
S1498C3 ::S1498C3(){ note_ctor("S1498C3", this);} // tgen

static void Test_S1498C3()
{
  extern Class_Descriptor cd_S1498C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1498C3, buf);
    S1498C3 *dp, &lv = *(dp=new (buf) S1498C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1498C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1498C3)");
    check_base_class_offset(lv, (S1498C4*), 0, "S1498C3");
    check_field_offset(lv, s1498c3f0, ABISELECT(8,4), "S1498C3.s1498c3f0");
    test_class_info(&lv, &cd_S1498C3);
    dp->~S1498C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1498C3(Test_S1498C3, "S1498C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1498C3C1Ev();
extern void _ZN7S1498C3D1Ev();
Name_Map name_map_S1498C3[] = {
  NSPAIR(_ZN7S1498C3C1Ev),
  NSPAIR(_ZN7S1498C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1498C4;
extern VTBL_ENTRY _ZTI7S1498C4[];
extern  VTBL_ENTRY _ZTV7S1498C4[];
static Base_Class bases_S1498C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1498C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1498C3[];
extern void _ZN7S1498C42v6Ev();
extern void _ZN7S1498C42v7Ev();
extern void _ZN7S1498C42v8Ev();
extern void _ZN7S1498C42v9Ev();
extern void _ZN7S1498C43v10Ev();
extern void _ZN7S1498C33v11Ev();
extern void _ZN7S1498C33v12Ev();
extern void _ZN7S1498C33v13Ev();
extern void _ZN7S1498C33v14Ev();
static  VTBL_ENTRY vtc_S1498C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1498C3[0]),
  (VTBL_ENTRY)&_ZN7S1498C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1498C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1498C3[];
extern  VTBL_ENTRY _ZTV7S1498C3[];
Class_Descriptor cd_S1498C3 = {  "S1498C3", // class name
  bases_S1498C3, 1,
  &(vtc_S1498C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1498C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1498C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1498C2  : S1498C3 {
  virtual void  v15(); // _ZN7S1498C23v15Ev
  virtual void  v16(); // _ZN7S1498C23v16Ev
  virtual void  v17(); // _ZN7S1498C23v17Ev
  virtual void  v18(); // _ZN7S1498C23v18Ev
  virtual void  v19(); // _ZN7S1498C23v19Ev
  virtual void  v20(); // _ZN7S1498C23v20Ev
  ~S1498C2(); // tgen
  S1498C2(); // tgen
};
//SIG(-1 S1498C2) C1{ BC2{ BC3{ v7 v8 v9 v10 v11} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 v6}


void  S1498C2 ::v15(){vfunc_called(this, "_ZN7S1498C23v15Ev");}
void  S1498C2 ::v16(){vfunc_called(this, "_ZN7S1498C23v16Ev");}
void  S1498C2 ::v17(){vfunc_called(this, "_ZN7S1498C23v17Ev");}
void  S1498C2 ::v18(){vfunc_called(this, "_ZN7S1498C23v18Ev");}
void  S1498C2 ::v19(){vfunc_called(this, "_ZN7S1498C23v19Ev");}
void  S1498C2 ::v20(){vfunc_called(this, "_ZN7S1498C23v20Ev");}
S1498C2 ::~S1498C2(){ note_dtor("S1498C2", this);} // tgen
S1498C2 ::S1498C2(){ note_ctor("S1498C2", this);} // tgen

static void Test_S1498C2()
{
  extern Class_Descriptor cd_S1498C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1498C2, buf);
    S1498C2 *dp, &lv = *(dp=new (buf) S1498C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1498C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1498C2)");
    check_base_class_offset(lv, (S1498C4*)(S1498C3*), 0, "S1498C2");
    check_base_class_offset(lv, (S1498C3*), 0, "S1498C2");
    test_class_info(&lv, &cd_S1498C2);
    dp->~S1498C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1498C2(Test_S1498C2, "S1498C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1498C2C1Ev();
extern void _ZN7S1498C2D1Ev();
Name_Map name_map_S1498C2[] = {
  NSPAIR(_ZN7S1498C2C1Ev),
  NSPAIR(_ZN7S1498C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1498C4;
extern VTBL_ENTRY _ZTI7S1498C4[];
extern  VTBL_ENTRY _ZTV7S1498C4[];
extern Class_Descriptor cd_S1498C3;
extern VTBL_ENTRY _ZTI7S1498C3[];
extern  VTBL_ENTRY _ZTV7S1498C3[];
static Base_Class bases_S1498C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1498C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1498C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1498C2[];
extern void _ZN7S1498C42v6Ev();
extern void _ZN7S1498C42v7Ev();
extern void _ZN7S1498C42v8Ev();
extern void _ZN7S1498C42v9Ev();
extern void _ZN7S1498C43v10Ev();
extern void _ZN7S1498C33v11Ev();
extern void _ZN7S1498C33v12Ev();
extern void _ZN7S1498C33v13Ev();
extern void _ZN7S1498C33v14Ev();
extern void _ZN7S1498C23v15Ev();
extern void _ZN7S1498C23v16Ev();
extern void _ZN7S1498C23v17Ev();
extern void _ZN7S1498C23v18Ev();
extern void _ZN7S1498C23v19Ev();
extern void _ZN7S1498C23v20Ev();
static  VTBL_ENTRY vtc_S1498C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1498C2[0]),
  (VTBL_ENTRY)&_ZN7S1498C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1498C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S1498C2[];
extern  VTBL_ENTRY _ZTV7S1498C2[];
Class_Descriptor cd_S1498C2 = {  "S1498C2", // class name
  bases_S1498C2, 2,
  &(vtc_S1498C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1498C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1498C2),17, //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  S1498C1  : S1498C2 {
  ::S20549C4 s1498c1f0;
  virtual void  v1(); // _ZN7S1498C12v1Ev
  virtual void  v2(); // _ZN7S1498C12v2Ev
  virtual void  v3(); // _ZN7S1498C12v3Ev
  virtual void  v4(); // _ZN7S1498C12v4Ev
  virtual void  v5(); // _ZN7S1498C12v5Ev
  ~S1498C1(); // tgen
  S1498C1(); // tgen
};
//SIG(1 S1498C1) C1{ BC2{ BC3{ BC4{ v6 v7 v8 v9 v10} v11 v12 v13 v14 FC4} v15 v16 v17 v18 v19 v20} v1 v2 v3 v4 v5 FC5{ v21 v22 v23 v24 Fp}}


void  S1498C1 ::v1(){vfunc_called(this, "_ZN7S1498C12v1Ev");}
void  S1498C1 ::v2(){vfunc_called(this, "_ZN7S1498C12v2Ev");}
void  S1498C1 ::v3(){vfunc_called(this, "_ZN7S1498C12v3Ev");}
void  S1498C1 ::v4(){vfunc_called(this, "_ZN7S1498C12v4Ev");}
void  S1498C1 ::v5(){vfunc_called(this, "_ZN7S1498C12v5Ev");}
S1498C1 ::~S1498C1(){ note_dtor("S1498C1", this);} // tgen
S1498C1 ::S1498C1(){ note_ctor("S1498C1", this);} // tgen

static void Test_S1498C1()
{
  extern Class_Descriptor cd_S1498C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1498C1, buf);
    S1498C1 *dp, &lv = *(dp=new (buf) S1498C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1498C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1498C1)");
    check_base_class_offset(lv, (S1498C4*)(S1498C3*)(S1498C2*), 0, "S1498C1");
    check_base_class_offset(lv, (S1498C3*)(S1498C2*), 0, "S1498C1");
    check_base_class_offset(lv, (S1498C2*), 0, "S1498C1");
    check_field_offset(lv, s1498c1f0, ABISELECT(16,8), "S1498C1.s1498c1f0");
    test_class_info(&lv, &cd_S1498C1);
    dp->~S1498C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1498C1(Test_S1498C1, "S1498C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1498C1C1Ev();
extern void _ZN7S1498C1D1Ev();
Name_Map name_map_S1498C1[] = {
  NSPAIR(_ZN7S1498C1C1Ev),
  NSPAIR(_ZN7S1498C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1498C4;
extern VTBL_ENTRY _ZTI7S1498C4[];
extern  VTBL_ENTRY _ZTV7S1498C4[];
extern Class_Descriptor cd_S1498C3;
extern VTBL_ENTRY _ZTI7S1498C3[];
extern  VTBL_ENTRY _ZTV7S1498C3[];
extern Class_Descriptor cd_S1498C2;
extern VTBL_ENTRY _ZTI7S1498C2[];
extern  VTBL_ENTRY _ZTV7S1498C2[];
static Base_Class bases_S1498C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1498C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1498C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1498C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1498C1[];
extern void _ZN7S1498C42v6Ev();
extern void _ZN7S1498C42v7Ev();
extern void _ZN7S1498C42v8Ev();
extern void _ZN7S1498C42v9Ev();
extern void _ZN7S1498C43v10Ev();
extern void _ZN7S1498C33v11Ev();
extern void _ZN7S1498C33v12Ev();
extern void _ZN7S1498C33v13Ev();
extern void _ZN7S1498C33v14Ev();
extern void _ZN7S1498C23v15Ev();
extern void _ZN7S1498C23v16Ev();
extern void _ZN7S1498C23v17Ev();
extern void _ZN7S1498C23v18Ev();
extern void _ZN7S1498C23v19Ev();
extern void _ZN7S1498C23v20Ev();
extern void _ZN7S1498C12v1Ev();
extern void _ZN7S1498C12v2Ev();
extern void _ZN7S1498C12v3Ev();
extern void _ZN7S1498C12v4Ev();
extern void _ZN7S1498C12v5Ev();
static  VTBL_ENTRY vtc_S1498C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1498C1[0]),
  (VTBL_ENTRY)&_ZN7S1498C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1498C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1498C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1498C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1498C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1498C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1498C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1498C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1498C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1498C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1498C1[];
extern  VTBL_ENTRY _ZTV7S1498C1[];
Class_Descriptor cd_S1498C1 = {  "S1498C1", // class name
  bases_S1498C1, 3,
  &(vtc_S1498C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1498C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1498C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1398C4  {
  short s1398c4f0[6];
  virtual void  v4(); // _ZN7S1398C42v4Ev
  virtual void  v5(); // _ZN7S1398C42v5Ev
  ~S1398C4(); // tgen
  S1398C4(); // tgen
};
//SIG(-1 S1398C4) C1{ v1 v2 Fs[6]}


void  S1398C4 ::v4(){vfunc_called(this, "_ZN7S1398C42v4Ev");}
void  S1398C4 ::v5(){vfunc_called(this, "_ZN7S1398C42v5Ev");}
S1398C4 ::~S1398C4(){ note_dtor("S1398C4", this);} // tgen
S1398C4 ::S1398C4(){ note_ctor("S1398C4", this);} // tgen

static void Test_S1398C4()
{
  extern Class_Descriptor cd_S1398C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1398C4, buf);
    S1398C4 *dp, &lv = *(dp=new (buf) S1398C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1398C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1398C4)");
    check_field_offset(lv, s1398c4f0, ABISELECT(8,4), "S1398C4.s1398c4f0");
    test_class_info(&lv, &cd_S1398C4);
    dp->~S1398C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1398C4(Test_S1398C4, "S1398C4", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S1398C4C1Ev();
extern void _ZN7S1398C4D1Ev();
Name_Map name_map_S1398C4[] = {
  NSPAIR(_ZN7S1398C4C1Ev),
  NSPAIR(_ZN7S1398C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1398C4[];
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
static  VTBL_ENTRY vtc_S1398C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1398C4[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S1398C4[];
extern  VTBL_ENTRY _ZTV7S1398C4[];
Class_Descriptor cd_S1398C4 = {  "S1398C4", // class name
  0,0,//no base classes
  &(vtc_S1398C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S1398C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1398C4),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  S1398C3  : S1398C4 {
  void *s1398c3f0;
  virtual void  v6(); // _ZN7S1398C32v6Ev
  virtual void  v7(); // _ZN7S1398C32v7Ev
  ~S1398C3(); // tgen
  S1398C3(); // tgen
};
//SIG(-1 S1398C3) C1{ BC2{ v3 v4 Fs[6]} v1 v2 Fp}


void  S1398C3 ::v6(){vfunc_called(this, "_ZN7S1398C32v6Ev");}
void  S1398C3 ::v7(){vfunc_called(this, "_ZN7S1398C32v7Ev");}
S1398C3 ::~S1398C3(){ note_dtor("S1398C3", this);} // tgen
S1398C3 ::S1398C3(){ note_ctor("S1398C3", this);} // tgen

static void Test_S1398C3()
{
  extern Class_Descriptor cd_S1398C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1398C3, buf);
    S1398C3 *dp, &lv = *(dp=new (buf) S1398C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1398C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1398C3)");
    check_base_class_offset(lv, (S1398C4*), 0, "S1398C3");
    check_field_offset(lv, s1398c3f0, ABISELECT(24,16), "S1398C3.s1398c3f0");
    test_class_info(&lv, &cd_S1398C3);
    dp->~S1398C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1398C3(Test_S1398C3, "S1398C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1398C3C1Ev();
extern void _ZN7S1398C3D1Ev();
Name_Map name_map_S1398C3[] = {
  NSPAIR(_ZN7S1398C3C1Ev),
  NSPAIR(_ZN7S1398C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1398C4;
extern VTBL_ENTRY _ZTI7S1398C4[];
extern  VTBL_ENTRY _ZTV7S1398C4[];
static Base_Class bases_S1398C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1398C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1398C3[];
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
extern void _ZN7S1398C32v6Ev();
extern void _ZN7S1398C32v7Ev();
static  VTBL_ENTRY vtc_S1398C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1398C3[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1398C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1398C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S1398C3[];
extern  VTBL_ENTRY _ZTV7S1398C3[];
Class_Descriptor cd_S1398C3 = {  "S1398C3", // class name
  bases_S1398C3, 1,
  &(vtc_S1398C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1398C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1398C3),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  S1398C5  : S1398C4 {
  short s1398c5f0[9];
  __tsi64 s1398c5f1;
  virtual void  v8(); // _ZN7S1398C52v8Ev
  virtual void  v9(); // _ZN7S1398C52v9Ev
  virtual void  v10(); // _ZN7S1398C53v10Ev
  virtual void  v11(); // _ZN7S1398C53v11Ev
  virtual void  v12(); // _ZN7S1398C53v12Ev
  virtual void  v13(); // _ZN7S1398C53v13Ev
  ~S1398C5(); // tgen
  S1398C5(); // tgen
};
//SIG(-1 S1398C5) C1{ BC2{ v7 v8 Fs[6]} v1 v2 v3 v4 v5 v6 Fs[9] FL}


void  S1398C5 ::v8(){vfunc_called(this, "_ZN7S1398C52v8Ev");}
void  S1398C5 ::v9(){vfunc_called(this, "_ZN7S1398C52v9Ev");}
void  S1398C5 ::v10(){vfunc_called(this, "_ZN7S1398C53v10Ev");}
void  S1398C5 ::v11(){vfunc_called(this, "_ZN7S1398C53v11Ev");}
void  S1398C5 ::v12(){vfunc_called(this, "_ZN7S1398C53v12Ev");}
void  S1398C5 ::v13(){vfunc_called(this, "_ZN7S1398C53v13Ev");}
S1398C5 ::~S1398C5(){ note_dtor("S1398C5", this);} // tgen
S1398C5 ::S1398C5(){ note_ctor("S1398C5", this);} // tgen

static void Test_S1398C5()
{
  extern Class_Descriptor cd_S1398C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S1398C5, buf);
    S1398C5 *dp, &lv = *(dp=new (buf) S1398C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S1398C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1398C5)");
    check_base_class_offset(lv, (S1398C4*), 0, "S1398C5");
    check_field_offset(lv, s1398c5f0, ABISELECT(20,16), "S1398C5.s1398c5f0");
    check_field_offset(lv, s1398c5f1, ABISELECT(40,36), "S1398C5.s1398c5f1");
    test_class_info(&lv, &cd_S1398C5);
    dp->~S1398C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1398C5(Test_S1398C5, "S1398C5", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN7S1398C5C1Ev();
extern void _ZN7S1398C5D1Ev();
Name_Map name_map_S1398C5[] = {
  NSPAIR(_ZN7S1398C5C1Ev),
  NSPAIR(_ZN7S1398C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1398C4;
extern VTBL_ENTRY _ZTI7S1398C4[];
extern  VTBL_ENTRY _ZTV7S1398C4[];
static Base_Class bases_S1398C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1398C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1398C5[];
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
extern void _ZN7S1398C52v8Ev();
extern void _ZN7S1398C52v9Ev();
extern void _ZN7S1398C53v10Ev();
extern void _ZN7S1398C53v11Ev();
extern void _ZN7S1398C53v12Ev();
extern void _ZN7S1398C53v13Ev();
static  VTBL_ENTRY vtc_S1398C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1398C5[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1398C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1398C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v13Ev,
};
extern VTBL_ENTRY _ZTI7S1398C5[];
extern  VTBL_ENTRY _ZTV7S1398C5[];
Class_Descriptor cd_S1398C5 = {  "S1398C5", // class name
  bases_S1398C5, 1,
  &(vtc_S1398C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI7S1398C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1398C5),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  S1398C2  : S1398C3 , virtual S1398C5 , virtual S1398C4 {
  virtual void  v14(); // _ZN7S1398C23v14Ev
  virtual void  v15(); // _ZN7S1398C23v15Ev
  virtual void  v16(); // _ZN7S1398C23v16Ev
  virtual void  v17(); // _ZN7S1398C23v17Ev
  virtual void  v18(); // _ZN7S1398C23v18Ev
  ~S1398C2(); // tgen
  S1398C2(); // tgen
};
//SIG(-1 S1398C2) C1{ BC2{ BC3{ v6 v7 Fs[6]} v8 v9 Fp} VBC4{ BC3 v10 v11 v12 v13 v14 v15 Fs[9] FL} VBC3 v1 v2 v3 v4 v5}


void  S1398C2 ::v14(){vfunc_called(this, "_ZN7S1398C23v14Ev");}
void  S1398C2 ::v15(){vfunc_called(this, "_ZN7S1398C23v15Ev");}
void  S1398C2 ::v16(){vfunc_called(this, "_ZN7S1398C23v16Ev");}
void  S1398C2 ::v17(){vfunc_called(this, "_ZN7S1398C23v17Ev");}
void  S1398C2 ::v18(){vfunc_called(this, "_ZN7S1398C23v18Ev");}
S1398C2 ::~S1398C2(){ note_dtor("S1398C2", this);} // tgen
S1398C2 ::S1398C2(){ note_ctor("S1398C2", this);} // tgen

static void Test_S1398C2()
{
  extern Class_Descriptor cd_S1398C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,21)];
    init_test(&cd_S1398C2, buf);
    S1398C2 *dp, &lv = *(dp=new (buf) S1398C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S1398C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1398C2)");
    check_base_class_offset(lv, (S1398C4*)(S1398C3*), 0, "S1398C2");
    check_base_class_offset(lv, (S1398C3*), 0, "S1398C2");
    check_base_class_offset(lv, (S1398C4*)(S1398C5*), ABISELECT(32,20), "S1398C2");
    check_base_class_offset(lv, (S1398C5*), ABISELECT(32,20), "S1398C2");
    /*is_ambiguous_... S1398C2::S1398C4 */ AMB_check_base_class_offset(lv, (S1398C4*), ABISELECT(80,64), "S1398C2");
    test_class_info(&lv, &cd_S1398C2);
    dp->~S1398C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1398C2(Test_S1398C2, "S1398C2", ABISELECT(104,80));

#else // __cplusplus

extern void _ZN7S1398C2C1Ev();
extern void _ZN7S1398C2D1Ev();
Name_Map name_map_S1398C2[] = {
  NSPAIR(_ZN7S1398C2C1Ev),
  NSPAIR(_ZN7S1398C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1398C4;
extern VTBL_ENTRY _ZTI7S1398C4[];
extern  VTBL_ENTRY _ZTV7S1398C4[];
extern Class_Descriptor cd_S1398C3;
extern VTBL_ENTRY _ZTI7S1398C3[];
extern  VTBL_ENTRY _ZTV7S1398C3[];
extern Class_Descriptor cd_S1398C4;
extern VTBL_ENTRY _ZTI7S1398C4[];
extern  VTBL_ENTRY _ZTV7S1398C4[];
extern Class_Descriptor cd_S1398C5;
extern VTBL_ENTRY _ZTI7S1398C5[];
extern  VTBL_ENTRY _ZTV7S1398C5[];
extern Class_Descriptor cd_S1398C4;
extern VTBL_ENTRY _ZTI7S1398C4[];
extern  VTBL_ENTRY _ZTV7S1398C4[];
static Base_Class bases_S1398C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1398C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1398C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1398C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1398C5,    ABISELECT(32,20), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1398C4,    ABISELECT(80,64), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1398C2[];
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
extern void _ZN7S1398C32v6Ev();
extern void _ZN7S1398C32v7Ev();
extern void _ZN7S1398C23v14Ev();
extern void _ZN7S1398C23v15Ev();
extern void _ZN7S1398C23v16Ev();
extern void _ZN7S1398C23v17Ev();
extern void _ZN7S1398C23v18Ev();
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
extern void _ZN7S1398C52v8Ev();
extern void _ZN7S1398C52v9Ev();
extern void _ZN7S1398C53v10Ev();
extern void _ZN7S1398C53v11Ev();
extern void _ZN7S1398C53v12Ev();
extern void _ZN7S1398C53v13Ev();
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
static  VTBL_ENTRY vtc_S1398C2[] = {
  ABISELECT(80,64),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1398C2[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1398C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1398C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1398C2[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1398C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1398C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v13Ev,
  0,
  0,
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI7S1398C2[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S1398C2[];
static  VTT_ENTRY vtt_S1398C2[] = {
  {&(_ZTV7S1398C2[4]),  4,37},
  {&(_ZTV7S1398C2[23]),  23,37},
  {&(_ZTV7S1398C2[35]),  35,37},
};
extern VTBL_ENTRY _ZTI7S1398C2[];
extern  VTBL_ENTRY _ZTV7S1398C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1398C2[];
Class_Descriptor cd_S1398C2 = {  "S1398C2", // class name
  bases_S1398C2, 5,
  &(vtc_S1398C2[0]), // expected_vtbl_contents
  &(vtt_S1398C2[0]), // expected_vtt_contents
  ABISELECT(104,80), // object size
  NSPAIRA(_ZTI7S1398C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1398C2),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1398C2),3, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1398C1  : S1398C2 {
  virtual  ~S1398C1(); // _ZN7S1398C1D2Ev
  virtual void  v1(); // _ZN7S1398C12v1Ev
  virtual void  v2(); // _ZN7S1398C12v2Ev
  virtual void  v3(); // _ZN7S1398C12v3Ev
  S1398C1(); // tgen
};
//SIG(1 S1398C1) C1{ BC2{ BC3{ BC4{ v4 v5 Fs[6]} v6 v7 Fp} VBC5{ BC4 v8 v9 v10 v11 v12 v13 Fs[9] FL} VBC4 v14 v15 v16 v17 v18} vd v1 v2 v3}


 S1398C1 ::~S1398C1(){ note_dtor("S1398C1", this);}
void  S1398C1 ::v1(){vfunc_called(this, "_ZN7S1398C12v1Ev");}
void  S1398C1 ::v2(){vfunc_called(this, "_ZN7S1398C12v2Ev");}
void  S1398C1 ::v3(){vfunc_called(this, "_ZN7S1398C12v3Ev");}
S1398C1 ::S1398C1(){ note_ctor("S1398C1", this);} // tgen

static void Test_S1398C1()
{
  extern Class_Descriptor cd_S1398C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,21)];
    init_test(&cd_S1398C1, buf);
    S1398C1 *dp, &lv = *(dp=new (buf) S1398C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S1398C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1398C1)");
    check_base_class_offset(lv, (S1398C4*)(S1398C3*)(S1398C2*), 0, "S1398C1");
    check_base_class_offset(lv, (S1398C3*)(S1398C2*), 0, "S1398C1");
    check_base_class_offset(lv, (S1398C4*)(S1398C5*), ABISELECT(32,20), "S1398C1");
    check_base_class_offset(lv, (S1398C5*)(S1398C2*), ABISELECT(32,20), "S1398C1");
    /*is_ambiguous_... S1398C2::S1398C4 */ AMB_check_base_class_offset(lv, (S1398C4*)(S1398C2*), ABISELECT(80,64), "S1398C1");
    check_base_class_offset(lv, (S1398C2*), 0, "S1398C1");
    test_class_info(&lv, &cd_S1398C1);
    dp->~S1398C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1398C1(Test_S1398C1, "S1398C1", ABISELECT(104,80));

#else // __cplusplus

extern void _ZN7S1398C1C1Ev();
extern void _ZN7S1398C1D2Ev();
Name_Map name_map_S1398C1[] = {
  NSPAIR(_ZN7S1398C1C1Ev),
  NSPAIR(_ZN7S1398C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1398C4;
extern VTBL_ENTRY _ZTI7S1398C4[];
extern  VTBL_ENTRY _ZTV7S1398C4[];
extern Class_Descriptor cd_S1398C3;
extern VTBL_ENTRY _ZTI7S1398C3[];
extern  VTBL_ENTRY _ZTV7S1398C3[];
extern Class_Descriptor cd_S1398C4;
extern VTBL_ENTRY _ZTI7S1398C4[];
extern  VTBL_ENTRY _ZTV7S1398C4[];
extern Class_Descriptor cd_S1398C5;
extern VTBL_ENTRY _ZTI7S1398C5[];
extern  VTBL_ENTRY _ZTV7S1398C5[];
extern Class_Descriptor cd_S1398C4;
extern VTBL_ENTRY _ZTI7S1398C4[];
extern  VTBL_ENTRY _ZTV7S1398C4[];
extern Class_Descriptor cd_S1398C2;
extern VTBL_ENTRY _ZTI7S1398C2[];
extern  VTBL_ENTRY _ZTV7S1398C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1398C2[];
static Base_Class bases_S1398C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1398C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1398C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1398C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1398C5,    ABISELECT(32,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1398C4,    ABISELECT(80,64), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1398C2,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1398C1[];
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
extern void _ZN7S1398C32v6Ev();
extern void _ZN7S1398C32v7Ev();
extern void _ZN7S1398C23v14Ev();
extern void _ZN7S1398C23v15Ev();
extern void _ZN7S1398C23v16Ev();
extern void _ZN7S1398C23v17Ev();
extern void _ZN7S1398C23v18Ev();
extern void _ZN7S1398C1D1Ev();
extern void _ZN7S1398C1D0Ev();
extern void _ZN7S1398C12v1Ev();
extern void _ZN7S1398C12v2Ev();
extern void _ZN7S1398C12v3Ev();
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
extern void _ZN7S1398C52v8Ev();
extern void _ZN7S1398C52v9Ev();
extern void _ZN7S1398C53v10Ev();
extern void _ZN7S1398C53v11Ev();
extern void _ZN7S1398C53v12Ev();
extern void _ZN7S1398C53v13Ev();
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
static  VTBL_ENTRY vtc_S1398C1[] = {
  ABISELECT(80,64),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1398C1[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1398C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1398C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1398C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1398C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1398C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1398C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1398C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1398C1[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1398C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1398C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v13Ev,
  0,
  0,
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI7S1398C1[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S1398C1[];
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
extern void _ZN7S1398C32v6Ev();
extern void _ZN7S1398C32v7Ev();
extern void _ZN7S1398C23v14Ev();
extern void _ZN7S1398C23v15Ev();
extern void _ZN7S1398C23v16Ev();
extern void _ZN7S1398C23v17Ev();
extern void _ZN7S1398C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S1398C2__7S1398C1[] = {
  ABISELECT(80,64),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1398C2[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1398C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1398C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1398C23v18Ev,
};
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
extern void _ZN7S1398C52v8Ev();
extern void _ZN7S1398C52v9Ev();
extern void _ZN7S1398C53v10Ev();
extern void _ZN7S1398C53v11Ev();
extern void _ZN7S1398C53v12Ev();
extern void _ZN7S1398C53v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1398C5__7S1398C2__7S1398C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1398C2[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1398C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1398C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1398C53v13Ev,
};
extern void _ZN7S1398C42v4Ev();
extern void _ZN7S1398C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S1398C4__A2__7S1398C2__7S1398C1[] = {
  0,
  0,
  ABISELECT(-80,-64),
  (VTBL_ENTRY)&(_ZTI7S1398C2[0]),
  (VTBL_ENTRY)&_ZN7S1398C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1398C42v5Ev,
};
static  VTT_ENTRY vtt_S1398C1[] = {
  {&(_ZTV7S1398C1[4]),  4,42},
  {&(_tg__ZTV7S1398C2__7S1398C1[4]),  4,13},
  {&(_tg__ZTV7S1398C5__7S1398C2__7S1398C1[10]),  10,18},
  {&(_tg__ZTV7S1398C4__A2__7S1398C2__7S1398C1[4]),  4,6},
  {&(_ZTV7S1398C1[28]),  28,42},
  {&(_ZTV7S1398C1[40]),  40,42},
};
extern VTBL_ENTRY _ZTI7S1398C1[];
extern  VTBL_ENTRY _ZTV7S1398C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1398C1[];
Class_Descriptor cd_S1398C1 = {  "S1398C1", // class name
  bases_S1398C1, 6,
  &(vtc_S1398C1[0]), // expected_vtbl_contents
  &(vtt_S1398C1[0]), // expected_vtt_contents
  ABISELECT(104,80), // object size
  NSPAIRA(_ZTI7S1398C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1398C1),42, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1398C1),6, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3383C3  {
  char s3383c3f0;
  virtual void  v7(); // _ZN7S3383C32v7Ev
  virtual void  v8(); // _ZN7S3383C32v8Ev
  virtual void  v9(); // _ZN7S3383C32v9Ev
  virtual void  v10(); // _ZN7S3383C33v10Ev
  virtual void  v11(); // _ZN7S3383C33v11Ev
  virtual void  v12(); // _ZN7S3383C33v12Ev
  ~S3383C3(); // tgen
  S3383C3(); // tgen
};
//SIG(-1 S3383C3) C1{ v1 v2 v3 v4 v5 v6 Fc}


void  S3383C3 ::v7(){vfunc_called(this, "_ZN7S3383C32v7Ev");}
void  S3383C3 ::v8(){vfunc_called(this, "_ZN7S3383C32v8Ev");}
void  S3383C3 ::v9(){vfunc_called(this, "_ZN7S3383C32v9Ev");}
void  S3383C3 ::v10(){vfunc_called(this, "_ZN7S3383C33v10Ev");}
void  S3383C3 ::v11(){vfunc_called(this, "_ZN7S3383C33v11Ev");}
void  S3383C3 ::v12(){vfunc_called(this, "_ZN7S3383C33v12Ev");}
S3383C3 ::~S3383C3(){ note_dtor("S3383C3", this);} // tgen
S3383C3 ::S3383C3(){ note_ctor("S3383C3", this);} // tgen

static void Test_S3383C3()
{
  extern Class_Descriptor cd_S3383C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3383C3, buf);
    S3383C3 *dp, &lv = *(dp=new (buf) S3383C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3383C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3383C3)");
    check_field_offset(lv, s3383c3f0, ABISELECT(8,4), "S3383C3.s3383c3f0");
    test_class_info(&lv, &cd_S3383C3);
    dp->~S3383C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3383C3(Test_S3383C3, "S3383C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3383C3C1Ev();
extern void _ZN7S3383C3D1Ev();
Name_Map name_map_S3383C3[] = {
  NSPAIR(_ZN7S3383C3C1Ev),
  NSPAIR(_ZN7S3383C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3383C3[];
extern void _ZN7S3383C32v7Ev();
extern void _ZN7S3383C32v8Ev();
extern void _ZN7S3383C32v9Ev();
extern void _ZN7S3383C33v10Ev();
extern void _ZN7S3383C33v11Ev();
extern void _ZN7S3383C33v12Ev();
static  VTBL_ENTRY vtc_S3383C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3383C3[0]),
  (VTBL_ENTRY)&_ZN7S3383C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3383C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3383C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3383C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3383C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3383C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S3383C3[];
extern  VTBL_ENTRY _ZTV7S3383C3[];
Class_Descriptor cd_S3383C3 = {  "S3383C3", // class name
  0,0,//no base classes
  &(vtc_S3383C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3383C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3383C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3383C2  : S3383C3 {
  int s3383c2f0;
  virtual void  v13(); // _ZN7S3383C23v13Ev
  virtual void  v14(); // _ZN7S3383C23v14Ev
  ~S3383C2(); // tgen
  S3383C2(); // tgen
};
//SIG(-1 S3383C2) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fc} v1 v2 Fi}


void  S3383C2 ::v13(){vfunc_called(this, "_ZN7S3383C23v13Ev");}
void  S3383C2 ::v14(){vfunc_called(this, "_ZN7S3383C23v14Ev");}
S3383C2 ::~S3383C2(){ note_dtor("S3383C2", this);} // tgen
S3383C2 ::S3383C2(){ note_ctor("S3383C2", this);} // tgen

static void Test_S3383C2()
{
  extern Class_Descriptor cd_S3383C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3383C2, buf);
    S3383C2 *dp, &lv = *(dp=new (buf) S3383C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3383C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3383C2)");
    check_base_class_offset(lv, (S3383C3*), 0, "S3383C2");
    check_field_offset(lv, s3383c2f0, ABISELECT(12,8), "S3383C2.s3383c2f0");
    test_class_info(&lv, &cd_S3383C2);
    dp->~S3383C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3383C2(Test_S3383C2, "S3383C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3383C2C1Ev();
extern void _ZN7S3383C2D1Ev();
Name_Map name_map_S3383C2[] = {
  NSPAIR(_ZN7S3383C2C1Ev),
  NSPAIR(_ZN7S3383C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3383C3;
extern VTBL_ENTRY _ZTI7S3383C3[];
extern  VTBL_ENTRY _ZTV7S3383C3[];
static Base_Class bases_S3383C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3383C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3383C2[];
extern void _ZN7S3383C32v7Ev();
extern void _ZN7S3383C32v8Ev();
extern void _ZN7S3383C32v9Ev();
extern void _ZN7S3383C33v10Ev();
extern void _ZN7S3383C33v11Ev();
extern void _ZN7S3383C33v12Ev();
extern void _ZN7S3383C23v13Ev();
extern void _ZN7S3383C23v14Ev();
static  VTBL_ENTRY vtc_S3383C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3383C2[0]),
  (VTBL_ENTRY)&_ZN7S3383C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3383C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3383C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3383C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3383C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3383C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3383C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3383C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S3383C2[];
extern  VTBL_ENTRY _ZTV7S3383C2[];
Class_Descriptor cd_S3383C2 = {  "S3383C2", // class name
  bases_S3383C2, 1,
  &(vtc_S3383C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3383C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3383C2),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  S3383C5  {
  virtual void  v15(); // _ZN7S3383C53v15Ev
  virtual void  v16(); // _ZN7S3383C53v16Ev
  virtual void  v17(); // _ZN7S3383C53v17Ev
  virtual void  v18(); // _ZN7S3383C53v18Ev
  virtual void  v19(); // _ZN7S3383C53v19Ev
  ~S3383C5(); // tgen
  S3383C5(); // tgen
};
//SIG(-1 S3383C5) C1{ v1 v2 v3 v4 v5}


void  S3383C5 ::v15(){vfunc_called(this, "_ZN7S3383C53v15Ev");}
void  S3383C5 ::v16(){vfunc_called(this, "_ZN7S3383C53v16Ev");}
void  S3383C5 ::v17(){vfunc_called(this, "_ZN7S3383C53v17Ev");}
void  S3383C5 ::v18(){vfunc_called(this, "_ZN7S3383C53v18Ev");}
void  S3383C5 ::v19(){vfunc_called(this, "_ZN7S3383C53v19Ev");}
S3383C5 ::~S3383C5(){ note_dtor("S3383C5", this);} // tgen
S3383C5 ::S3383C5(){ note_ctor("S3383C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3383C5C1Ev();
extern void _ZN7S3383C5D1Ev();
Name_Map name_map_S3383C5[] = {
  NSPAIR(_ZN7S3383C5C1Ev),
  NSPAIR(_ZN7S3383C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3383C5[];
extern void _ZN7S3383C53v15Ev();
extern void _ZN7S3383C53v16Ev();
extern void _ZN7S3383C53v17Ev();
extern void _ZN7S3383C53v18Ev();
extern void _ZN7S3383C53v19Ev();
static  VTBL_ENTRY vtc_S3383C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3383C5[0]),
  (VTBL_ENTRY)&_ZN7S3383C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v16Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v17Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v18Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v19Ev,
};
extern VTBL_ENTRY _ZTI7S3383C5[];
extern  VTBL_ENTRY _ZTV7S3383C5[];
Class_Descriptor cd_S3383C5 = {  "S3383C5", // class name
  0,0,//no base classes
  &(vtc_S3383C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3383C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3383C5),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  S3383C4  : S3383C5 {
  ::S3383C5 s3383c4f0;
  virtual void  v20(); // _ZN7S3383C43v20Ev
  virtual void  v21(); // _ZN7S3383C43v21Ev
  virtual void  v22(); // _ZN7S3383C43v22Ev
  virtual void  v23(); // _ZN7S3383C43v23Ev
  ~S3383C4(); // tgen
  S3383C4(); // tgen
};
//SIG(-1 S3383C4) C1{ BC2{ v5 v6 v7 v8 v9} v1 v2 v3 v4 FC2}


void  S3383C4 ::v20(){vfunc_called(this, "_ZN7S3383C43v20Ev");}
void  S3383C4 ::v21(){vfunc_called(this, "_ZN7S3383C43v21Ev");}
void  S3383C4 ::v22(){vfunc_called(this, "_ZN7S3383C43v22Ev");}
void  S3383C4 ::v23(){vfunc_called(this, "_ZN7S3383C43v23Ev");}
S3383C4 ::~S3383C4(){ note_dtor("S3383C4", this);} // tgen
S3383C4 ::S3383C4(){ note_ctor("S3383C4", this);} // tgen

static void Test_S3383C4()
{
  extern Class_Descriptor cd_S3383C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3383C4, buf);
    S3383C4 *dp, &lv = *(dp=new (buf) S3383C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3383C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3383C4)");
    check_base_class_offset(lv, (S3383C5*), 0, "S3383C4");
    check_field_offset(lv, s3383c4f0, ABISELECT(8,4), "S3383C4.s3383c4f0");
    test_class_info(&lv, &cd_S3383C4);
    dp->~S3383C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3383C4(Test_S3383C4, "S3383C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3383C4C1Ev();
extern void _ZN7S3383C4D1Ev();
Name_Map name_map_S3383C4[] = {
  NSPAIR(_ZN7S3383C4C1Ev),
  NSPAIR(_ZN7S3383C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3383C5;
extern VTBL_ENTRY _ZTI7S3383C5[];
extern  VTBL_ENTRY _ZTV7S3383C5[];
static Base_Class bases_S3383C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3383C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3383C4[];
extern void _ZN7S3383C53v15Ev();
extern void _ZN7S3383C53v16Ev();
extern void _ZN7S3383C53v17Ev();
extern void _ZN7S3383C53v18Ev();
extern void _ZN7S3383C53v19Ev();
extern void _ZN7S3383C43v20Ev();
extern void _ZN7S3383C43v21Ev();
extern void _ZN7S3383C43v22Ev();
extern void _ZN7S3383C43v23Ev();
static  VTBL_ENTRY vtc_S3383C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3383C4[0]),
  (VTBL_ENTRY)&_ZN7S3383C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v16Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v17Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v18Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3383C43v20Ev,
  (VTBL_ENTRY)&_ZN7S3383C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3383C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3383C43v23Ev,
};
extern VTBL_ENTRY _ZTI7S3383C4[];
extern  VTBL_ENTRY _ZTV7S3383C4[];
Class_Descriptor cd_S3383C4 = {  "S3383C4", // class name
  bases_S3383C4, 1,
  &(vtc_S3383C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3383C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3383C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3383C1  : S3383C2 , virtual S3383C4 {
  virtual void  v1(); // _ZN7S3383C12v1Ev
  virtual void  v2(); // _ZN7S3383C12v2Ev
  virtual void  v3(); // _ZN7S3383C12v3Ev
  virtual void  v4(); // _ZN7S3383C12v4Ev
  virtual void  v5(); // _ZN7S3383C12v5Ev
  virtual void  v6(); // _ZN7S3383C12v6Ev
  ~S3383C1(); // tgen
  S3383C1(); // tgen
};
//SIG(1 S3383C1) C1{ BC2{ BC3{ v7 v8 v9 v10 v11 v12 Fc} v13 v14 Fi} VBC4{ BC5{ v15 v16 v17 v18 v19} v20 v21 v22 v23 FC5} v1 v2 v3 v4 v5 v6}


void  S3383C1 ::v1(){vfunc_called(this, "_ZN7S3383C12v1Ev");}
void  S3383C1 ::v2(){vfunc_called(this, "_ZN7S3383C12v2Ev");}
void  S3383C1 ::v3(){vfunc_called(this, "_ZN7S3383C12v3Ev");}
void  S3383C1 ::v4(){vfunc_called(this, "_ZN7S3383C12v4Ev");}
void  S3383C1 ::v5(){vfunc_called(this, "_ZN7S3383C12v5Ev");}
void  S3383C1 ::v6(){vfunc_called(this, "_ZN7S3383C12v6Ev");}
S3383C1 ::~S3383C1(){ note_dtor("S3383C1", this);} // tgen
S3383C1 ::S3383C1(){ note_ctor("S3383C1", this);} // tgen

static void Test_S3383C1()
{
  extern Class_Descriptor cd_S3383C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3383C1, buf);
    S3383C1 *dp, &lv = *(dp=new (buf) S3383C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3383C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3383C1)");
    check_base_class_offset(lv, (S3383C3*)(S3383C2*), 0, "S3383C1");
    check_base_class_offset(lv, (S3383C2*), 0, "S3383C1");
    check_base_class_offset(lv, (S3383C5*)(S3383C4*), ABISELECT(16,12), "S3383C1");
    check_base_class_offset(lv, (S3383C4*), ABISELECT(16,12), "S3383C1");
    test_class_info(&lv, &cd_S3383C1);
    dp->~S3383C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3383C1(Test_S3383C1, "S3383C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3383C1C1Ev();
extern void _ZN7S3383C1D1Ev();
Name_Map name_map_S3383C1[] = {
  NSPAIR(_ZN7S3383C1C1Ev),
  NSPAIR(_ZN7S3383C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3383C3;
extern VTBL_ENTRY _ZTI7S3383C3[];
extern  VTBL_ENTRY _ZTV7S3383C3[];
extern Class_Descriptor cd_S3383C2;
extern VTBL_ENTRY _ZTI7S3383C2[];
extern  VTBL_ENTRY _ZTV7S3383C2[];
extern Class_Descriptor cd_S3383C5;
extern VTBL_ENTRY _ZTI7S3383C5[];
extern  VTBL_ENTRY _ZTV7S3383C5[];
extern Class_Descriptor cd_S3383C4;
extern VTBL_ENTRY _ZTI7S3383C4[];
extern  VTBL_ENTRY _ZTV7S3383C4[];
static Base_Class bases_S3383C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3383C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3383C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3383C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3383C4,    ABISELECT(16,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3383C1[];
extern void _ZN7S3383C32v7Ev();
extern void _ZN7S3383C32v8Ev();
extern void _ZN7S3383C32v9Ev();
extern void _ZN7S3383C33v10Ev();
extern void _ZN7S3383C33v11Ev();
extern void _ZN7S3383C33v12Ev();
extern void _ZN7S3383C23v13Ev();
extern void _ZN7S3383C23v14Ev();
extern void _ZN7S3383C12v1Ev();
extern void _ZN7S3383C12v2Ev();
extern void _ZN7S3383C12v3Ev();
extern void _ZN7S3383C12v4Ev();
extern void _ZN7S3383C12v5Ev();
extern void _ZN7S3383C12v6Ev();
extern void _ZN7S3383C53v15Ev();
extern void _ZN7S3383C53v16Ev();
extern void _ZN7S3383C53v17Ev();
extern void _ZN7S3383C53v18Ev();
extern void _ZN7S3383C53v19Ev();
extern void _ZN7S3383C43v20Ev();
extern void _ZN7S3383C43v21Ev();
extern void _ZN7S3383C43v22Ev();
extern void _ZN7S3383C43v23Ev();
static  VTBL_ENTRY vtc_S3383C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3383C1[0]),
  (VTBL_ENTRY)&_ZN7S3383C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3383C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3383C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3383C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3383C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3383C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3383C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3383C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3383C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3383C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3383C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3383C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3383C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3383C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3383C1[0]),
  (VTBL_ENTRY)&_ZN7S3383C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v16Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v17Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v18Ev,
  (VTBL_ENTRY)&_ZN7S3383C53v19Ev,
  (VTBL_ENTRY)&_ZN7S3383C43v20Ev,
  (VTBL_ENTRY)&_ZN7S3383C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3383C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3383C43v23Ev,
};
extern VTBL_ENTRY _ZTV7S3383C1[];
static  VTT_ENTRY vtt_S3383C1[] = {
  {&(_ZTV7S3383C1[3]),  3,37},
  {&(_ZTV7S3383C1[28]),  28,37},
};
extern VTBL_ENTRY _ZTI7S3383C1[];
extern  VTBL_ENTRY _ZTV7S3383C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3383C1[];
Class_Descriptor cd_S3383C1 = {  "S3383C1", // class name
  bases_S3383C1, 4,
  &(vtc_S3383C1[0]), // expected_vtbl_contents
  &(vtt_S3383C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3383C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3383C1),37, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3383C1),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7744C3  : virtual S19169C6_nt {
  __tsi64 s7744c3f0;
  ~S7744C3(); // tgen
  S7744C3(); // tgen
};
//SIG(-1 S7744C3) C1{ VBC2{ m Fp[6]} FL}


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

static void Test_S7744C3()
{
  extern Class_Descriptor cd_S7744C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7744C3, buf);
    S7744C3 *dp, &lv = *(dp=new (buf) S7744C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7744C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7744C3)");
    check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(16,12), "S7744C3");
    check_field_offset(lv, s7744c3f0, ABISELECT(8,4), "S7744C3.s7744c3f0");
    test_class_info(&lv, &cd_S7744C3);
    dp->~S7744C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7744C3(Test_S7744C3, "S7744C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S7744C3C1Ev();
extern void _ZN7S7744C3D1Ev();
Name_Map name_map_S7744C3[] = {
  NSPAIR(_ZN7S7744C3C1Ev),
  NSPAIR(_ZN7S7744C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S7744C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7744C3[];
static  VTBL_ENTRY vtc_S7744C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C3[0]),
};
extern VTBL_ENTRY _ZTV7S7744C3[];
static  VTT_ENTRY vtt_S7744C3[] = {
  {&(_ZTV7S7744C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7744C3[];
extern  VTBL_ENTRY _ZTV7S7744C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C3[];
Class_Descriptor cd_S7744C3 = {  "S7744C3", // class name
  bases_S7744C3, 1,
  &(vtc_S7744C3[0]), // expected_vtbl_contents
  &(vtt_S7744C3[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S7744C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7744C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7744C3),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  S7744C5  : virtual S19169C11_nt , S2014C38 {
  __tsi64 s7744c5f0:8;
  ~S7744C5(); // tgen
  S7744C5(); // tgen
};
//SIG(-1 S7744C5) C1{ VBC2{ vd m} BC3{ m} FL:8}


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

static void Test_S7744C5()
{
  extern Class_Descriptor cd_S7744C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,3)];
    init_test(&cd_S7744C5, buf);
    S7744C5 *dp, &lv = *(dp=new (buf) S7744C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7744C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7744C5)");
    check_base_class_offset(lv, (S19169C11_nt*), 0, "S7744C5");
    check_base_class_offset(lv, (S2014C38*), 0, "S7744C5");
    set_bf_and_test(lv, s7744c5f0, ABISELECT(8,4), 0, 8, 1, "S7744C5");
    set_bf_and_test(lv, s7744c5f0, ABISELECT(8,4), 0, 8, hide_sll(1LL<<7), "S7744C5");
    test_class_info(&lv, &cd_S7744C5);
    dp->~S7744C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7744C5(Test_S7744C5, "S7744C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7744C5C1Ev();
extern void _ZN7S7744C5D1Ev();
Name_Map name_map_S7744C5[] = {
  NSPAIR(_ZN7S7744C5C1Ev),
  NSPAIR(_ZN7S7744C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
static Base_Class bases_S7744C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7744C5[];
extern void _ZN7S7744C5D1Ev();
extern void _ZN7S7744C5D0Ev();
static  VTBL_ENTRY vtc_S7744C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C5[0]),
  (VTBL_ENTRY)&_ZN7S7744C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7744C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S7744C5[];
static  VTT_ENTRY vtt_S7744C5[] = {
  {&(_ZTV7S7744C5[4]),  4,6},
  {&(_ZTV7S7744C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7744C5[];
extern  VTBL_ENTRY _ZTV7S7744C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C5[];
Class_Descriptor cd_S7744C5 = {  "S7744C5", // class name
  bases_S7744C5, 2,
  &(vtc_S7744C5[0]), // expected_vtbl_contents
  &(vtt_S7744C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7744C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7744C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7744C5),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  S7744C2  : virtual S7744C3 , S7744C5 , virtual S19169C3_nt {
  int s7744c2f0;
  virtual  ~S7744C2(); // _ZN7S7744C2D2Ev
  S7744C2(); // tgen
};
//SIG(-1 S7744C2) C1{ VBC2{ VBC3{ m Fp[6]} FL} BC4{ VBC5{ vd m} BC6{ m} FL:8} VBC7{ m Fl[10]} vd Fi}


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

static void Test_S7744C2()
{
  extern Class_Descriptor cd_S7744C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,23)];
    init_test(&cd_S7744C2, buf);
    S7744C2 *dp, &lv = *(dp=new (buf) S7744C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S7744C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7744C2)");
    check_base_class_offset(lv, (S19169C6_nt*)(S7744C3*), ABISELECT(32,24), "S7744C2");
    check_base_class_offset(lv, (S7744C3*), ABISELECT(16,12), "S7744C2");
    check_base_class_offset(lv, (S19169C11_nt*)(S7744C5*), 0, "S7744C2");
    check_base_class_offset(lv, (S2014C38*)(S7744C5*), 0, "S7744C2");
    check_base_class_offset(lv, (S7744C5*), 0, "S7744C2");
    check_base_class_offset(lv, (S19169C3_nt*), ABISELECT(80,48), "S7744C2");
    check_field_offset(lv, s7744c2f0, ABISELECT(12,8), "S7744C2.s7744c2f0");
    test_class_info(&lv, &cd_S7744C2);
    dp->~S7744C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7744C2(Test_S7744C2, "S7744C2", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN7S7744C2C1Ev();
extern void _ZN7S7744C2D2Ev();
Name_Map name_map_S7744C2[] = {
  NSPAIR(_ZN7S7744C2C1Ev),
  NSPAIR(_ZN7S7744C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S7744C3;
extern VTBL_ENTRY _ZTI7S7744C3[];
extern  VTBL_ENTRY _ZTV7S7744C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C3[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7744C5;
extern VTBL_ENTRY _ZTI7S7744C5[];
extern  VTBL_ENTRY _ZTV7S7744C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C5[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
static Base_Class bases_S7744C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7744C3,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7744C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C3_nt,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7744C2[];
extern void _ZN7S7744C2D1Ev();
extern void _ZN7S7744C2D0Ev();
static  VTBL_ENTRY vtc_S7744C2[] = {
  ABISELECT(80,48),
  ABISELECT(32,24),
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C2[0]),
  (VTBL_ENTRY)&_ZN7S7744C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7744C2D0Ev,
  ABISELECT(16,12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7744C2[0]),
};
extern VTBL_ENTRY _ZTV7S7744C2[];
extern void _ZN7S7744C5D1Ev();
extern void _ZN7S7744C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7744C5__7S7744C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C5[0]),
  (VTBL_ENTRY)&_ZN7S7744C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7744C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7744C3__7S7744C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C3[0]),
};
static  VTT_ENTRY vtt_S7744C2[] = {
  {&(_ZTV7S7744C2[7]),  7,12},
  {&(_tg__ZTV7S7744C5__7S7744C2[4]),  4,6},
  {&(_tg__ZTV7S7744C5__7S7744C2[4]),  4,6},
  {&(_ZTV7S7744C2[12]),  12,12},
  {&(_ZTV7S7744C2[7]),  7,12},
  {&(_tg__ZTV7S7744C3__7S7744C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7744C2[];
extern  VTBL_ENTRY _ZTV7S7744C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C2[];
Class_Descriptor cd_S7744C2 = {  "S7744C2", // class name
  bases_S7744C2, 6,
  &(vtc_S7744C2[0]), // expected_vtbl_contents
  &(vtt_S7744C2[0]), // expected_vtt_contents
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI7S7744C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7744C2),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7744C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7744C9  : S19169C16_nt , S19169C6_nt , virtual S7744C3 , virtual S19169C3_nt {
  int s7744c9f0;
  ~S7744C9(); // tgen
  S7744C9(); // tgen
};
//SIG(-1 S7744C9) C1{ BC2{ m FC3{ VBC4{ m Fp[6]} FL}} BC4 VBC5{ VBC4 FL} VBC6{ m Fl[10]} Fi}


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

static void Test_S7744C9()
{
  extern Class_Descriptor cd_S7744C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,37)];
    init_test(&cd_S7744C9, buf);
    S7744C9 *dp, &lv = *(dp=new (buf) S7744C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,144), "sizeof(S7744C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7744C9)");
    check_base_class_offset(lv, (S19169C16_nt*), ABISELECT(8,4), "S7744C9");
    /*is_ambiguous_... S7744C9::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(72,40), "S7744C9");
    check_base_class_offset(lv, (S19169C6_nt*)(S7744C3*), ABISELECT(144,80), "S7744C9");
    check_base_class_offset(lv, (S7744C3*), ABISELECT(128,68), "S7744C9");
    check_base_class_offset(lv, (S19169C3_nt*), ABISELECT(192,104), "S7744C9");
    check_field_offset(lv, s7744c9f0, ABISELECT(120,64), "S7744C9.s7744c9f0");
    test_class_info(&lv, &cd_S7744C9);
    dp->~S7744C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7744C9(Test_S7744C9, "S7744C9", ABISELECT(272,144));

#else // __cplusplus

extern void _ZN7S7744C9C1Ev();
extern void _ZN7S7744C9D1Ev();
Name_Map name_map_S7744C9[] = {
  NSPAIR(_ZN7S7744C9C1Ev),
  NSPAIR(_ZN7S7744C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S7744C3;
extern VTBL_ENTRY _ZTI7S7744C3[];
extern  VTBL_ENTRY _ZTV7S7744C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C3[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
static Base_Class bases_S7744C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C16_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_S19169C6_nt,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7744C3,    ABISELECT(128,68), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C3_nt,    ABISELECT(192,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},
  {0}};
extern VTBL_ENTRY _ZTI7S7744C9[];
static  VTBL_ENTRY vtc_S7744C9[] = {
  ABISELECT(192,104),
  ABISELECT(144,80),
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C9[0]),
  ABISELECT(16,12),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S7744C9[0]),
};
extern VTBL_ENTRY _ZTV7S7744C9[];
static  VTBL_ENTRY _tg__ZTV7S7744C3__7S7744C9[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C3[0]),
};
static  VTT_ENTRY vtt_S7744C9[] = {
  {&(_ZTV7S7744C9[5]),  5,8},
  {&(_ZTV7S7744C9[8]),  8,8},
  {&(_tg__ZTV7S7744C3__7S7744C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7744C9[];
extern  VTBL_ENTRY _ZTV7S7744C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C9[];
Class_Descriptor cd_S7744C9 = {  "S7744C9", // class name
  bases_S7744C9, 5,
  &(vtc_S7744C9[0]), // expected_vtbl_contents
  &(vtt_S7744C9[0]), // expected_vtt_contents
  ABISELECT(272,144), // object size
  NSPAIRA(_ZTI7S7744C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7744C9),8, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7744C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7744C1  : S7744C2 , S7744C9 {
  int s7744c1f0;
  virtual  ~S7744C1(); // _ZN7S7744C1D2Ev
  S7744C1(); // tgen
};
//SIG(1 S7744C1) C1{ BC2{ VBC3{ VBC4{ m Fp[6]} FL} BC5{ VBC6{ vd m} BC7{ m} FL:8} VBC8{ m Fl[10]} vd Fi} BC9{ BC10{ m FC11{ VBC4 FL}} BC4 VBC3 VBC8 Fi} vd Fi}


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

static void Test_S7744C1()
{
  extern Class_Descriptor cd_S7744C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S7744C1, buf);
    S7744C1 *dp, &lv = *(dp=new (buf) S7744C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S7744C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7744C1)");
    check_base_class_offset(lv, (S19169C6_nt*)(S7744C3*), ABISELECT(160,96), "S7744C1");
    check_base_class_offset(lv, (S7744C3*)(S7744C2*), ABISELECT(144,84), "S7744C1");
    check_base_class_offset(lv, (S7744C3*)(S7744C9*), ABISELECT(144,84), "S7744C1");
    check_base_class_offset(lv, (S19169C11_nt*)(S7744C5*)(S7744C2*), 0, "S7744C1");
    check_base_class_offset(lv, (S2014C38*)(S7744C5*)(S7744C2*), 0, "S7744C1");
    check_base_class_offset(lv, (S7744C5*)(S7744C2*), 0, "S7744C1");
    check_base_class_offset(lv, (S19169C3_nt*)(S7744C2*), ABISELECT(208,120), "S7744C1");
    check_base_class_offset(lv, (S19169C3_nt*)(S7744C9*), ABISELECT(208,120), "S7744C1");
    check_base_class_offset(lv, (S7744C2*), 0, "S7744C1");
    check_base_class_offset(lv, (S19169C16_nt*)(S7744C9*), ABISELECT(24,16), "S7744C1");
    /*is_ambiguous_... S7744C9::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S7744C9*), ABISELECT(88,52), "S7744C1");
    check_base_class_offset(lv, (S7744C9*), ABISELECT(16,12), "S7744C1");
    check_field_offset(lv, s7744c1f0, ABISELECT(140,80), "S7744C1.s7744c1f0");
    test_class_info(&lv, &cd_S7744C1);
    dp->~S7744C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7744C1(Test_S7744C1, "S7744C1", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN7S7744C1C1Ev();
extern void _ZN7S7744C1D2Ev();
Name_Map name_map_S7744C1[] = {
  NSPAIR(_ZN7S7744C1C1Ev),
  NSPAIR(_ZN7S7744C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S7744C3;
extern VTBL_ENTRY _ZTI7S7744C3[];
extern  VTBL_ENTRY _ZTV7S7744C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C3[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
extern Class_Descriptor cd_S2014C38;
extern VTBL_ENTRY _ZTI8S2014C38[];
extern Class_Descriptor cd_S7744C5;
extern VTBL_ENTRY _ZTI7S7744C5[];
extern  VTBL_ENTRY _ZTV7S7744C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C5[];
extern Class_Descriptor cd_S19169C3_nt;
extern VTBL_ENTRY _ZTI11S19169C3_nt[];
extern Class_Descriptor cd_S7744C2;
extern VTBL_ENTRY _ZTI7S7744C2[];
extern  VTBL_ENTRY _ZTV7S7744C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C2[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S7744C9;
extern VTBL_ENTRY _ZTI7S7744C9[];
extern  VTBL_ENTRY _ZTV7S7744C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C9[];
static Base_Class bases_S7744C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(160,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
    1, //immediately_derived
  0, 1},
  {&cd_S7744C3,    ABISELECT(144,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19169C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2014C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7744C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19169C3_nt,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7744C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C16_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(88,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7744C9,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7744C1[];
extern void _ZN7S7744C1D1Ev();
extern void _ZN7S7744C1D0Ev();
static  VTBL_ENTRY vtc_S7744C1[] = {
  ABISELECT(208,120),
  ABISELECT(160,96),
  ABISELECT(144,84),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C1[0]),
  (VTBL_ENTRY)&_ZN7S7744C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7744C1D0Ev,
  ABISELECT(192,108),
  ABISELECT(144,84),
  ABISELECT(128,72),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7744C1[0]),
  ABISELECT(16,12),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S7744C1[0]),
};
extern VTBL_ENTRY _ZTV7S7744C1[];
extern void _ZN7S7744C2D1Ev();
extern void _ZN7S7744C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7744C2__7S7744C1[] = {
  ABISELECT(208,120),
  ABISELECT(160,96),
  ABISELECT(144,84),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C2[0]),
  (VTBL_ENTRY)&_ZN7S7744C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7744C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7744C5D1Ev,_ZTv0_n12_N7S7744C5D1Ev)();
extern void _ZN7S7744C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7744C5D0Ev,_ZTv0_n12_N7S7744C5D0Ev)();
extern void _ZN7S7744C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7744C57S7744C2__7S7744C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7744C5D1Ev,_ZTv0_n12_N7S7744C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7744C5D0Ev,_ZTv0_n12_N7S7744C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7744C3__7S7744C2__7S7744C1[] = {
  ABISELECT(16,12),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S7744C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7744C9__7S7744C1[] = {
  ABISELECT(192,108),
  ABISELECT(144,84),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7744C3__7S7744C9__7S7744C1[] = {
  ABISELECT(16,12),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7744C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7744C3__7S7744C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7744C3[0]),
};
static  VTT_ENTRY vtt_S7744C1[] = {
  {&(_ZTV7S7744C1[7]),  7,17},
  {&(_tg__ZTV7S7744C2__7S7744C1[7]),  7,9},
  {&(_tg__ZTV7S7744C57S7744C2__7S7744C1[4]),  4,6},
  {&(_tg__ZTV7S7744C57S7744C2__7S7744C1[4]),  4,6},
  {&(_tg__ZTV7S7744C3__7S7744C2__7S7744C1[3]),  3,3},
  {&(_tg__ZTV7S7744C2__7S7744C1[7]),  7,9},
  {&(_tg__ZTV7S7744C9__7S7744C1[5]),  5,5},
  {&(_tg__ZTV7S7744C3__7S7744C9__7S7744C1[3]),  3,3},
  {&(_ZTV7S7744C1[17]),  17,17},
  {&(_ZTV7S7744C1[7]),  7,17},
  {&(_ZTV7S7744C1[14]),  14,17},
  {&(_tg__ZTV7S7744C3__7S7744C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7744C1[];
extern  VTBL_ENTRY _ZTV7S7744C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7744C1[];
static VTBL_ENTRY alt_thunk_names176[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7744C5D0Ev,_ZTv0_n12_N7S7744C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7744C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7744C5D1Ev,_ZTv0_n12_N7S7744C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7744C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7744C1 = {  "S7744C1", // class name
  bases_S7744C1, 10,
  &(vtc_S7744C1[0]), // expected_vtbl_contents
  &(vtt_S7744C1[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI7S7744C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7744C1),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7744C1),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names176,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19334C3  {
  virtual void  v3(); // _ZN8S19334C32v3Ev
  virtual void  v4(); // _ZN8S19334C32v4Ev
  virtual void  v5(); // _ZN8S19334C32v5Ev
  ~S19334C3(); // tgen
  S19334C3(); // tgen
};
//SIG(-1 S19334C3) C1{ v1 v2 v3}


void  S19334C3 ::v3(){vfunc_called(this, "_ZN8S19334C32v3Ev");}
void  S19334C3 ::v4(){vfunc_called(this, "_ZN8S19334C32v4Ev");}
void  S19334C3 ::v5(){vfunc_called(this, "_ZN8S19334C32v5Ev");}
S19334C3 ::~S19334C3(){ note_dtor("S19334C3", this);} // tgen
S19334C3 ::S19334C3(){ note_ctor("S19334C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19334C3C1Ev();
extern void _ZN8S19334C3D1Ev();
Name_Map name_map_S19334C3[] = {
  NSPAIR(_ZN8S19334C3C1Ev),
  NSPAIR(_ZN8S19334C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19334C3[];
extern void _ZN8S19334C32v3Ev();
extern void _ZN8S19334C32v4Ev();
extern void _ZN8S19334C32v5Ev();
static  VTBL_ENTRY vtc_S19334C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19334C3[0]),
  (VTBL_ENTRY)&_ZN8S19334C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v5Ev,
};
extern VTBL_ENTRY _ZTI8S19334C3[];
extern  VTBL_ENTRY _ZTV8S19334C3[];
Class_Descriptor cd_S19334C3 = {  "S19334C3", // class name
  0,0,//no base classes
  &(vtc_S19334C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19334C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19334C3),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  S19334C4  : S19334C3 {
  ::S19334C3 s19334c4f0;
  virtual void  v6(); // _ZN8S19334C42v6Ev
  virtual void  v7(); // _ZN8S19334C42v7Ev
  virtual void  v8(); // _ZN8S19334C42v8Ev
  ~S19334C4(); // tgen
  S19334C4(); // tgen
};
//SIG(-1 S19334C4) C1{ BC2{ v4 v5 v6} v1 v2 v3 FC2}


void  S19334C4 ::v6(){vfunc_called(this, "_ZN8S19334C42v6Ev");}
void  S19334C4 ::v7(){vfunc_called(this, "_ZN8S19334C42v7Ev");}
void  S19334C4 ::v8(){vfunc_called(this, "_ZN8S19334C42v8Ev");}
S19334C4 ::~S19334C4(){ note_dtor("S19334C4", this);} // tgen
S19334C4 ::S19334C4(){ note_ctor("S19334C4", this);} // tgen

static void Test_S19334C4()
{
  extern Class_Descriptor cd_S19334C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19334C4, buf);
    S19334C4 *dp, &lv = *(dp=new (buf) S19334C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19334C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19334C4)");
    check_base_class_offset(lv, (S19334C3*), 0, "S19334C4");
    check_field_offset(lv, s19334c4f0, ABISELECT(8,4), "S19334C4.s19334c4f0");
    test_class_info(&lv, &cd_S19334C4);
    dp->~S19334C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19334C4(Test_S19334C4, "S19334C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19334C4C1Ev();
extern void _ZN8S19334C4D1Ev();
Name_Map name_map_S19334C4[] = {
  NSPAIR(_ZN8S19334C4C1Ev),
  NSPAIR(_ZN8S19334C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19334C3;
extern VTBL_ENTRY _ZTI8S19334C3[];
extern  VTBL_ENTRY _ZTV8S19334C3[];
static Base_Class bases_S19334C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19334C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19334C4[];
extern void _ZN8S19334C32v3Ev();
extern void _ZN8S19334C32v4Ev();
extern void _ZN8S19334C32v5Ev();
extern void _ZN8S19334C42v6Ev();
extern void _ZN8S19334C42v7Ev();
extern void _ZN8S19334C42v8Ev();
static  VTBL_ENTRY vtc_S19334C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19334C4[0]),
  (VTBL_ENTRY)&_ZN8S19334C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19334C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19334C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S19334C4[];
extern  VTBL_ENTRY _ZTV8S19334C4[];
Class_Descriptor cd_S19334C4 = {  "S19334C4", // class name
  bases_S19334C4, 1,
  &(vtc_S19334C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19334C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19334C4),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  S19334C2  : S19334C3 , S19334C4 {
  int s19334c2f0[10];
  virtual void  v9(); // _ZN8S19334C22v9Ev
  virtual void  v10(); // _ZN8S19334C23v10Ev
  virtual void  v11(); // _ZN8S19334C23v11Ev
  virtual void  v12(); // _ZN8S19334C23v12Ev
  ~S19334C2(); // tgen
  S19334C2(); // tgen
};
//SIG(-1 S19334C2) C1{ BC2{ v5 v6 v7} BC3{ BC2 v8 v9 v10 FC2} v1 v2 v3 v4 Fi[10]}


void  S19334C2 ::v9(){vfunc_called(this, "_ZN8S19334C22v9Ev");}
void  S19334C2 ::v10(){vfunc_called(this, "_ZN8S19334C23v10Ev");}
void  S19334C2 ::v11(){vfunc_called(this, "_ZN8S19334C23v11Ev");}
void  S19334C2 ::v12(){vfunc_called(this, "_ZN8S19334C23v12Ev");}
S19334C2 ::~S19334C2(){ note_dtor("S19334C2", this);} // tgen
S19334C2 ::S19334C2(){ note_ctor("S19334C2", this);} // tgen

static void Test_S19334C2()
{
  extern Class_Descriptor cd_S19334C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,14)];
    init_test(&cd_S19334C2, buf);
    S19334C2 *dp, &lv = *(dp=new (buf) S19334C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S19334C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19334C2)");
    /*is_ambiguous_... S19334C2::S19334C3 */ AMB_check_base_class_offset(lv, (S19334C3*), 0, "S19334C2");
    check_base_class_offset(lv, (S19334C3*)(S19334C4*), ABISELECT(8,4), "S19334C2");
    check_base_class_offset(lv, (S19334C4*), ABISELECT(8,4), "S19334C2");
    check_field_offset(lv, s19334c2f0, ABISELECT(24,12), "S19334C2.s19334c2f0");
    test_class_info(&lv, &cd_S19334C2);
    dp->~S19334C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19334C2(Test_S19334C2, "S19334C2", ABISELECT(64,52));

#else // __cplusplus

extern void _ZN8S19334C2C1Ev();
extern void _ZN8S19334C2D1Ev();
Name_Map name_map_S19334C2[] = {
  NSPAIR(_ZN8S19334C2C1Ev),
  NSPAIR(_ZN8S19334C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19334C3;
extern VTBL_ENTRY _ZTI8S19334C3[];
extern  VTBL_ENTRY _ZTV8S19334C3[];
extern Class_Descriptor cd_S19334C3;
extern VTBL_ENTRY _ZTI8S19334C3[];
extern  VTBL_ENTRY _ZTV8S19334C3[];
extern Class_Descriptor cd_S19334C4;
extern VTBL_ENTRY _ZTI8S19334C4[];
extern  VTBL_ENTRY _ZTV8S19334C4[];
static Base_Class bases_S19334C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19334C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19334C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19334C4,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19334C2[];
extern void _ZN8S19334C32v3Ev();
extern void _ZN8S19334C32v4Ev();
extern void _ZN8S19334C32v5Ev();
extern void _ZN8S19334C22v9Ev();
extern void _ZN8S19334C23v10Ev();
extern void _ZN8S19334C23v11Ev();
extern void _ZN8S19334C23v12Ev();
extern void _ZN8S19334C32v3Ev();
extern void _ZN8S19334C32v4Ev();
extern void _ZN8S19334C32v5Ev();
extern void _ZN8S19334C42v6Ev();
extern void _ZN8S19334C42v7Ev();
extern void _ZN8S19334C42v8Ev();
static  VTBL_ENTRY vtc_S19334C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19334C2[0]),
  (VTBL_ENTRY)&_ZN8S19334C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19334C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19334C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19334C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19334C23v12Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19334C2[0]),
  (VTBL_ENTRY)&_ZN8S19334C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19334C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19334C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S19334C2[];
extern  VTBL_ENTRY _ZTV8S19334C2[];
Class_Descriptor cd_S19334C2 = {  "S19334C2", // class name
  bases_S19334C2, 3,
  &(vtc_S19334C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,52), // object size
  NSPAIRA(_ZTI8S19334C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19334C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19334C5_nt  {
  virtual void  v13(); // _ZN11S19334C5_nt3v13Ev
  virtual void  v14(); // _ZN11S19334C5_nt3v14Ev
  virtual void  v15(); // _ZN11S19334C5_nt3v15Ev
  virtual void  v16(); // _ZN11S19334C5_nt3v16Ev
  virtual void  v17(); // _ZN11S19334C5_nt3v17Ev
  virtual void  v18(); // _ZN11S19334C5_nt3v18Ev
  ~S19334C5_nt(); // tgen
  S19334C5_nt(); // tgen
};
//SIG(-1 S19334C5_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S19334C5_nt ::v13(){vfunc_called(this, "_ZN11S19334C5_nt3v13Ev");}
void  S19334C5_nt ::v14(){vfunc_called(this, "_ZN11S19334C5_nt3v14Ev");}
void  S19334C5_nt ::v15(){vfunc_called(this, "_ZN11S19334C5_nt3v15Ev");}
void  S19334C5_nt ::v16(){vfunc_called(this, "_ZN11S19334C5_nt3v16Ev");}
void  S19334C5_nt ::v17(){vfunc_called(this, "_ZN11S19334C5_nt3v17Ev");}
void  S19334C5_nt ::v18(){vfunc_called(this, "_ZN11S19334C5_nt3v18Ev");}
S19334C5_nt ::~S19334C5_nt(){ note_dtor("S19334C5_nt", this);} // tgen
S19334C5_nt ::S19334C5_nt(){ note_ctor("S19334C5_nt", this);} // tgen

//skip512 S19334C5_nt

#else // __cplusplus

extern void _ZN11S19334C5_ntC1Ev();
extern void _ZN11S19334C5_ntD1Ev();
Name_Map name_map_S19334C5_nt[] = {
  NSPAIR(_ZN11S19334C5_ntC1Ev),
  NSPAIR(_ZN11S19334C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19334C5_nt[];
extern void _ZN11S19334C5_nt3v13Ev();
extern void _ZN11S19334C5_nt3v14Ev();
extern void _ZN11S19334C5_nt3v15Ev();
extern void _ZN11S19334C5_nt3v16Ev();
extern void _ZN11S19334C5_nt3v17Ev();
extern void _ZN11S19334C5_nt3v18Ev();
static  VTBL_ENTRY vtc_S19334C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19334C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S19334C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S19334C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S19334C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S19334C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S19334C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S19334C5_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI11S19334C5_nt[];
VTBL_ENTRY *P__ZTI11S19334C5_nt = _ZTI11S19334C5_nt; 
extern  VTBL_ENTRY _ZTV11S19334C5_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19334C1  : virtual S19334C2 {
  ::S19334C5_nt s19334c1f0;
  __tsi64 s19334c1f1;
  virtual void  v1(); // _ZN8S19334C12v1Ev
  virtual void  v2(); // _ZN8S19334C12v2Ev
  ~S19334C1(); // tgen
  S19334C1(); // tgen
};
//SIG(1 S19334C1) C1{ VBC2{ BC3{ v3 v4 v5} BC4{ BC3 v6 v7 v8 FC3} v9 v10 v11 v12 Fi[10]} v1 v2 FC5{ v13 v14 v15 v16 v17 v18} FL}


void  S19334C1 ::v1(){vfunc_called(this, "_ZN8S19334C12v1Ev");}
void  S19334C1 ::v2(){vfunc_called(this, "_ZN8S19334C12v2Ev");}
S19334C1 ::~S19334C1(){ note_dtor("S19334C1", this);} // tgen
S19334C1 ::S19334C1(){ note_ctor("S19334C1", this);} // tgen

static void Test_S19334C1()
{
  extern Class_Descriptor cd_S19334C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S19334C1, buf);
    S19334C1 *dp, &lv = *(dp=new (buf) S19334C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S19334C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19334C1)");
    /*is_ambiguous_... S19334C2::S19334C3 */ AMB_check_base_class_offset(lv, (S19334C3*)(S19334C2*), ABISELECT(24,16), "S19334C1");
    check_base_class_offset(lv, (S19334C3*)(S19334C4*)(S19334C2*), ABISELECT(32,20), "S19334C1");
    check_base_class_offset(lv, (S19334C4*)(S19334C2*), ABISELECT(32,20), "S19334C1");
    check_base_class_offset(lv, (S19334C2*), ABISELECT(24,16), "S19334C1");
    check_field_offset(lv, s19334c1f0, ABISELECT(8,4), "S19334C1.s19334c1f0");
    check_field_offset(lv, s19334c1f1, ABISELECT(16,8), "S19334C1.s19334c1f1");
    test_class_info(&lv, &cd_S19334C1);
    dp->~S19334C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19334C1(Test_S19334C1, "S19334C1", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN8S19334C1C1Ev();
extern void _ZN8S19334C1D1Ev();
Name_Map name_map_S19334C1[] = {
  NSPAIR(_ZN8S19334C1C1Ev),
  NSPAIR(_ZN8S19334C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19334C3;
extern VTBL_ENTRY _ZTI8S19334C3[];
extern  VTBL_ENTRY _ZTV8S19334C3[];
extern Class_Descriptor cd_S19334C3;
extern VTBL_ENTRY _ZTI8S19334C3[];
extern  VTBL_ENTRY _ZTV8S19334C3[];
extern Class_Descriptor cd_S19334C4;
extern VTBL_ENTRY _ZTI8S19334C4[];
extern  VTBL_ENTRY _ZTV8S19334C4[];
extern Class_Descriptor cd_S19334C2;
extern VTBL_ENTRY _ZTI8S19334C2[];
extern  VTBL_ENTRY _ZTV8S19334C2[];
static Base_Class bases_S19334C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19334C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19334C3,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19334C4,    ABISELECT(32,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19334C2,    ABISELECT(24,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19334C1[];
extern void _ZN8S19334C12v1Ev();
extern void _ZN8S19334C12v2Ev();
extern void _ZN8S19334C32v3Ev();
extern void _ZN8S19334C32v4Ev();
extern void _ZN8S19334C32v5Ev();
extern void _ZN8S19334C22v9Ev();
extern void _ZN8S19334C23v10Ev();
extern void _ZN8S19334C23v11Ev();
extern void _ZN8S19334C23v12Ev();
extern void _ZN8S19334C32v3Ev();
extern void _ZN8S19334C32v4Ev();
extern void _ZN8S19334C32v5Ev();
extern void _ZN8S19334C42v6Ev();
extern void _ZN8S19334C42v7Ev();
extern void _ZN8S19334C42v8Ev();
static  VTBL_ENTRY vtc_S19334C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19334C1[0]),
  (VTBL_ENTRY)&_ZN8S19334C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19334C12v2Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19334C1[0]),
  (VTBL_ENTRY)&_ZN8S19334C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19334C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19334C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19334C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19334C23v12Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19334C1[0]),
  (VTBL_ENTRY)&_ZN8S19334C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19334C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19334C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19334C42v7Ev,
  (VTBL_ENTRY)&_ZN8S19334C42v8Ev,
};
extern VTBL_ENTRY _ZTV8S19334C1[];
static  VTT_ENTRY vtt_S19334C1[] = {
  {&(_ZTV8S19334C1[3]),  3,32},
  {&(_ZTV8S19334C1[17]),  17,32},
  {&(_ZTV8S19334C1[26]),  26,32},
};
extern VTBL_ENTRY _ZTI8S19334C1[];
extern  VTBL_ENTRY _ZTV8S19334C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19334C1[];
Class_Descriptor cd_S19334C1 = {  "S19334C1", // class name
  bases_S19334C1, 4,
  &(vtc_S19334C1[0]), // expected_vtbl_contents
  &(vtt_S19334C1[0]), // expected_vtt_contents
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI8S19334C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19334C1),32, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19334C1),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20913C3  {
  virtual void  v7(); // _ZN8S20913C32v7Ev
  virtual void  v8(); // _ZN8S20913C32v8Ev
  virtual void  v9(); // _ZN8S20913C32v9Ev
  virtual void  v10(); // _ZN8S20913C33v10Ev
  ~S20913C3(); // tgen
  S20913C3(); // tgen
};
//SIG(-1 S20913C3) C1{ v1 v2 v3 v4}


void  S20913C3 ::v7(){vfunc_called(this, "_ZN8S20913C32v7Ev");}
void  S20913C3 ::v8(){vfunc_called(this, "_ZN8S20913C32v8Ev");}
void  S20913C3 ::v9(){vfunc_called(this, "_ZN8S20913C32v9Ev");}
void  S20913C3 ::v10(){vfunc_called(this, "_ZN8S20913C33v10Ev");}
S20913C3 ::~S20913C3(){ note_dtor("S20913C3", this);} // tgen
S20913C3 ::S20913C3(){ note_ctor("S20913C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20913C3C1Ev();
extern void _ZN8S20913C3D1Ev();
Name_Map name_map_S20913C3[] = {
  NSPAIR(_ZN8S20913C3C1Ev),
  NSPAIR(_ZN8S20913C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20913C3[];
extern void _ZN8S20913C32v7Ev();
extern void _ZN8S20913C32v8Ev();
extern void _ZN8S20913C32v9Ev();
extern void _ZN8S20913C33v10Ev();
static  VTBL_ENTRY vtc_S20913C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20913C3[0]),
  (VTBL_ENTRY)&_ZN8S20913C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20913C33v10Ev,
};
extern VTBL_ENTRY _ZTI8S20913C3[];
extern  VTBL_ENTRY _ZTV8S20913C3[];
Class_Descriptor cd_S20913C3 = {  "S20913C3", // class name
  0,0,//no base classes
  &(vtc_S20913C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20913C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20913C3),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  S20913C4  {
  void *s20913c4f0;
  virtual void  v11(); // _ZN8S20913C43v11Ev
  virtual void  v12(); // _ZN8S20913C43v12Ev
  virtual void  v13(); // _ZN8S20913C43v13Ev
  virtual void  v14(); // _ZN8S20913C43v14Ev
  ~S20913C4(); // tgen
  S20913C4(); // tgen
};
//SIG(-1 S20913C4) C1{ v1 v2 v3 v4 Fp}


void  S20913C4 ::v11(){vfunc_called(this, "_ZN8S20913C43v11Ev");}
void  S20913C4 ::v12(){vfunc_called(this, "_ZN8S20913C43v12Ev");}
void  S20913C4 ::v13(){vfunc_called(this, "_ZN8S20913C43v13Ev");}
void  S20913C4 ::v14(){vfunc_called(this, "_ZN8S20913C43v14Ev");}
S20913C4 ::~S20913C4(){ note_dtor("S20913C4", this);} // tgen
S20913C4 ::S20913C4(){ note_ctor("S20913C4", this);} // tgen

static void Test_S20913C4()
{
  extern Class_Descriptor cd_S20913C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20913C4, buf);
    S20913C4 *dp, &lv = *(dp=new (buf) S20913C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20913C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20913C4)");
    check_field_offset(lv, s20913c4f0, ABISELECT(8,4), "S20913C4.s20913c4f0");
    test_class_info(&lv, &cd_S20913C4);
    dp->~S20913C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20913C4(Test_S20913C4, "S20913C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20913C4C1Ev();
extern void _ZN8S20913C4D1Ev();
Name_Map name_map_S20913C4[] = {
  NSPAIR(_ZN8S20913C4C1Ev),
  NSPAIR(_ZN8S20913C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20913C4[];
extern void _ZN8S20913C43v11Ev();
extern void _ZN8S20913C43v12Ev();
extern void _ZN8S20913C43v13Ev();
extern void _ZN8S20913C43v14Ev();
static  VTBL_ENTRY vtc_S20913C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20913C4[0]),
  (VTBL_ENTRY)&_ZN8S20913C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v14Ev,
};
extern VTBL_ENTRY _ZTI8S20913C4[];
extern  VTBL_ENTRY _ZTV8S20913C4[];
Class_Descriptor cd_S20913C4 = {  "S20913C4", // class name
  0,0,//no base classes
  &(vtc_S20913C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20913C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20913C4),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  S20913C2  : virtual S20913C3 , virtual S20913C4 {
  long s20913c2f0[2];
  int s20913c2f1;
  virtual void  v15(); // _ZN8S20913C23v15Ev
  virtual void  v16(); // _ZN8S20913C23v16Ev
  virtual void  v17(); // _ZN8S20913C23v17Ev
  virtual void  v18(); // _ZN8S20913C23v18Ev
  virtual void  v19(); // _ZN8S20913C23v19Ev
  ~S20913C2(); // tgen
  S20913C2(); // tgen
};
//SIG(-1 S20913C2) C1{ VBC2{ v6 v7 v8 v9} VBC3{ v10 v11 v12 v13 Fp} v1 v2 v3 v4 v5 Fl[2] Fi}


void  S20913C2 ::v15(){vfunc_called(this, "_ZN8S20913C23v15Ev");}
void  S20913C2 ::v16(){vfunc_called(this, "_ZN8S20913C23v16Ev");}
void  S20913C2 ::v17(){vfunc_called(this, "_ZN8S20913C23v17Ev");}
void  S20913C2 ::v18(){vfunc_called(this, "_ZN8S20913C23v18Ev");}
void  S20913C2 ::v19(){vfunc_called(this, "_ZN8S20913C23v19Ev");}
S20913C2 ::~S20913C2(){ note_dtor("S20913C2", this);} // tgen
S20913C2 ::S20913C2(){ note_ctor("S20913C2", this);} // tgen

static void Test_S20913C2()
{
  extern Class_Descriptor cd_S20913C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20913C2, buf);
    S20913C2 *dp, &lv = *(dp=new (buf) S20913C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20913C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20913C2)");
    check_base_class_offset(lv, (S20913C3*), 0, "S20913C2");
    check_base_class_offset(lv, (S20913C4*), ABISELECT(32,16), "S20913C2");
    check_field_offset(lv, s20913c2f0, ABISELECT(8,4), "S20913C2.s20913c2f0");
    check_field_offset(lv, s20913c2f1, ABISELECT(24,12), "S20913C2.s20913c2f1");
    test_class_info(&lv, &cd_S20913C2);
    dp->~S20913C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20913C2(Test_S20913C2, "S20913C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20913C2C1Ev();
extern void _ZN8S20913C2D1Ev();
Name_Map name_map_S20913C2[] = {
  NSPAIR(_ZN8S20913C2C1Ev),
  NSPAIR(_ZN8S20913C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20913C3;
extern VTBL_ENTRY _ZTI8S20913C3[];
extern  VTBL_ENTRY _ZTV8S20913C3[];
extern Class_Descriptor cd_S20913C4;
extern VTBL_ENTRY _ZTI8S20913C4[];
extern  VTBL_ENTRY _ZTV8S20913C4[];
static Base_Class bases_S20913C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20913C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20913C4,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20913C2[];
extern void _ZN8S20913C32v7Ev();
extern void _ZN8S20913C32v8Ev();
extern void _ZN8S20913C32v9Ev();
extern void _ZN8S20913C33v10Ev();
extern void _ZN8S20913C23v15Ev();
extern void _ZN8S20913C23v16Ev();
extern void _ZN8S20913C23v17Ev();
extern void _ZN8S20913C23v18Ev();
extern void _ZN8S20913C23v19Ev();
extern void _ZN8S20913C43v11Ev();
extern void _ZN8S20913C43v12Ev();
extern void _ZN8S20913C43v13Ev();
extern void _ZN8S20913C43v14Ev();
static  VTBL_ENTRY vtc_S20913C2[] = {
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20913C2[0]),
  (VTBL_ENTRY)&_ZN8S20913C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20913C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v19Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20913C2[0]),
  (VTBL_ENTRY)&_ZN8S20913C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S20913C2[];
static  VTT_ENTRY vtt_S20913C2[] = {
  {&(_ZTV8S20913C2[8]),  8,27},
  {&(_ZTV8S20913C2[8]),  8,27},
  {&(_ZTV8S20913C2[23]),  23,27},
};
extern VTBL_ENTRY _ZTI8S20913C2[];
extern  VTBL_ENTRY _ZTV8S20913C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20913C2[];
Class_Descriptor cd_S20913C2 = {  "S20913C2", // class name
  bases_S20913C2, 2,
  &(vtc_S20913C2[0]), // expected_vtbl_contents
  &(vtt_S20913C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20913C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20913C2),27, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20913C2),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  S20913C1  : virtual S20913C2 {
  virtual  ~S20913C1(); // _ZN8S20913C1D2Ev
  virtual void  v1(); // _ZN8S20913C12v1Ev
  virtual void  v2(); // _ZN8S20913C12v2Ev
  virtual void  v3(); // _ZN8S20913C12v3Ev
  virtual void  v4(); // _ZN8S20913C12v4Ev
  virtual void  v5(); // _ZN8S20913C12v5Ev
  virtual void  v6(); // _ZN8S20913C12v6Ev
  S20913C1(); // tgen
};
//SIG(1 S20913C1) C1{ VBC2{ VBC3{ v7 v8 v9 v10} VBC4{ v11 v12 v13 v14 Fp} v15 v16 v17 v18 v19 Fl[2] Fi} vd v1 v2 v3 v4 v5 v6}


 S20913C1 ::~S20913C1(){ note_dtor("S20913C1", this);}
void  S20913C1 ::v1(){vfunc_called(this, "_ZN8S20913C12v1Ev");}
void  S20913C1 ::v2(){vfunc_called(this, "_ZN8S20913C12v2Ev");}
void  S20913C1 ::v3(){vfunc_called(this, "_ZN8S20913C12v3Ev");}
void  S20913C1 ::v4(){vfunc_called(this, "_ZN8S20913C12v4Ev");}
void  S20913C1 ::v5(){vfunc_called(this, "_ZN8S20913C12v5Ev");}
void  S20913C1 ::v6(){vfunc_called(this, "_ZN8S20913C12v6Ev");}
S20913C1 ::S20913C1(){ note_ctor("S20913C1", this);} // tgen

static void Test_S20913C1()
{
  extern Class_Descriptor cd_S20913C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20913C1, buf);
    S20913C1 *dp, &lv = *(dp=new (buf) S20913C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20913C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20913C1)");
    check_base_class_offset(lv, (S20913C3*)(S20913C2*), 0, "S20913C1");
    check_base_class_offset(lv, (S20913C4*)(S20913C2*), ABISELECT(40,20), "S20913C1");
    check_base_class_offset(lv, (S20913C2*), ABISELECT(8,4), "S20913C1");
    test_class_info(&lv, &cd_S20913C1);
    dp->~S20913C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20913C1(Test_S20913C1, "S20913C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20913C1C1Ev();
extern void _ZN8S20913C1D2Ev();
Name_Map name_map_S20913C1[] = {
  NSPAIR(_ZN8S20913C1C1Ev),
  NSPAIR(_ZN8S20913C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20913C3;
extern VTBL_ENTRY _ZTI8S20913C3[];
extern  VTBL_ENTRY _ZTV8S20913C3[];
extern Class_Descriptor cd_S20913C4;
extern VTBL_ENTRY _ZTI8S20913C4[];
extern  VTBL_ENTRY _ZTV8S20913C4[];
extern Class_Descriptor cd_S20913C2;
extern VTBL_ENTRY _ZTI8S20913C2[];
extern  VTBL_ENTRY _ZTV8S20913C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20913C2[];
static Base_Class bases_S20913C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20913C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20913C4,    ABISELECT(40,20), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20913C2,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20913C1[];
extern void _ZN8S20913C32v7Ev();
extern void _ZN8S20913C32v8Ev();
extern void _ZN8S20913C32v9Ev();
extern void _ZN8S20913C33v10Ev();
extern void _ZN8S20913C1D1Ev();
extern void _ZN8S20913C1D0Ev();
extern void _ZN8S20913C12v1Ev();
extern void _ZN8S20913C12v2Ev();
extern void _ZN8S20913C12v3Ev();
extern void _ZN8S20913C12v4Ev();
extern void _ZN8S20913C12v5Ev();
extern void _ZN8S20913C12v6Ev();
extern void _ZN8S20913C32v7Ev();
extern void _ZN8S20913C32v8Ev();
extern void _ZN8S20913C32v9Ev();
extern void _ZN8S20913C33v10Ev();
extern void _ZN8S20913C23v15Ev();
extern void _ZN8S20913C23v16Ev();
extern void _ZN8S20913C23v17Ev();
extern void _ZN8S20913C23v18Ev();
extern void _ZN8S20913C23v19Ev();
extern void _ZN8S20913C43v11Ev();
extern void _ZN8S20913C43v12Ev();
extern void _ZN8S20913C43v13Ev();
extern void _ZN8S20913C43v14Ev();
static  VTBL_ENTRY vtc_S20913C1[] = {
  ABISELECT(40,20),
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20913C1[0]),
  (VTBL_ENTRY)&_ZN8S20913C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20913C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20913C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20913C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20913C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20913C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20913C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20913C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20913C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20913C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20913C1[0]),
  (VTBL_ENTRY)&_ZN8S20913C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20913C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v19Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20913C1[0]),
  (VTBL_ENTRY)&_ZN8S20913C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S20913C1[];
extern void _ZN8S20913C32v7Ev();
extern void _ZN8S20913C32v8Ev();
extern void _ZN8S20913C32v9Ev();
extern void _ZN8S20913C33v10Ev();
extern void _ZN8S20913C23v15Ev();
extern void _ZN8S20913C23v16Ev();
extern void _ZN8S20913C23v17Ev();
extern void _ZN8S20913C23v18Ev();
extern void _ZN8S20913C23v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20913C2__8S20913C1[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20913C2[0]),
  (VTBL_ENTRY)&_ZN8S20913C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20913C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20913C23v19Ev,
};
extern void _ZN8S20913C32v7Ev();
extern void _ZN8S20913C32v8Ev();
extern void _ZN8S20913C32v9Ev();
extern void _ZN8S20913C33v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20913C3__8S20913C2__8S20913C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20913C2[0]),
  (VTBL_ENTRY)&_ZN8S20913C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20913C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20913C33v10Ev,
};
extern void _ZN8S20913C43v11Ev();
extern void _ZN8S20913C43v12Ev();
extern void _ZN8S20913C43v13Ev();
extern void _ZN8S20913C43v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20913C4__8S20913C2__8S20913C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20913C2[0]),
  (VTBL_ENTRY)&_ZN8S20913C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v13Ev,
  (VTBL_ENTRY)&_ZN8S20913C43v14Ev,
};
static  VTT_ENTRY vtt_S20913C1[] = {
  {&(_ZTV8S20913C1[9]),  9,53},
  {&(_ZTV8S20913C1[34]),  34,53},
  {&(_ZTV8S20913C1[9]),  9,53},
  {&(_ZTV8S20913C1[49]),  49,53},
  {&(_tg__ZTV8S20913C2__8S20913C1[8]),  8,17},
  {&(_tg__ZTV8S20913C3__8S20913C2__8S20913C1[6]),  6,10},
  {&(_tg__ZTV8S20913C4__8S20913C2__8S20913C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20913C1[];
extern  VTBL_ENTRY _ZTV8S20913C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20913C1[];
Class_Descriptor cd_S20913C1 = {  "S20913C1", // class name
  bases_S20913C1, 3,
  &(vtc_S20913C1[0]), // expected_vtbl_contents
  &(vtt_S20913C1[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20913C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20913C1),53, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20913C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7581C3  {
  void *s7581c3f0;
  virtual void  v3(); // _ZN7S7581C32v3Ev
  virtual void  v4(); // _ZN7S7581C32v4Ev
  virtual void  v5(); // _ZN7S7581C32v5Ev
  virtual void  v6(); // _ZN7S7581C32v6Ev
  ~S7581C3(); // tgen
  S7581C3(); // tgen
};
//SIG(-1 S7581C3) C1{ v1 v2 v3 v4 Fp}


void  S7581C3 ::v3(){vfunc_called(this, "_ZN7S7581C32v3Ev");}
void  S7581C3 ::v4(){vfunc_called(this, "_ZN7S7581C32v4Ev");}
void  S7581C3 ::v5(){vfunc_called(this, "_ZN7S7581C32v5Ev");}
void  S7581C3 ::v6(){vfunc_called(this, "_ZN7S7581C32v6Ev");}
S7581C3 ::~S7581C3(){ note_dtor("S7581C3", this);} // tgen
S7581C3 ::S7581C3(){ note_ctor("S7581C3", this);} // tgen

static void Test_S7581C3()
{
  extern Class_Descriptor cd_S7581C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7581C3, buf);
    S7581C3 *dp, &lv = *(dp=new (buf) S7581C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7581C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7581C3)");
    check_field_offset(lv, s7581c3f0, ABISELECT(8,4), "S7581C3.s7581c3f0");
    test_class_info(&lv, &cd_S7581C3);
    dp->~S7581C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7581C3(Test_S7581C3, "S7581C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7581C3C1Ev();
extern void _ZN7S7581C3D1Ev();
Name_Map name_map_S7581C3[] = {
  NSPAIR(_ZN7S7581C3C1Ev),
  NSPAIR(_ZN7S7581C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7581C3[];
extern void _ZN7S7581C32v3Ev();
extern void _ZN7S7581C32v4Ev();
extern void _ZN7S7581C32v5Ev();
extern void _ZN7S7581C32v6Ev();
static  VTBL_ENTRY vtc_S7581C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7581C3[0]),
  (VTBL_ENTRY)&_ZN7S7581C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S7581C3[];
extern  VTBL_ENTRY _ZTV7S7581C3[];
Class_Descriptor cd_S7581C3 = {  "S7581C3", // class name
  0,0,//no base classes
  &(vtc_S7581C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7581C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7581C3),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  S7581C2  : virtual S7581C3 {
  long double s7581c2f0;
  void *s7581c2f1;
  virtual void  v7(); // _ZN7S7581C22v7Ev
  virtual void  v8(); // _ZN7S7581C22v8Ev
  virtual void  v9(); // _ZN7S7581C22v9Ev
  virtual void  v10(); // _ZN7S7581C23v10Ev
  ~S7581C2(); // tgen
  S7581C2(); // tgen
};
//SIG(-1 S7581C2) C1{ VBC2{ v5 v6 v7 v8 Fp} v1 v2 v3 v4 FD Fp}


void  S7581C2 ::v7(){vfunc_called(this, "_ZN7S7581C22v7Ev");}
void  S7581C2 ::v8(){vfunc_called(this, "_ZN7S7581C22v8Ev");}
void  S7581C2 ::v9(){vfunc_called(this, "_ZN7S7581C22v9Ev");}
void  S7581C2 ::v10(){vfunc_called(this, "_ZN7S7581C23v10Ev");}
S7581C2 ::~S7581C2(){ note_dtor("S7581C2", this);} // tgen
S7581C2 ::S7581C2(){ note_ctor("S7581C2", this);} // tgen

static void Test_S7581C2()
{
  extern Class_Descriptor cd_S7581C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,8)];
    init_test(&cd_S7581C2, buf);
    S7581C2 *dp, &lv = *(dp=new (buf) S7581C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,28), "sizeof(S7581C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7581C2)");
    check_base_class_offset(lv, (S7581C3*), ABISELECT(40,20), "S7581C2");
    check_field_offset(lv, s7581c2f0, ABISELECT(16,4), "S7581C2.s7581c2f0");
    check_field_offset(lv, s7581c2f1, ABISELECT(32,16), "S7581C2.s7581c2f1");
    test_class_info(&lv, &cd_S7581C2);
    dp->~S7581C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7581C2(Test_S7581C2, "S7581C2", ABISELECT(64,28));

#else // __cplusplus

extern void _ZN7S7581C2C1Ev();
extern void _ZN7S7581C2D1Ev();
Name_Map name_map_S7581C2[] = {
  NSPAIR(_ZN7S7581C2C1Ev),
  NSPAIR(_ZN7S7581C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7581C3;
extern VTBL_ENTRY _ZTI7S7581C3[];
extern  VTBL_ENTRY _ZTV7S7581C3[];
static Base_Class bases_S7581C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7581C3,    ABISELECT(40,20), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7581C2[];
extern void _ZN7S7581C22v7Ev();
extern void _ZN7S7581C22v8Ev();
extern void _ZN7S7581C22v9Ev();
extern void _ZN7S7581C23v10Ev();
extern void _ZN7S7581C32v3Ev();
extern void _ZN7S7581C32v4Ev();
extern void _ZN7S7581C32v5Ev();
extern void _ZN7S7581C32v6Ev();
static  VTBL_ENTRY vtc_S7581C2[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7581C2[0]),
  (VTBL_ENTRY)&_ZN7S7581C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7581C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7581C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7581C23v10Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7581C2[0]),
  (VTBL_ENTRY)&_ZN7S7581C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S7581C2[];
static  VTT_ENTRY vtt_S7581C2[] = {
  {&(_ZTV7S7581C2[3]),  3,17},
  {&(_ZTV7S7581C2[13]),  13,17},
};
extern VTBL_ENTRY _ZTI7S7581C2[];
extern  VTBL_ENTRY _ZTV7S7581C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7581C2[];
Class_Descriptor cd_S7581C2 = {  "S7581C2", // class name
  bases_S7581C2, 1,
  &(vtc_S7581C2[0]), // expected_vtbl_contents
  &(vtt_S7581C2[0]), // expected_vtt_contents
  ABISELECT(64,28), // object size
  NSPAIRA(_ZTI7S7581C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7581C2),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7581C2),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  S7581C4  {
  long s7581c4f0;
  int s7581c4f1[6];
  virtual void  v11(); // _ZN7S7581C43v11Ev
  virtual void  v12(); // _ZN7S7581C43v12Ev
  virtual void  v13(); // _ZN7S7581C43v13Ev
  virtual void  v14(); // _ZN7S7581C43v14Ev
  virtual void  v15(); // _ZN7S7581C43v15Ev
  ~S7581C4(); // tgen
  S7581C4(); // tgen
};
//SIG(-1 S7581C4) C1{ v1 v2 v3 v4 v5 Fl Fi[6]}


void  S7581C4 ::v11(){vfunc_called(this, "_ZN7S7581C43v11Ev");}
void  S7581C4 ::v12(){vfunc_called(this, "_ZN7S7581C43v12Ev");}
void  S7581C4 ::v13(){vfunc_called(this, "_ZN7S7581C43v13Ev");}
void  S7581C4 ::v14(){vfunc_called(this, "_ZN7S7581C43v14Ev");}
void  S7581C4 ::v15(){vfunc_called(this, "_ZN7S7581C43v15Ev");}
S7581C4 ::~S7581C4(){ note_dtor("S7581C4", this);} // tgen
S7581C4 ::S7581C4(){ note_ctor("S7581C4", this);} // tgen

static void Test_S7581C4()
{
  extern Class_Descriptor cd_S7581C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S7581C4, buf);
    S7581C4 *dp, &lv = *(dp=new (buf) S7581C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S7581C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7581C4)");
    check_field_offset(lv, s7581c4f0, ABISELECT(8,4), "S7581C4.s7581c4f0");
    check_field_offset(lv, s7581c4f1, ABISELECT(16,8), "S7581C4.s7581c4f1");
    test_class_info(&lv, &cd_S7581C4);
    dp->~S7581C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7581C4(Test_S7581C4, "S7581C4", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S7581C4C1Ev();
extern void _ZN7S7581C4D1Ev();
Name_Map name_map_S7581C4[] = {
  NSPAIR(_ZN7S7581C4C1Ev),
  NSPAIR(_ZN7S7581C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7581C4[];
extern void _ZN7S7581C43v11Ev();
extern void _ZN7S7581C43v12Ev();
extern void _ZN7S7581C43v13Ev();
extern void _ZN7S7581C43v14Ev();
extern void _ZN7S7581C43v15Ev();
static  VTBL_ENTRY vtc_S7581C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7581C4[0]),
  (VTBL_ENTRY)&_ZN7S7581C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7581C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7581C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7581C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7581C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S7581C4[];
extern  VTBL_ENTRY _ZTV7S7581C4[];
Class_Descriptor cd_S7581C4 = {  "S7581C4", // class name
  0,0,//no base classes
  &(vtc_S7581C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S7581C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7581C4),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  S7581C1  : S7581C2 , virtual S7581C4 {
  int s7581c1f0;
  ::S19078C5 s7581c1f1;
  virtual void  v1(); // _ZN7S7581C12v1Ev
  virtual void  v2(); // _ZN7S7581C12v2Ev
  ~S7581C1(); // tgen
  S7581C1(); // tgen
};
//SIG(1 S7581C1) C1{ BC2{ VBC3{ v3 v4 v5 v6 Fp} v7 v8 v9 v10 FD Fp} VBC4{ v11 v12 v13 v14 v15 Fl Fi[6]} v1 v2 Fi FC5{ v16}}


void  S7581C1 ::v1(){vfunc_called(this, "_ZN7S7581C12v1Ev");}
void  S7581C1 ::v2(){vfunc_called(this, "_ZN7S7581C12v2Ev");}
S7581C1 ::~S7581C1(){ note_dtor("S7581C1", this);} // tgen
S7581C1 ::S7581C1(){ note_ctor("S7581C1", this);} // tgen

static void Test_S7581C1()
{
  extern Class_Descriptor cd_S7581C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,18)];
    init_test(&cd_S7581C1, buf);
    S7581C1 *dp, &lv = *(dp=new (buf) S7581C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S7581C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7581C1)");
    check_base_class_offset(lv, (S7581C3*)(S7581C2*), ABISELECT(56,28), "S7581C1");
    check_base_class_offset(lv, (S7581C2*), 0, "S7581C1");
    check_base_class_offset(lv, (S7581C4*), ABISELECT(72,36), "S7581C1");
    check_field_offset(lv, s7581c1f0, ABISELECT(40,20), "S7581C1.s7581c1f0");
    check_field_offset(lv, s7581c1f1, ABISELECT(48,24), "S7581C1.s7581c1f1");
    test_class_info(&lv, &cd_S7581C1);
    dp->~S7581C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7581C1(Test_S7581C1, "S7581C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S7581C1C1Ev();
extern void _ZN7S7581C1D1Ev();
Name_Map name_map_S7581C1[] = {
  NSPAIR(_ZN7S7581C1C1Ev),
  NSPAIR(_ZN7S7581C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7581C3;
extern VTBL_ENTRY _ZTI7S7581C3[];
extern  VTBL_ENTRY _ZTV7S7581C3[];
extern Class_Descriptor cd_S7581C2;
extern VTBL_ENTRY _ZTI7S7581C2[];
extern  VTBL_ENTRY _ZTV7S7581C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7581C2[];
extern Class_Descriptor cd_S7581C4;
extern VTBL_ENTRY _ZTI7S7581C4[];
extern  VTBL_ENTRY _ZTV7S7581C4[];
static Base_Class bases_S7581C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7581C3,    ABISELECT(56,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7581C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7581C4,    ABISELECT(72,36), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7581C1[];
extern void _ZN7S7581C22v7Ev();
extern void _ZN7S7581C22v8Ev();
extern void _ZN7S7581C22v9Ev();
extern void _ZN7S7581C23v10Ev();
extern void _ZN7S7581C12v1Ev();
extern void _ZN7S7581C12v2Ev();
extern void _ZN7S7581C32v3Ev();
extern void _ZN7S7581C32v4Ev();
extern void _ZN7S7581C32v5Ev();
extern void _ZN7S7581C32v6Ev();
extern void _ZN7S7581C43v11Ev();
extern void _ZN7S7581C43v12Ev();
extern void _ZN7S7581C43v13Ev();
extern void _ZN7S7581C43v14Ev();
extern void _ZN7S7581C43v15Ev();
static  VTBL_ENTRY vtc_S7581C1[] = {
  ABISELECT(72,36),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7581C1[0]),
  (VTBL_ENTRY)&_ZN7S7581C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7581C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7581C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7581C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7581C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7581C12v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7581C1[0]),
  (VTBL_ENTRY)&_ZN7S7581C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7581C1[0]),
  (VTBL_ENTRY)&_ZN7S7581C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7581C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7581C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7581C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7581C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7581C1[];
extern void _ZN7S7581C22v7Ev();
extern void _ZN7S7581C22v8Ev();
extern void _ZN7S7581C22v9Ev();
extern void _ZN7S7581C23v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7581C2__7S7581C1[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7581C2[0]),
  (VTBL_ENTRY)&_ZN7S7581C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7581C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7581C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7581C23v10Ev,
};
extern void _ZN7S7581C32v3Ev();
extern void _ZN7S7581C32v4Ev();
extern void _ZN7S7581C32v5Ev();
extern void _ZN7S7581C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7581C3__7S7581C2__7S7581C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7581C2[0]),
  (VTBL_ENTRY)&_ZN7S7581C32v3Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7581C32v6Ev,
};
static  VTT_ENTRY vtt_S7581C1[] = {
  {&(_ZTV7S7581C1[4]),  4,32},
  {&(_tg__ZTV7S7581C2__7S7581C1[3]),  3,7},
  {&(_tg__ZTV7S7581C3__7S7581C2__7S7581C1[6]),  6,10},
  {&(_ZTV7S7581C1[16]),  16,32},
  {&(_ZTV7S7581C1[27]),  27,32},
};
extern VTBL_ENTRY _ZTI7S7581C1[];
extern  VTBL_ENTRY _ZTV7S7581C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7581C1[];
Class_Descriptor cd_S7581C1 = {  "S7581C1", // class name
  bases_S7581C1, 3,
  &(vtc_S7581C1[0]), // expected_vtbl_contents
  &(vtt_S7581C1[0]), // expected_vtt_contents
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S7581C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7581C1),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7581C1),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21425C1  {
  ::S3222C4_nt s21425c1f0;
  ::S2014C25 s21425c1f1;
  ::S2014C26 s21425c1f2;
  ::S8710C8_nt s21425c1f3;
  void  mf21425c1(); // _ZN8S21425C19mf21425c1Ev
  virtual  ~S21425C1(); // _ZN8S21425C1D1Ev
  S21425C1(); // tgen
};
//SIG(1 S21425C1) C1{ vd m FC2{ m Fi[2]} FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC4 FC7{ m FC8{ FL[4]}}}


void  S21425C1 ::mf21425c1(){}
 S21425C1 ::~S21425C1(){ note_dtor("S21425C1", this);}
S21425C1 ::S21425C1(){ note_ctor("S21425C1", this);} // tgen

static void Test_S21425C1()
{
  extern Class_Descriptor cd_S21425C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S21425C1, buf);
    S21425C1 *dp, &lv = *(dp=new (buf) S21425C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S21425C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21425C1)");
    check_field_offset(lv, s21425c1f0, ABISELECT(8,4), "S21425C1.s21425c1f0");
    check_field_offset(lv, s21425c1f1, ABISELECT(16,12), "S21425C1.s21425c1f1");
    check_field_offset(lv, s21425c1f2, ABISELECT(32,24), "S21425C1.s21425c1f2");
    check_field_offset(lv, s21425c1f3, ABISELECT(48,36), "S21425C1.s21425c1f3");
    test_class_info(&lv, &cd_S21425C1);
    dp->~S21425C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21425C1(Test_S21425C1, "S21425C1", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN8S21425C1C1Ev();
extern void _ZN8S21425C1D1Ev();
Name_Map name_map_S21425C1[] = {
  NSPAIR(_ZN8S21425C1C1Ev),
  NSPAIR(_ZN8S21425C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21425C1[];
extern void _ZN8S21425C1D1Ev();
extern void _ZN8S21425C1D0Ev();
static  VTBL_ENTRY vtc_S21425C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21425C1[0]),
  (VTBL_ENTRY)&_ZN8S21425C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21425C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21425C1[];
extern  VTBL_ENTRY _ZTV8S21425C1[];
Class_Descriptor cd_S21425C1 = {  "S21425C1", // class name
  0,0,//no base classes
  &(vtc_S21425C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI8S21425C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21425C1),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  S3442C3  {
  virtual void  v9(); // _ZN7S3442C32v9Ev
  virtual void  v10(); // _ZN7S3442C33v10Ev
  virtual void  v11(); // _ZN7S3442C33v11Ev
  ~S3442C3(); // tgen
  S3442C3(); // tgen
};
//SIG(-1 S3442C3) C1{ v1 v2 v3}


void  S3442C3 ::v9(){vfunc_called(this, "_ZN7S3442C32v9Ev");}
void  S3442C3 ::v10(){vfunc_called(this, "_ZN7S3442C33v10Ev");}
void  S3442C3 ::v11(){vfunc_called(this, "_ZN7S3442C33v11Ev");}
S3442C3 ::~S3442C3(){ note_dtor("S3442C3", this);} // tgen
S3442C3 ::S3442C3(){ note_ctor("S3442C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3442C3C1Ev();
extern void _ZN7S3442C3D1Ev();
Name_Map name_map_S3442C3[] = {
  NSPAIR(_ZN7S3442C3C1Ev),
  NSPAIR(_ZN7S3442C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3442C3[];
extern void _ZN7S3442C32v9Ev();
extern void _ZN7S3442C33v10Ev();
extern void _ZN7S3442C33v11Ev();
static  VTBL_ENTRY vtc_S3442C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3442C3[0]),
  (VTBL_ENTRY)&_ZN7S3442C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3442C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3442C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3442C3[];
extern  VTBL_ENTRY _ZTV7S3442C3[];
Class_Descriptor cd_S3442C3 = {  "S3442C3", // class name
  0,0,//no base classes
  &(vtc_S3442C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3442C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3442C3),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  S3442C2  : S3442C3 {
  int s3442c2f0;
  virtual void  v12(); // _ZN7S3442C23v12Ev
  virtual void  v13(); // _ZN7S3442C23v13Ev
  virtual void  v14(); // _ZN7S3442C23v14Ev
  virtual void  v15(); // _ZN7S3442C23v15Ev
  virtual void  v16(); // _ZN7S3442C23v16Ev
  virtual void  v17(); // _ZN7S3442C23v17Ev
  virtual void  v18(); // _ZN7S3442C23v18Ev
  ~S3442C2(); // tgen
  S3442C2(); // tgen
};
//SIG(-1 S3442C2) C1{ BC2{ v8 v9 v10} v1 v2 v3 v4 v5 v6 v7 Fi}


void  S3442C2 ::v12(){vfunc_called(this, "_ZN7S3442C23v12Ev");}
void  S3442C2 ::v13(){vfunc_called(this, "_ZN7S3442C23v13Ev");}
void  S3442C2 ::v14(){vfunc_called(this, "_ZN7S3442C23v14Ev");}
void  S3442C2 ::v15(){vfunc_called(this, "_ZN7S3442C23v15Ev");}
void  S3442C2 ::v16(){vfunc_called(this, "_ZN7S3442C23v16Ev");}
void  S3442C2 ::v17(){vfunc_called(this, "_ZN7S3442C23v17Ev");}
void  S3442C2 ::v18(){vfunc_called(this, "_ZN7S3442C23v18Ev");}
S3442C2 ::~S3442C2(){ note_dtor("S3442C2", this);} // tgen
S3442C2 ::S3442C2(){ note_ctor("S3442C2", this);} // tgen

static void Test_S3442C2()
{
  extern Class_Descriptor cd_S3442C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3442C2, buf);
    S3442C2 *dp, &lv = *(dp=new (buf) S3442C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3442C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3442C2)");
    check_base_class_offset(lv, (S3442C3*), 0, "S3442C2");
    check_field_offset(lv, s3442c2f0, ABISELECT(8,4), "S3442C2.s3442c2f0");
    test_class_info(&lv, &cd_S3442C2);
    dp->~S3442C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3442C2(Test_S3442C2, "S3442C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3442C2C1Ev();
extern void _ZN7S3442C2D1Ev();
Name_Map name_map_S3442C2[] = {
  NSPAIR(_ZN7S3442C2C1Ev),
  NSPAIR(_ZN7S3442C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3442C3;
extern VTBL_ENTRY _ZTI7S3442C3[];
extern  VTBL_ENTRY _ZTV7S3442C3[];
static Base_Class bases_S3442C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3442C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3442C2[];
extern void _ZN7S3442C32v9Ev();
extern void _ZN7S3442C33v10Ev();
extern void _ZN7S3442C33v11Ev();
extern void _ZN7S3442C23v12Ev();
extern void _ZN7S3442C23v13Ev();
extern void _ZN7S3442C23v14Ev();
extern void _ZN7S3442C23v15Ev();
extern void _ZN7S3442C23v16Ev();
extern void _ZN7S3442C23v17Ev();
extern void _ZN7S3442C23v18Ev();
static  VTBL_ENTRY vtc_S3442C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3442C2[0]),
  (VTBL_ENTRY)&_ZN7S3442C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3442C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3442C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v18Ev,
};
extern VTBL_ENTRY _ZTI7S3442C2[];
extern  VTBL_ENTRY _ZTV7S3442C2[];
Class_Descriptor cd_S3442C2 = {  "S3442C2", // class name
  bases_S3442C2, 1,
  &(vtc_S3442C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3442C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3442C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3442C4  {
  virtual void  v19(); // _ZN7S3442C43v19Ev
  virtual void  v20(); // _ZN7S3442C43v20Ev
  ~S3442C4(); // tgen
  S3442C4(); // tgen
};
//SIG(-1 S3442C4) C1{ v1 v2}


void  S3442C4 ::v19(){vfunc_called(this, "_ZN7S3442C43v19Ev");}
void  S3442C4 ::v20(){vfunc_called(this, "_ZN7S3442C43v20Ev");}
S3442C4 ::~S3442C4(){ note_dtor("S3442C4", this);} // tgen
S3442C4 ::S3442C4(){ note_ctor("S3442C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3442C4C1Ev();
extern void _ZN7S3442C4D1Ev();
Name_Map name_map_S3442C4[] = {
  NSPAIR(_ZN7S3442C4C1Ev),
  NSPAIR(_ZN7S3442C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3442C4[];
extern void _ZN7S3442C43v19Ev();
extern void _ZN7S3442C43v20Ev();
static  VTBL_ENTRY vtc_S3442C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3442C4[0]),
  (VTBL_ENTRY)&_ZN7S3442C43v19Ev,
  (VTBL_ENTRY)&_ZN7S3442C43v20Ev,
};
extern VTBL_ENTRY _ZTI7S3442C4[];
extern  VTBL_ENTRY _ZTV7S3442C4[];
Class_Descriptor cd_S3442C4 = {  "S3442C4", // class name
  0,0,//no base classes
  &(vtc_S3442C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3442C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3442C4),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  S3442C1  : S3442C2 , S3442C4 {
  char s3442c1f0[7];
  virtual void  v1(); // _ZN7S3442C12v1Ev
  virtual void  v2(); // _ZN7S3442C12v2Ev
  virtual void  v3(); // _ZN7S3442C12v3Ev
  virtual void  v4(); // _ZN7S3442C12v4Ev
  virtual void  v5(); // _ZN7S3442C12v5Ev
  virtual void  v6(); // _ZN7S3442C12v6Ev
  virtual void  v7(); // _ZN7S3442C12v7Ev
  virtual void  v8(); // _ZN7S3442C12v8Ev
  ~S3442C1(); // tgen
  S3442C1(); // tgen
};
//SIG(1 S3442C1) C1{ BC2{ BC3{ v9 v10 v11} v12 v13 v14 v15 v16 v17 v18 Fi} BC4{ v19 v20} v1 v2 v3 v4 v5 v6 v7 v8 Fc[7]}


void  S3442C1 ::v1(){vfunc_called(this, "_ZN7S3442C12v1Ev");}
void  S3442C1 ::v2(){vfunc_called(this, "_ZN7S3442C12v2Ev");}
void  S3442C1 ::v3(){vfunc_called(this, "_ZN7S3442C12v3Ev");}
void  S3442C1 ::v4(){vfunc_called(this, "_ZN7S3442C12v4Ev");}
void  S3442C1 ::v5(){vfunc_called(this, "_ZN7S3442C12v5Ev");}
void  S3442C1 ::v6(){vfunc_called(this, "_ZN7S3442C12v6Ev");}
void  S3442C1 ::v7(){vfunc_called(this, "_ZN7S3442C12v7Ev");}
void  S3442C1 ::v8(){vfunc_called(this, "_ZN7S3442C12v8Ev");}
S3442C1 ::~S3442C1(){ note_dtor("S3442C1", this);} // tgen
S3442C1 ::S3442C1(){ note_ctor("S3442C1", this);} // tgen

static void Test_S3442C1()
{
  extern Class_Descriptor cd_S3442C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3442C1, buf);
    S3442C1 *dp, &lv = *(dp=new (buf) S3442C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3442C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3442C1)");
    check_base_class_offset(lv, (S3442C3*)(S3442C2*), 0, "S3442C1");
    check_base_class_offset(lv, (S3442C2*), 0, "S3442C1");
    check_base_class_offset(lv, (S3442C4*), ABISELECT(16,8), "S3442C1");
    check_field_offset(lv, s3442c1f0, ABISELECT(24,12), "S3442C1.s3442c1f0");
    test_class_info(&lv, &cd_S3442C1);
    dp->~S3442C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3442C1(Test_S3442C1, "S3442C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3442C1C1Ev();
extern void _ZN7S3442C1D1Ev();
Name_Map name_map_S3442C1[] = {
  NSPAIR(_ZN7S3442C1C1Ev),
  NSPAIR(_ZN7S3442C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3442C3;
extern VTBL_ENTRY _ZTI7S3442C3[];
extern  VTBL_ENTRY _ZTV7S3442C3[];
extern Class_Descriptor cd_S3442C2;
extern VTBL_ENTRY _ZTI7S3442C2[];
extern  VTBL_ENTRY _ZTV7S3442C2[];
extern Class_Descriptor cd_S3442C4;
extern VTBL_ENTRY _ZTI7S3442C4[];
extern  VTBL_ENTRY _ZTV7S3442C4[];
static Base_Class bases_S3442C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3442C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3442C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3442C4,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3442C1[];
extern void _ZN7S3442C32v9Ev();
extern void _ZN7S3442C33v10Ev();
extern void _ZN7S3442C33v11Ev();
extern void _ZN7S3442C23v12Ev();
extern void _ZN7S3442C23v13Ev();
extern void _ZN7S3442C23v14Ev();
extern void _ZN7S3442C23v15Ev();
extern void _ZN7S3442C23v16Ev();
extern void _ZN7S3442C23v17Ev();
extern void _ZN7S3442C23v18Ev();
extern void _ZN7S3442C12v1Ev();
extern void _ZN7S3442C12v2Ev();
extern void _ZN7S3442C12v3Ev();
extern void _ZN7S3442C12v4Ev();
extern void _ZN7S3442C12v5Ev();
extern void _ZN7S3442C12v6Ev();
extern void _ZN7S3442C12v7Ev();
extern void _ZN7S3442C12v8Ev();
extern void _ZN7S3442C43v19Ev();
extern void _ZN7S3442C43v20Ev();
static  VTBL_ENTRY vtc_S3442C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3442C1[0]),
  (VTBL_ENTRY)&_ZN7S3442C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3442C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3442C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3442C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3442C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3442C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3442C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3442C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3442C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3442C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3442C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3442C12v8Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3442C1[0]),
  (VTBL_ENTRY)&_ZN7S3442C43v19Ev,
  (VTBL_ENTRY)&_ZN7S3442C43v20Ev,
};
extern VTBL_ENTRY _ZTI7S3442C1[];
extern  VTBL_ENTRY _ZTV7S3442C1[];
Class_Descriptor cd_S3442C1 = {  "S3442C1", // class name
  bases_S3442C1, 3,
  &(vtc_S3442C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3442C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3442C1),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  S3832C3_nt  {
  int s3832c3f0;
  void  mf3832c3(); // _ZN10S3832C3_nt8mf3832c3Ev
  virtual  ~S3832C3_nt(); // _ZN10S3832C3_ntD1Ev
  S3832C3_nt(); // tgen
};
//SIG(-1 S3832C3_nt) C1{ vd m Fi}


void  S3832C3_nt ::mf3832c3(){}
 S3832C3_nt ::~S3832C3_nt(){ note_dtor("S3832C3_nt", this);}
S3832C3_nt ::S3832C3_nt(){ note_ctor("S3832C3_nt", this);} // tgen

//skip512 S3832C3_nt

#else // __cplusplus

extern void _ZN10S3832C3_ntC1Ev();
extern void _ZN10S3832C3_ntD1Ev();
Name_Map name_map_S3832C3_nt[] = {
  NSPAIR(_ZN10S3832C3_ntC1Ev),
  NSPAIR(_ZN10S3832C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3832C3_nt[];
extern void _ZN10S3832C3_ntD1Ev();
extern void _ZN10S3832C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3832C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3832C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3832C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3832C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3832C3_nt[];
VTBL_ENTRY *P__ZTI10S3832C3_nt = _ZTI10S3832C3_nt; 
extern  VTBL_ENTRY _ZTV10S3832C3_nt[];
Class_Descriptor cd_S3832C3_nt = {  "S3832C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3832C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3832C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3832C3_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  S3832C2  : S3832C3_nt {
  virtual  ~S3832C2(); // _ZN7S3832C2D1Ev
  virtual void  v2(); // _ZN7S3832C22v2Ev
  S3832C2(); // tgen
};
//SIG(-1 S3832C2) C1{ BC2{ vd m Fi} vd v1}


 S3832C2 ::~S3832C2(){ note_dtor("S3832C2", this);}
void  S3832C2 ::v2(){vfunc_called(this, "_ZN7S3832C22v2Ev");}
S3832C2 ::S3832C2(){ note_ctor("S3832C2", this);} // tgen

static void Test_S3832C2()
{
  extern Class_Descriptor cd_S3832C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3832C2, buf);
    S3832C2 *dp, &lv = *(dp=new (buf) S3832C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3832C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3832C2)");
    check_base_class_offset(lv, (S3832C3_nt*), 0, "S3832C2");
    test_class_info(&lv, &cd_S3832C2);
    dp->~S3832C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3832C2(Test_S3832C2, "S3832C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3832C2C1Ev();
extern void _ZN7S3832C2D1Ev();
Name_Map name_map_S3832C2[] = {
  NSPAIR(_ZN7S3832C2C1Ev),
  NSPAIR(_ZN7S3832C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3832C3_nt;
extern VTBL_ENTRY _ZTI10S3832C3_nt[];
extern  VTBL_ENTRY _ZTV10S3832C3_nt[];
static Base_Class bases_S3832C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3832C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3832C2[];
extern void _ZN7S3832C2D1Ev();
extern void _ZN7S3832C2D0Ev();
extern void _ZN7S3832C22v2Ev();
static  VTBL_ENTRY vtc_S3832C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3832C2[0]),
  (VTBL_ENTRY)&_ZN7S3832C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3832C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3832C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S3832C2[];
extern  VTBL_ENTRY _ZTV7S3832C2[];
Class_Descriptor cd_S3832C2 = {  "S3832C2", // class name
  bases_S3832C2, 1,
  &(vtc_S3832C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3832C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3832C2),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  S3832C1  : S3832C2 {
  void *s3832c1f0;
  ::S2014C37 s3832c1f1;
  ::S2014C25 s3832c1f2;
  char s3832c1f3[2];
  virtual  ~S3832C1(); // _ZN7S3832C1D1Ev
  virtual void  v1(); // _ZN7S3832C12v1Ev
  S3832C1(); // tgen
};
//SIG(1 S3832C1) C1{ BC2{ BC3{ vd m Fi} vd v2} vd v1 Fp FC4{ m Fp Fi[2] FC5{ m}} FC6{ BC7{ m Fp Fi FC8{ m} FC9{ m}}} Fc[2]}


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

static void Test_S3832C1()
{
  extern Class_Descriptor cd_S3832C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S3832C1, buf);
    S3832C1 *dp, &lv = *(dp=new (buf) S3832C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S3832C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3832C1)");
    check_base_class_offset(lv, (S3832C3_nt*)(S3832C2*), 0, "S3832C1");
    check_base_class_offset(lv, (S3832C2*), 0, "S3832C1");
    check_field_offset(lv, s3832c1f0, ABISELECT(16,8), "S3832C1.s3832c1f0");
    check_field_offset(lv, s3832c1f1, ABISELECT(24,12), "S3832C1.s3832c1f1");
    check_field_offset(lv, s3832c1f2, ABISELECT(48,28), "S3832C1.s3832c1f2");
    check_field_offset(lv, s3832c1f3, ABISELECT(64,40), "S3832C1.s3832c1f3");
    test_class_info(&lv, &cd_S3832C1);
    dp->~S3832C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3832C1(Test_S3832C1, "S3832C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S3832C1C1Ev();
extern void _ZN7S3832C1D1Ev();
Name_Map name_map_S3832C1[] = {
  NSPAIR(_ZN7S3832C1C1Ev),
  NSPAIR(_ZN7S3832C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3832C3_nt;
extern VTBL_ENTRY _ZTI10S3832C3_nt[];
extern  VTBL_ENTRY _ZTV10S3832C3_nt[];
extern Class_Descriptor cd_S3832C2;
extern VTBL_ENTRY _ZTI7S3832C2[];
extern  VTBL_ENTRY _ZTV7S3832C2[];
static Base_Class bases_S3832C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3832C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3832C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3832C1[];
extern void _ZN7S3832C1D1Ev();
extern void _ZN7S3832C1D0Ev();
extern void _ZN7S3832C22v2Ev();
extern void _ZN7S3832C12v1Ev();
static  VTBL_ENTRY vtc_S3832C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3832C1[0]),
  (VTBL_ENTRY)&_ZN7S3832C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3832C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3832C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3832C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3832C1[];
extern  VTBL_ENTRY _ZTV7S3832C1[];
Class_Descriptor cd_S3832C1 = {  "S3832C1", // class name
  bases_S3832C1, 2,
  &(vtc_S3832C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S3832C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3832C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7036C2_nt  {
  virtual  ~S7036C2_nt(); // _ZN10S7036C2_ntD1Ev
  virtual void  v6(); // _ZN10S7036C2_nt2v6Ev
  virtual void  v7(); // _ZN10S7036C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7036C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7036C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7036C2_nt3v10Ev
  S7036C2_nt(); // tgen
};
//SIG(-1 S7036C2_nt) C1{ vd v1 v2 v3 v4 v5}


 S7036C2_nt ::~S7036C2_nt(){ note_dtor("S7036C2_nt", this);}
void  S7036C2_nt ::v6(){vfunc_called(this, "_ZN10S7036C2_nt2v6Ev");}
void  S7036C2_nt ::v7(){vfunc_called(this, "_ZN10S7036C2_nt2v7Ev");}
void  S7036C2_nt ::v8(){vfunc_called(this, "_ZN10S7036C2_nt2v8Ev");}
void  S7036C2_nt ::v9(){vfunc_called(this, "_ZN10S7036C2_nt2v9Ev");}
void  S7036C2_nt ::v10(){vfunc_called(this, "_ZN10S7036C2_nt3v10Ev");}
S7036C2_nt ::S7036C2_nt(){ note_ctor("S7036C2_nt", this);} // tgen

//skip512 S7036C2_nt

#else // __cplusplus

extern void _ZN10S7036C2_ntC1Ev();
extern void _ZN10S7036C2_ntD1Ev();
Name_Map name_map_S7036C2_nt[] = {
  NSPAIR(_ZN10S7036C2_ntC1Ev),
  NSPAIR(_ZN10S7036C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7036C2_nt[];
extern void _ZN10S7036C2_ntD1Ev();
extern void _ZN10S7036C2_ntD0Ev();
extern void _ZN10S7036C2_nt2v6Ev();
extern void _ZN10S7036C2_nt2v7Ev();
extern void _ZN10S7036C2_nt2v8Ev();
extern void _ZN10S7036C2_nt2v9Ev();
extern void _ZN10S7036C2_nt3v10Ev();
static  VTBL_ENTRY vtc_S7036C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7036C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7036C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S7036C2_nt[];
VTBL_ENTRY *P__ZTI10S7036C2_nt = _ZTI10S7036C2_nt; 
extern  VTBL_ENTRY _ZTV10S7036C2_nt[];
Class_Descriptor cd_S7036C2_nt = {  "S7036C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7036C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7036C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7036C2_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7036C1  : S7036C2_nt {
  void *s7036c1f0;
  int s7036c1f1;
  char s7036c1f2[32];
  int s7036c1f3;
  char s7036c1f4[3];
  ::S4952C8_nt s7036c1f5;
  void *s7036c1f6[2];
  int s7036c1f7[3];
  virtual  ~S7036C1(); // _ZN7S7036C1D1Ev
  virtual void  v1(); // _ZN7S7036C12v1Ev
  virtual void  v2(); // _ZN7S7036C12v2Ev
  virtual void  v3(); // _ZN7S7036C12v3Ev
  virtual void  v4(); // _ZN7S7036C12v4Ev
  virtual void  v5(); // _ZN7S7036C12v5Ev
  S7036C1(); // tgen
};
//SIG(1 S7036C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp Fi Fc[32] Fi Fc[3] FC3{ m FL[4]} Fp[2] Fi[3]}


 S7036C1 ::~S7036C1(){ note_dtor("S7036C1", this);}
void  S7036C1 ::v1(){vfunc_called(this, "_ZN7S7036C12v1Ev");}
void  S7036C1 ::v2(){vfunc_called(this, "_ZN7S7036C12v2Ev");}
void  S7036C1 ::v3(){vfunc_called(this, "_ZN7S7036C12v3Ev");}
void  S7036C1 ::v4(){vfunc_called(this, "_ZN7S7036C12v4Ev");}
void  S7036C1 ::v5(){vfunc_called(this, "_ZN7S7036C12v5Ev");}
S7036C1 ::S7036C1(){ note_ctor("S7036C1", this);} // tgen

static void Test_S7036C1()
{
  extern Class_Descriptor cd_S7036C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,27)];
    init_test(&cd_S7036C1, buf);
    S7036C1 *dp, &lv = *(dp=new (buf) S7036C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,104), "sizeof(S7036C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7036C1)");
    check_base_class_offset(lv, (S7036C2_nt*), 0, "S7036C1");
    check_field_offset(lv, s7036c1f0, ABISELECT(8,4), "S7036C1.s7036c1f0");
    check_field_offset(lv, s7036c1f1, ABISELECT(16,8), "S7036C1.s7036c1f1");
    check_field_offset(lv, s7036c1f2, ABISELECT(20,12), "S7036C1.s7036c1f2");
    check_field_offset(lv, s7036c1f3, ABISELECT(52,44), "S7036C1.s7036c1f3");
    check_field_offset(lv, s7036c1f4, ABISELECT(56,48), "S7036C1.s7036c1f4");
    check_field_offset(lv, s7036c1f5, ABISELECT(64,52), "S7036C1.s7036c1f5");
    check_field_offset(lv, s7036c1f6, ABISELECT(96,84), "S7036C1.s7036c1f6");
    check_field_offset(lv, s7036c1f7, ABISELECT(112,92), "S7036C1.s7036c1f7");
    test_class_info(&lv, &cd_S7036C1);
    dp->~S7036C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7036C1(Test_S7036C1, "S7036C1", ABISELECT(128,104));

#else // __cplusplus

extern void _ZN7S7036C1C1Ev();
extern void _ZN7S7036C1D1Ev();
Name_Map name_map_S7036C1[] = {
  NSPAIR(_ZN7S7036C1C1Ev),
  NSPAIR(_ZN7S7036C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7036C2_nt;
extern VTBL_ENTRY _ZTI10S7036C2_nt[];
extern  VTBL_ENTRY _ZTV10S7036C2_nt[];
static Base_Class bases_S7036C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7036C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7036C1[];
extern void _ZN7S7036C1D1Ev();
extern void _ZN7S7036C1D0Ev();
extern void _ZN10S7036C2_nt2v6Ev();
extern void _ZN10S7036C2_nt2v7Ev();
extern void _ZN10S7036C2_nt2v8Ev();
extern void _ZN10S7036C2_nt2v9Ev();
extern void _ZN10S7036C2_nt3v10Ev();
extern void _ZN7S7036C12v1Ev();
extern void _ZN7S7036C12v2Ev();
extern void _ZN7S7036C12v3Ev();
extern void _ZN7S7036C12v4Ev();
extern void _ZN7S7036C12v5Ev();
static  VTBL_ENTRY vtc_S7036C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7036C1[0]),
  (VTBL_ENTRY)&_ZN7S7036C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7036C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7036C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S7036C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7036C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7036C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7036C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7036C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7036C1[];
extern  VTBL_ENTRY _ZTV7S7036C1[];
Class_Descriptor cd_S7036C1 = {  "S7036C1", // class name
  bases_S7036C1, 1,
  &(vtc_S7036C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,104), // object size
  NSPAIRA(_ZTI7S7036C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7036C1),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  S20896C3  {
  virtual void  v6(); // _ZN8S20896C32v6Ev
  ~S20896C3(); // tgen
  S20896C3(); // tgen
};
//SIG(-1 S20896C3) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN8S20896C3C1Ev();
extern void _ZN8S20896C3D1Ev();
Name_Map name_map_S20896C3[] = {
  NSPAIR(_ZN8S20896C3C1Ev),
  NSPAIR(_ZN8S20896C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20896C3[];
extern void _ZN8S20896C32v6Ev();
static  VTBL_ENTRY vtc_S20896C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20896C3[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
};
extern VTBL_ENTRY _ZTI8S20896C3[];
extern  VTBL_ENTRY _ZTV8S20896C3[];
Class_Descriptor cd_S20896C3 = {  "S20896C3", // class name
  0,0,//no base classes
  &(vtc_S20896C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20896C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20896C3),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  S20896C4  : virtual S20896C3 {
  int s20896c4f0;
  void *s20896c4f1;
  virtual  ~S20896C4(); // _ZN8S20896C4D2Ev
  virtual void  v7(); // _ZN8S20896C42v7Ev
  virtual void  v8(); // _ZN8S20896C42v8Ev
  S20896C4(); // tgen
};
//SIG(-1 S20896C4) C1{ VBC2{ v3} vd v1 v2 Fi Fp}


 S20896C4 ::~S20896C4(){ note_dtor("S20896C4", this);}
void  S20896C4 ::v7(){vfunc_called(this, "_ZN8S20896C42v7Ev");}
void  S20896C4 ::v8(){vfunc_called(this, "_ZN8S20896C42v8Ev");}
S20896C4 ::S20896C4(){ note_ctor("S20896C4", this);} // tgen

static void Test_S20896C4()
{
  extern Class_Descriptor cd_S20896C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20896C4, buf);
    S20896C4 *dp, &lv = *(dp=new (buf) S20896C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20896C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20896C4)");
    check_base_class_offset(lv, (S20896C3*), 0, "S20896C4");
    check_field_offset(lv, s20896c4f0, ABISELECT(8,4), "S20896C4.s20896c4f0");
    check_field_offset(lv, s20896c4f1, ABISELECT(16,8), "S20896C4.s20896c4f1");
    test_class_info(&lv, &cd_S20896C4);
    dp->~S20896C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20896C4(Test_S20896C4, "S20896C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20896C4C1Ev();
extern void _ZN8S20896C4D2Ev();
Name_Map name_map_S20896C4[] = {
  NSPAIR(_ZN8S20896C4C1Ev),
  NSPAIR(_ZN8S20896C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20896C3;
extern VTBL_ENTRY _ZTI8S20896C3[];
extern  VTBL_ENTRY _ZTV8S20896C3[];
static Base_Class bases_S20896C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20896C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20896C4[];
extern void _ZN8S20896C32v6Ev();
extern void _ZN8S20896C4D1Ev();
extern void _ZN8S20896C4D0Ev();
extern void _ZN8S20896C42v7Ev();
extern void _ZN8S20896C42v8Ev();
static  VTBL_ENTRY vtc_S20896C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20896C4[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20896C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20896C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v8Ev,
};
extern VTBL_ENTRY _ZTV8S20896C4[];
static  VTT_ENTRY vtt_S20896C4[] = {
  {&(_ZTV8S20896C4[4]),  4,9},
  {&(_ZTV8S20896C4[4]),  4,9},
};
extern VTBL_ENTRY _ZTI8S20896C4[];
extern  VTBL_ENTRY _ZTV8S20896C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20896C4[];
Class_Descriptor cd_S20896C4 = {  "S20896C4", // class name
  bases_S20896C4, 1,
  &(vtc_S20896C4[0]), // expected_vtbl_contents
  &(vtt_S20896C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20896C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20896C4),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20896C4),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  S20896C2  : virtual S20896C3 , S20896C4 {
  virtual  ~S20896C2(); // _ZN8S20896C2D2Ev
  virtual void  v9(); // _ZN8S20896C22v9Ev
  virtual void  v10(); // _ZN8S20896C23v10Ev
  virtual void  v11(); // _ZN8S20896C23v11Ev
  virtual void  v12(); // _ZN8S20896C23v12Ev
  virtual void  v13(); // _ZN8S20896C23v13Ev
  S20896C2(); // tgen
};
//SIG(-1 S20896C2) C1{ VBC2{ v6} BC3{ VBC2 vd v7 v8 Fi Fp} vd v1 v2 v3 v4 v5}


 S20896C2 ::~S20896C2(){ note_dtor("S20896C2", this);}
void  S20896C2 ::v9(){vfunc_called(this, "_ZN8S20896C22v9Ev");}
void  S20896C2 ::v10(){vfunc_called(this, "_ZN8S20896C23v10Ev");}
void  S20896C2 ::v11(){vfunc_called(this, "_ZN8S20896C23v11Ev");}
void  S20896C2 ::v12(){vfunc_called(this, "_ZN8S20896C23v12Ev");}
void  S20896C2 ::v13(){vfunc_called(this, "_ZN8S20896C23v13Ev");}
S20896C2 ::S20896C2(){ note_ctor("S20896C2", this);} // tgen

static void Test_S20896C2()
{
  extern Class_Descriptor cd_S20896C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20896C2, buf);
    S20896C2 *dp, &lv = *(dp=new (buf) S20896C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20896C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20896C2)");
    check_base_class_offset(lv, (S20896C3*), 0, "S20896C2");
    check_base_class_offset(lv, (S20896C3*)(S20896C4*), 0, "S20896C2");
    check_base_class_offset(lv, (S20896C4*), 0, "S20896C2");
    test_class_info(&lv, &cd_S20896C2);
    dp->~S20896C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20896C2(Test_S20896C2, "S20896C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20896C2C1Ev();
extern void _ZN8S20896C2D2Ev();
Name_Map name_map_S20896C2[] = {
  NSPAIR(_ZN8S20896C2C1Ev),
  NSPAIR(_ZN8S20896C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20896C3;
extern VTBL_ENTRY _ZTI8S20896C3[];
extern  VTBL_ENTRY _ZTV8S20896C3[];
extern Class_Descriptor cd_S20896C4;
extern VTBL_ENTRY _ZTI8S20896C4[];
extern  VTBL_ENTRY _ZTV8S20896C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20896C4[];
static Base_Class bases_S20896C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20896C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20896C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20896C2[];
extern void _ZN8S20896C32v6Ev();
extern void _ZN8S20896C2D1Ev();
extern void _ZN8S20896C2D0Ev();
extern void _ZN8S20896C42v7Ev();
extern void _ZN8S20896C42v8Ev();
extern void _ZN8S20896C22v9Ev();
extern void _ZN8S20896C23v10Ev();
extern void _ZN8S20896C23v11Ev();
extern void _ZN8S20896C23v12Ev();
extern void _ZN8S20896C23v13Ev();
static  VTBL_ENTRY vtc_S20896C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20896C2[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20896C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20896C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20896C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v13Ev,
};
extern VTBL_ENTRY _ZTV8S20896C2[];
extern void _ZN8S20896C32v6Ev();
extern void _ZN8S20896C4D1Ev();
extern void _ZN8S20896C4D0Ev();
extern void _ZN8S20896C42v7Ev();
extern void _ZN8S20896C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20896C4__8S20896C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20896C4[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20896C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20896C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v8Ev,
};
static  VTT_ENTRY vtt_S20896C2[] = {
  {&(_ZTV8S20896C2[4]),  4,14},
  {&(_tg__ZTV8S20896C4__8S20896C2[4]),  4,9},
  {&(_tg__ZTV8S20896C4__8S20896C2[4]),  4,9},
  {&(_ZTV8S20896C2[4]),  4,14},
};
extern VTBL_ENTRY _ZTI8S20896C2[];
extern  VTBL_ENTRY _ZTV8S20896C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20896C2[];
Class_Descriptor cd_S20896C2 = {  "S20896C2", // class name
  bases_S20896C2, 2,
  &(vtc_S20896C2[0]), // expected_vtbl_contents
  &(vtt_S20896C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20896C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20896C2),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20896C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20896C1  : virtual S20896C2 {
  char s20896c1f0[9];
  void *s20896c1f1[2];
  virtual void  v1(); // _ZN8S20896C12v1Ev
  virtual void  v2(); // _ZN8S20896C12v2Ev
  virtual void  v3(); // _ZN8S20896C12v3Ev
  virtual void  v4(); // _ZN8S20896C12v4Ev
  virtual void  v5(); // _ZN8S20896C12v5Ev
  ~S20896C1(); // tgen
  S20896C1(); // tgen
};
//SIG(1 S20896C1) C1{ VBC2{ VBC3{ v6} BC4{ VBC3 vd v7 v8 Fi Fp} vd v9 v10 v11 v12 v13} v1 v2 v3 v4 v5 Fc[9] Fp[2]}


void  S20896C1 ::v1(){vfunc_called(this, "_ZN8S20896C12v1Ev");}
void  S20896C1 ::v2(){vfunc_called(this, "_ZN8S20896C12v2Ev");}
void  S20896C1 ::v3(){vfunc_called(this, "_ZN8S20896C12v3Ev");}
void  S20896C1 ::v4(){vfunc_called(this, "_ZN8S20896C12v4Ev");}
void  S20896C1 ::v5(){vfunc_called(this, "_ZN8S20896C12v5Ev");}
S20896C1 ::~S20896C1(){ note_dtor("S20896C1", this);} // tgen
S20896C1 ::S20896C1(){ note_ctor("S20896C1", this);} // tgen

static void Test_S20896C1()
{
  extern Class_Descriptor cd_S20896C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S20896C1, buf);
    S20896C1 *dp, &lv = *(dp=new (buf) S20896C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S20896C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20896C1)");
    check_base_class_offset(lv, (S20896C3*)(S20896C2*), 0, "S20896C1");
    check_base_class_offset(lv, (S20896C3*)(S20896C4*)(S20896C2*), 0, "S20896C1");
    check_base_class_offset(lv, (S20896C4*)(S20896C2*), ABISELECT(40,24), "S20896C1");
    check_base_class_offset(lv, (S20896C2*), ABISELECT(40,24), "S20896C1");
    check_field_offset(lv, s20896c1f0, ABISELECT(8,4), "S20896C1.s20896c1f0");
    check_field_offset(lv, s20896c1f1, ABISELECT(24,16), "S20896C1.s20896c1f1");
    test_class_info(&lv, &cd_S20896C1);
    dp->~S20896C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20896C1(Test_S20896C1, "S20896C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S20896C1C1Ev();
extern void _ZN8S20896C1D1Ev();
Name_Map name_map_S20896C1[] = {
  NSPAIR(_ZN8S20896C1C1Ev),
  NSPAIR(_ZN8S20896C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20896C3;
extern VTBL_ENTRY _ZTI8S20896C3[];
extern  VTBL_ENTRY _ZTV8S20896C3[];
extern Class_Descriptor cd_S20896C4;
extern VTBL_ENTRY _ZTI8S20896C4[];
extern  VTBL_ENTRY _ZTV8S20896C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20896C4[];
extern Class_Descriptor cd_S20896C2;
extern VTBL_ENTRY _ZTI8S20896C2[];
extern  VTBL_ENTRY _ZTV8S20896C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20896C2[];
static Base_Class bases_S20896C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20896C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20896C4,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20896C2,    ABISELECT(40,24), //bcp->offset
    13, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20896C1[];
extern void _ZN8S20896C32v6Ev();
extern void _ZN8S20896C12v1Ev();
extern void _ZN8S20896C12v2Ev();
extern void _ZN8S20896C12v3Ev();
extern void _ZN8S20896C12v4Ev();
extern void _ZN8S20896C12v5Ev();
extern void _ZN8S20896C1D1Ev();
extern void _ZN8S20896C1D0Ev();
extern void _ZN8S20896C32v6Ev();
extern void ABISELECT(_ZTv0_n40_N8S20896C1D1Ev,_ZTv0_n20_N8S20896C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20896C1D1Ev,_ZThn24_N8S20896C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20896C1D0Ev,_ZTv0_n20_N8S20896C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20896C1D0Ev,_ZThn24_N8S20896C1D0Ev)() __attribute__((weak));
extern void _ZN8S20896C42v7Ev();
extern void _ZN8S20896C42v8Ev();
extern void _ZN8S20896C22v9Ev();
extern void _ZN8S20896C23v10Ev();
extern void _ZN8S20896C23v11Ev();
extern void _ZN8S20896C23v12Ev();
extern void _ZN8S20896C23v13Ev();
static  VTBL_ENTRY vtc_S20896C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20896C1[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20896C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20896C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20896C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20896C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20896C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20896C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20896C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20896C1[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20896C1D1Ev,_ZTv0_n20_N8S20896C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20896C1D0Ev,_ZTv0_n20_N8S20896C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20896C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20896C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v13Ev,
};
extern VTBL_ENTRY _ZTV8S20896C1[];
extern void _ZN8S20896C32v6Ev();
extern void _ZN8S20896C2D1Ev();
extern void _ZN8S20896C2D0Ev();
extern void _ZN8S20896C42v7Ev();
extern void _ZN8S20896C42v8Ev();
extern void _ZN8S20896C22v9Ev();
extern void _ZN8S20896C23v10Ev();
extern void _ZN8S20896C23v11Ev();
extern void _ZN8S20896C23v12Ev();
extern void _ZN8S20896C23v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20896C2__8S20896C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20896C2[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20896C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20896C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20896C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20896C23v13Ev,
};
extern void _ZN8S20896C32v6Ev();
extern void _ZN8S20896C4D1Ev();
extern void _ZN8S20896C4D0Ev();
extern void _ZN8S20896C42v7Ev();
extern void _ZN8S20896C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20896C48S20896C2__8S20896C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20896C4[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20896C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20896C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20896C42v8Ev,
};
extern void _ZN8S20896C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20896C3__8S20896C48S20896C2__8S20896C1[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20896C4[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
};
extern void _ZN8S20896C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20896C3__8S20896C2__8S20896C1[] = {
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20896C2[0]),
  (VTBL_ENTRY)&_ZN8S20896C32v6Ev,
};
static  VTT_ENTRY vtt_S20896C1[] = {
  {&(_ZTV8S20896C1[5]),  5,35},
  {&(_ZTV8S20896C1[25]),  25,35},
  {&(_ZTV8S20896C1[5]),  5,35},
  {&(_tg__ZTV8S20896C2__8S20896C1[4]),  4,14},
  {&(_tg__ZTV8S20896C48S20896C2__8S20896C1[4]),  4,9},
  {&(_tg__ZTV8S20896C3__8S20896C48S20896C2__8S20896C1[3]),  3,4},
  {&(_tg__ZTV8S20896C3__8S20896C2__8S20896C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20896C1[];
extern  VTBL_ENTRY _ZTV8S20896C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20896C1[];
static VTBL_ENTRY alt_thunk_names177[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20896C1D0Ev,_ZTv0_n20_N8S20896C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20896C1D0Ev,_ZThn24_N8S20896C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20896C1D1Ev,_ZTv0_n20_N8S20896C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20896C1D1Ev,_ZThn24_N8S20896C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20896C1 = {  "S20896C1", // class name
  bases_S20896C1, 3,
  &(vtc_S20896C1[0]), // expected_vtbl_contents
  &(vtt_S20896C1[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S20896C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20896C1),35, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20896C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names177,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5514C3_nt  {
  char s5514c3f0[2304];
  int s5514c3f1;
};
//SIG(-1 S5514C3_nt) C1{ Fc[2304] Fi}



//skip512 S5514C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5514C2  {
  int s5514c2f0[2];
  ::S5514C3_nt s5514c2f1;
};
//SIG(-1 S5514C2) C1{ Fi[2] FC2{ Fc[2304] Fi}}



static void Test_S5514C2()
{
  {
    init_simple_test("S5514C2");
    S5514C2 lv;
    check2(sizeof(lv), 2316, "sizeof(S5514C2)");
    check2(__alignof__(lv), 4, "__alignof__(S5514C2)");
    check_field_offset(lv, s5514c2f0, 0, "S5514C2.s5514c2f0");
    check_field_offset(lv, s5514c2f1, 8, "S5514C2.s5514c2f1");
  }
}
static Arrange_To_Call_Me vS5514C2(Test_S5514C2, "S5514C2", 2316);

#else // __cplusplus

Class_Descriptor cd_S5514C2 = {  "S5514C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  2316, // 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  S5514C5_nt  {
  char s5514c5f0[20];
};
//SIG(-1 S5514C5_nt) C1{ Fc[20]}



//skip512 S5514C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5514C4_nt  {
  ::S5514C5_nt s5514c4f0;
  char s5514c4f1[16];
};
//SIG(-1 S5514C4_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S5514C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5514C6_nt  {
  __tsi64 s5514c6f0;
};
//SIG(-1 S5514C6_nt) C1{ FL}



//skip512 S5514C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5514C1  : S5514C2 {
  char s5514c1f0[33];
  ::S5514C4_nt s5514c1f1;
  ::S5514C4_nt s5514c1f2[32];
  int s5514c1f3;
  ::S5514C6_nt s5514c1f4;
  char s5514c1f5[10031];
};
//SIG(1 S5514C1) C1{ BC2{ Fi[2] FC3{ Fc[2304] Fi}} Fc[33] FC4{ FC5{ Fc[20]} Fc[16]} FC4[32] Fi FC6{ FL} Fc[10031]}



static void Test_S5514C1()
{
  extern Class_Descriptor cd_S5514C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1699,3397)];
    init_test(&cd_S5514C1, buf);
    S5514C1 &lv = *(new (buf) S5514C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 13584, "sizeof(S5514C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5514C1)");
    check_base_class_offset(lv, (S5514C2*), 0, "S5514C1");
    check_field_offset(lv, s5514c1f0, 2316, "S5514C1.s5514c1f0");
    check_field_offset(lv, s5514c1f1, 2349, "S5514C1.s5514c1f1");
    check_field_offset(lv, s5514c1f2, 2385, "S5514C1.s5514c1f2");
    check_field_offset(lv, s5514c1f3, 3540, "S5514C1.s5514c1f3");
    check_field_offset(lv, s5514c1f4, 3544, "S5514C1.s5514c1f4");
    check_field_offset(lv, s5514c1f5, 3552, "S5514C1.s5514c1f5");
    test_class_info(&lv, &cd_S5514C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5514C1(Test_S5514C1, "S5514C1", 13584);

#else // __cplusplus

extern Class_Descriptor cd_S5514C2;
static Base_Class bases_S5514C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5514C1 = {  "S5514C1", // class name
  bases_S5514C1, 1,
  0, // no vftv
  0, //no vtt
  13584, // 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  S5513C6_nt  {
  long s5513c6f0;
};
//SIG(-1 S5513C6_nt) C1{ Fl}



//skip512 S5513C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5513C1  : S5514C2 {
  char s5513c1f0[33];
  ::S5514C4_nt s5513c1f1;
  ::S5514C4_nt s5513c1f2[32];
  int s5513c1f3;
  ::S5513C6_nt s5513c1f4;
  char s5513c1f5[10031];
};
//SIG(1 S5513C1) C1{ BC2{ Fi[2] FC3{ Fc[2304] Fi}} Fc[33] FC4{ FC5{ Fc[20]} Fc[16]} FC4[32] Fi FC6{ Fl} Fc[10031]}



static void Test_S5513C1()
{
  extern Class_Descriptor cd_S5513C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1699,3396)];
    init_test(&cd_S5513C1, buf);
    S5513C1 &lv = *(new (buf) S5513C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13584,13580), "sizeof(S5513C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5513C1)");
    check_base_class_offset(lv, (S5514C2*), 0, "S5513C1");
    check_field_offset(lv, s5513c1f0, 2316, "S5513C1.s5513c1f0");
    check_field_offset(lv, s5513c1f1, 2349, "S5513C1.s5513c1f1");
    check_field_offset(lv, s5513c1f2, 2385, "S5513C1.s5513c1f2");
    check_field_offset(lv, s5513c1f3, 3540, "S5513C1.s5513c1f3");
    check_field_offset(lv, s5513c1f4, 3544, "S5513C1.s5513c1f4");
    check_field_offset(lv, s5513c1f5, ABISELECT(3552,3548), "S5513C1.s5513c1f5");
    test_class_info(&lv, &cd_S5513C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5513C1(Test_S5513C1, "S5513C1", ABISELECT(13584,13580));

#else // __cplusplus

extern Class_Descriptor cd_S5514C2;
static Base_Class bases_S5513C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5513C1 = {  "S5513C1", // class name
  bases_S5513C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(13584,13580), // 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  S20815C3  {
  char s20815c3f0;
  long s20815c3f1[8];
  virtual void  v2(); // _ZN8S20815C32v2Ev
  virtual void  v3(); // _ZN8S20815C32v3Ev
  virtual void  v4(); // _ZN8S20815C32v4Ev
  ~S20815C3(); // tgen
  S20815C3(); // tgen
};
//SIG(-1 S20815C3) C1{ v1 v2 v3 Fc Fl[8]}


void  S20815C3 ::v2(){vfunc_called(this, "_ZN8S20815C32v2Ev");}
void  S20815C3 ::v3(){vfunc_called(this, "_ZN8S20815C32v3Ev");}
void  S20815C3 ::v4(){vfunc_called(this, "_ZN8S20815C32v4Ev");}
S20815C3 ::~S20815C3(){ note_dtor("S20815C3", this);} // tgen
S20815C3 ::S20815C3(){ note_ctor("S20815C3", this);} // tgen

static void Test_S20815C3()
{
  extern Class_Descriptor cd_S20815C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S20815C3, buf);
    S20815C3 *dp, &lv = *(dp=new (buf) S20815C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S20815C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20815C3)");
    check_field_offset(lv, s20815c3f0, ABISELECT(8,4), "S20815C3.s20815c3f0");
    check_field_offset(lv, s20815c3f1, ABISELECT(16,8), "S20815C3.s20815c3f1");
    test_class_info(&lv, &cd_S20815C3);
    dp->~S20815C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20815C3(Test_S20815C3, "S20815C3", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S20815C3C1Ev();
extern void _ZN8S20815C3D1Ev();
Name_Map name_map_S20815C3[] = {
  NSPAIR(_ZN8S20815C3C1Ev),
  NSPAIR(_ZN8S20815C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20815C3[];
extern void _ZN8S20815C32v2Ev();
extern void _ZN8S20815C32v3Ev();
extern void _ZN8S20815C32v4Ev();
static  VTBL_ENTRY vtc_S20815C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20815C3[0]),
  (VTBL_ENTRY)&_ZN8S20815C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S20815C3[];
extern  VTBL_ENTRY _ZTV8S20815C3[];
Class_Descriptor cd_S20815C3 = {  "S20815C3", // class name
  0,0,//no base classes
  &(vtc_S20815C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S20815C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20815C3),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  S20815C2  : virtual S20815C3 {
  short s20815c2f0;
  void *s20815c2f1[2];
  short s20815c2f2[4];
  virtual void  v5(); // _ZN8S20815C22v5Ev
  ~S20815C2(); // tgen
  S20815C2(); // tgen
};
//SIG(-1 S20815C2) C1{ VBC2{ v2 v3 v4 Fc Fl[8]} v1 Fs Fp[2] Fs[4]}


void  S20815C2 ::v5(){vfunc_called(this, "_ZN8S20815C22v5Ev");}
S20815C2 ::~S20815C2(){ note_dtor("S20815C2", this);} // tgen
S20815C2 ::S20815C2(){ note_ctor("S20815C2", this);} // tgen

static void Test_S20815C2()
{
  extern Class_Descriptor cd_S20815C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S20815C2, buf);
    S20815C2 *dp, &lv = *(dp=new (buf) S20815C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S20815C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20815C2)");
    check_base_class_offset(lv, (S20815C3*), ABISELECT(40,24), "S20815C2");
    check_field_offset(lv, s20815c2f0, ABISELECT(8,4), "S20815C2.s20815c2f0");
    check_field_offset(lv, s20815c2f1, ABISELECT(16,8), "S20815C2.s20815c2f1");
    check_field_offset(lv, s20815c2f2, ABISELECT(32,16), "S20815C2.s20815c2f2");
    test_class_info(&lv, &cd_S20815C2);
    dp->~S20815C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20815C2(Test_S20815C2, "S20815C2", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN8S20815C2C1Ev();
extern void _ZN8S20815C2D1Ev();
Name_Map name_map_S20815C2[] = {
  NSPAIR(_ZN8S20815C2C1Ev),
  NSPAIR(_ZN8S20815C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20815C3;
extern VTBL_ENTRY _ZTI8S20815C3[];
extern  VTBL_ENTRY _ZTV8S20815C3[];
static Base_Class bases_S20815C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20815C3,    ABISELECT(40,24), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20815C2[];
extern void _ZN8S20815C22v5Ev();
extern void _ZN8S20815C32v2Ev();
extern void _ZN8S20815C32v3Ev();
extern void _ZN8S20815C32v4Ev();
static  VTBL_ENTRY vtc_S20815C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20815C2[0]),
  (VTBL_ENTRY)&_ZN8S20815C22v5Ev,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20815C2[0]),
  (VTBL_ENTRY)&_ZN8S20815C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S20815C2[];
static  VTT_ENTRY vtt_S20815C2[] = {
  {&(_ZTV8S20815C2[3]),  3,12},
  {&(_ZTV8S20815C2[9]),  9,12},
};
extern VTBL_ENTRY _ZTI8S20815C2[];
extern  VTBL_ENTRY _ZTV8S20815C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20815C2[];
Class_Descriptor cd_S20815C2 = {  "S20815C2", // class name
  bases_S20815C2, 1,
  &(vtc_S20815C2[0]), // expected_vtbl_contents
  &(vtt_S20815C2[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI8S20815C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20815C2),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20815C2),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  S20815C4  : S20815C3 {
  ::S20815C3 s20815c4f0;
  long double s20815c4f1;
  ::S20815C3 s20815c4f2;
  virtual  ~S20815C4(); // _ZN8S20815C4D1Ev
  virtual void  v6(); // _ZN8S20815C42v6Ev
  virtual void  v7(); // _ZN8S20815C42v7Ev
  S20815C4(); // tgen
};
//SIG(-1 S20815C4) C1{ BC2{ v3 v4 v5 Fc Fl[8]} vd v1 v2 FC2 FD FC2}


 S20815C4 ::~S20815C4(){ note_dtor("S20815C4", this);}
void  S20815C4 ::v6(){vfunc_called(this, "_ZN8S20815C42v6Ev");}
void  S20815C4 ::v7(){vfunc_called(this, "_ZN8S20815C42v7Ev");}
S20815C4 ::S20815C4(){ note_ctor("S20815C4", this);} // tgen

static void Test_S20815C4()
{
  extern Class_Descriptor cd_S20815C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,34)];
    init_test(&cd_S20815C4, buf);
    S20815C4 *dp, &lv = *(dp=new (buf) S20815C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,132), "sizeof(S20815C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20815C4)");
    check_base_class_offset(lv, (S20815C3*), 0, "S20815C4");
    check_field_offset(lv, s20815c4f0, ABISELECT(80,40), "S20815C4.s20815c4f0");
    check_field_offset(lv, s20815c4f1, ABISELECT(160,80), "S20815C4.s20815c4f1");
    check_field_offset(lv, s20815c4f2, ABISELECT(176,92), "S20815C4.s20815c4f2");
    test_class_info(&lv, &cd_S20815C4);
    dp->~S20815C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20815C4(Test_S20815C4, "S20815C4", ABISELECT(256,132));

#else // __cplusplus

extern void _ZN8S20815C4C1Ev();
extern void _ZN8S20815C4D1Ev();
Name_Map name_map_S20815C4[] = {
  NSPAIR(_ZN8S20815C4C1Ev),
  NSPAIR(_ZN8S20815C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20815C3;
extern VTBL_ENTRY _ZTI8S20815C3[];
extern  VTBL_ENTRY _ZTV8S20815C3[];
static Base_Class bases_S20815C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20815C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20815C4[];
extern void _ZN8S20815C32v2Ev();
extern void _ZN8S20815C32v3Ev();
extern void _ZN8S20815C32v4Ev();
extern void _ZN8S20815C4D1Ev();
extern void _ZN8S20815C4D0Ev();
extern void _ZN8S20815C42v6Ev();
extern void _ZN8S20815C42v7Ev();
static  VTBL_ENTRY vtc_S20815C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20815C4[0]),
  (VTBL_ENTRY)&_ZN8S20815C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v4Ev,
  (VTBL_ENTRY)&_ZN8S20815C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20815C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20815C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20815C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S20815C4[];
extern  VTBL_ENTRY _ZTV8S20815C4[];
Class_Descriptor cd_S20815C4 = {  "S20815C4", // class name
  bases_S20815C4, 1,
  &(vtc_S20815C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,132), // object size
  NSPAIRA(_ZTI8S20815C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20815C4),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  S20815C1  : virtual S20815C2 , virtual S20815C4 {
  char s20815c1f0;
  virtual  ~S20815C1(); // _ZN8S20815C1D2Ev
  virtual void  v1(); // _ZN8S20815C12v1Ev
  S20815C1(); // tgen
};
//SIG(1 S20815C1) C1{ VBC2{ VBC3{ v2 v3 v4 Fc Fl[8]} v5 Fs Fp[2] Fs[4]} VBC4{ BC3 vd v6 v7 FC3 FD FC3} vd v1 Fc}


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

static void Test_S20815C1()
{
  extern Class_Descriptor cd_S20815C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,52)];
    init_test(&cd_S20815C1, buf);
    S20815C1 *dp, &lv = *(dp=new (buf) S20815C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,204), "sizeof(S20815C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20815C1)");
    check_base_class_offset(lv, (S20815C3*)(S20815C2*), ABISELECT(56,32), "S20815C1");
    check_base_class_offset(lv, (S20815C2*), ABISELECT(16,8), "S20815C1");
    check_base_class_offset(lv, (S20815C3*)(S20815C4*), ABISELECT(144,72), "S20815C1");
    check_base_class_offset(lv, (S20815C4*), ABISELECT(144,72), "S20815C1");
    check_field_offset(lv, s20815c1f0, ABISELECT(8,4), "S20815C1.s20815c1f0");
    test_class_info(&lv, &cd_S20815C1);
    dp->~S20815C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20815C1(Test_S20815C1, "S20815C1", ABISELECT(400,204));

#else // __cplusplus

extern void _ZN8S20815C1C1Ev();
extern void _ZN8S20815C1D2Ev();
Name_Map name_map_S20815C1[] = {
  NSPAIR(_ZN8S20815C1C1Ev),
  NSPAIR(_ZN8S20815C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20815C3;
extern VTBL_ENTRY _ZTI8S20815C3[];
extern  VTBL_ENTRY _ZTV8S20815C3[];
extern Class_Descriptor cd_S20815C2;
extern VTBL_ENTRY _ZTI8S20815C2[];
extern  VTBL_ENTRY _ZTV8S20815C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20815C2[];
extern Class_Descriptor cd_S20815C3;
extern VTBL_ENTRY _ZTI8S20815C3[];
extern  VTBL_ENTRY _ZTV8S20815C3[];
extern Class_Descriptor cd_S20815C4;
extern VTBL_ENTRY _ZTI8S20815C4[];
extern  VTBL_ENTRY _ZTV8S20815C4[];
static Base_Class bases_S20815C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20815C3,    ABISELECT(56,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20815C2,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20815C3,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20815C4,    ABISELECT(144,72), //bcp->offset
    21, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20815C1[];
extern void _ZN8S20815C1D1Ev();
extern void _ZN8S20815C1D0Ev();
extern void _ZN8S20815C12v1Ev();
extern void _ZN8S20815C22v5Ev();
extern void _ZN8S20815C32v2Ev();
extern void _ZN8S20815C32v3Ev();
extern void _ZN8S20815C32v4Ev();
extern void _ZN8S20815C32v2Ev();
extern void _ZN8S20815C32v3Ev();
extern void _ZN8S20815C32v4Ev();
extern void ABISELECT(_ZTv0_n48_N8S20815C1D1Ev,_ZTv0_n24_N8S20815C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20815C1D1Ev,_ZThn72_N8S20815C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20815C1D0Ev,_ZTv0_n24_N8S20815C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20815C1D0Ev,_ZThn72_N8S20815C1D0Ev)() __attribute__((weak));
extern void _ZN8S20815C42v6Ev();
extern void _ZN8S20815C42v7Ev();
static  VTBL_ENTRY vtc_S20815C1[] = {
  ABISELECT(144,72),
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20815C1[0]),
  (VTBL_ENTRY)&_ZN8S20815C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20815C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20815C12v1Ev,
  0,
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20815C1[0]),
  (VTBL_ENTRY)&_ZN8S20815C22v5Ev,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20815C1[0]),
  (VTBL_ENTRY)&_ZN8S20815C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v4Ev,
  0,
  0,
  ABISELECT(-144,-72),
  0,
  0,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S20815C1[0]),
  (VTBL_ENTRY)&_ZN8S20815C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20815C1D1Ev,_ZTv0_n24_N8S20815C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20815C1D0Ev,_ZTv0_n24_N8S20815C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20815C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20815C42v7Ev,
};
extern VTBL_ENTRY _ZTV8S20815C1[];
extern void _ZN8S20815C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20815C2__8S20815C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20815C2[0]),
  (VTBL_ENTRY)&_ZN8S20815C22v5Ev,
};
extern void _ZN8S20815C32v2Ev();
extern void _ZN8S20815C32v3Ev();
extern void _ZN8S20815C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20815C3__8S20815C2__8S20815C1[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20815C2[0]),
  (VTBL_ENTRY)&_ZN8S20815C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v3Ev,
  (VTBL_ENTRY)&_ZN8S20815C32v4Ev,
};
static  VTT_ENTRY vtt_S20815C1[] = {
  {&(_ZTV8S20815C1[5]),  5,36},
  {&(_ZTV8S20815C1[12]),  12,36},
  {&(_ZTV8S20815C1[18]),  18,36},
  {&(_ZTV8S20815C1[29]),  29,36},
  {&(_tg__ZTV8S20815C2__8S20815C1[3]),  3,4},
  {&(_tg__ZTV8S20815C3__8S20815C2__8S20815C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20815C1[];
extern  VTBL_ENTRY _ZTV8S20815C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20815C1[];
static VTBL_ENTRY alt_thunk_names178[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20815C1D0Ev,_ZTv0_n24_N8S20815C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20815C1D0Ev,_ZThn72_N8S20815C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20815C1D1Ev,_ZTv0_n24_N8S20815C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20815C1D1Ev,_ZThn72_N8S20815C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20815C1 = {  "S20815C1", // class name
  bases_S20815C1, 4,
  &(vtc_S20815C1[0]), // expected_vtbl_contents
  &(vtt_S20815C1[0]), // expected_vtt_contents
  ABISELECT(400,204), // object size
  NSPAIRA(_ZTI8S20815C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20815C1),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20815C1),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names178,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6388C2  {
  char s6388c2f0;
  void *s6388c2f1[3];
  unsigned char s6388c2f2:1;
  short s6388c2f3:6;
  virtual void  v1(); // _ZN7S6388C22v1Ev
  virtual void  v2(); // _ZN7S6388C22v2Ev
  ~S6388C2(); // tgen
  S6388C2(); // tgen
};
//SIG(-1 S6388C2) C1{ v1 v2 Fc Fp[3] Fc:1 Fs:6}


void  S6388C2 ::v1(){vfunc_called(this, "_ZN7S6388C22v1Ev");}
void  S6388C2 ::v2(){vfunc_called(this, "_ZN7S6388C22v2Ev");}
S6388C2 ::~S6388C2(){ note_dtor("S6388C2", this);} // tgen
S6388C2 ::S6388C2(){ note_ctor("S6388C2", this);} // tgen

static void Test_S6388C2()
{
  extern Class_Descriptor cd_S6388C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S6388C2, buf);
    S6388C2 *dp, &lv = *(dp=new (buf) S6388C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6388C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6388C2)");
    check_field_offset(lv, s6388c2f0, ABISELECT(8,4), "S6388C2.s6388c2f0");
    check_field_offset(lv, s6388c2f1, ABISELECT(16,8), "S6388C2.s6388c2f1");
    set_bf_and_test(lv, s6388c2f2, ABISELECT(40,20), 0, 1, 1, "S6388C2");
    set_bf_and_test(lv, s6388c2f3, ABISELECT(40,20), 1, 6, 1, "S6388C2");
    set_bf_and_test(lv, s6388c2f3, ABISELECT(40,20), 1, 6, hide_sll(1LL<<5), "S6388C2");
    test_class_info(&lv, &cd_S6388C2);
    dp->~S6388C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6388C2(Test_S6388C2, "S6388C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6388C2C1Ev();
extern void _ZN7S6388C2D1Ev();
Name_Map name_map_S6388C2[] = {
  NSPAIR(_ZN7S6388C2C1Ev),
  NSPAIR(_ZN7S6388C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6388C2[];
extern void _ZN7S6388C22v1Ev();
extern void _ZN7S6388C22v2Ev();
static  VTBL_ENTRY vtc_S6388C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6388C2[0]),
  (VTBL_ENTRY)&_ZN7S6388C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6388C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6388C2[];
extern  VTBL_ENTRY _ZTV7S6388C2[];
Class_Descriptor cd_S6388C2 = {  "S6388C2", // class name
  0,0,//no base classes
  &(vtc_S6388C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6388C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6388C2),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  S6388C4  : S6388C2 {
  virtual void  v3(); // _ZN7S6388C42v3Ev
  ~S6388C4(); // tgen
  S6388C4(); // tgen
};
//SIG(-1 S6388C4) C1{ BC2{ v2 v3 Fc Fp[3] Fc:1 Fs:6} v1}


void  S6388C4 ::v3(){vfunc_called(this, "_ZN7S6388C42v3Ev");}
S6388C4 ::~S6388C4(){ note_dtor("S6388C4", this);} // tgen
S6388C4 ::S6388C4(){ note_ctor("S6388C4", this);} // tgen

static void Test_S6388C4()
{
  extern Class_Descriptor cd_S6388C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S6388C4, buf);
    S6388C4 *dp, &lv = *(dp=new (buf) S6388C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6388C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6388C4)");
    check_base_class_offset(lv, (S6388C2*), 0, "S6388C4");
    test_class_info(&lv, &cd_S6388C4);
    dp->~S6388C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6388C4(Test_S6388C4, "S6388C4", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6388C4C1Ev();
extern void _ZN7S6388C4D1Ev();
Name_Map name_map_S6388C4[] = {
  NSPAIR(_ZN7S6388C4C1Ev),
  NSPAIR(_ZN7S6388C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6388C2;
extern VTBL_ENTRY _ZTI7S6388C2[];
extern  VTBL_ENTRY _ZTV7S6388C2[];
static Base_Class bases_S6388C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6388C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6388C4[];
extern void _ZN7S6388C22v1Ev();
extern void _ZN7S6388C22v2Ev();
extern void _ZN7S6388C42v3Ev();
static  VTBL_ENTRY vtc_S6388C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6388C4[0]),
  (VTBL_ENTRY)&_ZN7S6388C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6388C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6388C42v3Ev,
};
extern VTBL_ENTRY _ZTI7S6388C4[];
extern  VTBL_ENTRY _ZTV7S6388C4[];
Class_Descriptor cd_S6388C4 = {  "S6388C4", // class name
  bases_S6388C4, 1,
  &(vtc_S6388C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6388C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6388C4),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  S6388C3  {
  void *s6388c3f0;
  ::S6388C4 s6388c3f1;
  void  mf6388c3(); // _ZN7S6388C38mf6388c3Ev
  virtual  ~S6388C3(); // _ZN7S6388C3D1Ev
  S6388C3(); // tgen
};
//SIG(-1 S6388C3) C1{ vd m Fp FC2{ BC3{ v2 v3 Fc Fp[3] Fc:1 Fs:6} v1}}


void  S6388C3 ::mf6388c3(){}
 S6388C3 ::~S6388C3(){ note_dtor("S6388C3", this);}
S6388C3 ::S6388C3(){ note_ctor("S6388C3", this);} // tgen

static void Test_S6388C3()
{
  extern Class_Descriptor cd_S6388C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S6388C3, buf);
    S6388C3 *dp, &lv = *(dp=new (buf) S6388C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S6388C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6388C3)");
    check_field_offset(lv, s6388c3f0, ABISELECT(8,4), "S6388C3.s6388c3f0");
    check_field_offset(lv, s6388c3f1, ABISELECT(16,8), "S6388C3.s6388c3f1");
    test_class_info(&lv, &cd_S6388C3);
    dp->~S6388C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6388C3(Test_S6388C3, "S6388C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S6388C3C1Ev();
extern void _ZN7S6388C3D1Ev();
Name_Map name_map_S6388C3[] = {
  NSPAIR(_ZN7S6388C3C1Ev),
  NSPAIR(_ZN7S6388C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6388C3[];
extern void _ZN7S6388C3D1Ev();
extern void _ZN7S6388C3D0Ev();
static  VTBL_ENTRY vtc_S6388C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6388C3[0]),
  (VTBL_ENTRY)&_ZN7S6388C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6388C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S6388C3[];
extern  VTBL_ENTRY _ZTV7S6388C3[];
Class_Descriptor cd_S6388C3 = {  "S6388C3", // class name
  0,0,//no base classes
  &(vtc_S6388C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S6388C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6388C3),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  S6388C1  : S6388C2 , virtual S6388C3 {
  void *s6388c1f0[4];
  ::S6388C2 s6388c1f1[5];
  long s6388c1f2;
  short s6388c1f3[2];
  __tsi64 s6388c1f4;
  ~S6388C1(); // tgen
  S6388C1(); // tgen
};
//SIG(1 S6388C1) C1{ BC2{ v1 v2 Fc Fp[3] Fc:1 Fs:6} VBC3{ vd m Fp FC4{ BC2 v3}} Fp[4] FC2[5] Fl Fs[2] FL}


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

static void Test_S6388C1()
{
  extern Class_Descriptor cd_S6388C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,53)];
    init_test(&cd_S6388C1, buf);
    S6388C1 *dp, &lv = *(dp=new (buf) S6388C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,208), "sizeof(S6388C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6388C1)");
    check_base_class_offset(lv, (S6388C2*), 0, "S6388C1");
    check_base_class_offset(lv, (S6388C3*), ABISELECT(344,176), "S6388C1");
    check_field_offset(lv, s6388c1f0, ABISELECT(48,24), "S6388C1.s6388c1f0");
    check_field_offset(lv, s6388c1f1, ABISELECT(80,40), "S6388C1.s6388c1f1");
    check_field_offset(lv, s6388c1f2, ABISELECT(320,160), "S6388C1.s6388c1f2");
    check_field_offset(lv, s6388c1f3, ABISELECT(328,164), "S6388C1.s6388c1f3");
    check_field_offset(lv, s6388c1f4, ABISELECT(336,168), "S6388C1.s6388c1f4");
    test_class_info(&lv, &cd_S6388C1);
    dp->~S6388C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6388C1(Test_S6388C1, "S6388C1", ABISELECT(408,208));

#else // __cplusplus

extern void _ZN7S6388C1C1Ev();
extern void _ZN7S6388C1D1Ev();
Name_Map name_map_S6388C1[] = {
  NSPAIR(_ZN7S6388C1C1Ev),
  NSPAIR(_ZN7S6388C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6388C2;
extern VTBL_ENTRY _ZTI7S6388C2[];
extern  VTBL_ENTRY _ZTV7S6388C2[];
extern Class_Descriptor cd_S6388C3;
extern VTBL_ENTRY _ZTI7S6388C3[];
extern  VTBL_ENTRY _ZTV7S6388C3[];
static Base_Class bases_S6388C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6388C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6388C3,    ABISELECT(344,176), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6388C1[];
extern void _ZN7S6388C22v1Ev();
extern void _ZN7S6388C22v2Ev();
extern void _ZN7S6388C1D1Ev();
extern void _ZN7S6388C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S6388C1D1Ev,_ZTv0_n12_N7S6388C1D1Ev)();
extern void ABISELECT(_ZThn344_N7S6388C1D1Ev,_ZThn176_N7S6388C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6388C1D0Ev,_ZTv0_n12_N7S6388C1D0Ev)();
extern void ABISELECT(_ZThn344_N7S6388C1D0Ev,_ZThn176_N7S6388C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6388C1[] = {
  ABISELECT(344,176),
  0,
  (VTBL_ENTRY)&(_ZTI7S6388C1[0]),
  (VTBL_ENTRY)&_ZN7S6388C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6388C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6388C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6388C1D0Ev,
  ABISELECT(-344,-176),
  ABISELECT(-344,-176),
  (VTBL_ENTRY)&(_ZTI7S6388C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6388C1D1Ev,_ZTv0_n12_N7S6388C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6388C1D0Ev,_ZTv0_n12_N7S6388C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6388C1[];
static  VTT_ENTRY vtt_S6388C1[] = {
  {&(_ZTV7S6388C1[3]),  3,12},
  {&(_ZTV7S6388C1[10]),  10,12},
};
extern VTBL_ENTRY _ZTI7S6388C1[];
extern  VTBL_ENTRY _ZTV7S6388C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6388C1[];
static VTBL_ENTRY alt_thunk_names179[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6388C1D0Ev,_ZTv0_n12_N7S6388C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S6388C1D0Ev,_ZThn176_N7S6388C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6388C1D1Ev,_ZTv0_n12_N7S6388C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S6388C1D1Ev,_ZThn176_N7S6388C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6388C1 = {  "S6388C1", // class name
  bases_S6388C1, 2,
  &(vtc_S6388C1[0]), // expected_vtbl_contents
  &(vtt_S6388C1[0]), // expected_vtt_contents
  ABISELECT(408,208), // object size
  NSPAIRA(_ZTI7S6388C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6388C1),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6388C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names179,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15222C3  {
  short s15222c3f0[2];
  char s15222c3f1[6];
  void  mf15222c3(); // _ZN8S15222C39mf15222c3Ev
};
//SIG(-1 S15222C3) C1{ m Fs[2] Fc[6]}


void  S15222C3 ::mf15222c3(){}

static void Test_S15222C3()
{
  {
    init_simple_test("S15222C3");
    S15222C3 lv;
    check2(sizeof(lv), 10, "sizeof(S15222C3)");
    check2(__alignof__(lv), 2, "__alignof__(S15222C3)");
    check_field_offset(lv, s15222c3f0, 0, "S15222C3.s15222c3f0");
    check_field_offset(lv, s15222c3f1, 4, "S15222C3.s15222c3f1");
  }
}
static Arrange_To_Call_Me vS15222C3(Test_S15222C3, "S15222C3", 10);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S15222C4  {
  void *s15222c4f0;
  __tsi64 s15222c4f1;
  char s15222c4f2;
};
//SIG(1 S15222C4) U1{ Fp FL Fc}

#endif // __cplusplus
#ifdef __cplusplus

struct  S15222C2  {
  void *s15222c2f0;
  unsigned char s15222c2f1:1;
  char s15222c2f2:2;
  void *s15222c2f3;
  __tsi64 s15222c2f4;
  ::S15222C3 s15222c2f5;
  int s15222c2f6;
  ::S15222C4 s15222c2f7;
  ::S15222C4 s15222c2f8;
};
//SIG(-1 S15222C2) C1{ Fp Fc:1 Fc:2 Fp FL FC2{ m Fs[2] Fc[6]} Fi FU3{ Fp FL Fc} FU3}



static void Test_S15222C2()
{
  {
    init_simple_test("S15222C2");
    static S15222C2 lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S15222C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15222C2)");
    check_field_offset(lv, s15222c2f0, 0, "S15222C2.s15222c2f0");
    set_bf_and_test(lv, s15222c2f1, ABISELECT(8,4), 0, 1, 1, "S15222C2");
    set_bf_and_test(lv, s15222c2f2, ABISELECT(8,4), 1, 2, 1, "S15222C2");
    set_bf_and_test(lv, s15222c2f2, ABISELECT(8,4), 1, 2, hide_sll(1LL<<1), "S15222C2");
    check_field_offset(lv, s15222c2f3, ABISELECT(16,8), "S15222C2.s15222c2f3");
    check_field_offset(lv, s15222c2f4, ABISELECT(24,12), "S15222C2.s15222c2f4");
    check_field_offset(lv, s15222c2f5, ABISELECT(32,20), "S15222C2.s15222c2f5");
    check_field_offset(lv, s15222c2f6, ABISELECT(44,32), "S15222C2.s15222c2f6");
    check_field_offset(lv, s15222c2f7, ABISELECT(48,36), "S15222C2.s15222c2f7");
    check_field_offset(lv, s15222c2f8, ABISELECT(56,44), "S15222C2.s15222c2f8");
  }
}
static Arrange_To_Call_Me vS15222C2(Test_S15222C2, "S15222C2", ABISELECT(64,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15222C1  {
  char s15222c1f0[257];
  int s15222c1f1;
  ::S15222C2 s15222c1f2;
  ::S15222C4 s15222c1f3;
  void  mf15222c1(); // _ZN8S15222C19mf15222c1Ev
};
//SIG(1 S15222C1) C1{ m Fc[257] Fi FC2{ Fp Fc:1 Fc:2 Fp FL FC3{ m Fs[2] Fc[6]} Fi FU4{ Fp FL Fc} FU4} FU4}


void  S15222C1 ::mf15222c1(){}

static void Test_S15222C1()
{
  {
    init_simple_test("S15222C1");
    static S15222C1 lv;
    check2(sizeof(lv), ABISELECT(336,324), "sizeof(S15222C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15222C1)");
    check_field_offset(lv, s15222c1f0, 0, "S15222C1.s15222c1f0");
    check_field_offset(lv, s15222c1f1, 260, "S15222C1.s15222c1f1");
    check_field_offset(lv, s15222c1f2, 264, "S15222C1.s15222c1f2");
    check_field_offset(lv, s15222c1f3, ABISELECT(328,316), "S15222C1.s15222c1f3");
  }
}
static Arrange_To_Call_Me vS15222C1(Test_S15222C1, "S15222C1", ABISELECT(336,324));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1065C3_nt  : S6118C14_nt {
};
//SIG(-1 S1065C3_nt) C1{ BC2{ m Fi}}



//skip512 S1065C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S6118C14_nt;
extern VTBL_ENTRY _ZTI11S6118C14_nt[];
static Base_Class bases_S1065C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6118C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1065C3_nt[];
VTBL_ENTRY *P__ZTI10S1065C3_nt = _ZTI10S1065C3_nt; 
Class_Descriptor cd_S1065C3_nt = {  "S1065C3_nt", // class name
  bases_S1065C3_nt, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S1065C3_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  S1065C2_nt  : S1065C3_nt {
  virtual  ~S1065C2_nt(); // _ZN10S1065C2_ntD1Ev
  virtual void  v2(); // _ZN10S1065C2_nt2v2Ev
  S1065C2_nt(); // tgen
};
//SIG(-1 S1065C2_nt) C1{ BC2{ BC3{ m Fi}} vd v1}


 S1065C2_nt ::~S1065C2_nt(){ note_dtor("S1065C2_nt", this);}
void  S1065C2_nt ::v2(){vfunc_called(this, "_ZN10S1065C2_nt2v2Ev");}
S1065C2_nt ::S1065C2_nt(){ note_ctor("S1065C2_nt", this);} // tgen

//skip512 S1065C2_nt

#else // __cplusplus

extern void _ZN10S1065C2_ntC1Ev();
extern void _ZN10S1065C2_ntD1Ev();
Name_Map name_map_S1065C2_nt[] = {
  NSPAIR(_ZN10S1065C2_ntC1Ev),
  NSPAIR(_ZN10S1065C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6118C14_nt;
extern VTBL_ENTRY _ZTI11S6118C14_nt[];
extern Class_Descriptor cd_S1065C3_nt;
extern VTBL_ENTRY _ZTI10S1065C3_nt[];
static Base_Class bases_S1065C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6118C14_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_S1065C3_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 _ZTI10S1065C2_nt[];
extern void _ZN10S1065C2_ntD1Ev();
extern void _ZN10S1065C2_ntD0Ev();
extern void _ZN10S1065C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S1065C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1065C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1065C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1065C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1065C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S1065C2_nt[];
VTBL_ENTRY *P__ZTI10S1065C2_nt = _ZTI10S1065C2_nt; 
extern  VTBL_ENTRY _ZTV10S1065C2_nt[];
Class_Descriptor cd_S1065C2_nt = {  "S1065C2_nt", // class name
  bases_S1065C2_nt, 2,
  &(vtc_S1065C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1065C2_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S1065C2_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  S1065C6_nt  {
  ::S15367C14 s1065c6f0;
  void  mf1065c6(); // _ZN10S1065C6_nt8mf1065c6Ev
};
//SIG(-1 S1065C6_nt) C1{ m FC2{ m Fp}}


void  S1065C6_nt ::mf1065c6(){}

//skip512 S1065C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1065C5  {
  int s1065c5f0;
  ::S1065C6_nt s1065c5f1;
  int s1065c5f2;
  char s1065c5f3;
  ::S1065C6_nt s1065c5f4;
  ::S1065C6_nt s1065c5f5;
  char s1065c5f6[2];
  void  mf1065c5(); // _ZN7S1065C58mf1065c5Ev
};
//SIG(-1 S1065C5) C1{ m Fi FC2{ m FC3{ m Fp}} Fi Fc FC2 FC2 Fc[2]}


void  S1065C5 ::mf1065c5(){}

static void Test_S1065C5()
{
  {
    init_simple_test("S1065C5");
    S1065C5 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1065C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1065C5)");
    check_field_offset(lv, s1065c5f0, 0, "S1065C5.s1065c5f0");
    check_field_offset(lv, s1065c5f1, ABISELECT(8,4), "S1065C5.s1065c5f1");
    check_field_offset(lv, s1065c5f2, ABISELECT(16,8), "S1065C5.s1065c5f2");
    check_field_offset(lv, s1065c5f3, ABISELECT(20,12), "S1065C5.s1065c5f3");
    check_field_offset(lv, s1065c5f4, ABISELECT(24,16), "S1065C5.s1065c5f4");
    check_field_offset(lv, s1065c5f5, ABISELECT(32,20), "S1065C5.s1065c5f5");
    check_field_offset(lv, s1065c5f6, ABISELECT(40,24), "S1065C5.s1065c5f6");
  }
}
static Arrange_To_Call_Me vS1065C5(Test_S1065C5, "S1065C5", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1065C1  : S1065C2_nt {
  ::S1065C5 s1065c1f0;
  virtual  ~S1065C1(); // _ZN7S1065C1D1Ev
  virtual void  v1(); // _ZN7S1065C12v1Ev
  S1065C1(); // tgen
};
//SIG(1 S1065C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} vd v1 FC5{ m Fi FC6{ m FC7{ m Fp}} Fi Fc FC6 FC6 Fc[2]}}


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

static void Test_S1065C1()
{
  extern Class_Descriptor cd_S1065C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1065C1, buf);
    S1065C1 *dp, &lv = *(dp=new (buf) S1065C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1065C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1065C1)");
    check_base_class_offset(lv, (S6118C14_nt*)(S1065C3_nt*)(S1065C2_nt*), ABISELECT(8,4), "S1065C1");
    check_base_class_offset(lv, (S1065C3_nt*)(S1065C2_nt*), ABISELECT(8,4), "S1065C1");
    check_base_class_offset(lv, (S1065C2_nt*), 0, "S1065C1");
    check_field_offset(lv, s1065c1f0, ABISELECT(16,8), "S1065C1.s1065c1f0");
    test_class_info(&lv, &cd_S1065C1);
    dp->~S1065C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1065C1(Test_S1065C1, "S1065C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1065C1C1Ev();
extern void _ZN7S1065C1D1Ev();
Name_Map name_map_S1065C1[] = {
  NSPAIR(_ZN7S1065C1C1Ev),
  NSPAIR(_ZN7S1065C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6118C14_nt;
extern VTBL_ENTRY _ZTI11S6118C14_nt[];
extern Class_Descriptor cd_S1065C3_nt;
extern VTBL_ENTRY _ZTI10S1065C3_nt[];
extern Class_Descriptor cd_S1065C2_nt;
extern VTBL_ENTRY _ZTI10S1065C2_nt[];
extern  VTBL_ENTRY _ZTV10S1065C2_nt[];
static Base_Class bases_S1065C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6118C14_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_S1065C3_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_S1065C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1065C1[];
extern void _ZN7S1065C1D1Ev();
extern void _ZN7S1065C1D0Ev();
extern void _ZN10S1065C2_nt2v2Ev();
extern void _ZN7S1065C12v1Ev();
static  VTBL_ENTRY vtc_S1065C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1065C1[0]),
  (VTBL_ENTRY)&_ZN7S1065C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1065C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1065C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S1065C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1065C1[];
extern  VTBL_ENTRY _ZTV7S1065C1[];
Class_Descriptor cd_S1065C1 = {  "S1065C1", // class name
  bases_S1065C1, 3,
  &(vtc_S1065C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1065C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1065C1),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  S4795C3_nt  {
  ::S2014C20_nt s4795c3f0;
  int s4795c3f1[2];
  char s4795c3f2;
  virtual  ~S4795C3_nt(); // _ZN10S4795C3_ntD1Ev
  virtual void  v3(); // _ZN10S4795C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4795C3_nt2v4Ev
  virtual void  v5(); // _ZN10S4795C3_nt2v5Ev
  S4795C3_nt(); // tgen
};
//SIG(-1 S4795C3_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4795C3_nt ::~S4795C3_nt(){ note_dtor("S4795C3_nt", this);}
void  S4795C3_nt ::v3(){vfunc_called(this, "_ZN10S4795C3_nt2v3Ev");}
void  S4795C3_nt ::v4(){vfunc_called(this, "_ZN10S4795C3_nt2v4Ev");}
void  S4795C3_nt ::v5(){vfunc_called(this, "_ZN10S4795C3_nt2v5Ev");}
S4795C3_nt ::S4795C3_nt(){ note_ctor("S4795C3_nt", this);} // tgen

//skip512 S4795C3_nt

#else // __cplusplus

extern void _ZN10S4795C3_ntC1Ev();
extern void _ZN10S4795C3_ntD1Ev();
Name_Map name_map_S4795C3_nt[] = {
  NSPAIR(_ZN10S4795C3_ntC1Ev),
  NSPAIR(_ZN10S4795C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4795C3_nt[];
extern void _ZN10S4795C3_ntD1Ev();
extern void _ZN10S4795C3_ntD0Ev();
extern void _ZN10S4795C3_nt2v3Ev();
extern void _ZN10S4795C3_nt2v4Ev();
extern void _ZN10S4795C3_nt2v5Ev();
static  VTBL_ENTRY vtc_S4795C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4795C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4795C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4795C3_nt[];
VTBL_ENTRY *P__ZTI10S4795C3_nt = _ZTI10S4795C3_nt; 
extern  VTBL_ENTRY _ZTV10S4795C3_nt[];
Class_Descriptor cd_S4795C3_nt = {  "S4795C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4795C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S4795C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4795C3_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  S4795C2_nt  : S4795C3_nt {
  void *s4795c2f0;
  virtual void  v6(); // _ZN10S4795C2_nt2v6Ev
  virtual void  v7(); // _ZN10S4795C2_nt2v7Ev
  ~S4795C2_nt(); // tgen
  S4795C2_nt(); // tgen
};
//SIG(-1 S4795C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4795C2_nt ::v6(){vfunc_called(this, "_ZN10S4795C2_nt2v6Ev");}
void  S4795C2_nt ::v7(){vfunc_called(this, "_ZN10S4795C2_nt2v7Ev");}
S4795C2_nt ::~S4795C2_nt(){ note_dtor("S4795C2_nt", this);} // tgen
S4795C2_nt ::S4795C2_nt(){ note_ctor("S4795C2_nt", this);} // tgen

//skip512 S4795C2_nt

#else // __cplusplus

extern void _ZN10S4795C2_ntC1Ev();
extern void _ZN10S4795C2_ntD1Ev();
Name_Map name_map_S4795C2_nt[] = {
  NSPAIR(_ZN10S4795C2_ntC1Ev),
  NSPAIR(_ZN10S4795C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4795C3_nt;
extern VTBL_ENTRY _ZTI10S4795C3_nt[];
extern  VTBL_ENTRY _ZTV10S4795C3_nt[];
static Base_Class bases_S4795C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4795C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4795C2_nt[];
extern void _ZN10S4795C2_ntD1Ev();
extern void _ZN10S4795C2_ntD0Ev();
extern void _ZN10S4795C3_nt2v3Ev();
extern void _ZN10S4795C3_nt2v4Ev();
extern void _ZN10S4795C3_nt2v5Ev();
extern void _ZN10S4795C2_nt2v6Ev();
extern void _ZN10S4795C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S4795C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4795C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4795C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4795C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4795C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4795C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S4795C2_nt[];
VTBL_ENTRY *P__ZTI10S4795C2_nt = _ZTI10S4795C2_nt; 
extern  VTBL_ENTRY _ZTV10S4795C2_nt[];
Class_Descriptor cd_S4795C2_nt = {  "S4795C2_nt", // class name
  bases_S4795C2_nt, 1,
  &(vtc_S4795C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S4795C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4795C2_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  S4795C1  : S4795C2_nt {
  void *s4795c1f0;
  int s4795c1f1[2];
  virtual  ~S4795C1(); // _ZN7S4795C1D1Ev
  virtual void  v1(); // _ZN7S4795C12v1Ev
  virtual void  v2(); // _ZN7S4795C12v2Ev
  S4795C1(); // tgen
};
//SIG(1 S4795C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp Fi[2]}


 S4795C1 ::~S4795C1(){ note_dtor("S4795C1", this);}
void  S4795C1 ::v1(){vfunc_called(this, "_ZN7S4795C12v1Ev");}
void  S4795C1 ::v2(){vfunc_called(this, "_ZN7S4795C12v2Ev");}
S4795C1 ::S4795C1(){ note_ctor("S4795C1", this);} // tgen

static void Test_S4795C1()
{
  extern Class_Descriptor cd_S4795C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4795C1, buf);
    S4795C1 *dp, &lv = *(dp=new (buf) S4795C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4795C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4795C1)");
    check_base_class_offset(lv, (S4795C3_nt*)(S4795C2_nt*), 0, "S4795C1");
    check_base_class_offset(lv, (S4795C2_nt*), 0, "S4795C1");
    check_field_offset(lv, s4795c1f0, ABISELECT(48,32), "S4795C1.s4795c1f0");
    check_field_offset(lv, s4795c1f1, ABISELECT(56,36), "S4795C1.s4795c1f1");
    test_class_info(&lv, &cd_S4795C1);
    dp->~S4795C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4795C1(Test_S4795C1, "S4795C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4795C1C1Ev();
extern void _ZN7S4795C1D1Ev();
Name_Map name_map_S4795C1[] = {
  NSPAIR(_ZN7S4795C1C1Ev),
  NSPAIR(_ZN7S4795C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4795C3_nt;
extern VTBL_ENTRY _ZTI10S4795C3_nt[];
extern  VTBL_ENTRY _ZTV10S4795C3_nt[];
extern Class_Descriptor cd_S4795C2_nt;
extern VTBL_ENTRY _ZTI10S4795C2_nt[];
extern  VTBL_ENTRY _ZTV10S4795C2_nt[];
static Base_Class bases_S4795C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4795C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4795C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4795C1[];
extern void _ZN7S4795C1D1Ev();
extern void _ZN7S4795C1D0Ev();
extern void _ZN10S4795C3_nt2v3Ev();
extern void _ZN10S4795C3_nt2v4Ev();
extern void _ZN10S4795C3_nt2v5Ev();
extern void _ZN10S4795C2_nt2v6Ev();
extern void _ZN10S4795C2_nt2v7Ev();
extern void _ZN7S4795C12v1Ev();
extern void _ZN7S4795C12v2Ev();
static  VTBL_ENTRY vtc_S4795C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4795C1[0]),
  (VTBL_ENTRY)&_ZN7S4795C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4795C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4795C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4795C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4795C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S4795C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4795C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4795C1[];
extern  VTBL_ENTRY _ZTV7S4795C1[];
Class_Descriptor cd_S4795C1 = {  "S4795C1", // class name
  bases_S4795C1, 2,
  &(vtc_S4795C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4795C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4795C1),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  S15339C1  {
  ::S3222C17 s15339c1f0;
  ::S245C8_nt s15339c1f1;
  unsigned int s15339c1f2:1;
  unsigned int s15339c1f3:1;
  unsigned int s15339c1f4:1;
  void *s15339c1f5;
  int s15339c1f6[2];
  unsigned int s15339c1f7:1;
  void  mf15339c1(); // _ZN8S15339C19mf15339c1Ev
};
//SIG(1 S15339C1) C1{ m FC2{ BC3{ BC4{ m Fp Fi[2]}}} FC5{ BC6{ BC7{ BC4}}} Fi:1 Fi:1 Fi:1 Fp Fi[2] Fi:1}


void  S15339C1 ::mf15339c1(){}

static void Test_S15339C1()
{
  {
    init_simple_test("S15339C1");
    static S15339C1 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S15339C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15339C1)");
    check_field_offset(lv, s15339c1f0, 0, "S15339C1.s15339c1f0");
    check_field_offset(lv, s15339c1f1, ABISELECT(16,12), "S15339C1.s15339c1f1");
    set_bf_and_test(lv, s15339c1f2, ABISELECT(32,24), 0, 1, 1, "S15339C1");
    set_bf_and_test(lv, s15339c1f3, ABISELECT(32,24), 1, 1, 1, "S15339C1");
    set_bf_and_test(lv, s15339c1f4, ABISELECT(32,24), 2, 1, 1, "S15339C1");
    check_field_offset(lv, s15339c1f5, ABISELECT(40,28), "S15339C1.s15339c1f5");
    check_field_offset(lv, s15339c1f6, ABISELECT(48,32), "S15339C1.s15339c1f6");
    set_bf_and_test(lv, s15339c1f7, ABISELECT(56,40), 0, 1, 1, "S15339C1");
  }
}
static Arrange_To_Call_Me vS15339C1(Test_S15339C1, "S15339C1", ABISELECT(64,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9359C2  {
  ::S2014C20_nt s9359c2f0;
  int s9359c2f1[2];
  char s9359c2f2;
  virtual  ~S9359C2(); // _ZN7S9359C2D1Ev
  virtual void  v3(); // _ZN7S9359C22v3Ev
  virtual void  v4(); // _ZN7S9359C22v4Ev
  virtual void  v5(); // _ZN7S9359C22v5Ev
  S9359C2(); // tgen
};
//SIG(-1 S9359C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9359C2 ::~S9359C2(){ note_dtor("S9359C2", this);}
void  S9359C2 ::v3(){vfunc_called(this, "_ZN7S9359C22v3Ev");}
void  S9359C2 ::v4(){vfunc_called(this, "_ZN7S9359C22v4Ev");}
void  S9359C2 ::v5(){vfunc_called(this, "_ZN7S9359C22v5Ev");}
S9359C2 ::S9359C2(){ note_ctor("S9359C2", this);} // tgen

static void Test_S9359C2()
{
  extern Class_Descriptor cd_S9359C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9359C2, buf);
    S9359C2 *dp, &lv = *(dp=new (buf) S9359C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9359C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9359C2)");
    check_field_offset(lv, s9359c2f0, ABISELECT(8,4), "S9359C2.s9359c2f0");
    check_field_offset(lv, s9359c2f1, ABISELECT(24,16), "S9359C2.s9359c2f1");
    check_field_offset(lv, s9359c2f2, ABISELECT(32,24), "S9359C2.s9359c2f2");
    test_class_info(&lv, &cd_S9359C2);
    dp->~S9359C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9359C2(Test_S9359C2, "S9359C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9359C2C1Ev();
extern void _ZN7S9359C2D1Ev();
Name_Map name_map_S9359C2[] = {
  NSPAIR(_ZN7S9359C2C1Ev),
  NSPAIR(_ZN7S9359C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9359C2[];
extern void _ZN7S9359C2D1Ev();
extern void _ZN7S9359C2D0Ev();
extern void _ZN7S9359C22v3Ev();
extern void _ZN7S9359C22v4Ev();
extern void _ZN7S9359C22v5Ev();
static  VTBL_ENTRY vtc_S9359C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9359C2[0]),
  (VTBL_ENTRY)&_ZN7S9359C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9359C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9359C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9359C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9359C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9359C2[];
extern  VTBL_ENTRY _ZTV7S9359C2[];
Class_Descriptor cd_S9359C2 = {  "S9359C2", // class name
  0,0,//no base classes
  &(vtc_S9359C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9359C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9359C2),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  S9359C5_nt  {
  __tsi64 s9359c5f0;
  int s9359c5f1[2];
};
//SIG(-1 S9359C5_nt) C1{ FL Fi[2]}



//skip512 S9359C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9359C1  : S9359C2 {
  void *s9359c1f0;
  ::S9359C5_nt s9359c1f1;
  void *s9359c1f2;
  virtual  ~S9359C1(); // _ZN7S9359C1D1Ev
  virtual void  v1(); // _ZN7S9359C12v1Ev
  virtual void  v2(); // _ZN7S9359C12v2Ev
  S9359C1(); // tgen
};
//SIG(1 S9359C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp FC5{ FL Fi[2]} Fp}


 S9359C1 ::~S9359C1(){ note_dtor("S9359C1", this);}
void  S9359C1 ::v1(){vfunc_called(this, "_ZN7S9359C12v1Ev");}
void  S9359C1 ::v2(){vfunc_called(this, "_ZN7S9359C12v2Ev");}
S9359C1 ::S9359C1(){ note_ctor("S9359C1", this);} // tgen

static void Test_S9359C1()
{
  extern Class_Descriptor cd_S9359C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S9359C1, buf);
    S9359C1 *dp, &lv = *(dp=new (buf) S9359C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S9359C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9359C1)");
    check_base_class_offset(lv, (S9359C2*), 0, "S9359C1");
    check_field_offset(lv, s9359c1f0, ABISELECT(40,28), "S9359C1.s9359c1f0");
    check_field_offset(lv, s9359c1f1, ABISELECT(48,32), "S9359C1.s9359c1f1");
    check_field_offset(lv, s9359c1f2, ABISELECT(64,48), "S9359C1.s9359c1f2");
    test_class_info(&lv, &cd_S9359C1);
    dp->~S9359C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9359C1(Test_S9359C1, "S9359C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S9359C1C1Ev();
extern void _ZN7S9359C1D1Ev();
Name_Map name_map_S9359C1[] = {
  NSPAIR(_ZN7S9359C1C1Ev),
  NSPAIR(_ZN7S9359C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9359C2;
extern VTBL_ENTRY _ZTI7S9359C2[];
extern  VTBL_ENTRY _ZTV7S9359C2[];
static Base_Class bases_S9359C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9359C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9359C1[];
extern void _ZN7S9359C1D1Ev();
extern void _ZN7S9359C1D0Ev();
extern void _ZN7S9359C22v3Ev();
extern void _ZN7S9359C22v4Ev();
extern void _ZN7S9359C22v5Ev();
extern void _ZN7S9359C12v1Ev();
extern void _ZN7S9359C12v2Ev();
static  VTBL_ENTRY vtc_S9359C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9359C1[0]),
  (VTBL_ENTRY)&_ZN7S9359C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9359C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9359C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9359C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9359C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9359C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9359C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9359C1[];
extern  VTBL_ENTRY _ZTV7S9359C1[];
Class_Descriptor cd_S9359C1 = {  "S9359C1", // class name
  bases_S9359C1, 1,
  &(vtc_S9359C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S9359C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9359C1),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  S9301C2  {
  ::S2014C20_nt s9301c2f0;
  int s9301c2f1[2];
  char s9301c2f2;
  virtual  ~S9301C2(); // _ZN7S9301C2D1Ev
  virtual void  v3(); // _ZN7S9301C22v3Ev
  virtual void  v4(); // _ZN7S9301C22v4Ev
  virtual void  v5(); // _ZN7S9301C22v5Ev
  S9301C2(); // tgen
};
//SIG(-1 S9301C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9301C2 ::~S9301C2(){ note_dtor("S9301C2", this);}
void  S9301C2 ::v3(){vfunc_called(this, "_ZN7S9301C22v3Ev");}
void  S9301C2 ::v4(){vfunc_called(this, "_ZN7S9301C22v4Ev");}
void  S9301C2 ::v5(){vfunc_called(this, "_ZN7S9301C22v5Ev");}
S9301C2 ::S9301C2(){ note_ctor("S9301C2", this);} // tgen

static void Test_S9301C2()
{
  extern Class_Descriptor cd_S9301C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9301C2, buf);
    S9301C2 *dp, &lv = *(dp=new (buf) S9301C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9301C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9301C2)");
    check_field_offset(lv, s9301c2f0, ABISELECT(8,4), "S9301C2.s9301c2f0");
    check_field_offset(lv, s9301c2f1, ABISELECT(24,16), "S9301C2.s9301c2f1");
    check_field_offset(lv, s9301c2f2, ABISELECT(32,24), "S9301C2.s9301c2f2");
    test_class_info(&lv, &cd_S9301C2);
    dp->~S9301C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9301C2(Test_S9301C2, "S9301C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9301C2C1Ev();
extern void _ZN7S9301C2D1Ev();
Name_Map name_map_S9301C2[] = {
  NSPAIR(_ZN7S9301C2C1Ev),
  NSPAIR(_ZN7S9301C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9301C2[];
extern void _ZN7S9301C2D1Ev();
extern void _ZN7S9301C2D0Ev();
extern void _ZN7S9301C22v3Ev();
extern void _ZN7S9301C22v4Ev();
extern void _ZN7S9301C22v5Ev();
static  VTBL_ENTRY vtc_S9301C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9301C2[0]),
  (VTBL_ENTRY)&_ZN7S9301C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9301C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9301C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9301C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9301C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9301C2[];
extern  VTBL_ENTRY _ZTV7S9301C2[];
Class_Descriptor cd_S9301C2 = {  "S9301C2", // class name
  0,0,//no base classes
  &(vtc_S9301C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9301C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9301C2),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  S9301C1  : S9301C2 {
  ::S3639C14_nt s9301c1f0;
  int s9301c1f1[3];
  virtual  ~S9301C1(); // _ZN7S9301C1D1Ev
  virtual void  v1(); // _ZN7S9301C12v1Ev
  virtual void  v2(); // _ZN7S9301C12v2Ev
  S9301C1(); // tgen
};
//SIG(1 S9301C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC5{ m Fp[2]} Fi[3]}


 S9301C1 ::~S9301C1(){ note_dtor("S9301C1", this);}
void  S9301C1 ::v1(){vfunc_called(this, "_ZN7S9301C12v1Ev");}
void  S9301C1 ::v2(){vfunc_called(this, "_ZN7S9301C12v2Ev");}
S9301C1 ::S9301C1(){ note_ctor("S9301C1", this);} // tgen

static void Test_S9301C1()
{
  extern Class_Descriptor cd_S9301C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S9301C1, buf);
    S9301C1 *dp, &lv = *(dp=new (buf) S9301C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S9301C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9301C1)");
    check_base_class_offset(lv, (S9301C2*), 0, "S9301C1");
    check_field_offset(lv, s9301c1f0, ABISELECT(40,28), "S9301C1.s9301c1f0");
    check_field_offset(lv, s9301c1f1, ABISELECT(56,36), "S9301C1.s9301c1f1");
    test_class_info(&lv, &cd_S9301C1);
    dp->~S9301C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9301C1(Test_S9301C1, "S9301C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S9301C1C1Ev();
extern void _ZN7S9301C1D1Ev();
Name_Map name_map_S9301C1[] = {
  NSPAIR(_ZN7S9301C1C1Ev),
  NSPAIR(_ZN7S9301C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9301C2;
extern VTBL_ENTRY _ZTI7S9301C2[];
extern  VTBL_ENTRY _ZTV7S9301C2[];
static Base_Class bases_S9301C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9301C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9301C1[];
extern void _ZN7S9301C1D1Ev();
extern void _ZN7S9301C1D0Ev();
extern void _ZN7S9301C22v3Ev();
extern void _ZN7S9301C22v4Ev();
extern void _ZN7S9301C22v5Ev();
extern void _ZN7S9301C12v1Ev();
extern void _ZN7S9301C12v2Ev();
static  VTBL_ENTRY vtc_S9301C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9301C1[0]),
  (VTBL_ENTRY)&_ZN7S9301C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9301C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9301C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9301C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9301C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9301C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9301C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9301C1[];
extern  VTBL_ENTRY _ZTV7S9301C1[];
Class_Descriptor cd_S9301C1 = {  "S9301C1", // class name
  bases_S9301C1, 1,
  &(vtc_S9301C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S9301C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9301C1),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  S6986C2  {
  char s6986c2f0;
  void *s6986c2f1;
  virtual void  v6(); // _ZN7S6986C22v6Ev
  virtual void  v7(); // _ZN7S6986C22v7Ev
  ~S6986C2(); // tgen
  S6986C2(); // tgen
};
//SIG(-1 S6986C2) C1{ v1 v2 Fc Fp}


void  S6986C2 ::v6(){vfunc_called(this, "_ZN7S6986C22v6Ev");}
void  S6986C2 ::v7(){vfunc_called(this, "_ZN7S6986C22v7Ev");}
S6986C2 ::~S6986C2(){ note_dtor("S6986C2", this);} // tgen
S6986C2 ::S6986C2(){ note_ctor("S6986C2", this);} // tgen

static void Test_S6986C2()
{
  extern Class_Descriptor cd_S6986C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6986C2, buf);
    S6986C2 *dp, &lv = *(dp=new (buf) S6986C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6986C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6986C2)");
    check_field_offset(lv, s6986c2f0, ABISELECT(8,4), "S6986C2.s6986c2f0");
    check_field_offset(lv, s6986c2f1, ABISELECT(16,8), "S6986C2.s6986c2f1");
    test_class_info(&lv, &cd_S6986C2);
    dp->~S6986C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6986C2(Test_S6986C2, "S6986C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6986C2C1Ev();
extern void _ZN7S6986C2D1Ev();
Name_Map name_map_S6986C2[] = {
  NSPAIR(_ZN7S6986C2C1Ev),
  NSPAIR(_ZN7S6986C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6986C2[];
extern void _ZN7S6986C22v6Ev();
extern void _ZN7S6986C22v7Ev();
static  VTBL_ENTRY vtc_S6986C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6986C2[0]),
  (VTBL_ENTRY)&_ZN7S6986C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6986C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S6986C2[];
extern  VTBL_ENTRY _ZTV7S6986C2[];
Class_Descriptor cd_S6986C2 = {  "S6986C2", // class name
  0,0,//no base classes
  &(vtc_S6986C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6986C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6986C2),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  S6986C3  {
  char s6986c3f0;
  virtual void  v8(); // _ZN7S6986C32v8Ev
  virtual void  v9(); // _ZN7S6986C32v9Ev
  virtual void  v10(); // _ZN7S6986C33v10Ev
  virtual void  v11(); // _ZN7S6986C33v11Ev
  virtual void  v12(); // _ZN7S6986C33v12Ev
  virtual void  v13(); // _ZN7S6986C33v13Ev
  ~S6986C3(); // tgen
  S6986C3(); // tgen
};
//SIG(-1 S6986C3) C1{ v1 v2 v3 v4 v5 v6 Fc}


void  S6986C3 ::v8(){vfunc_called(this, "_ZN7S6986C32v8Ev");}
void  S6986C3 ::v9(){vfunc_called(this, "_ZN7S6986C32v9Ev");}
void  S6986C3 ::v10(){vfunc_called(this, "_ZN7S6986C33v10Ev");}
void  S6986C3 ::v11(){vfunc_called(this, "_ZN7S6986C33v11Ev");}
void  S6986C3 ::v12(){vfunc_called(this, "_ZN7S6986C33v12Ev");}
void  S6986C3 ::v13(){vfunc_called(this, "_ZN7S6986C33v13Ev");}
S6986C3 ::~S6986C3(){ note_dtor("S6986C3", this);} // tgen
S6986C3 ::S6986C3(){ note_ctor("S6986C3", this);} // tgen

static void Test_S6986C3()
{
  extern Class_Descriptor cd_S6986C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6986C3, buf);
    S6986C3 *dp, &lv = *(dp=new (buf) S6986C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6986C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6986C3)");
    check_field_offset(lv, s6986c3f0, ABISELECT(8,4), "S6986C3.s6986c3f0");
    test_class_info(&lv, &cd_S6986C3);
    dp->~S6986C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6986C3(Test_S6986C3, "S6986C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6986C3C1Ev();
extern void _ZN7S6986C3D1Ev();
Name_Map name_map_S6986C3[] = {
  NSPAIR(_ZN7S6986C3C1Ev),
  NSPAIR(_ZN7S6986C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6986C3[];
extern void _ZN7S6986C32v8Ev();
extern void _ZN7S6986C32v9Ev();
extern void _ZN7S6986C33v10Ev();
extern void _ZN7S6986C33v11Ev();
extern void _ZN7S6986C33v12Ev();
extern void _ZN7S6986C33v13Ev();
static  VTBL_ENTRY vtc_S6986C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6986C3[0]),
  (VTBL_ENTRY)&_ZN7S6986C32v8Ev,
  (VTBL_ENTRY)&_ZN7S6986C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6986C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6986C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6986C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6986C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S6986C3[];
extern  VTBL_ENTRY _ZTV7S6986C3[];
Class_Descriptor cd_S6986C3 = {  "S6986C3", // class name
  0,0,//no base classes
  &(vtc_S6986C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6986C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6986C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6986C1  : S6986C2 , virtual S6986C3 {
  __tsi64 s6986c1f0;
  void *s6986c1f1;
  __tsi64 s6986c1f2;
  virtual void  v1(); // _ZN7S6986C12v1Ev
  virtual void  v2(); // _ZN7S6986C12v2Ev
  virtual void  v3(); // _ZN7S6986C12v3Ev
  virtual void  v4(); // _ZN7S6986C12v4Ev
  virtual void  v5(); // _ZN7S6986C12v5Ev
  ~S6986C1(); // tgen
  S6986C1(); // tgen
};
//SIG(1 S6986C1) C1{ BC2{ v6 v7 Fc Fp} VBC3{ v8 v9 v10 v11 v12 v13 Fc} v1 v2 v3 v4 v5 FL Fp FL}


void  S6986C1 ::v1(){vfunc_called(this, "_ZN7S6986C12v1Ev");}
void  S6986C1 ::v2(){vfunc_called(this, "_ZN7S6986C12v2Ev");}
void  S6986C1 ::v3(){vfunc_called(this, "_ZN7S6986C12v3Ev");}
void  S6986C1 ::v4(){vfunc_called(this, "_ZN7S6986C12v4Ev");}
void  S6986C1 ::v5(){vfunc_called(this, "_ZN7S6986C12v5Ev");}
S6986C1 ::~S6986C1(){ note_dtor("S6986C1", this);} // tgen
S6986C1 ::S6986C1(){ note_ctor("S6986C1", this);} // tgen

static void Test_S6986C1()
{
  extern Class_Descriptor cd_S6986C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S6986C1, buf);
    S6986C1 *dp, &lv = *(dp=new (buf) S6986C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S6986C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6986C1)");
    check_base_class_offset(lv, (S6986C2*), 0, "S6986C1");
    check_base_class_offset(lv, (S6986C3*), ABISELECT(48,32), "S6986C1");
    check_field_offset(lv, s6986c1f0, ABISELECT(24,12), "S6986C1.s6986c1f0");
    check_field_offset(lv, s6986c1f1, ABISELECT(32,20), "S6986C1.s6986c1f1");
    check_field_offset(lv, s6986c1f2, ABISELECT(40,24), "S6986C1.s6986c1f2");
    test_class_info(&lv, &cd_S6986C1);
    dp->~S6986C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6986C1(Test_S6986C1, "S6986C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S6986C1C1Ev();
extern void _ZN7S6986C1D1Ev();
Name_Map name_map_S6986C1[] = {
  NSPAIR(_ZN7S6986C1C1Ev),
  NSPAIR(_ZN7S6986C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6986C2;
extern VTBL_ENTRY _ZTI7S6986C2[];
extern  VTBL_ENTRY _ZTV7S6986C2[];
extern Class_Descriptor cd_S6986C3;
extern VTBL_ENTRY _ZTI7S6986C3[];
extern  VTBL_ENTRY _ZTV7S6986C3[];
static Base_Class bases_S6986C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6986C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6986C3,    ABISELECT(48,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6986C1[];
extern void _ZN7S6986C22v6Ev();
extern void _ZN7S6986C22v7Ev();
extern void _ZN7S6986C12v1Ev();
extern void _ZN7S6986C12v2Ev();
extern void _ZN7S6986C12v3Ev();
extern void _ZN7S6986C12v4Ev();
extern void _ZN7S6986C12v5Ev();
extern void _ZN7S6986C32v8Ev();
extern void _ZN7S6986C32v9Ev();
extern void _ZN7S6986C33v10Ev();
extern void _ZN7S6986C33v11Ev();
extern void _ZN7S6986C33v12Ev();
extern void _ZN7S6986C33v13Ev();
static  VTBL_ENTRY vtc_S6986C1[] = {
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6986C1[0]),
  (VTBL_ENTRY)&_ZN7S6986C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6986C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6986C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6986C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6986C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6986C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6986C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S6986C1[0]),
  (VTBL_ENTRY)&_ZN7S6986C32v8Ev,
  (VTBL_ENTRY)&_ZN7S6986C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6986C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6986C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6986C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6986C33v13Ev,
};
extern VTBL_ENTRY _ZTV7S6986C1[];
static  VTT_ENTRY vtt_S6986C1[] = {
  {&(_ZTV7S6986C1[3]),  3,24},
  {&(_ZTV7S6986C1[18]),  18,24},
};
extern VTBL_ENTRY _ZTI7S6986C1[];
extern  VTBL_ENTRY _ZTV7S6986C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6986C1[];
Class_Descriptor cd_S6986C1 = {  "S6986C1", // class name
  bases_S6986C1, 2,
  &(vtc_S6986C1[0]), // expected_vtbl_contents
  &(vtt_S6986C1[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S6986C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6986C1),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6986C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18146C2  {
  int s18146c2f0[2];
  ::S2014C20_nt s18146c2f1;
  int s18146c2f2;
  ::S5514C4_nt s18146c2f3;
};
//SIG(-1 S18146C2) C1{ Fi[2] FC2{ m Fp Fi FC3{ m}} Fi FC4{ FC5{ Fc[20]} Fc[16]}}



static void Test_S18146C2()
{
  {
    init_simple_test("S18146C2");
    S18146C2 lv;
    check2(sizeof(lv), ABISELECT(64,60), "sizeof(S18146C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18146C2)");
    check_field_offset(lv, s18146c2f0, 0, "S18146C2.s18146c2f0");
    check_field_offset(lv, s18146c2f1, 8, "S18146C2.s18146c2f1");
    check_field_offset(lv, s18146c2f2, ABISELECT(24,20), "S18146C2.s18146c2f2");
    check_field_offset(lv, s18146c2f3, ABISELECT(28,24), "S18146C2.s18146c2f3");
  }
}
static Arrange_To_Call_Me vS18146C2(Test_S18146C2, "S18146C2", ABISELECT(64,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18146C1  {
  void *s18146c1f0[3];
  ::S18146C2 s18146c1f1;
  int s18146c1f2;
  void *s18146c1f3;
  void  mf18146c1(); // _ZN8S18146C19mf18146c1Ev
};
//SIG(1 S18146C1) C1{ m Fp[3] FC2{ Fi[2] FC3{ m Fp Fi FC4{ m}} Fi FC5{ FC6{ Fc[20]} Fc[16]}} Fi Fp}


void  S18146C1 ::mf18146c1(){}

static void Test_S18146C1()
{
  {
    init_simple_test("S18146C1");
    S18146C1 lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S18146C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18146C1)");
    check_field_offset(lv, s18146c1f0, 0, "S18146C1.s18146c1f0");
    check_field_offset(lv, s18146c1f1, ABISELECT(24,12), "S18146C1.s18146c1f1");
    check_field_offset(lv, s18146c1f2, ABISELECT(88,72), "S18146C1.s18146c1f2");
    check_field_offset(lv, s18146c1f3, ABISELECT(96,76), "S18146C1.s18146c1f3");
  }
}
static Arrange_To_Call_Me vS18146C1(Test_S18146C1, "S18146C1", ABISELECT(104,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13108C4  {
  int s13108c4f0[65];
};
//SIG(-1 S13108C4) C1{ Fi[65]}



static void Test_S13108C4()
{
  {
    init_simple_test("S13108C4");
    S13108C4 lv;
    check2(sizeof(lv), 260, "sizeof(S13108C4)");
    check2(__alignof__(lv), 4, "__alignof__(S13108C4)");
    check_field_offset(lv, s13108c4f0, 0, "S13108C4.s13108c4f0");
  }
}
static Arrange_To_Call_Me vS13108C4(Test_S13108C4, "S13108C4", 260);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13108C3  {
  ::S13108C4 s13108c3f0;
  ::S13108C4 s13108c3f1;
};
//SIG(-1 S13108C3) C1{ FC2{ Fi[65]} FC2}



static void Test_S13108C3()
{
  {
    init_simple_test("S13108C3");
    S13108C3 lv;
    check2(sizeof(lv), 520, "sizeof(S13108C3)");
    check2(__alignof__(lv), 4, "__alignof__(S13108C3)");
    check_field_offset(lv, s13108c3f0, 0, "S13108C3.s13108c3f0");
    check_field_offset(lv, s13108c3f1, 260, "S13108C3.s13108c3f1");
  }
}
static Arrange_To_Call_Me vS13108C3(Test_S13108C3, "S13108C3", 520);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13108C2  {
  int s13108c2f0[8];
  short s13108c2f1[85];
  ::S13108C3 s13108c2f2;
  char s13108c2f3[256];
};
//SIG(-1 S13108C2) C1{ Fi[8] Fs[85] FC2{ FC3{ Fi[65]} FC3} Fc[256]}



static void Test_S13108C2()
{
  {
    init_simple_test("S13108C2");
    S13108C2 lv;
    check2(sizeof(lv), 980, "sizeof(S13108C2)");
    check2(__alignof__(lv), 4, "__alignof__(S13108C2)");
    check_field_offset(lv, s13108c2f0, 0, "S13108C2.s13108c2f0");
    check_field_offset(lv, s13108c2f1, 32, "S13108C2.s13108c2f1");
    check_field_offset(lv, s13108c2f2, 204, "S13108C2.s13108c2f2");
    check_field_offset(lv, s13108c2f3, 724, "S13108C2.s13108c2f3");
  }
}
static Arrange_To_Call_Me vS13108C2(Test_S13108C2, "S13108C2", 980);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13108C5  {
  ::S13108C3 s13108c5f0;
  char s13108c5f1[16];
};
//SIG(-1 S13108C5) C1{ FC2{ FC3{ Fi[65]} FC3} Fc[16]}



static void Test_S13108C5()
{
  {
    init_simple_test("S13108C5");
    S13108C5 lv;
    check2(sizeof(lv), 536, "sizeof(S13108C5)");
    check2(__alignof__(lv), 4, "__alignof__(S13108C5)");
    check_field_offset(lv, s13108c5f0, 0, "S13108C5.s13108c5f0");
    check_field_offset(lv, s13108c5f1, 520, "S13108C5.s13108c5f1");
  }
}
static Arrange_To_Call_Me vS13108C5(Test_S13108C5, "S13108C5", 536);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13108C1  {
  int s13108c1f0[2];
  ::S13108C2 s13108c1f1;
  ::S13108C5 s13108c1f2;
  void *s13108c1f3;
};
//SIG(1 S13108C1) C1{ Fi[2] FC2{ Fi[8] Fs[85] FC3{ FC4{ Fi[65]} FC4} Fc[256]} FC5{ FC3 Fc[16]} Fp}



static void Test_S13108C1()
{
  {
    init_simple_test("S13108C1");
    S13108C1 lv;
    check2(sizeof(lv), ABISELECT(1536,1528), "sizeof(S13108C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13108C1)");
    check_field_offset(lv, s13108c1f0, 0, "S13108C1.s13108c1f0");
    check_field_offset(lv, s13108c1f1, 8, "S13108C1.s13108c1f1");
    check_field_offset(lv, s13108c1f2, 988, "S13108C1.s13108c1f2");
    check_field_offset(lv, s13108c1f3, ABISELECT(1528,1524), "S13108C1.s13108c1f3");
  }
}
static Arrange_To_Call_Me vS13108C1(Test_S13108C1, "S13108C1", ABISELECT(1536,1528));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12376C4_nt  {
  char s12376c4f0[12];
};
//SIG(-1 S12376C4_nt) C1{ Fc[12]}



//skip512 S12376C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12376C1  {
  int s12376c1f0;
  ::S5514C4_nt s12376c1f1;
  ::S5514C4_nt s12376c1f2;
  int s12376c1f3;
  ::S12376C4_nt s12376c1f4;
  int s12376c1f5;
  long s12376c1f6;
  ::S5514C4_nt s12376c1f7;
  ::S5513C6_nt s12376c1f8;
  int s12376c1f9[2];
};
//SIG(1 S12376C1) C1{ Fi FC2{ FC3{ Fc[20]} Fc[16]} FC2 Fi FC4{ Fc[12]} Fi Fl FC2 FC5{ Fl} Fi[2]}



static void Test_S12376C1()
{
  {
    init_simple_test("S12376C1");
    S12376C1 lv;
    check2(sizeof(lv), ABISELECT(160,148), "sizeof(S12376C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12376C1)");
    check_field_offset(lv, s12376c1f0, 0, "S12376C1.s12376c1f0");
    check_field_offset(lv, s12376c1f1, 4, "S12376C1.s12376c1f1");
    check_field_offset(lv, s12376c1f2, 40, "S12376C1.s12376c1f2");
    check_field_offset(lv, s12376c1f3, 76, "S12376C1.s12376c1f3");
    check_field_offset(lv, s12376c1f4, 80, "S12376C1.s12376c1f4");
    check_field_offset(lv, s12376c1f5, 92, "S12376C1.s12376c1f5");
    check_field_offset(lv, s12376c1f6, 96, "S12376C1.s12376c1f6");
    check_field_offset(lv, s12376c1f7, ABISELECT(104,100), "S12376C1.s12376c1f7");
    check_field_offset(lv, s12376c1f8, ABISELECT(144,136), "S12376C1.s12376c1f8");
    check_field_offset(lv, s12376c1f9, ABISELECT(152,140), "S12376C1.s12376c1f9");
  }
}
static Arrange_To_Call_Me vS12376C1(Test_S12376C1, "S12376C1", ABISELECT(160,148));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12392C1  {
  int s12392c1f0;
  ::S5514C4_nt s12392c1f1;
  ::S12376C4_nt s12392c1f2;
  int s12392c1f3[2];
  char s12392c1f4[4];
  long s12392c1f5;
  int s12392c1f6[2];
  char s12392c1f7[2048];
};
//SIG(1 S12392C1) C1{ Fi FC2{ FC3{ Fc[20]} Fc[16]} FC4{ Fc[12]} Fi[2] Fc[4] Fl Fi[2] Fc[2048]}



static void Test_S12392C1()
{
  {
    init_simple_test("S12392C1");
    S12392C1 lv;
    check2(sizeof(lv), ABISELECT(2128,2124), "sizeof(S12392C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12392C1)");
    check_field_offset(lv, s12392c1f0, 0, "S12392C1.s12392c1f0");
    check_field_offset(lv, s12392c1f1, 4, "S12392C1.s12392c1f1");
    check_field_offset(lv, s12392c1f2, 40, "S12392C1.s12392c1f2");
    check_field_offset(lv, s12392c1f3, 52, "S12392C1.s12392c1f3");
    check_field_offset(lv, s12392c1f4, 60, "S12392C1.s12392c1f4");
    check_field_offset(lv, s12392c1f5, 64, "S12392C1.s12392c1f5");
    check_field_offset(lv, s12392c1f6, ABISELECT(72,68), "S12392C1.s12392c1f6");
    check_field_offset(lv, s12392c1f7, ABISELECT(80,76), "S12392C1.s12392c1f7");
  }
}
static Arrange_To_Call_Me vS12392C1(Test_S12392C1, "S12392C1", ABISELECT(2128,2124));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9258C2  {
  ::S2014C20_nt s9258c2f0;
  int s9258c2f1[2];
  char s9258c2f2;
  virtual  ~S9258C2(); // _ZN7S9258C2D1Ev
  virtual void  v3(); // _ZN7S9258C22v3Ev
  virtual void  v4(); // _ZN7S9258C22v4Ev
  virtual void  v5(); // _ZN7S9258C22v5Ev
  S9258C2(); // tgen
};
//SIG(-1 S9258C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9258C2 ::~S9258C2(){ note_dtor("S9258C2", this);}
void  S9258C2 ::v3(){vfunc_called(this, "_ZN7S9258C22v3Ev");}
void  S9258C2 ::v4(){vfunc_called(this, "_ZN7S9258C22v4Ev");}
void  S9258C2 ::v5(){vfunc_called(this, "_ZN7S9258C22v5Ev");}
S9258C2 ::S9258C2(){ note_ctor("S9258C2", this);} // tgen

static void Test_S9258C2()
{
  extern Class_Descriptor cd_S9258C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9258C2, buf);
    S9258C2 *dp, &lv = *(dp=new (buf) S9258C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9258C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9258C2)");
    check_field_offset(lv, s9258c2f0, ABISELECT(8,4), "S9258C2.s9258c2f0");
    check_field_offset(lv, s9258c2f1, ABISELECT(24,16), "S9258C2.s9258c2f1");
    check_field_offset(lv, s9258c2f2, ABISELECT(32,24), "S9258C2.s9258c2f2");
    test_class_info(&lv, &cd_S9258C2);
    dp->~S9258C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9258C2(Test_S9258C2, "S9258C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9258C2C1Ev();
extern void _ZN7S9258C2D1Ev();
Name_Map name_map_S9258C2[] = {
  NSPAIR(_ZN7S9258C2C1Ev),
  NSPAIR(_ZN7S9258C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9258C2[];
extern void _ZN7S9258C2D1Ev();
extern void _ZN7S9258C2D0Ev();
extern void _ZN7S9258C22v3Ev();
extern void _ZN7S9258C22v4Ev();
extern void _ZN7S9258C22v5Ev();
static  VTBL_ENTRY vtc_S9258C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9258C2[0]),
  (VTBL_ENTRY)&_ZN7S9258C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9258C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9258C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9258C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9258C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9258C2[];
extern  VTBL_ENTRY _ZTV7S9258C2[];
Class_Descriptor cd_S9258C2 = {  "S9258C2", // class name
  0,0,//no base classes
  &(vtc_S9258C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9258C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9258C2),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  S9258C1  : S9258C2 {
  char s9258c1f0[2];
  int s9258c1f1[2];
  virtual  ~S9258C1(); // _ZN7S9258C1D1Ev
  virtual void  v1(); // _ZN7S9258C12v1Ev
  virtual void  v2(); // _ZN7S9258C12v2Ev
  S9258C1(); // tgen
};
//SIG(1 S9258C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fc[2] Fi[2]}


 S9258C1 ::~S9258C1(){ note_dtor("S9258C1", this);}
void  S9258C1 ::v1(){vfunc_called(this, "_ZN7S9258C12v1Ev");}
void  S9258C1 ::v2(){vfunc_called(this, "_ZN7S9258C12v2Ev");}
S9258C1 ::S9258C1(){ note_ctor("S9258C1", this);} // tgen

static void Test_S9258C1()
{
  extern Class_Descriptor cd_S9258C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S9258C1, buf);
    S9258C1 *dp, &lv = *(dp=new (buf) S9258C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S9258C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9258C1)");
    check_base_class_offset(lv, (S9258C2*), 0, "S9258C1");
    check_field_offset(lv, s9258c1f0, ABISELECT(33,25), "S9258C1.s9258c1f0");
    check_field_offset(lv, s9258c1f1, ABISELECT(36,28), "S9258C1.s9258c1f1");
    test_class_info(&lv, &cd_S9258C1);
    dp->~S9258C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9258C1(Test_S9258C1, "S9258C1", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S9258C1C1Ev();
extern void _ZN7S9258C1D1Ev();
Name_Map name_map_S9258C1[] = {
  NSPAIR(_ZN7S9258C1C1Ev),
  NSPAIR(_ZN7S9258C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9258C2;
extern VTBL_ENTRY _ZTI7S9258C2[];
extern  VTBL_ENTRY _ZTV7S9258C2[];
static Base_Class bases_S9258C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9258C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9258C1[];
extern void _ZN7S9258C1D1Ev();
extern void _ZN7S9258C1D0Ev();
extern void _ZN7S9258C22v3Ev();
extern void _ZN7S9258C22v4Ev();
extern void _ZN7S9258C22v5Ev();
extern void _ZN7S9258C12v1Ev();
extern void _ZN7S9258C12v2Ev();
static  VTBL_ENTRY vtc_S9258C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9258C1[0]),
  (VTBL_ENTRY)&_ZN7S9258C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9258C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9258C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9258C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9258C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9258C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9258C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9258C1[];
extern  VTBL_ENTRY _ZTV7S9258C1[];
Class_Descriptor cd_S9258C1 = {  "S9258C1", // class name
  bases_S9258C1, 1,
  &(vtc_S9258C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S9258C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9258C1),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  S13506C2_nt  {
  long s13506c2f0[4];
};
//SIG(-1 S13506C2_nt) C1{ Fl[4]}



//skip512 S13506C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13506C3_nt  {
  void *s13506c3f0;
  int s13506c3f1;
  void *s13506c3f2;
  int s13506c3f3;
};
//SIG(-1 S13506C3_nt) C1{ Fp Fi Fp Fi}



//skip512 S13506C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13506C1  {
  int s13506c1f0[4];
  void *s13506c1f1[3];
  int s13506c1f2[3];
  void *s13506c1f3[98];
  int s13506c1f4[4];
  ::S13506C2_nt s13506c1f5;
  ::S13506C3_nt s13506c1f6;
  void *s13506c1f7;
  int s13506c1f8;
};
//SIG(1 S13506C1) C1{ Fi[4] Fp[3] Fi[3] Fp[98] Fi[4] FC2{ Fl[4]} FC3{ Fp Fi Fp Fi} Fp Fi}



static void Test_S13506C1()
{
  {
    init_simple_test("S13506C1");
    S13506C1 lv;
    check2(sizeof(lv), ABISELECT(936,488), "sizeof(S13506C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13506C1)");
    check_field_offset(lv, s13506c1f0, 0, "S13506C1.s13506c1f0");
    check_field_offset(lv, s13506c1f1, 16, "S13506C1.s13506c1f1");
    check_field_offset(lv, s13506c1f2, ABISELECT(40,28), "S13506C1.s13506c1f2");
    check_field_offset(lv, s13506c1f3, ABISELECT(56,40), "S13506C1.s13506c1f3");
    check_field_offset(lv, s13506c1f4, ABISELECT(840,432), "S13506C1.s13506c1f4");
    check_field_offset(lv, s13506c1f5, ABISELECT(856,448), "S13506C1.s13506c1f5");
    check_field_offset(lv, s13506c1f6, ABISELECT(888,464), "S13506C1.s13506c1f6");
    check_field_offset(lv, s13506c1f7, ABISELECT(920,480), "S13506C1.s13506c1f7");
    check_field_offset(lv, s13506c1f8, ABISELECT(928,484), "S13506C1.s13506c1f8");
  }
}
static Arrange_To_Call_Me vS13506C1(Test_S13506C1, "S13506C1", ABISELECT(936,488));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15555C1  {
  ::S18146C2 s15555c1f0;
  void *s15555c1f1[2];
  void  mf15555c1(); // _ZN8S15555C19mf15555c1Ev
};
//SIG(1 S15555C1) C1{ m FC2{ Fi[2] FC3{ m Fp Fi FC4{ m}} Fi FC5{ FC6{ Fc[20]} Fc[16]}} Fp[2]}


void  S15555C1 ::mf15555c1(){}

static void Test_S15555C1()
{
  {
    init_simple_test("S15555C1");
    S15555C1 lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S15555C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15555C1)");
    check_field_offset(lv, s15555c1f0, 0, "S15555C1.s15555c1f0");
    check_field_offset(lv, s15555c1f1, ABISELECT(64,60), "S15555C1.s15555c1f1");
  }
}
static Arrange_To_Call_Me vS15555C1(Test_S15555C1, "S15555C1", ABISELECT(80,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18471C1  {
  char s18471c1f0;
  __tsi64 s18471c1f1;
  ::S19762C18_nt s18471c1f2;
  int s18471c1f3;
  ::S6388C4 s18471c1f4;
  int s18471c1f5;
  __tsi64 s18471c1f6[7];
  virtual void  v1(); // _ZN8S18471C12v1Ev
  ~S18471C1(); // tgen
  S18471C1(); // tgen
};
//SIG(1 S18471C1) C1{ v1 Fc FL FC2{} Fi FC3{ BC4{ v3 v4 Fc Fp[3] Fc:1 Fs:6} v2} Fi FL[7]}


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

static void Test_S18471C1()
{
  extern Class_Descriptor cd_S18471C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,28)];
    init_test(&cd_S18471C1, buf);
    S18471C1 *dp, &lv = *(dp=new (buf) S18471C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,108), "sizeof(S18471C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18471C1)");
    check_field_offset(lv, s18471c1f0, ABISELECT(8,4), "S18471C1.s18471c1f0");
    check_field_offset(lv, s18471c1f1, ABISELECT(16,8), "S18471C1.s18471c1f1");
    check_field_offset(lv, s18471c1f2, ABISELECT(24,16), "S18471C1.s18471c1f2");
    check_field_offset(lv, s18471c1f3, ABISELECT(28,20), "S18471C1.s18471c1f3");
    check_field_offset(lv, s18471c1f4, ABISELECT(32,24), "S18471C1.s18471c1f4");
    check_field_offset(lv, s18471c1f5, ABISELECT(80,48), "S18471C1.s18471c1f5");
    check_field_offset(lv, s18471c1f6, ABISELECT(88,52), "S18471C1.s18471c1f6");
    test_class_info(&lv, &cd_S18471C1);
    dp->~S18471C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18471C1(Test_S18471C1, "S18471C1", ABISELECT(144,108));

#else // __cplusplus

extern void _ZN8S18471C1C1Ev();
extern void _ZN8S18471C1D1Ev();
Name_Map name_map_S18471C1[] = {
  NSPAIR(_ZN8S18471C1C1Ev),
  NSPAIR(_ZN8S18471C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18471C1[];
extern void _ZN8S18471C12v1Ev();
static  VTBL_ENTRY vtc_S18471C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18471C1[0]),
  (VTBL_ENTRY)&_ZN8S18471C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18471C1[];
extern  VTBL_ENTRY _ZTV8S18471C1[];
Class_Descriptor cd_S18471C1 = {  "S18471C1", // class name
  0,0,//no base classes
  &(vtc_S18471C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,108), // object size
  NSPAIRA(_ZTI8S18471C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18471C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9173C2  {
  char s9173c2f0[32];
  ::S2014C26 s9173c2f1;
  virtual  ~S9173C2(); // _ZN7S9173C2D1Ev
  virtual void  v3(); // _ZN7S9173C22v3Ev
  virtual void  v4(); // _ZN7S9173C22v4Ev
  S9173C2(); // tgen
};
//SIG(-1 S9173C2) C1{ vd v1 v2 Fc[32] FC2{ m Fp Fi FC3{ m} FC4{ m}}}


 S9173C2 ::~S9173C2(){ note_dtor("S9173C2", this);}
void  S9173C2 ::v3(){vfunc_called(this, "_ZN7S9173C22v3Ev");}
void  S9173C2 ::v4(){vfunc_called(this, "_ZN7S9173C22v4Ev");}
S9173C2 ::S9173C2(){ note_ctor("S9173C2", this);} // tgen

static void Test_S9173C2()
{
  extern Class_Descriptor cd_S9173C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S9173C2, buf);
    S9173C2 *dp, &lv = *(dp=new (buf) S9173C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S9173C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9173C2)");
    check_field_offset(lv, s9173c2f0, ABISELECT(8,4), "S9173C2.s9173c2f0");
    check_field_offset(lv, s9173c2f1, ABISELECT(40,36), "S9173C2.s9173c2f1");
    test_class_info(&lv, &cd_S9173C2);
    dp->~S9173C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9173C2(Test_S9173C2, "S9173C2", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S9173C2C1Ev();
extern void _ZN7S9173C2D1Ev();
Name_Map name_map_S9173C2[] = {
  NSPAIR(_ZN7S9173C2C1Ev),
  NSPAIR(_ZN7S9173C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9173C2[];
extern void _ZN7S9173C2D1Ev();
extern void _ZN7S9173C2D0Ev();
extern void _ZN7S9173C22v3Ev();
extern void _ZN7S9173C22v4Ev();
static  VTBL_ENTRY vtc_S9173C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9173C2[0]),
  (VTBL_ENTRY)&_ZN7S9173C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9173C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9173C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9173C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9173C2[];
extern  VTBL_ENTRY _ZTV7S9173C2[];
Class_Descriptor cd_S9173C2 = {  "S9173C2", // class name
  0,0,//no base classes
  &(vtc_S9173C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S9173C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9173C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9173C1  : S9173C2 , S19169C11_nt {
  virtual void  v1(); // _ZN7S9173C12v1Ev
  virtual void  v2(); // _ZN7S9173C12v2Ev
  ~S9173C1(); // tgen
  S9173C1(); // tgen
};
//SIG(1 S9173C1) C1{ BC2{ vd v3 v4 Fc[32] FC3{ m Fp Fi FC4{ m} FC5{ m}}} BC6{ vd m} v1 v2}


void  S9173C1 ::v1(){vfunc_called(this, "_ZN7S9173C12v1Ev");}
void  S9173C1 ::v2(){vfunc_called(this, "_ZN7S9173C12v2Ev");}
S9173C1 ::~S9173C1(){ note_dtor("S9173C1", this);} // tgen
S9173C1 ::S9173C1(){ note_ctor("S9173C1", this);} // tgen

static void Test_S9173C1()
{
  extern Class_Descriptor cd_S9173C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,14)];
    init_test(&cd_S9173C1, buf);
    S9173C1 *dp, &lv = *(dp=new (buf) S9173C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S9173C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9173C1)");
    check_base_class_offset(lv, (S9173C2*), 0, "S9173C1");
    check_base_class_offset(lv, (S19169C11_nt*), ABISELECT(56,48), "S9173C1");
    test_class_info(&lv, &cd_S9173C1);
    dp->~S9173C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9173C1(Test_S9173C1, "S9173C1", ABISELECT(64,52));

#else // __cplusplus

extern void _ZN7S9173C1C1Ev();
extern void _ZN7S9173C1D1Ev();
Name_Map name_map_S9173C1[] = {
  NSPAIR(_ZN7S9173C1C1Ev),
  NSPAIR(_ZN7S9173C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9173C2;
extern VTBL_ENTRY _ZTI7S9173C2[];
extern  VTBL_ENTRY _ZTV7S9173C2[];
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
static Base_Class bases_S9173C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9173C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19169C11_nt,    ABISELECT(56,48), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9173C1[];
extern void _ZN7S9173C1D1Ev();
extern void _ZN7S9173C1D0Ev();
extern void _ZN7S9173C22v3Ev();
extern void _ZN7S9173C22v4Ev();
extern void _ZN7S9173C12v1Ev();
extern void _ZN7S9173C12v2Ev();
extern void ABISELECT(_ZThn56_N7S9173C1D1Ev,_ZThn48_N7S9173C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S9173C1D0Ev,_ZThn48_N7S9173C1D0Ev)();
static  VTBL_ENTRY vtc_S9173C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9173C1[0]),
  (VTBL_ENTRY)&_ZN7S9173C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9173C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9173C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9173C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9173C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9173C12v2Ev,
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S9173C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S9173C1D1Ev,_ZThn48_N7S9173C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S9173C1D0Ev,_ZThn48_N7S9173C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S9173C1[];
extern  VTBL_ENTRY _ZTV7S9173C1[];
Class_Descriptor cd_S9173C1 = {  "S9173C1", // class name
  bases_S9173C1, 2,
  &(vtc_S9173C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,52), // object size
  NSPAIRA(_ZTI7S9173C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9173C1),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  S9330C2  {
  ::S2014C20_nt s9330c2f0;
  int s9330c2f1[2];
  char s9330c2f2;
  virtual  ~S9330C2(); // _ZN7S9330C2D1Ev
  virtual void  v3(); // _ZN7S9330C22v3Ev
  virtual void  v4(); // _ZN7S9330C22v4Ev
  virtual void  v5(); // _ZN7S9330C22v5Ev
  S9330C2(); // tgen
};
//SIG(-1 S9330C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9330C2 ::~S9330C2(){ note_dtor("S9330C2", this);}
void  S9330C2 ::v3(){vfunc_called(this, "_ZN7S9330C22v3Ev");}
void  S9330C2 ::v4(){vfunc_called(this, "_ZN7S9330C22v4Ev");}
void  S9330C2 ::v5(){vfunc_called(this, "_ZN7S9330C22v5Ev");}
S9330C2 ::S9330C2(){ note_ctor("S9330C2", this);} // tgen

static void Test_S9330C2()
{
  extern Class_Descriptor cd_S9330C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9330C2, buf);
    S9330C2 *dp, &lv = *(dp=new (buf) S9330C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9330C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9330C2)");
    check_field_offset(lv, s9330c2f0, ABISELECT(8,4), "S9330C2.s9330c2f0");
    check_field_offset(lv, s9330c2f1, ABISELECT(24,16), "S9330C2.s9330c2f1");
    check_field_offset(lv, s9330c2f2, ABISELECT(32,24), "S9330C2.s9330c2f2");
    test_class_info(&lv, &cd_S9330C2);
    dp->~S9330C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9330C2(Test_S9330C2, "S9330C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9330C2C1Ev();
extern void _ZN7S9330C2D1Ev();
Name_Map name_map_S9330C2[] = {
  NSPAIR(_ZN7S9330C2C1Ev),
  NSPAIR(_ZN7S9330C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9330C2[];
extern void _ZN7S9330C2D1Ev();
extern void _ZN7S9330C2D0Ev();
extern void _ZN7S9330C22v3Ev();
extern void _ZN7S9330C22v4Ev();
extern void _ZN7S9330C22v5Ev();
static  VTBL_ENTRY vtc_S9330C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9330C2[0]),
  (VTBL_ENTRY)&_ZN7S9330C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9330C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9330C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9330C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9330C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9330C2[];
extern  VTBL_ENTRY _ZTV7S9330C2[];
Class_Descriptor cd_S9330C2 = {  "S9330C2", // class name
  0,0,//no base classes
  &(vtc_S9330C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9330C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9330C2),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  S9330C1  : S9330C2 {
  int s9330c1f0;
  void *s9330c1f1;
  virtual  ~S9330C1(); // _ZN7S9330C1D1Ev
  virtual void  v1(); // _ZN7S9330C12v1Ev
  virtual void  v2(); // _ZN7S9330C12v2Ev
  S9330C1(); // tgen
};
//SIG(1 S9330C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fi Fp}


 S9330C1 ::~S9330C1(){ note_dtor("S9330C1", this);}
void  S9330C1 ::v1(){vfunc_called(this, "_ZN7S9330C12v1Ev");}
void  S9330C1 ::v2(){vfunc_called(this, "_ZN7S9330C12v2Ev");}
S9330C1 ::S9330C1(){ note_ctor("S9330C1", this);} // tgen

static void Test_S9330C1()
{
  extern Class_Descriptor cd_S9330C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S9330C1, buf);
    S9330C1 *dp, &lv = *(dp=new (buf) S9330C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S9330C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9330C1)");
    check_base_class_offset(lv, (S9330C2*), 0, "S9330C1");
    check_field_offset(lv, s9330c1f0, ABISELECT(36,28), "S9330C1.s9330c1f0");
    check_field_offset(lv, s9330c1f1, ABISELECT(40,32), "S9330C1.s9330c1f1");
    test_class_info(&lv, &cd_S9330C1);
    dp->~S9330C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9330C1(Test_S9330C1, "S9330C1", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S9330C1C1Ev();
extern void _ZN7S9330C1D1Ev();
Name_Map name_map_S9330C1[] = {
  NSPAIR(_ZN7S9330C1C1Ev),
  NSPAIR(_ZN7S9330C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9330C2;
extern VTBL_ENTRY _ZTI7S9330C2[];
extern  VTBL_ENTRY _ZTV7S9330C2[];
static Base_Class bases_S9330C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9330C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9330C1[];
extern void _ZN7S9330C1D1Ev();
extern void _ZN7S9330C1D0Ev();
extern void _ZN7S9330C22v3Ev();
extern void _ZN7S9330C22v4Ev();
extern void _ZN7S9330C22v5Ev();
extern void _ZN7S9330C12v1Ev();
extern void _ZN7S9330C12v2Ev();
static  VTBL_ENTRY vtc_S9330C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9330C1[0]),
  (VTBL_ENTRY)&_ZN7S9330C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9330C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9330C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9330C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9330C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9330C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9330C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9330C1[];
extern  VTBL_ENTRY _ZTV7S9330C1[];
Class_Descriptor cd_S9330C1 = {  "S9330C1", // class name
  bases_S9330C1, 1,
  &(vtc_S9330C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S9330C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9330C1),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  S3531C4  {
  virtual void  v6(); // _ZN7S3531C42v6Ev
  ~S3531C4(); // tgen
  S3531C4(); // tgen
};
//SIG(-1 S3531C4) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S3531C4C1Ev();
extern void _ZN7S3531C4D1Ev();
Name_Map name_map_S3531C4[] = {
  NSPAIR(_ZN7S3531C4C1Ev),
  NSPAIR(_ZN7S3531C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3531C4[];
extern void _ZN7S3531C42v6Ev();
static  VTBL_ENTRY vtc_S3531C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3531C4[0]),
  (VTBL_ENTRY)&_ZN7S3531C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3531C4[];
extern  VTBL_ENTRY _ZTV7S3531C4[];
Class_Descriptor cd_S3531C4 = {  "S3531C4", // class name
  0,0,//no base classes
  &(vtc_S3531C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3531C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3531C4),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  S3531C3  : virtual S3531C4 {
  int s3531c3f0;
  void *s3531c3f1;
  virtual  ~S3531C3(); // _ZN7S3531C3D2Ev
  virtual void  v7(); // _ZN7S3531C32v7Ev
  virtual void  v8(); // _ZN7S3531C32v8Ev
  S3531C3(); // tgen
};
//SIG(-1 S3531C3) C1{ VBC2{ v3} vd v1 v2 Fi Fp}


 S3531C3 ::~S3531C3(){ note_dtor("S3531C3", this);}
void  S3531C3 ::v7(){vfunc_called(this, "_ZN7S3531C32v7Ev");}
void  S3531C3 ::v8(){vfunc_called(this, "_ZN7S3531C32v8Ev");}
S3531C3 ::S3531C3(){ note_ctor("S3531C3", this);} // tgen

static void Test_S3531C3()
{
  extern Class_Descriptor cd_S3531C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3531C3, buf);
    S3531C3 *dp, &lv = *(dp=new (buf) S3531C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3531C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3531C3)");
    check_base_class_offset(lv, (S3531C4*), 0, "S3531C3");
    check_field_offset(lv, s3531c3f0, ABISELECT(8,4), "S3531C3.s3531c3f0");
    check_field_offset(lv, s3531c3f1, ABISELECT(16,8), "S3531C3.s3531c3f1");
    test_class_info(&lv, &cd_S3531C3);
    dp->~S3531C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3531C3(Test_S3531C3, "S3531C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3531C3C1Ev();
extern void _ZN7S3531C3D2Ev();
Name_Map name_map_S3531C3[] = {
  NSPAIR(_ZN7S3531C3C1Ev),
  NSPAIR(_ZN7S3531C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3531C4;
extern VTBL_ENTRY _ZTI7S3531C4[];
extern  VTBL_ENTRY _ZTV7S3531C4[];
static Base_Class bases_S3531C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3531C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3531C3[];
extern void _ZN7S3531C42v6Ev();
extern void _ZN7S3531C3D1Ev();
extern void _ZN7S3531C3D0Ev();
extern void _ZN7S3531C32v7Ev();
extern void _ZN7S3531C32v8Ev();
static  VTBL_ENTRY vtc_S3531C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3531C3[0]),
  (VTBL_ENTRY)&_ZN7S3531C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3531C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3531C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S3531C3[];
static  VTT_ENTRY vtt_S3531C3[] = {
  {&(_ZTV7S3531C3[4]),  4,9},
  {&(_ZTV7S3531C3[4]),  4,9},
};
extern VTBL_ENTRY _ZTI7S3531C3[];
extern  VTBL_ENTRY _ZTV7S3531C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3531C3[];
Class_Descriptor cd_S3531C3 = {  "S3531C3", // class name
  bases_S3531C3, 1,
  &(vtc_S3531C3[0]), // expected_vtbl_contents
  &(vtt_S3531C3[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3531C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3531C3),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3531C3),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  S3531C2  : S3531C3 {
  long double s3531c2f0[8];
  virtual void  v9(); // _ZN7S3531C22v9Ev
  virtual void  v10(); // _ZN7S3531C23v10Ev
  ~S3531C2(); // tgen
  S3531C2(); // tgen
};
//SIG(-1 S3531C2) C1{ BC2{ VBC3{ v3} vd v4 v5 Fi Fp} v1 v2 FD[8]}


void  S3531C2 ::v9(){vfunc_called(this, "_ZN7S3531C22v9Ev");}
void  S3531C2 ::v10(){vfunc_called(this, "_ZN7S3531C23v10Ev");}
S3531C2 ::~S3531C2(){ note_dtor("S3531C2", this);} // tgen
S3531C2 ::S3531C2(){ note_ctor("S3531C2", this);} // tgen

static void Test_S3531C2()
{
  extern Class_Descriptor cd_S3531C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S3531C2, buf);
    S3531C2 *dp, &lv = *(dp=new (buf) S3531C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S3531C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3531C2)");
    check_base_class_offset(lv, (S3531C4*)(S3531C3*), 0, "S3531C2");
    check_base_class_offset(lv, (S3531C3*), 0, "S3531C2");
    check_field_offset(lv, s3531c2f0, ABISELECT(32,12), "S3531C2.s3531c2f0");
    test_class_info(&lv, &cd_S3531C2);
    dp->~S3531C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3531C2(Test_S3531C2, "S3531C2", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S3531C2C1Ev();
extern void _ZN7S3531C2D1Ev();
Name_Map name_map_S3531C2[] = {
  NSPAIR(_ZN7S3531C2C1Ev),
  NSPAIR(_ZN7S3531C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3531C4;
extern VTBL_ENTRY _ZTI7S3531C4[];
extern  VTBL_ENTRY _ZTV7S3531C4[];
extern Class_Descriptor cd_S3531C3;
extern VTBL_ENTRY _ZTI7S3531C3[];
extern  VTBL_ENTRY _ZTV7S3531C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3531C3[];
static Base_Class bases_S3531C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3531C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3531C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3531C2[];
extern void _ZN7S3531C42v6Ev();
extern void _ZN7S3531C2D1Ev();
extern void _ZN7S3531C2D0Ev();
extern void _ZN7S3531C32v7Ev();
extern void _ZN7S3531C32v8Ev();
extern void _ZN7S3531C22v9Ev();
extern void _ZN7S3531C23v10Ev();
static  VTBL_ENTRY vtc_S3531C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3531C2[0]),
  (VTBL_ENTRY)&_ZN7S3531C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3531C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3531C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3531C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3531C23v10Ev,
};
extern VTBL_ENTRY _ZTV7S3531C2[];
extern void _ZN7S3531C42v6Ev();
extern void _ZN7S3531C3D1Ev();
extern void _ZN7S3531C3D0Ev();
extern void _ZN7S3531C32v7Ev();
extern void _ZN7S3531C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3531C3__7S3531C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3531C3[0]),
  (VTBL_ENTRY)&_ZN7S3531C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3531C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3531C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v8Ev,
};
static  VTT_ENTRY vtt_S3531C2[] = {
  {&(_ZTV7S3531C2[4]),  4,11},
  {&(_tg__ZTV7S3531C3__7S3531C2[4]),  4,9},
  {&(_tg__ZTV7S3531C3__7S3531C2[4]),  4,9},
  {&(_ZTV7S3531C2[4]),  4,11},
};
extern VTBL_ENTRY _ZTI7S3531C2[];
extern  VTBL_ENTRY _ZTV7S3531C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3531C2[];
Class_Descriptor cd_S3531C2 = {  "S3531C2", // class name
  bases_S3531C2, 2,
  &(vtc_S3531C2[0]), // expected_vtbl_contents
  &(vtt_S3531C2[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S3531C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3531C2),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3531C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3531C1  : S3531C2 {
  virtual void  v1(); // _ZN7S3531C12v1Ev
  virtual void  v2(); // _ZN7S3531C12v2Ev
  virtual void  v3(); // _ZN7S3531C12v3Ev
  virtual void  v4(); // _ZN7S3531C12v4Ev
  virtual void  v5(); // _ZN7S3531C12v5Ev
  ~S3531C1(); // tgen
  S3531C1(); // tgen
};
//SIG(1 S3531C1) C1{ BC2{ BC3{ VBC4{ v6} vd v7 v8 Fi Fp} v9 v10 FD[8]} v1 v2 v3 v4 v5}


void  S3531C1 ::v1(){vfunc_called(this, "_ZN7S3531C12v1Ev");}
void  S3531C1 ::v2(){vfunc_called(this, "_ZN7S3531C12v2Ev");}
void  S3531C1 ::v3(){vfunc_called(this, "_ZN7S3531C12v3Ev");}
void  S3531C1 ::v4(){vfunc_called(this, "_ZN7S3531C12v4Ev");}
void  S3531C1 ::v5(){vfunc_called(this, "_ZN7S3531C12v5Ev");}
S3531C1 ::~S3531C1(){ note_dtor("S3531C1", this);} // tgen
S3531C1 ::S3531C1(){ note_ctor("S3531C1", this);} // tgen

static void Test_S3531C1()
{
  extern Class_Descriptor cd_S3531C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S3531C1, buf);
    S3531C1 *dp, &lv = *(dp=new (buf) S3531C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S3531C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3531C1)");
    check_base_class_offset(lv, (S3531C4*)(S3531C3*)(S3531C2*), 0, "S3531C1");
    check_base_class_offset(lv, (S3531C3*)(S3531C2*), 0, "S3531C1");
    check_base_class_offset(lv, (S3531C2*), 0, "S3531C1");
    test_class_info(&lv, &cd_S3531C1);
    dp->~S3531C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3531C1(Test_S3531C1, "S3531C1", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S3531C1C1Ev();
extern void _ZN7S3531C1D1Ev();
Name_Map name_map_S3531C1[] = {
  NSPAIR(_ZN7S3531C1C1Ev),
  NSPAIR(_ZN7S3531C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3531C4;
extern VTBL_ENTRY _ZTI7S3531C4[];
extern  VTBL_ENTRY _ZTV7S3531C4[];
extern Class_Descriptor cd_S3531C3;
extern VTBL_ENTRY _ZTI7S3531C3[];
extern  VTBL_ENTRY _ZTV7S3531C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3531C3[];
extern Class_Descriptor cd_S3531C2;
extern VTBL_ENTRY _ZTI7S3531C2[];
extern  VTBL_ENTRY _ZTV7S3531C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3531C2[];
static Base_Class bases_S3531C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3531C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3531C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3531C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3531C1[];
extern void _ZN7S3531C42v6Ev();
extern void _ZN7S3531C1D1Ev();
extern void _ZN7S3531C1D0Ev();
extern void _ZN7S3531C32v7Ev();
extern void _ZN7S3531C32v8Ev();
extern void _ZN7S3531C22v9Ev();
extern void _ZN7S3531C23v10Ev();
extern void _ZN7S3531C12v1Ev();
extern void _ZN7S3531C12v2Ev();
extern void _ZN7S3531C12v3Ev();
extern void _ZN7S3531C12v4Ev();
extern void _ZN7S3531C12v5Ev();
static  VTBL_ENTRY vtc_S3531C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3531C1[0]),
  (VTBL_ENTRY)&_ZN7S3531C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3531C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3531C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3531C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3531C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3531C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3531C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3531C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3531C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3531C12v5Ev,
};
extern VTBL_ENTRY _ZTV7S3531C1[];
extern void _ZN7S3531C42v6Ev();
extern void _ZN7S3531C2D1Ev();
extern void _ZN7S3531C2D0Ev();
extern void _ZN7S3531C32v7Ev();
extern void _ZN7S3531C32v8Ev();
extern void _ZN7S3531C22v9Ev();
extern void _ZN7S3531C23v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3531C2__7S3531C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3531C2[0]),
  (VTBL_ENTRY)&_ZN7S3531C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3531C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3531C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3531C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3531C23v10Ev,
};
extern void _ZN7S3531C42v6Ev();
extern void _ZN7S3531C3D1Ev();
extern void _ZN7S3531C3D0Ev();
extern void _ZN7S3531C32v7Ev();
extern void _ZN7S3531C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3531C37S3531C2__7S3531C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3531C3[0]),
  (VTBL_ENTRY)&_ZN7S3531C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3531C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3531C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3531C32v8Ev,
};
static  VTT_ENTRY vtt_S3531C1[] = {
  {&(_ZTV7S3531C1[4]),  4,16},
  {&(_tg__ZTV7S3531C2__7S3531C1[4]),  4,11},
  {&(_tg__ZTV7S3531C37S3531C2__7S3531C1[4]),  4,9},
  {&(_tg__ZTV7S3531C37S3531C2__7S3531C1[4]),  4,9},
  {&(_tg__ZTV7S3531C2__7S3531C1[4]),  4,11},
  {&(_ZTV7S3531C1[4]),  4,16},
};
extern VTBL_ENTRY _ZTI7S3531C1[];
extern  VTBL_ENTRY _ZTV7S3531C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3531C1[];
Class_Descriptor cd_S3531C1 = {  "S3531C1", // class name
  bases_S3531C1, 3,
  &(vtc_S3531C1[0]), // expected_vtbl_contents
  &(vtt_S3531C1[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S3531C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3531C1),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3531C1),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19379C3  {
  void *s19379c3f0;
  virtual void  v6(); // _ZN8S19379C32v6Ev
  virtual void  v7(); // _ZN8S19379C32v7Ev
  virtual void  v8(); // _ZN8S19379C32v8Ev
  virtual void  v9(); // _ZN8S19379C32v9Ev
  ~S19379C3(); // tgen
  S19379C3(); // tgen
};
//SIG(-1 S19379C3) C1{ v1 v2 v3 v4 Fp}


void  S19379C3 ::v6(){vfunc_called(this, "_ZN8S19379C32v6Ev");}
void  S19379C3 ::v7(){vfunc_called(this, "_ZN8S19379C32v7Ev");}
void  S19379C3 ::v8(){vfunc_called(this, "_ZN8S19379C32v8Ev");}
void  S19379C3 ::v9(){vfunc_called(this, "_ZN8S19379C32v9Ev");}
S19379C3 ::~S19379C3(){ note_dtor("S19379C3", this);} // tgen
S19379C3 ::S19379C3(){ note_ctor("S19379C3", this);} // tgen

static void Test_S19379C3()
{
  extern Class_Descriptor cd_S19379C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19379C3, buf);
    S19379C3 *dp, &lv = *(dp=new (buf) S19379C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19379C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19379C3)");
    check_field_offset(lv, s19379c3f0, ABISELECT(8,4), "S19379C3.s19379c3f0");
    test_class_info(&lv, &cd_S19379C3);
    dp->~S19379C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19379C3(Test_S19379C3, "S19379C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19379C3C1Ev();
extern void _ZN8S19379C3D1Ev();
Name_Map name_map_S19379C3[] = {
  NSPAIR(_ZN8S19379C3C1Ev),
  NSPAIR(_ZN8S19379C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19379C3[];
extern void _ZN8S19379C32v6Ev();
extern void _ZN8S19379C32v7Ev();
extern void _ZN8S19379C32v8Ev();
extern void _ZN8S19379C32v9Ev();
static  VTBL_ENTRY vtc_S19379C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19379C3[0]),
  (VTBL_ENTRY)&_ZN8S19379C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19379C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19379C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19379C32v9Ev,
};
extern VTBL_ENTRY _ZTI8S19379C3[];
extern  VTBL_ENTRY _ZTV8S19379C3[];
Class_Descriptor cd_S19379C3 = {  "S19379C3", // class name
  0,0,//no base classes
  &(vtc_S19379C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19379C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19379C3),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  S19379C2  : S19379C3 {
  void *s19379c2f0;
  __tsi64 s19379c2f1;
  virtual void  v10(); // _ZN8S19379C23v10Ev
  virtual void  v11(); // _ZN8S19379C23v11Ev
  ~S19379C2(); // tgen
  S19379C2(); // tgen
};
//SIG(-1 S19379C2) C1{ BC2{ v3 v4 v5 v6 Fp} v1 v2 Fp FL}


void  S19379C2 ::v10(){vfunc_called(this, "_ZN8S19379C23v10Ev");}
void  S19379C2 ::v11(){vfunc_called(this, "_ZN8S19379C23v11Ev");}
S19379C2 ::~S19379C2(){ note_dtor("S19379C2", this);} // tgen
S19379C2 ::S19379C2(){ note_ctor("S19379C2", this);} // tgen

static void Test_S19379C2()
{
  extern Class_Descriptor cd_S19379C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19379C2, buf);
    S19379C2 *dp, &lv = *(dp=new (buf) S19379C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19379C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19379C2)");
    check_base_class_offset(lv, (S19379C3*), 0, "S19379C2");
    check_field_offset(lv, s19379c2f0, ABISELECT(16,8), "S19379C2.s19379c2f0");
    check_field_offset(lv, s19379c2f1, ABISELECT(24,12), "S19379C2.s19379c2f1");
    test_class_info(&lv, &cd_S19379C2);
    dp->~S19379C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19379C2(Test_S19379C2, "S19379C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19379C2C1Ev();
extern void _ZN8S19379C2D1Ev();
Name_Map name_map_S19379C2[] = {
  NSPAIR(_ZN8S19379C2C1Ev),
  NSPAIR(_ZN8S19379C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19379C3;
extern VTBL_ENTRY _ZTI8S19379C3[];
extern  VTBL_ENTRY _ZTV8S19379C3[];
static Base_Class bases_S19379C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19379C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19379C2[];
extern void _ZN8S19379C32v6Ev();
extern void _ZN8S19379C32v7Ev();
extern void _ZN8S19379C32v8Ev();
extern void _ZN8S19379C32v9Ev();
extern void _ZN8S19379C23v10Ev();
extern void _ZN8S19379C23v11Ev();
static  VTBL_ENTRY vtc_S19379C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19379C2[0]),
  (VTBL_ENTRY)&_ZN8S19379C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19379C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19379C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19379C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19379C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19379C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S19379C2[];
extern  VTBL_ENTRY _ZTV8S19379C2[];
Class_Descriptor cd_S19379C2 = {  "S19379C2", // class name
  bases_S19379C2, 1,
  &(vtc_S19379C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19379C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19379C2),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  S19379C1  : virtual S19379C2 {
  short s19379c1f0;
  __tsi64 s19379c1f1;
  virtual void  v1(); // _ZN8S19379C12v1Ev
  virtual void  v2(); // _ZN8S19379C12v2Ev
  virtual void  v3(); // _ZN8S19379C12v3Ev
  virtual void  v4(); // _ZN8S19379C12v4Ev
  virtual void  v5(); // _ZN8S19379C12v5Ev
  ~S19379C1(); // tgen
  S19379C1(); // tgen
};
//SIG(1 S19379C1) C1{ VBC2{ BC3{ v6 v7 v8 v9 Fp} v10 v11 Fp FL} v1 v2 v3 v4 v5 Fs FL}


void  S19379C1 ::v1(){vfunc_called(this, "_ZN8S19379C12v1Ev");}
void  S19379C1 ::v2(){vfunc_called(this, "_ZN8S19379C12v2Ev");}
void  S19379C1 ::v3(){vfunc_called(this, "_ZN8S19379C12v3Ev");}
void  S19379C1 ::v4(){vfunc_called(this, "_ZN8S19379C12v4Ev");}
void  S19379C1 ::v5(){vfunc_called(this, "_ZN8S19379C12v5Ev");}
S19379C1 ::~S19379C1(){ note_dtor("S19379C1", this);} // tgen
S19379C1 ::S19379C1(){ note_ctor("S19379C1", this);} // tgen

static void Test_S19379C1()
{
  extern Class_Descriptor cd_S19379C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19379C1, buf);
    S19379C1 *dp, &lv = *(dp=new (buf) S19379C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19379C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19379C1)");
    check_base_class_offset(lv, (S19379C3*)(S19379C2*), ABISELECT(24,16), "S19379C1");
    check_base_class_offset(lv, (S19379C2*), ABISELECT(24,16), "S19379C1");
    check_field_offset(lv, s19379c1f0, ABISELECT(8,4), "S19379C1.s19379c1f0");
    check_field_offset(lv, s19379c1f1, ABISELECT(16,8), "S19379C1.s19379c1f1");
    test_class_info(&lv, &cd_S19379C1);
    dp->~S19379C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19379C1(Test_S19379C1, "S19379C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S19379C1C1Ev();
extern void _ZN8S19379C1D1Ev();
Name_Map name_map_S19379C1[] = {
  NSPAIR(_ZN8S19379C1C1Ev),
  NSPAIR(_ZN8S19379C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19379C3;
extern VTBL_ENTRY _ZTI8S19379C3[];
extern  VTBL_ENTRY _ZTV8S19379C3[];
extern Class_Descriptor cd_S19379C2;
extern VTBL_ENTRY _ZTI8S19379C2[];
extern  VTBL_ENTRY _ZTV8S19379C2[];
static Base_Class bases_S19379C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19379C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19379C2,    ABISELECT(24,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19379C1[];
extern void _ZN8S19379C12v1Ev();
extern void _ZN8S19379C12v2Ev();
extern void _ZN8S19379C12v3Ev();
extern void _ZN8S19379C12v4Ev();
extern void _ZN8S19379C12v5Ev();
extern void _ZN8S19379C32v6Ev();
extern void _ZN8S19379C32v7Ev();
extern void _ZN8S19379C32v8Ev();
extern void _ZN8S19379C32v9Ev();
extern void _ZN8S19379C23v10Ev();
extern void _ZN8S19379C23v11Ev();
static  VTBL_ENTRY vtc_S19379C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19379C1[0]),
  (VTBL_ENTRY)&_ZN8S19379C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19379C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19379C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19379C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19379C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19379C1[0]),
  (VTBL_ENTRY)&_ZN8S19379C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19379C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19379C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19379C32v9Ev,
  (VTBL_ENTRY)&_ZN8S19379C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19379C23v11Ev,
};
extern VTBL_ENTRY _ZTV8S19379C1[];
static  VTT_ENTRY vtt_S19379C1[] = {
  {&(_ZTV8S19379C1[3]),  3,22},
  {&(_ZTV8S19379C1[16]),  16,22},
};
extern VTBL_ENTRY _ZTI8S19379C1[];
extern  VTBL_ENTRY _ZTV8S19379C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19379C1[];
Class_Descriptor cd_S19379C1 = {  "S19379C1", // class name
  bases_S19379C1, 2,
  &(vtc_S19379C1[0]), // expected_vtbl_contents
  &(vtt_S19379C1[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S19379C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19379C1),22, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19379C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3072C3  {
  virtual void  v2(); // _ZN7S3072C32v2Ev
  virtual void  v3(); // _ZN7S3072C32v3Ev
  virtual void  v4(); // _ZN7S3072C32v4Ev
  ~S3072C3(); // tgen
  S3072C3(); // tgen
};
//SIG(-1 S3072C3) C1{ v1 v2 v3}


void  S3072C3 ::v2(){vfunc_called(this, "_ZN7S3072C32v2Ev");}
void  S3072C3 ::v3(){vfunc_called(this, "_ZN7S3072C32v3Ev");}
void  S3072C3 ::v4(){vfunc_called(this, "_ZN7S3072C32v4Ev");}
S3072C3 ::~S3072C3(){ note_dtor("S3072C3", this);} // tgen
S3072C3 ::S3072C3(){ note_ctor("S3072C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3072C3C1Ev();
extern void _ZN7S3072C3D1Ev();
Name_Map name_map_S3072C3[] = {
  NSPAIR(_ZN7S3072C3C1Ev),
  NSPAIR(_ZN7S3072C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3072C3[];
extern void _ZN7S3072C32v2Ev();
extern void _ZN7S3072C32v3Ev();
extern void _ZN7S3072C32v4Ev();
static  VTBL_ENTRY vtc_S3072C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3072C3[0]),
  (VTBL_ENTRY)&_ZN7S3072C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3072C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3072C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S3072C3[];
extern  VTBL_ENTRY _ZTV7S3072C3[];
Class_Descriptor cd_S3072C3 = {  "S3072C3", // class name
  0,0,//no base classes
  &(vtc_S3072C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3072C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3072C3),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  S3072C2  : S3072C3 {
  ::S3072C3 s3072c2f0;
  virtual void  v5(); // _ZN7S3072C22v5Ev
  virtual void  v6(); // _ZN7S3072C22v6Ev
  virtual void  v7(); // _ZN7S3072C22v7Ev
  ~S3072C2(); // tgen
  S3072C2(); // tgen
};
//SIG(-1 S3072C2) C1{ BC2{ v4 v5 v6} v1 v2 v3 FC2}


void  S3072C2 ::v5(){vfunc_called(this, "_ZN7S3072C22v5Ev");}
void  S3072C2 ::v6(){vfunc_called(this, "_ZN7S3072C22v6Ev");}
void  S3072C2 ::v7(){vfunc_called(this, "_ZN7S3072C22v7Ev");}
S3072C2 ::~S3072C2(){ note_dtor("S3072C2", this);} // tgen
S3072C2 ::S3072C2(){ note_ctor("S3072C2", this);} // tgen

static void Test_S3072C2()
{
  extern Class_Descriptor cd_S3072C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3072C2, buf);
    S3072C2 *dp, &lv = *(dp=new (buf) S3072C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3072C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3072C2)");
    check_base_class_offset(lv, (S3072C3*), 0, "S3072C2");
    check_field_offset(lv, s3072c2f0, ABISELECT(8,4), "S3072C2.s3072c2f0");
    test_class_info(&lv, &cd_S3072C2);
    dp->~S3072C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3072C2(Test_S3072C2, "S3072C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3072C2C1Ev();
extern void _ZN7S3072C2D1Ev();
Name_Map name_map_S3072C2[] = {
  NSPAIR(_ZN7S3072C2C1Ev),
  NSPAIR(_ZN7S3072C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3072C3;
extern VTBL_ENTRY _ZTI7S3072C3[];
extern  VTBL_ENTRY _ZTV7S3072C3[];
static Base_Class bases_S3072C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3072C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3072C2[];
extern void _ZN7S3072C32v2Ev();
extern void _ZN7S3072C32v3Ev();
extern void _ZN7S3072C32v4Ev();
extern void _ZN7S3072C22v5Ev();
extern void _ZN7S3072C22v6Ev();
extern void _ZN7S3072C22v7Ev();
static  VTBL_ENTRY vtc_S3072C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3072C2[0]),
  (VTBL_ENTRY)&_ZN7S3072C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3072C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3072C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3072C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3072C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3072C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S3072C2[];
extern  VTBL_ENTRY _ZTV7S3072C2[];
Class_Descriptor cd_S3072C2 = {  "S3072C2", // class name
  bases_S3072C2, 1,
  &(vtc_S3072C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3072C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3072C2),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  S3072C4  {
  virtual  ~S3072C4(); // _ZN7S3072C4D1Ev
  virtual void  v8(); // _ZN7S3072C42v8Ev
  virtual void  v9(); // _ZN7S3072C42v9Ev
  virtual void  v10(); // _ZN7S3072C43v10Ev
  virtual void  v11(); // _ZN7S3072C43v11Ev
  S3072C4(); // tgen
};
//SIG(-1 S3072C4) C1{ vd v1 v2 v3 v4}


 S3072C4 ::~S3072C4(){ note_dtor("S3072C4", this);}
void  S3072C4 ::v8(){vfunc_called(this, "_ZN7S3072C42v8Ev");}
void  S3072C4 ::v9(){vfunc_called(this, "_ZN7S3072C42v9Ev");}
void  S3072C4 ::v10(){vfunc_called(this, "_ZN7S3072C43v10Ev");}
void  S3072C4 ::v11(){vfunc_called(this, "_ZN7S3072C43v11Ev");}
S3072C4 ::S3072C4(){ note_ctor("S3072C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3072C4C1Ev();
extern void _ZN7S3072C4D1Ev();
Name_Map name_map_S3072C4[] = {
  NSPAIR(_ZN7S3072C4C1Ev),
  NSPAIR(_ZN7S3072C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3072C4[];
extern void _ZN7S3072C4D1Ev();
extern void _ZN7S3072C4D0Ev();
extern void _ZN7S3072C42v8Ev();
extern void _ZN7S3072C42v9Ev();
extern void _ZN7S3072C43v10Ev();
extern void _ZN7S3072C43v11Ev();
static  VTBL_ENTRY vtc_S3072C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3072C4[0]),
  (VTBL_ENTRY)&_ZN7S3072C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3072C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3072C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3072C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3072C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3072C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S3072C4[];
extern  VTBL_ENTRY _ZTV7S3072C4[];
Class_Descriptor cd_S3072C4 = {  "S3072C4", // class name
  0,0,//no base classes
  &(vtc_S3072C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3072C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3072C4),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3072C1  : S3072C2 , virtual S3072C4 {
  virtual  ~S3072C1(); // _ZN7S3072C1D2Ev
  virtual void  v1(); // _ZN7S3072C12v1Ev
  S3072C1(); // tgen
};
//SIG(1 S3072C1) C1{ BC2{ BC3{ v2 v3 v4} v5 v6 v7 FC3} VBC4{ vd v8 v9 v10 v11} vd v1}


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

static void Test_S3072C1()
{
  extern Class_Descriptor cd_S3072C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3072C1, buf);
    S3072C1 *dp, &lv = *(dp=new (buf) S3072C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3072C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3072C1)");
    check_base_class_offset(lv, (S3072C3*)(S3072C2*), 0, "S3072C1");
    check_base_class_offset(lv, (S3072C2*), 0, "S3072C1");
    check_base_class_offset(lv, (S3072C4*), ABISELECT(16,8), "S3072C1");
    test_class_info(&lv, &cd_S3072C1);
    dp->~S3072C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3072C1(Test_S3072C1, "S3072C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3072C1C1Ev();
extern void _ZN7S3072C1D2Ev();
Name_Map name_map_S3072C1[] = {
  NSPAIR(_ZN7S3072C1C1Ev),
  NSPAIR(_ZN7S3072C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3072C3;
extern VTBL_ENTRY _ZTI7S3072C3[];
extern  VTBL_ENTRY _ZTV7S3072C3[];
extern Class_Descriptor cd_S3072C2;
extern VTBL_ENTRY _ZTI7S3072C2[];
extern  VTBL_ENTRY _ZTV7S3072C2[];
extern Class_Descriptor cd_S3072C4;
extern VTBL_ENTRY _ZTI7S3072C4[];
extern  VTBL_ENTRY _ZTV7S3072C4[];
static Base_Class bases_S3072C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3072C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3072C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3072C4,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3072C1[];
extern void _ZN7S3072C32v2Ev();
extern void _ZN7S3072C32v3Ev();
extern void _ZN7S3072C32v4Ev();
extern void _ZN7S3072C22v5Ev();
extern void _ZN7S3072C22v6Ev();
extern void _ZN7S3072C22v7Ev();
extern void _ZN7S3072C1D1Ev();
extern void _ZN7S3072C1D0Ev();
extern void _ZN7S3072C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S3072C1D1Ev,_ZTv0_n12_N7S3072C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3072C1D1Ev,_ZThn8_N7S3072C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3072C1D0Ev,_ZTv0_n12_N7S3072C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S3072C1D0Ev,_ZThn8_N7S3072C1D0Ev)() __attribute__((weak));
extern void _ZN7S3072C42v8Ev();
extern void _ZN7S3072C42v9Ev();
extern void _ZN7S3072C43v10Ev();
extern void _ZN7S3072C43v11Ev();
static  VTBL_ENTRY vtc_S3072C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3072C1[0]),
  (VTBL_ENTRY)&_ZN7S3072C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3072C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3072C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3072C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3072C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3072C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3072C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3072C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3072C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3072C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3072C1D1Ev,_ZTv0_n12_N7S3072C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3072C1D0Ev,_ZTv0_n12_N7S3072C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3072C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3072C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3072C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3072C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S3072C1[];
static  VTT_ENTRY vtt_S3072C1[] = {
  {&(_ZTV7S3072C1[3]),  3,25},
  {&(_ZTV7S3072C1[19]),  19,25},
};
extern VTBL_ENTRY _ZTI7S3072C1[];
extern  VTBL_ENTRY _ZTV7S3072C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3072C1[];
static VTBL_ENTRY alt_thunk_names180[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3072C1D0Ev,_ZTv0_n12_N7S3072C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3072C1D0Ev,_ZThn8_N7S3072C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3072C1D1Ev,_ZTv0_n12_N7S3072C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3072C1D1Ev,_ZThn8_N7S3072C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3072C1 = {  "S3072C1", // class name
  bases_S3072C1, 3,
  &(vtc_S3072C1[0]), // expected_vtbl_contents
  &(vtt_S3072C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3072C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3072C1),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3072C1),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names180,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3267C3  {
  void *s3267c3f0;
  virtual void  v5(); // _ZN7S3267C32v5Ev
  virtual void  v6(); // _ZN7S3267C32v6Ev
  virtual void  v7(); // _ZN7S3267C32v7Ev
  virtual void  v8(); // _ZN7S3267C32v8Ev
  ~S3267C3(); // tgen
  S3267C3(); // tgen
};
//SIG(-1 S3267C3) C1{ v1 v2 v3 v4 Fp}


void  S3267C3 ::v5(){vfunc_called(this, "_ZN7S3267C32v5Ev");}
void  S3267C3 ::v6(){vfunc_called(this, "_ZN7S3267C32v6Ev");}
void  S3267C3 ::v7(){vfunc_called(this, "_ZN7S3267C32v7Ev");}
void  S3267C3 ::v8(){vfunc_called(this, "_ZN7S3267C32v8Ev");}
S3267C3 ::~S3267C3(){ note_dtor("S3267C3", this);} // tgen
S3267C3 ::S3267C3(){ note_ctor("S3267C3", this);} // tgen

static void Test_S3267C3()
{
  extern Class_Descriptor cd_S3267C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3267C3, buf);
    S3267C3 *dp, &lv = *(dp=new (buf) S3267C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3267C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3267C3)");
    check_field_offset(lv, s3267c3f0, ABISELECT(8,4), "S3267C3.s3267c3f0");
    test_class_info(&lv, &cd_S3267C3);
    dp->~S3267C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3267C3(Test_S3267C3, "S3267C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3267C3C1Ev();
extern void _ZN7S3267C3D1Ev();
Name_Map name_map_S3267C3[] = {
  NSPAIR(_ZN7S3267C3C1Ev),
  NSPAIR(_ZN7S3267C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3267C3[];
extern void _ZN7S3267C32v5Ev();
extern void _ZN7S3267C32v6Ev();
extern void _ZN7S3267C32v7Ev();
extern void _ZN7S3267C32v8Ev();
static  VTBL_ENTRY vtc_S3267C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3267C3[0]),
  (VTBL_ENTRY)&_ZN7S3267C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3267C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3267C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3267C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S3267C3[];
extern  VTBL_ENTRY _ZTV7S3267C3[];
Class_Descriptor cd_S3267C3 = {  "S3267C3", // class name
  0,0,//no base classes
  &(vtc_S3267C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3267C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3267C3),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  S3267C2  : S3267C3 {
  virtual void  v9(); // _ZN7S3267C22v9Ev
  virtual void  v10(); // _ZN7S3267C23v10Ev
  virtual void  v11(); // _ZN7S3267C23v11Ev
  virtual void  v12(); // _ZN7S3267C23v12Ev
  virtual void  v13(); // _ZN7S3267C23v13Ev
  virtual void  v14(); // _ZN7S3267C23v14Ev
  ~S3267C2(); // tgen
  S3267C2(); // tgen
};
//SIG(-1 S3267C2) C1{ BC2{ v7 v8 v9 v10 Fp} v1 v2 v3 v4 v5 v6}


void  S3267C2 ::v9(){vfunc_called(this, "_ZN7S3267C22v9Ev");}
void  S3267C2 ::v10(){vfunc_called(this, "_ZN7S3267C23v10Ev");}
void  S3267C2 ::v11(){vfunc_called(this, "_ZN7S3267C23v11Ev");}
void  S3267C2 ::v12(){vfunc_called(this, "_ZN7S3267C23v12Ev");}
void  S3267C2 ::v13(){vfunc_called(this, "_ZN7S3267C23v13Ev");}
void  S3267C2 ::v14(){vfunc_called(this, "_ZN7S3267C23v14Ev");}
S3267C2 ::~S3267C2(){ note_dtor("S3267C2", this);} // tgen
S3267C2 ::S3267C2(){ note_ctor("S3267C2", this);} // tgen

static void Test_S3267C2()
{
  extern Class_Descriptor cd_S3267C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3267C2, buf);
    S3267C2 *dp, &lv = *(dp=new (buf) S3267C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3267C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3267C2)");
    check_base_class_offset(lv, (S3267C3*), 0, "S3267C2");
    test_class_info(&lv, &cd_S3267C2);
    dp->~S3267C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3267C2(Test_S3267C2, "S3267C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3267C2C1Ev();
extern void _ZN7S3267C2D1Ev();
Name_Map name_map_S3267C2[] = {
  NSPAIR(_ZN7S3267C2C1Ev),
  NSPAIR(_ZN7S3267C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3267C3;
extern VTBL_ENTRY _ZTI7S3267C3[];
extern  VTBL_ENTRY _ZTV7S3267C3[];
static Base_Class bases_S3267C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3267C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3267C2[];
extern void _ZN7S3267C32v5Ev();
extern void _ZN7S3267C32v6Ev();
extern void _ZN7S3267C32v7Ev();
extern void _ZN7S3267C32v8Ev();
extern void _ZN7S3267C22v9Ev();
extern void _ZN7S3267C23v10Ev();
extern void _ZN7S3267C23v11Ev();
extern void _ZN7S3267C23v12Ev();
extern void _ZN7S3267C23v13Ev();
extern void _ZN7S3267C23v14Ev();
static  VTBL_ENTRY vtc_S3267C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3267C2[0]),
  (VTBL_ENTRY)&_ZN7S3267C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3267C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3267C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3267C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3267C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S3267C2[];
extern  VTBL_ENTRY _ZTV7S3267C2[];
Class_Descriptor cd_S3267C2 = {  "S3267C2", // class name
  bases_S3267C2, 1,
  &(vtc_S3267C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3267C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3267C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3267C1  : S3267C2 {
  virtual void  v1(); // _ZN7S3267C12v1Ev
  virtual void  v2(); // _ZN7S3267C12v2Ev
  virtual void  v3(); // _ZN7S3267C12v3Ev
  virtual void  v4(); // _ZN7S3267C12v4Ev
  ~S3267C1(); // tgen
  S3267C1(); // tgen
};
//SIG(1 S3267C1) C1{ BC2{ BC3{ v5 v6 v7 v8 Fp} v9 v10 v11 v12 v13 v14} v1 v2 v3 v4}


void  S3267C1 ::v1(){vfunc_called(this, "_ZN7S3267C12v1Ev");}
void  S3267C1 ::v2(){vfunc_called(this, "_ZN7S3267C12v2Ev");}
void  S3267C1 ::v3(){vfunc_called(this, "_ZN7S3267C12v3Ev");}
void  S3267C1 ::v4(){vfunc_called(this, "_ZN7S3267C12v4Ev");}
S3267C1 ::~S3267C1(){ note_dtor("S3267C1", this);} // tgen
S3267C1 ::S3267C1(){ note_ctor("S3267C1", this);} // tgen

static void Test_S3267C1()
{
  extern Class_Descriptor cd_S3267C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3267C1, buf);
    S3267C1 *dp, &lv = *(dp=new (buf) S3267C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3267C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3267C1)");
    check_base_class_offset(lv, (S3267C3*)(S3267C2*), 0, "S3267C1");
    check_base_class_offset(lv, (S3267C2*), 0, "S3267C1");
    test_class_info(&lv, &cd_S3267C1);
    dp->~S3267C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3267C1(Test_S3267C1, "S3267C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3267C1C1Ev();
extern void _ZN7S3267C1D1Ev();
Name_Map name_map_S3267C1[] = {
  NSPAIR(_ZN7S3267C1C1Ev),
  NSPAIR(_ZN7S3267C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3267C3;
extern VTBL_ENTRY _ZTI7S3267C3[];
extern  VTBL_ENTRY _ZTV7S3267C3[];
extern Class_Descriptor cd_S3267C2;
extern VTBL_ENTRY _ZTI7S3267C2[];
extern  VTBL_ENTRY _ZTV7S3267C2[];
static Base_Class bases_S3267C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3267C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3267C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3267C1[];
extern void _ZN7S3267C32v5Ev();
extern void _ZN7S3267C32v6Ev();
extern void _ZN7S3267C32v7Ev();
extern void _ZN7S3267C32v8Ev();
extern void _ZN7S3267C22v9Ev();
extern void _ZN7S3267C23v10Ev();
extern void _ZN7S3267C23v11Ev();
extern void _ZN7S3267C23v12Ev();
extern void _ZN7S3267C23v13Ev();
extern void _ZN7S3267C23v14Ev();
extern void _ZN7S3267C12v1Ev();
extern void _ZN7S3267C12v2Ev();
extern void _ZN7S3267C12v3Ev();
extern void _ZN7S3267C12v4Ev();
static  VTBL_ENTRY vtc_S3267C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3267C1[0]),
  (VTBL_ENTRY)&_ZN7S3267C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3267C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3267C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3267C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3267C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3267C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3267C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3267C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3267C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3267C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3267C1[];
extern  VTBL_ENTRY _ZTV7S3267C1[];
Class_Descriptor cd_S3267C1 = {  "S3267C1", // class name
  bases_S3267C1, 2,
  &(vtc_S3267C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3267C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3267C1),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  S9464C2  {
  void *s9464c2f0;
  ::S15222C4 s9464c2f1;
  ::S15222C4 s9464c2f2;
  char s9464c2f3;
  virtual  ~S9464C2(); // _ZN7S9464C2D1Ev
  virtual void  v3(); // _ZN7S9464C22v3Ev
  virtual void  v4(); // _ZN7S9464C22v4Ev
  virtual void  v5(); // _ZN7S9464C22v5Ev
  virtual void  v6(); // _ZN7S9464C22v6Ev
  virtual void  v7(); // _ZN7S9464C22v7Ev
  virtual void  v8(); // _ZN7S9464C22v8Ev
  S9464C2(); // tgen
};
//SIG(-1 S9464C2) C1{ vd v1 v2 v3 v4 v5 v6 Fp FU2{ Fp FL Fc} FU2 Fc}


 S9464C2 ::~S9464C2(){ note_dtor("S9464C2", this);}
void  S9464C2 ::v3(){vfunc_called(this, "_ZN7S9464C22v3Ev");}
void  S9464C2 ::v4(){vfunc_called(this, "_ZN7S9464C22v4Ev");}
void  S9464C2 ::v5(){vfunc_called(this, "_ZN7S9464C22v5Ev");}
void  S9464C2 ::v6(){vfunc_called(this, "_ZN7S9464C22v6Ev");}
void  S9464C2 ::v7(){vfunc_called(this, "_ZN7S9464C22v7Ev");}
void  S9464C2 ::v8(){vfunc_called(this, "_ZN7S9464C22v8Ev");}
S9464C2 ::S9464C2(){ note_ctor("S9464C2", this);} // tgen

static void Test_S9464C2()
{
  extern Class_Descriptor cd_S9464C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9464C2, buf);
    S9464C2 *dp, &lv = *(dp=new (buf) S9464C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9464C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9464C2)");
    check_field_offset(lv, s9464c2f0, ABISELECT(8,4), "S9464C2.s9464c2f0");
    check_field_offset(lv, s9464c2f1, ABISELECT(16,8), "S9464C2.s9464c2f1");
    check_field_offset(lv, s9464c2f2, ABISELECT(24,16), "S9464C2.s9464c2f2");
    check_field_offset(lv, s9464c2f3, ABISELECT(32,24), "S9464C2.s9464c2f3");
    test_class_info(&lv, &cd_S9464C2);
    dp->~S9464C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9464C2(Test_S9464C2, "S9464C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9464C2C1Ev();
extern void _ZN7S9464C2D1Ev();
Name_Map name_map_S9464C2[] = {
  NSPAIR(_ZN7S9464C2C1Ev),
  NSPAIR(_ZN7S9464C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9464C2[];
extern void _ZN7S9464C2D1Ev();
extern void _ZN7S9464C2D0Ev();
extern void _ZN7S9464C22v3Ev();
extern void _ZN7S9464C22v4Ev();
extern void _ZN7S9464C22v5Ev();
extern void _ZN7S9464C22v6Ev();
extern void _ZN7S9464C22v7Ev();
extern void _ZN7S9464C22v8Ev();
static  VTBL_ENTRY vtc_S9464C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9464C2[0]),
  (VTBL_ENTRY)&_ZN7S9464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9464C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9464C2[];
extern  VTBL_ENTRY _ZTV7S9464C2[];
Class_Descriptor cd_S9464C2 = {  "S9464C2", // class name
  0,0,//no base classes
  &(vtc_S9464C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9464C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9464C2),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  S9464C1  : S9464C2 {
  virtual  ~S9464C1(); // _ZN7S9464C1D1Ev
  virtual void  v1(); // _ZN7S9464C12v1Ev
  virtual void  v2(); // _ZN7S9464C12v2Ev
  S9464C1(); // tgen
};
//SIG(1 S9464C1) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 Fp FU3{ Fp FL Fc} FU3 Fc} vd v1 v2}


 S9464C1 ::~S9464C1(){ note_dtor("S9464C1", this);}
void  S9464C1 ::v1(){vfunc_called(this, "_ZN7S9464C12v1Ev");}
void  S9464C1 ::v2(){vfunc_called(this, "_ZN7S9464C12v2Ev");}
S9464C1 ::S9464C1(){ note_ctor("S9464C1", this);} // tgen

static void Test_S9464C1()
{
  extern Class_Descriptor cd_S9464C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9464C1, buf);
    S9464C1 *dp, &lv = *(dp=new (buf) S9464C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9464C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9464C1)");
    check_base_class_offset(lv, (S9464C2*), 0, "S9464C1");
    test_class_info(&lv, &cd_S9464C1);
    dp->~S9464C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9464C1(Test_S9464C1, "S9464C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9464C1C1Ev();
extern void _ZN7S9464C1D1Ev();
Name_Map name_map_S9464C1[] = {
  NSPAIR(_ZN7S9464C1C1Ev),
  NSPAIR(_ZN7S9464C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9464C2;
extern VTBL_ENTRY _ZTI7S9464C2[];
extern  VTBL_ENTRY _ZTV7S9464C2[];
static Base_Class bases_S9464C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9464C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9464C1[];
extern void _ZN7S9464C1D1Ev();
extern void _ZN7S9464C1D0Ev();
extern void _ZN7S9464C22v3Ev();
extern void _ZN7S9464C22v4Ev();
extern void _ZN7S9464C22v5Ev();
extern void _ZN7S9464C22v6Ev();
extern void _ZN7S9464C22v7Ev();
extern void _ZN7S9464C22v8Ev();
extern void _ZN7S9464C12v1Ev();
extern void _ZN7S9464C12v2Ev();
static  VTBL_ENTRY vtc_S9464C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9464C1[0]),
  (VTBL_ENTRY)&_ZN7S9464C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9464C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9464C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9464C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9464C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9464C1[];
extern  VTBL_ENTRY _ZTV7S9464C1[];
Class_Descriptor cd_S9464C1 = {  "S9464C1", // class name
  bases_S9464C1, 1,
  &(vtc_S9464C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9464C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9464C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19362C3  {
  void *s19362c3f0;
  virtual void  v5(); // _ZN8S19362C32v5Ev
  virtual void  v6(); // _ZN8S19362C32v6Ev
  virtual void  v7(); // _ZN8S19362C32v7Ev
  virtual void  v8(); // _ZN8S19362C32v8Ev
  ~S19362C3(); // tgen
  S19362C3(); // tgen
};
//SIG(-1 S19362C3) C1{ v1 v2 v3 v4 Fp}


void  S19362C3 ::v5(){vfunc_called(this, "_ZN8S19362C32v5Ev");}
void  S19362C3 ::v6(){vfunc_called(this, "_ZN8S19362C32v6Ev");}
void  S19362C3 ::v7(){vfunc_called(this, "_ZN8S19362C32v7Ev");}
void  S19362C3 ::v8(){vfunc_called(this, "_ZN8S19362C32v8Ev");}
S19362C3 ::~S19362C3(){ note_dtor("S19362C3", this);} // tgen
S19362C3 ::S19362C3(){ note_ctor("S19362C3", this);} // tgen

static void Test_S19362C3()
{
  extern Class_Descriptor cd_S19362C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19362C3, buf);
    S19362C3 *dp, &lv = *(dp=new (buf) S19362C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19362C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19362C3)");
    check_field_offset(lv, s19362c3f0, ABISELECT(8,4), "S19362C3.s19362c3f0");
    test_class_info(&lv, &cd_S19362C3);
    dp->~S19362C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19362C3(Test_S19362C3, "S19362C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19362C3C1Ev();
extern void _ZN8S19362C3D1Ev();
Name_Map name_map_S19362C3[] = {
  NSPAIR(_ZN8S19362C3C1Ev),
  NSPAIR(_ZN8S19362C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19362C3[];
extern void _ZN8S19362C32v5Ev();
extern void _ZN8S19362C32v6Ev();
extern void _ZN8S19362C32v7Ev();
extern void _ZN8S19362C32v8Ev();
static  VTBL_ENTRY vtc_S19362C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19362C3[0]),
  (VTBL_ENTRY)&_ZN8S19362C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S19362C3[];
extern  VTBL_ENTRY _ZTV8S19362C3[];
Class_Descriptor cd_S19362C3 = {  "S19362C3", // class name
  0,0,//no base classes
  &(vtc_S19362C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19362C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19362C3),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  S19362C2  : S19362C3 {
  void *s19362c2f0;
  __tsi64 s19362c2f1;
  virtual void  v9(); // _ZN8S19362C22v9Ev
  virtual void  v10(); // _ZN8S19362C23v10Ev
  ~S19362C2(); // tgen
  S19362C2(); // tgen
};
//SIG(-1 S19362C2) C1{ BC2{ v3 v4 v5 v6 Fp} v1 v2 Fp FL}


void  S19362C2 ::v9(){vfunc_called(this, "_ZN8S19362C22v9Ev");}
void  S19362C2 ::v10(){vfunc_called(this, "_ZN8S19362C23v10Ev");}
S19362C2 ::~S19362C2(){ note_dtor("S19362C2", this);} // tgen
S19362C2 ::S19362C2(){ note_ctor("S19362C2", this);} // tgen

static void Test_S19362C2()
{
  extern Class_Descriptor cd_S19362C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19362C2, buf);
    S19362C2 *dp, &lv = *(dp=new (buf) S19362C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19362C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19362C2)");
    check_base_class_offset(lv, (S19362C3*), 0, "S19362C2");
    check_field_offset(lv, s19362c2f0, ABISELECT(16,8), "S19362C2.s19362c2f0");
    check_field_offset(lv, s19362c2f1, ABISELECT(24,12), "S19362C2.s19362c2f1");
    test_class_info(&lv, &cd_S19362C2);
    dp->~S19362C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19362C2(Test_S19362C2, "S19362C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19362C2C1Ev();
extern void _ZN8S19362C2D1Ev();
Name_Map name_map_S19362C2[] = {
  NSPAIR(_ZN8S19362C2C1Ev),
  NSPAIR(_ZN8S19362C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19362C3;
extern VTBL_ENTRY _ZTI8S19362C3[];
extern  VTBL_ENTRY _ZTV8S19362C3[];
static Base_Class bases_S19362C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19362C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19362C2[];
extern void _ZN8S19362C32v5Ev();
extern void _ZN8S19362C32v6Ev();
extern void _ZN8S19362C32v7Ev();
extern void _ZN8S19362C32v8Ev();
extern void _ZN8S19362C22v9Ev();
extern void _ZN8S19362C23v10Ev();
static  VTBL_ENTRY vtc_S19362C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19362C2[0]),
  (VTBL_ENTRY)&_ZN8S19362C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19362C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19362C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S19362C2[];
extern  VTBL_ENTRY _ZTV8S19362C2[];
Class_Descriptor cd_S19362C2 = {  "S19362C2", // class name
  bases_S19362C2, 1,
  &(vtc_S19362C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19362C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19362C2),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  S19362C1  : virtual S19362C2 , S19362C3 {
  __tsi64 s19362c1f0;
  virtual void  v1(); // _ZN8S19362C12v1Ev
  virtual void  v2(); // _ZN8S19362C12v2Ev
  virtual void  v3(); // _ZN8S19362C12v3Ev
  virtual void  v4(); // _ZN8S19362C12v4Ev
  ~S19362C1(); // tgen
  S19362C1(); // tgen
};
//SIG(1 S19362C1) C1{ VBC2{ BC3{ v5 v6 v7 v8 Fp} v9 v10 Fp FL} BC3 v1 v2 v3 v4 FL}


void  S19362C1 ::v1(){vfunc_called(this, "_ZN8S19362C12v1Ev");}
void  S19362C1 ::v2(){vfunc_called(this, "_ZN8S19362C12v2Ev");}
void  S19362C1 ::v3(){vfunc_called(this, "_ZN8S19362C12v3Ev");}
void  S19362C1 ::v4(){vfunc_called(this, "_ZN8S19362C12v4Ev");}
S19362C1 ::~S19362C1(){ note_dtor("S19362C1", this);} // tgen
S19362C1 ::S19362C1(){ note_ctor("S19362C1", this);} // tgen

static void Test_S19362C1()
{
  extern Class_Descriptor cd_S19362C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19362C1, buf);
    S19362C1 *dp, &lv = *(dp=new (buf) S19362C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19362C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19362C1)");
    check_base_class_offset(lv, (S19362C3*)(S19362C2*), ABISELECT(24,16), "S19362C1");
    check_base_class_offset(lv, (S19362C2*), ABISELECT(24,16), "S19362C1");
    /*is_ambiguous_... S19362C1::S19362C3 */ AMB_check_base_class_offset(lv, (S19362C3*), 0, "S19362C1");
    check_field_offset(lv, s19362c1f0, ABISELECT(16,8), "S19362C1.s19362c1f0");
    test_class_info(&lv, &cd_S19362C1);
    dp->~S19362C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19362C1(Test_S19362C1, "S19362C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S19362C1C1Ev();
extern void _ZN8S19362C1D1Ev();
Name_Map name_map_S19362C1[] = {
  NSPAIR(_ZN8S19362C1C1Ev),
  NSPAIR(_ZN8S19362C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19362C3;
extern VTBL_ENTRY _ZTI8S19362C3[];
extern  VTBL_ENTRY _ZTV8S19362C3[];
extern Class_Descriptor cd_S19362C2;
extern VTBL_ENTRY _ZTI8S19362C2[];
extern  VTBL_ENTRY _ZTV8S19362C2[];
extern Class_Descriptor cd_S19362C3;
extern VTBL_ENTRY _ZTI8S19362C3[];
extern  VTBL_ENTRY _ZTV8S19362C3[];
static Base_Class bases_S19362C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19362C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19362C2,    ABISELECT(24,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19362C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S19362C1[];
extern void _ZN8S19362C32v5Ev();
extern void _ZN8S19362C32v6Ev();
extern void _ZN8S19362C32v7Ev();
extern void _ZN8S19362C32v8Ev();
extern void _ZN8S19362C12v1Ev();
extern void _ZN8S19362C12v2Ev();
extern void _ZN8S19362C12v3Ev();
extern void _ZN8S19362C12v4Ev();
extern void _ZN8S19362C32v5Ev();
extern void _ZN8S19362C32v6Ev();
extern void _ZN8S19362C32v7Ev();
extern void _ZN8S19362C32v8Ev();
extern void _ZN8S19362C22v9Ev();
extern void _ZN8S19362C23v10Ev();
static  VTBL_ENTRY vtc_S19362C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19362C1[0]),
  (VTBL_ENTRY)&_ZN8S19362C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19362C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19362C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19362C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19362C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19362C1[0]),
  (VTBL_ENTRY)&_ZN8S19362C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19362C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19362C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19362C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S19362C1[];
static  VTT_ENTRY vtt_S19362C1[] = {
  {&(_ZTV8S19362C1[3]),  3,25},
  {&(_ZTV8S19362C1[19]),  19,25},
};
extern VTBL_ENTRY _ZTI8S19362C1[];
extern  VTBL_ENTRY _ZTV8S19362C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19362C1[];
Class_Descriptor cd_S19362C1 = {  "S19362C1", // class name
  bases_S19362C1, 3,
  &(vtc_S19362C1[0]), // expected_vtbl_contents
  &(vtt_S19362C1[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S19362C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19362C1),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19362C1),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8962C2  {
  void *s8962c2f0;
  ::S15222C4 s8962c2f1;
  ::S15222C4 s8962c2f2;
  char s8962c2f3;
  virtual  ~S8962C2(); // _ZN7S8962C2D1Ev
  virtual void  v2(); // _ZN7S8962C22v2Ev
  virtual void  v3(); // _ZN7S8962C22v3Ev
  virtual void  v4(); // _ZN7S8962C22v4Ev
  virtual void  v5(); // _ZN7S8962C22v5Ev
  virtual void  v6(); // _ZN7S8962C22v6Ev
  virtual void  v7(); // _ZN7S8962C22v7Ev
  S8962C2(); // tgen
};
//SIG(-1 S8962C2) C1{ vd v1 v2 v3 v4 v5 v6 Fp FU2{ Fp FL Fc} FU2 Fc}


 S8962C2 ::~S8962C2(){ note_dtor("S8962C2", this);}
void  S8962C2 ::v2(){vfunc_called(this, "_ZN7S8962C22v2Ev");}
void  S8962C2 ::v3(){vfunc_called(this, "_ZN7S8962C22v3Ev");}
void  S8962C2 ::v4(){vfunc_called(this, "_ZN7S8962C22v4Ev");}
void  S8962C2 ::v5(){vfunc_called(this, "_ZN7S8962C22v5Ev");}
void  S8962C2 ::v6(){vfunc_called(this, "_ZN7S8962C22v6Ev");}
void  S8962C2 ::v7(){vfunc_called(this, "_ZN7S8962C22v7Ev");}
S8962C2 ::S8962C2(){ note_ctor("S8962C2", this);} // tgen

static void Test_S8962C2()
{
  extern Class_Descriptor cd_S8962C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S8962C2, buf);
    S8962C2 *dp, &lv = *(dp=new (buf) S8962C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S8962C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8962C2)");
    check_field_offset(lv, s8962c2f0, ABISELECT(8,4), "S8962C2.s8962c2f0");
    check_field_offset(lv, s8962c2f1, ABISELECT(16,8), "S8962C2.s8962c2f1");
    check_field_offset(lv, s8962c2f2, ABISELECT(24,16), "S8962C2.s8962c2f2");
    check_field_offset(lv, s8962c2f3, ABISELECT(32,24), "S8962C2.s8962c2f3");
    test_class_info(&lv, &cd_S8962C2);
    dp->~S8962C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8962C2(Test_S8962C2, "S8962C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S8962C2C1Ev();
extern void _ZN7S8962C2D1Ev();
Name_Map name_map_S8962C2[] = {
  NSPAIR(_ZN7S8962C2C1Ev),
  NSPAIR(_ZN7S8962C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8962C2[];
extern void _ZN7S8962C2D1Ev();
extern void _ZN7S8962C2D0Ev();
extern void _ZN7S8962C22v2Ev();
extern void _ZN7S8962C22v3Ev();
extern void _ZN7S8962C22v4Ev();
extern void _ZN7S8962C22v5Ev();
extern void _ZN7S8962C22v6Ev();
extern void _ZN7S8962C22v7Ev();
static  VTBL_ENTRY vtc_S8962C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8962C2[0]),
  (VTBL_ENTRY)&_ZN7S8962C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8962C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S8962C2[];
extern  VTBL_ENTRY _ZTV7S8962C2[];
Class_Descriptor cd_S8962C2 = {  "S8962C2", // class name
  0,0,//no base classes
  &(vtc_S8962C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S8962C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8962C2),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  S8962C1  : S8962C2 {
  virtual  ~S8962C1(); // _ZN7S8962C1D1Ev
  virtual void  v1(); // _ZN7S8962C12v1Ev
  S8962C1(); // tgen
};
//SIG(1 S8962C1) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 Fp FU3{ Fp FL Fc} FU3 Fc} vd v1}


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

static void Test_S8962C1()
{
  extern Class_Descriptor cd_S8962C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S8962C1, buf);
    S8962C1 *dp, &lv = *(dp=new (buf) S8962C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S8962C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8962C1)");
    check_base_class_offset(lv, (S8962C2*), 0, "S8962C1");
    test_class_info(&lv, &cd_S8962C1);
    dp->~S8962C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8962C1(Test_S8962C1, "S8962C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S8962C1C1Ev();
extern void _ZN7S8962C1D1Ev();
Name_Map name_map_S8962C1[] = {
  NSPAIR(_ZN7S8962C1C1Ev),
  NSPAIR(_ZN7S8962C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8962C2;
extern VTBL_ENTRY _ZTI7S8962C2[];
extern  VTBL_ENTRY _ZTV7S8962C2[];
static Base_Class bases_S8962C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8962C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8962C1[];
extern void _ZN7S8962C1D1Ev();
extern void _ZN7S8962C1D0Ev();
extern void _ZN7S8962C22v2Ev();
extern void _ZN7S8962C22v3Ev();
extern void _ZN7S8962C22v4Ev();
extern void _ZN7S8962C22v5Ev();
extern void _ZN7S8962C22v6Ev();
extern void _ZN7S8962C22v7Ev();
extern void _ZN7S8962C12v1Ev();
static  VTBL_ENTRY vtc_S8962C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8962C1[0]),
  (VTBL_ENTRY)&_ZN7S8962C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8962C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8962C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8962C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8962C1[];
extern  VTBL_ENTRY _ZTV7S8962C1[];
Class_Descriptor cd_S8962C1 = {  "S8962C1", // class name
  bases_S8962C1, 1,
  &(vtc_S8962C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S8962C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8962C1),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  S6387C2  {
  char s6387c2f0;
  void *s6387c2f1[3];
  unsigned char s6387c2f2:1;
  short s6387c2f3:6;
  virtual void  v1(); // _ZN7S6387C22v1Ev
  virtual void  v2(); // _ZN7S6387C22v2Ev
  ~S6387C2(); // tgen
  S6387C2(); // tgen
};
//SIG(-1 S6387C2) C1{ v1 v2 Fc Fp[3] Fc:1 Fs:6}


void  S6387C2 ::v1(){vfunc_called(this, "_ZN7S6387C22v1Ev");}
void  S6387C2 ::v2(){vfunc_called(this, "_ZN7S6387C22v2Ev");}
S6387C2 ::~S6387C2(){ note_dtor("S6387C2", this);} // tgen
S6387C2 ::S6387C2(){ note_ctor("S6387C2", this);} // tgen

static void Test_S6387C2()
{
  extern Class_Descriptor cd_S6387C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S6387C2, buf);
    S6387C2 *dp, &lv = *(dp=new (buf) S6387C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6387C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6387C2)");
    check_field_offset(lv, s6387c2f0, ABISELECT(8,4), "S6387C2.s6387c2f0");
    check_field_offset(lv, s6387c2f1, ABISELECT(16,8), "S6387C2.s6387c2f1");
    set_bf_and_test(lv, s6387c2f2, ABISELECT(40,20), 0, 1, 1, "S6387C2");
    set_bf_and_test(lv, s6387c2f3, ABISELECT(40,20), 1, 6, 1, "S6387C2");
    set_bf_and_test(lv, s6387c2f3, ABISELECT(40,20), 1, 6, hide_sll(1LL<<5), "S6387C2");
    test_class_info(&lv, &cd_S6387C2);
    dp->~S6387C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6387C2(Test_S6387C2, "S6387C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6387C2C1Ev();
extern void _ZN7S6387C2D1Ev();
Name_Map name_map_S6387C2[] = {
  NSPAIR(_ZN7S6387C2C1Ev),
  NSPAIR(_ZN7S6387C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6387C2[];
extern void _ZN7S6387C22v1Ev();
extern void _ZN7S6387C22v2Ev();
static  VTBL_ENTRY vtc_S6387C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6387C2[0]),
  (VTBL_ENTRY)&_ZN7S6387C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6387C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6387C2[];
extern  VTBL_ENTRY _ZTV7S6387C2[];
Class_Descriptor cd_S6387C2 = {  "S6387C2", // class name
  0,0,//no base classes
  &(vtc_S6387C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6387C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6387C2),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  S6387C1  : S6387C2 {
  int s6387c1f0[3];
  __tsi64 s6387c1f1;
  char s6387c1f2;
  long double s6387c1f3;
  ::S6387C2 s6387c1f4;
  void *s6387c1f5;
  __tsi64 s6387c1f6;
  ~S6387C1(); // tgen
  S6387C1(); // tgen
};
//SIG(1 S6387C1) C1{ BC2{ v1 v2 Fc Fp[3] Fc:1 Fs:6} Fi[3] FL Fc FD FC2 Fp FL}


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

static void Test_S6387C1()
{
  extern Class_Descriptor cd_S6387C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,25)];
    init_test(&cd_S6387C1, buf);
    S6387C1 *dp, &lv = *(dp=new (buf) S6387C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,96), "sizeof(S6387C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6387C1)");
    check_base_class_offset(lv, (S6387C2*), 0, "S6387C1");
    check_field_offset(lv, s6387c1f0, ABISELECT(44,24), "S6387C1.s6387c1f0");
    check_field_offset(lv, s6387c1f1, ABISELECT(56,36), "S6387C1.s6387c1f1");
    check_field_offset(lv, s6387c1f2, ABISELECT(64,44), "S6387C1.s6387c1f2");
    check_field_offset(lv, s6387c1f3, ABISELECT(80,48), "S6387C1.s6387c1f3");
    check_field_offset(lv, s6387c1f4, ABISELECT(96,60), "S6387C1.s6387c1f4");
    check_field_offset(lv, s6387c1f5, ABISELECT(144,84), "S6387C1.s6387c1f5");
    check_field_offset(lv, s6387c1f6, ABISELECT(152,88), "S6387C1.s6387c1f6");
    test_class_info(&lv, &cd_S6387C1);
    dp->~S6387C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6387C1(Test_S6387C1, "S6387C1", ABISELECT(160,96));

#else // __cplusplus

extern void _ZN7S6387C1C1Ev();
extern void _ZN7S6387C1D1Ev();
Name_Map name_map_S6387C1[] = {
  NSPAIR(_ZN7S6387C1C1Ev),
  NSPAIR(_ZN7S6387C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6387C2;
extern VTBL_ENTRY _ZTI7S6387C2[];
extern  VTBL_ENTRY _ZTV7S6387C2[];
static Base_Class bases_S6387C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6387C2,    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 _ZTI7S6387C1[];
extern void _ZN7S6387C22v1Ev();
extern void _ZN7S6387C22v2Ev();
static  VTBL_ENTRY vtc_S6387C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6387C1[0]),
  (VTBL_ENTRY)&_ZN7S6387C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6387C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6387C1[];
extern  VTBL_ENTRY _ZTV7S6387C1[];
Class_Descriptor cd_S6387C1 = {  "S6387C1", // class name
  bases_S6387C1, 1,
  &(vtc_S6387C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,96), // object size
  NSPAIRA(_ZTI7S6387C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6387C1),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  S3380C3  {
  short s3380c3f0[6];
  virtual void  v7(); // _ZN7S3380C32v7Ev
  virtual void  v8(); // _ZN7S3380C32v8Ev
  ~S3380C3(); // tgen
  S3380C3(); // tgen
};
//SIG(-1 S3380C3) C1{ v1 v2 Fs[6]}


void  S3380C3 ::v7(){vfunc_called(this, "_ZN7S3380C32v7Ev");}
void  S3380C3 ::v8(){vfunc_called(this, "_ZN7S3380C32v8Ev");}
S3380C3 ::~S3380C3(){ note_dtor("S3380C3", this);} // tgen
S3380C3 ::S3380C3(){ note_ctor("S3380C3", this);} // tgen

static void Test_S3380C3()
{
  extern Class_Descriptor cd_S3380C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3380C3, buf);
    S3380C3 *dp, &lv = *(dp=new (buf) S3380C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3380C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3380C3)");
    check_field_offset(lv, s3380c3f0, ABISELECT(8,4), "S3380C3.s3380c3f0");
    test_class_info(&lv, &cd_S3380C3);
    dp->~S3380C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3380C3(Test_S3380C3, "S3380C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3380C3C1Ev();
extern void _ZN7S3380C3D1Ev();
Name_Map name_map_S3380C3[] = {
  NSPAIR(_ZN7S3380C3C1Ev),
  NSPAIR(_ZN7S3380C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3380C3[];
extern void _ZN7S3380C32v7Ev();
extern void _ZN7S3380C32v8Ev();
static  VTBL_ENTRY vtc_S3380C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3380C3[0]),
  (VTBL_ENTRY)&_ZN7S3380C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3380C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S3380C3[];
extern  VTBL_ENTRY _ZTV7S3380C3[];
Class_Descriptor cd_S3380C3 = {  "S3380C3", // class name
  0,0,//no base classes
  &(vtc_S3380C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3380C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3380C3),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  S3380C2  : S3380C3 {
  void *s3380c2f0;
  virtual void  v9(); // _ZN7S3380C22v9Ev
  virtual void  v10(); // _ZN7S3380C23v10Ev
  ~S3380C2(); // tgen
  S3380C2(); // tgen
};
//SIG(-1 S3380C2) C1{ BC2{ v3 v4 Fs[6]} v1 v2 Fp}


void  S3380C2 ::v9(){vfunc_called(this, "_ZN7S3380C22v9Ev");}
void  S3380C2 ::v10(){vfunc_called(this, "_ZN7S3380C23v10Ev");}
S3380C2 ::~S3380C2(){ note_dtor("S3380C2", this);} // tgen
S3380C2 ::S3380C2(){ note_ctor("S3380C2", this);} // tgen

static void Test_S3380C2()
{
  extern Class_Descriptor cd_S3380C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3380C2, buf);
    S3380C2 *dp, &lv = *(dp=new (buf) S3380C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3380C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3380C2)");
    check_base_class_offset(lv, (S3380C3*), 0, "S3380C2");
    check_field_offset(lv, s3380c2f0, ABISELECT(24,16), "S3380C2.s3380c2f0");
    test_class_info(&lv, &cd_S3380C2);
    dp->~S3380C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3380C2(Test_S3380C2, "S3380C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3380C2C1Ev();
extern void _ZN7S3380C2D1Ev();
Name_Map name_map_S3380C2[] = {
  NSPAIR(_ZN7S3380C2C1Ev),
  NSPAIR(_ZN7S3380C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3380C3;
extern VTBL_ENTRY _ZTI7S3380C3[];
extern  VTBL_ENTRY _ZTV7S3380C3[];
static Base_Class bases_S3380C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3380C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3380C2[];
extern void _ZN7S3380C32v7Ev();
extern void _ZN7S3380C32v8Ev();
extern void _ZN7S3380C22v9Ev();
extern void _ZN7S3380C23v10Ev();
static  VTBL_ENTRY vtc_S3380C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3380C2[0]),
  (VTBL_ENTRY)&_ZN7S3380C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3380C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3380C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3380C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S3380C2[];
extern  VTBL_ENTRY _ZTV7S3380C2[];
Class_Descriptor cd_S3380C2 = {  "S3380C2", // class name
  bases_S3380C2, 1,
  &(vtc_S3380C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3380C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3380C2),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  S3380C1  : S3380C2 , virtual S3380C3 {
  virtual void  v1(); // _ZN7S3380C12v1Ev
  virtual void  v2(); // _ZN7S3380C12v2Ev
  virtual void  v3(); // _ZN7S3380C12v3Ev
  virtual void  v4(); // _ZN7S3380C12v4Ev
  virtual void  v5(); // _ZN7S3380C12v5Ev
  virtual void  v6(); // _ZN7S3380C12v6Ev
  ~S3380C1(); // tgen
  S3380C1(); // tgen
};
//SIG(1 S3380C1) C1{ BC2{ BC3{ v7 v8 Fs[6]} v9 v10 Fp} VBC3 v1 v2 v3 v4 v5 v6}


void  S3380C1 ::v1(){vfunc_called(this, "_ZN7S3380C12v1Ev");}
void  S3380C1 ::v2(){vfunc_called(this, "_ZN7S3380C12v2Ev");}
void  S3380C1 ::v3(){vfunc_called(this, "_ZN7S3380C12v3Ev");}
void  S3380C1 ::v4(){vfunc_called(this, "_ZN7S3380C12v4Ev");}
void  S3380C1 ::v5(){vfunc_called(this, "_ZN7S3380C12v5Ev");}
void  S3380C1 ::v6(){vfunc_called(this, "_ZN7S3380C12v6Ev");}
S3380C1 ::~S3380C1(){ note_dtor("S3380C1", this);} // tgen
S3380C1 ::S3380C1(){ note_ctor("S3380C1", this);} // tgen

static void Test_S3380C1()
{
  extern Class_Descriptor cd_S3380C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3380C1, buf);
    S3380C1 *dp, &lv = *(dp=new (buf) S3380C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3380C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3380C1)");
    check_base_class_offset(lv, (S3380C3*)(S3380C2*), 0, "S3380C1");
    check_base_class_offset(lv, (S3380C2*), 0, "S3380C1");
    /*is_ambiguous_... S3380C1::S3380C3 */ AMB_check_base_class_offset(lv, (S3380C3*), ABISELECT(32,20), "S3380C1");
    test_class_info(&lv, &cd_S3380C1);
    dp->~S3380C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3380C1(Test_S3380C1, "S3380C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3380C1C1Ev();
extern void _ZN7S3380C1D1Ev();
Name_Map name_map_S3380C1[] = {
  NSPAIR(_ZN7S3380C1C1Ev),
  NSPAIR(_ZN7S3380C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3380C3;
extern VTBL_ENTRY _ZTI7S3380C3[];
extern  VTBL_ENTRY _ZTV7S3380C3[];
extern Class_Descriptor cd_S3380C2;
extern VTBL_ENTRY _ZTI7S3380C2[];
extern  VTBL_ENTRY _ZTV7S3380C2[];
extern Class_Descriptor cd_S3380C3;
extern VTBL_ENTRY _ZTI7S3380C3[];
extern  VTBL_ENTRY _ZTV7S3380C3[];
static Base_Class bases_S3380C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3380C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3380C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3380C3,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3380C1[];
extern void _ZN7S3380C32v7Ev();
extern void _ZN7S3380C32v8Ev();
extern void _ZN7S3380C22v9Ev();
extern void _ZN7S3380C23v10Ev();
extern void _ZN7S3380C12v1Ev();
extern void _ZN7S3380C12v2Ev();
extern void _ZN7S3380C12v3Ev();
extern void _ZN7S3380C12v4Ev();
extern void _ZN7S3380C12v5Ev();
extern void _ZN7S3380C12v6Ev();
extern void _ZN7S3380C32v7Ev();
extern void _ZN7S3380C32v8Ev();
static  VTBL_ENTRY vtc_S3380C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3380C1[0]),
  (VTBL_ENTRY)&_ZN7S3380C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3380C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3380C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3380C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3380C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3380C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3380C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3380C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3380C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3380C12v6Ev,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3380C1[0]),
  (VTBL_ENTRY)&_ZN7S3380C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3380C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S3380C1[];
static  VTT_ENTRY vtt_S3380C1[] = {
  {&(_ZTV7S3380C1[3]),  3,19},
  {&(_ZTV7S3380C1[17]),  17,19},
};
extern VTBL_ENTRY _ZTI7S3380C1[];
extern  VTBL_ENTRY _ZTV7S3380C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3380C1[];
Class_Descriptor cd_S3380C1 = {  "S3380C1", // class name
  bases_S3380C1, 3,
  &(vtc_S3380C1[0]), // expected_vtbl_contents
  &(vtt_S3380C1[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3380C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3380C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3380C1),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19180C4  : virtual S19169C6_nt {
  __tsi64 s19180c4f0;
  ~S19180C4(); // tgen
  S19180C4(); // tgen
};
//SIG(-1 S19180C4) C1{ VBC2{ m Fp[6]} FL}


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

static void Test_S19180C4()
{
  extern Class_Descriptor cd_S19180C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19180C4, buf);
    S19180C4 *dp, &lv = *(dp=new (buf) S19180C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19180C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19180C4)");
    check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(16,12), "S19180C4");
    check_field_offset(lv, s19180c4f0, ABISELECT(8,4), "S19180C4.s19180c4f0");
    test_class_info(&lv, &cd_S19180C4);
    dp->~S19180C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19180C4(Test_S19180C4, "S19180C4", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19180C4C1Ev();
extern void _ZN8S19180C4D1Ev();
Name_Map name_map_S19180C4[] = {
  NSPAIR(_ZN8S19180C4C1Ev),
  NSPAIR(_ZN8S19180C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S19180C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19180C4[];
static  VTBL_ENTRY vtc_S19180C4[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19180C4[0]),
};
extern VTBL_ENTRY _ZTV8S19180C4[];
static  VTT_ENTRY vtt_S19180C4[] = {
  {&(_ZTV8S19180C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19180C4[];
extern  VTBL_ENTRY _ZTV8S19180C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19180C4[];
Class_Descriptor cd_S19180C4 = {  "S19180C4", // class name
  bases_S19180C4, 1,
  &(vtc_S19180C4[0]), // expected_vtbl_contents
  &(vtt_S19180C4[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19180C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19180C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19180C4),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  S19180C5  : virtual S19169C6_nt {
  ~S19180C5(); // tgen
  S19180C5(); // tgen
};
//SIG(-1 S19180C5) C1{ VBC2{ m Fp[6]}}


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

static void Test_S19180C5()
{
  extern Class_Descriptor cd_S19180C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19180C5, buf);
    S19180C5 *dp, &lv = *(dp=new (buf) S19180C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19180C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19180C5)");
    check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(8,4), "S19180C5");
    test_class_info(&lv, &cd_S19180C5);
    dp->~S19180C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19180C5(Test_S19180C5, "S19180C5", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19180C5C1Ev();
extern void _ZN8S19180C5D1Ev();
Name_Map name_map_S19180C5[] = {
  NSPAIR(_ZN8S19180C5C1Ev),
  NSPAIR(_ZN8S19180C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
static Base_Class bases_S19180C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_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 _ZTI8S19180C5[];
static  VTBL_ENTRY vtc_S19180C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19180C5[0]),
};
extern VTBL_ENTRY _ZTV8S19180C5[];
static  VTT_ENTRY vtt_S19180C5[] = {
  {&(_ZTV8S19180C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19180C5[];
extern  VTBL_ENTRY _ZTV8S19180C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19180C5[];
Class_Descriptor cd_S19180C5 = {  "S19180C5", // class name
  bases_S19180C5, 1,
  &(vtc_S19180C5[0]), // expected_vtbl_contents
  &(vtt_S19180C5[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19180C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19180C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19180C5),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  S19180C2  : S19169C6_nt , S19180C4 , virtual S19180C5 {
  ~S19180C2(); // tgen
  S19180C2(); // tgen
};
//SIG(-1 S19180C2) C1{ BC2{ m Fp[6]} BC3{ VBC2 FL} VBC4{ VBC2}}


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

static void Test_S19180C2()
{
  extern Class_Descriptor cd_S19180C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S19180C2, buf);
    S19180C2 *dp, &lv = *(dp=new (buf) S19180C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S19180C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19180C2)");
    /*is_ambiguous_... S19180C2::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*), ABISELECT(16,12), "S19180C2");
    check_base_class_offset(lv, (S19169C6_nt*)(S19180C4*), ABISELECT(64,36), "S19180C2");
    check_base_class_offset(lv, (S19169C6_nt*)(S19180C5*), ABISELECT(64,36), "S19180C2");
    check_base_class_offset(lv, (S19180C4*), 0, "S19180C2");
    check_base_class_offset(lv, (S19180C5*), ABISELECT(112,60), "S19180C2");
    test_class_info(&lv, &cd_S19180C2);
    dp->~S19180C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19180C2(Test_S19180C2, "S19180C2", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN8S19180C2C1Ev();
extern void _ZN8S19180C2D1Ev();
Name_Map name_map_S19180C2[] = {
  NSPAIR(_ZN8S19180C2C1Ev),
  NSPAIR(_ZN8S19180C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19180C4;
extern VTBL_ENTRY _ZTI8S19180C4[];
extern  VTBL_ENTRY _ZTV8S19180C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19180C4[];
extern Class_Descriptor cd_S19180C5;
extern VTBL_ENTRY _ZTI8S19180C5[];
extern  VTBL_ENTRY _ZTV8S19180C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19180C5[];
static Base_Class bases_S19180C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19169C6_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19180C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19180C5,    ABISELECT(112,60), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19180C2[];
static  VTBL_ENTRY vtc_S19180C2[] = {
  ABISELECT(112,60),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19180C2[0]),
  ABISELECT(-48,-24),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19180C2[0]),
};
extern VTBL_ENTRY _ZTV8S19180C2[];
static  VTBL_ENTRY _tg__ZTV8S19180C4__8S19180C2[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19180C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19180C5__8S19180C2[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19180C5[0]),
};
static  VTT_ENTRY vtt_S19180C2[] = {
  {&(_ZTV8S19180C2[4]),  4,7},
  {&(_tg__ZTV8S19180C4__8S19180C2[3]),  3,3},
  {&(_ZTV8S19180C2[7]),  7,7},
  {&(_tg__ZTV8S19180C5__8S19180C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19180C2[];
extern  VTBL_ENTRY _ZTV8S19180C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19180C2[];
Class_Descriptor cd_S19180C2 = {  "S19180C2", // class name
  bases_S19180C2, 4,
  &(vtc_S19180C2[0]), // expected_vtbl_contents
  &(vtt_S19180C2[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI8S19180C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19180C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19180C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19180C1  : virtual S19180C2 , virtual S19169C16_nt {
  ~S19180C1(); // tgen
  S19180C1(); // tgen
};
//SIG(1 S19180C1) C1{ VBC2{ BC3{ m Fp[6]} BC4{ VBC3 FL} VBC5{ VBC3}} VBC6{ m FC7{ VBC3 FL}}}


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

static void Test_S19180C1()
{
  extern Class_Descriptor cd_S19180C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S19180C1, buf);
    S19180C1 *dp, &lv = *(dp=new (buf) S19180C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S19180C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19180C1)");
    /*is_ambiguous_... S19180C2::S19169C6_nt */ AMB_check_base_class_offset(lv, (S19169C6_nt*)(S19180C2*), ABISELECT(24,16), "S19180C1");
    check_base_class_offset(lv, (S19169C6_nt*)(S19180C4*)(S19180C2*), ABISELECT(72,40), "S19180C1");
    check_base_class_offset(lv, (S19169C6_nt*)(S19180C5*), ABISELECT(72,40), "S19180C1");
    check_base_class_offset(lv, (S19180C4*)(S19180C2*), ABISELECT(8,4), "S19180C1");
    check_base_class_offset(lv, (S19180C5*)(S19180C2*), 0, "S19180C1");
    check_base_class_offset(lv, (S19180C2*), ABISELECT(8,4), "S19180C1");
    check_base_class_offset(lv, (S19169C16_nt*), ABISELECT(120,64), "S19180C1");
    test_class_info(&lv, &cd_S19180C1);
    dp->~S19180C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19180C1(Test_S19180C1, "S19180C1", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN8S19180C1C1Ev();
extern void _ZN8S19180C1D1Ev();
Name_Map name_map_S19180C1[] = {
  NSPAIR(_ZN8S19180C1C1Ev),
  NSPAIR(_ZN8S19180C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19169C6_nt;
extern VTBL_ENTRY _ZTI11S19169C6_nt[];
extern Class_Descriptor cd_S19180C4;
extern VTBL_ENTRY _ZTI8S19180C4[];
extern  VTBL_ENTRY _ZTV8S19180C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19180C4[];
extern Class_Descriptor cd_S19180C5;
extern VTBL_ENTRY _ZTI8S19180C5[];
extern  VTBL_ENTRY _ZTV8S19180C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19180C5[];
extern Class_Descriptor cd_S19180C2;
extern VTBL_ENTRY _ZTI8S19180C2[];
extern  VTBL_ENTRY _ZTV8S19180C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19180C2[];
extern Class_Descriptor cd_S19169C16_nt;
extern VTBL_ENTRY _ZTI12S19169C16_nt[];
static Base_Class bases_S19180C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C6_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19169C6_nt,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19180C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19180C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19180C2,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19169C16_nt,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19180C1[];
static  VTBL_ENTRY vtc_S19180C1[] = {
  ABISELECT(120,64),
  0,
  ABISELECT(8,4),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19180C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(64,36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19180C1[0]),
};
extern VTBL_ENTRY _ZTV8S19180C1[];
static  VTBL_ENTRY _tg__ZTV8S19180C2__8S19180C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19180C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19180C48S19180C2__8S19180C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19180C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19180C5__8S19180C2__8S19180C1[] = {
  ABISELECT(72,40),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19180C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19180C5__8S19180C1[] = {
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19180C5[0]),
};
static  VTT_ENTRY vtt_S19180C1[] = {
  {&(_ZTV8S19180C1[6]),  6,10},
  {&(_ZTV8S19180C1[10]),  10,10},
  {&(_ZTV8S19180C1[6]),  6,10},
  {&(_tg__ZTV8S19180C2__8S19180C1[4]),  4,4},
  {&(_tg__ZTV8S19180C48S19180C2__8S19180C1[3]),  3,3},
  {&(_tg__ZTV8S19180C5__8S19180C2__8S19180C1[3]),  3,3},
  {&(_tg__ZTV8S19180C5__8S19180C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19180C1[];
extern  VTBL_ENTRY _ZTV8S19180C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19180C1[];
Class_Descriptor cd_S19180C1 = {  "S19180C1", // class name
  bases_S19180C1, 6,
  &(vtc_S19180C1[0]), // expected_vtbl_contents
  &(vtt_S19180C1[0]), // expected_vtt_contents
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI8S19180C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19180C1),10, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19180C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19310C3  {
  virtual void  v2(); // _ZN8S19310C32v2Ev
  virtual void  v3(); // _ZN8S19310C32v3Ev
  virtual void  v4(); // _ZN8S19310C32v4Ev
  ~S19310C3(); // tgen
  S19310C3(); // tgen
};
//SIG(-1 S19310C3) C1{ v1 v2 v3}


void  S19310C3 ::v2(){vfunc_called(this, "_ZN8S19310C32v2Ev");}
void  S19310C3 ::v3(){vfunc_called(this, "_ZN8S19310C32v3Ev");}
void  S19310C3 ::v4(){vfunc_called(this, "_ZN8S19310C32v4Ev");}
S19310C3 ::~S19310C3(){ note_dtor("S19310C3", this);} // tgen
S19310C3 ::S19310C3(){ note_ctor("S19310C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19310C3C1Ev();
extern void _ZN8S19310C3D1Ev();
Name_Map name_map_S19310C3[] = {
  NSPAIR(_ZN8S19310C3C1Ev),
  NSPAIR(_ZN8S19310C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19310C3[];
extern void _ZN8S19310C32v2Ev();
extern void _ZN8S19310C32v3Ev();
extern void _ZN8S19310C32v4Ev();
static  VTBL_ENTRY vtc_S19310C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19310C3[0]),
  (VTBL_ENTRY)&_ZN8S19310C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19310C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19310C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S19310C3[];
extern  VTBL_ENTRY _ZTV8S19310C3[];
Class_Descriptor cd_S19310C3 = {  "S19310C3", // class name
  0,0,//no base classes
  &(vtc_S19310C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19310C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19310C3),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  S19310C2  : S19310C3 {
  ::S19310C3 s19310c2f0;
  virtual void  v5(); // _ZN8S19310C22v5Ev
  virtual void  v6(); // _ZN8S19310C22v6Ev
  virtual void  v7(); // _ZN8S19310C22v7Ev
  ~S19310C2(); // tgen
  S19310C2(); // tgen
};
//SIG(-1 S19310C2) C1{ BC2{ v4 v5 v6} v1 v2 v3 FC2}


void  S19310C2 ::v5(){vfunc_called(this, "_ZN8S19310C22v5Ev");}
void  S19310C2 ::v6(){vfunc_called(this, "_ZN8S19310C22v6Ev");}
void  S19310C2 ::v7(){vfunc_called(this, "_ZN8S19310C22v7Ev");}
S19310C2 ::~S19310C2(){ note_dtor("S19310C2", this);} // tgen
S19310C2 ::S19310C2(){ note_ctor("S19310C2", this);} // tgen

static void Test_S19310C2()
{
  extern Class_Descriptor cd_S19310C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19310C2, buf);
    S19310C2 *dp, &lv = *(dp=new (buf) S19310C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19310C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19310C2)");
    check_base_class_offset(lv, (S19310C3*), 0, "S19310C2");
    check_field_offset(lv, s19310c2f0, ABISELECT(8,4), "S19310C2.s19310c2f0");
    test_class_info(&lv, &cd_S19310C2);
    dp->~S19310C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19310C2(Test_S19310C2, "S19310C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19310C2C1Ev();
extern void _ZN8S19310C2D1Ev();
Name_Map name_map_S19310C2[] = {
  NSPAIR(_ZN8S19310C2C1Ev),
  NSPAIR(_ZN8S19310C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19310C3;
extern VTBL_ENTRY _ZTI8S19310C3[];
extern  VTBL_ENTRY _ZTV8S19310C3[];
static Base_Class bases_S19310C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19310C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19310C2[];
extern void _ZN8S19310C32v2Ev();
extern void _ZN8S19310C32v3Ev();
extern void _ZN8S19310C32v4Ev();
extern void _ZN8S19310C22v5Ev();
extern void _ZN8S19310C22v6Ev();
extern void _ZN8S19310C22v7Ev();
static  VTBL_ENTRY vtc_S19310C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19310C2[0]),
  (VTBL_ENTRY)&_ZN8S19310C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19310C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19310C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19310C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19310C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19310C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S19310C2[];
extern  VTBL_ENTRY _ZTV8S19310C2[];
Class_Descriptor cd_S19310C2 = {  "S19310C2", // class name
  bases_S19310C2, 1,
  &(vtc_S19310C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19310C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19310C2),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  S19310C4  {
  virtual void  v8(); // _ZN8S19310C42v8Ev
  virtual void  v9(); // _ZN8S19310C42v9Ev
  ~S19310C4(); // tgen
  S19310C4(); // tgen
};
//SIG(-1 S19310C4) C1{ v1 v2}


void  S19310C4 ::v8(){vfunc_called(this, "_ZN8S19310C42v8Ev");}
void  S19310C4 ::v9(){vfunc_called(this, "_ZN8S19310C42v9Ev");}
S19310C4 ::~S19310C4(){ note_dtor("S19310C4", this);} // tgen
S19310C4 ::S19310C4(){ note_ctor("S19310C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19310C4C1Ev();
extern void _ZN8S19310C4D1Ev();
Name_Map name_map_S19310C4[] = {
  NSPAIR(_ZN8S19310C4C1Ev),
  NSPAIR(_ZN8S19310C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19310C4[];
extern void _ZN8S19310C42v8Ev();
extern void _ZN8S19310C42v9Ev();
static  VTBL_ENTRY vtc_S19310C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19310C4[0]),
  (VTBL_ENTRY)&_ZN8S19310C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19310C42v9Ev,
};
extern VTBL_ENTRY _ZTI8S19310C4[];
extern  VTBL_ENTRY _ZTV8S19310C4[];
Class_Descriptor cd_S19310C4 = {  "S19310C4", // class name
  0,0,//no base classes
  &(vtc_S19310C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19310C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19310C4),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  S19310C1  : virtual S19310C2 , virtual S19310C4 {
  virtual  ~S19310C1(); // _ZN8S19310C1D2Ev
  virtual void  v1(); // _ZN8S19310C12v1Ev
  S19310C1(); // tgen
};
//SIG(1 S19310C1) C1{ VBC2{ BC3{ v2 v3 v4} v5 v6 v7 FC3} VBC4{ v8 v9} vd v1}


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

static void Test_S19310C1()
{
  extern Class_Descriptor cd_S19310C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19310C1, buf);
    S19310C1 *dp, &lv = *(dp=new (buf) S19310C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19310C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19310C1)");
    check_base_class_offset(lv, (S19310C3*)(S19310C2*), ABISELECT(8,4), "S19310C1");
    check_base_class_offset(lv, (S19310C2*), ABISELECT(8,4), "S19310C1");
    check_base_class_offset(lv, (S19310C4*), 0, "S19310C1");
    test_class_info(&lv, &cd_S19310C1);
    dp->~S19310C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19310C1(Test_S19310C1, "S19310C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19310C1C1Ev();
extern void _ZN8S19310C1D2Ev();
Name_Map name_map_S19310C1[] = {
  NSPAIR(_ZN8S19310C1C1Ev),
  NSPAIR(_ZN8S19310C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19310C3;
extern VTBL_ENTRY _ZTI8S19310C3[];
extern  VTBL_ENTRY _ZTV8S19310C3[];
extern Class_Descriptor cd_S19310C2;
extern VTBL_ENTRY _ZTI8S19310C2[];
extern  VTBL_ENTRY _ZTV8S19310C2[];
extern Class_Descriptor cd_S19310C4;
extern VTBL_ENTRY _ZTI8S19310C4[];
extern  VTBL_ENTRY _ZTV8S19310C4[];
static Base_Class bases_S19310C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19310C3,    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_S19310C2,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19310C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19310C1[];
extern void _ZN8S19310C42v8Ev();
extern void _ZN8S19310C42v9Ev();
extern void _ZN8S19310C1D1Ev();
extern void _ZN8S19310C1D0Ev();
extern void _ZN8S19310C12v1Ev();
extern void _ZN8S19310C32v2Ev();
extern void _ZN8S19310C32v3Ev();
extern void _ZN8S19310C32v4Ev();
extern void _ZN8S19310C22v5Ev();
extern void _ZN8S19310C22v6Ev();
extern void _ZN8S19310C22v7Ev();
static  VTBL_ENTRY vtc_S19310C1[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19310C1[0]),
  (VTBL_ENTRY)&_ZN8S19310C42v8Ev,
  (VTBL_ENTRY)&_ZN8S19310C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19310C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19310C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19310C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19310C1[0]),
  (VTBL_ENTRY)&_ZN8S19310C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19310C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19310C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19310C22v5Ev,
  (VTBL_ENTRY)&_ZN8S19310C22v6Ev,
  (VTBL_ENTRY)&_ZN8S19310C22v7Ev,
};
extern VTBL_ENTRY _ZTV8S19310C1[];
static  VTT_ENTRY vtt_S19310C1[] = {
  {&(_ZTV8S19310C1[6]),  6,25},
  {&(_ZTV8S19310C1[19]),  19,25},
  {&(_ZTV8S19310C1[6]),  6,25},
};
extern VTBL_ENTRY _ZTI8S19310C1[];
extern  VTBL_ENTRY _ZTV8S19310C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19310C1[];
Class_Descriptor cd_S19310C1 = {  "S19310C1", // class name
  bases_S19310C1, 3,
  &(vtc_S19310C1[0]), // expected_vtbl_contents
  &(vtt_S19310C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19310C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19310C1),25, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19310C1),3, //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  S21449C1  {
  ::S2014C26 s21449c1f0;
  ::S4952C8_nt s21449c1f1;
  char s21449c1f2;
  int s21449c1f3;
  void  mf21449c1(); // _ZN8S21449C19mf21449c1Ev
  virtual  ~S21449C1(); // _ZN8S21449C1D1Ev
  S21449C1(); // tgen
};
//SIG(1 S21449C1) C1{ vd m FC2{ m Fp Fi FC3{ m} FC4{ m}} FC5{ m FL[4]} Fc Fi}


void  S21449C1 ::mf21449c1(){}
 S21449C1 ::~S21449C1(){ note_dtor("S21449C1", this);}
S21449C1 ::S21449C1(){ note_ctor("S21449C1", this);} // tgen

static void Test_S21449C1()
{
  extern Class_Descriptor cd_S21449C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,15)];
    init_test(&cd_S21449C1, buf);
    S21449C1 *dp, &lv = *(dp=new (buf) S21449C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S21449C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21449C1)");
    check_field_offset(lv, s21449c1f0, ABISELECT(8,4), "S21449C1.s21449c1f0");
    check_field_offset(lv, s21449c1f1, ABISELECT(24,16), "S21449C1.s21449c1f1");
    check_field_offset(lv, s21449c1f2, ABISELECT(56,48), "S21449C1.s21449c1f2");
    check_field_offset(lv, s21449c1f3, ABISELECT(60,52), "S21449C1.s21449c1f3");
    test_class_info(&lv, &cd_S21449C1);
    dp->~S21449C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21449C1(Test_S21449C1, "S21449C1", ABISELECT(64,56));

#else // __cplusplus

extern void _ZN8S21449C1C1Ev();
extern void _ZN8S21449C1D1Ev();
Name_Map name_map_S21449C1[] = {
  NSPAIR(_ZN8S21449C1C1Ev),
  NSPAIR(_ZN8S21449C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21449C1[];
extern void _ZN8S21449C1D1Ev();
extern void _ZN8S21449C1D0Ev();
static  VTBL_ENTRY vtc_S21449C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21449C1[0]),
  (VTBL_ENTRY)&_ZN8S21449C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21449C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21449C1[];
extern  VTBL_ENTRY _ZTV8S21449C1[];
Class_Descriptor cd_S21449C1 = {  "S21449C1", // class name
  0,0,//no base classes
  &(vtc_S21449C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,56), // object size
  NSPAIRA(_ZTI8S21449C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21449C1),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  S7135C2  {
  void *s7135c2f0;
  virtual void  v8(); // _ZN7S7135C22v8Ev
  virtual void  v9(); // _ZN7S7135C22v9Ev
  virtual void  v10(); // _ZN7S7135C23v10Ev
  virtual void  v11(); // _ZN7S7135C23v11Ev
  ~S7135C2(); // tgen
  S7135C2(); // tgen
};
//SIG(-1 S7135C2) C1{ v1 v2 v3 v4 Fp}


void  S7135C2 ::v8(){vfunc_called(this, "_ZN7S7135C22v8Ev");}
void  S7135C2 ::v9(){vfunc_called(this, "_ZN7S7135C22v9Ev");}
void  S7135C2 ::v10(){vfunc_called(this, "_ZN7S7135C23v10Ev");}
void  S7135C2 ::v11(){vfunc_called(this, "_ZN7S7135C23v11Ev");}
S7135C2 ::~S7135C2(){ note_dtor("S7135C2", this);} // tgen
S7135C2 ::S7135C2(){ note_ctor("S7135C2", this);} // tgen

static void Test_S7135C2()
{
  extern Class_Descriptor cd_S7135C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7135C2, buf);
    S7135C2 *dp, &lv = *(dp=new (buf) S7135C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7135C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7135C2)");
    check_field_offset(lv, s7135c2f0, ABISELECT(8,4), "S7135C2.s7135c2f0");
    test_class_info(&lv, &cd_S7135C2);
    dp->~S7135C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7135C2(Test_S7135C2, "S7135C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7135C2C1Ev();
extern void _ZN7S7135C2D1Ev();
Name_Map name_map_S7135C2[] = {
  NSPAIR(_ZN7S7135C2C1Ev),
  NSPAIR(_ZN7S7135C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7135C2[];
extern void _ZN7S7135C22v8Ev();
extern void _ZN7S7135C22v9Ev();
extern void _ZN7S7135C23v10Ev();
extern void _ZN7S7135C23v11Ev();
static  VTBL_ENTRY vtc_S7135C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7135C2[0]),
  (VTBL_ENTRY)&_ZN7S7135C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7135C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7135C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7135C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S7135C2[];
extern  VTBL_ENTRY _ZTV7S7135C2[];
Class_Descriptor cd_S7135C2 = {  "S7135C2", // class name
  0,0,//no base classes
  &(vtc_S7135C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7135C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7135C2),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  S7135C1  : S7135C2 {
  int s7135c1f0[2];
  virtual void  v1(); // _ZN7S7135C12v1Ev
  virtual void  v2(); // _ZN7S7135C12v2Ev
  virtual void  v3(); // _ZN7S7135C12v3Ev
  virtual void  v4(); // _ZN7S7135C12v4Ev
  virtual void  v5(); // _ZN7S7135C12v5Ev
  virtual void  v6(); // _ZN7S7135C12v6Ev
  virtual void  v7(); // _ZN7S7135C12v7Ev
  ~S7135C1(); // tgen
  S7135C1(); // tgen
};
//SIG(1 S7135C1) C1{ BC2{ v8 v9 v10 v11 Fp} v1 v2 v3 v4 v5 v6 v7 Fi[2]}


void  S7135C1 ::v1(){vfunc_called(this, "_ZN7S7135C12v1Ev");}
void  S7135C1 ::v2(){vfunc_called(this, "_ZN7S7135C12v2Ev");}
void  S7135C1 ::v3(){vfunc_called(this, "_ZN7S7135C12v3Ev");}
void  S7135C1 ::v4(){vfunc_called(this, "_ZN7S7135C12v4Ev");}
void  S7135C1 ::v5(){vfunc_called(this, "_ZN7S7135C12v5Ev");}
void  S7135C1 ::v6(){vfunc_called(this, "_ZN7S7135C12v6Ev");}
void  S7135C1 ::v7(){vfunc_called(this, "_ZN7S7135C12v7Ev");}
S7135C1 ::~S7135C1(){ note_dtor("S7135C1", this);} // tgen
S7135C1 ::S7135C1(){ note_ctor("S7135C1", this);} // tgen

static void Test_S7135C1()
{
  extern Class_Descriptor cd_S7135C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7135C1, buf);
    S7135C1 *dp, &lv = *(dp=new (buf) S7135C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7135C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7135C1)");
    check_base_class_offset(lv, (S7135C2*), 0, "S7135C1");
    check_field_offset(lv, s7135c1f0, ABISELECT(16,8), "S7135C1.s7135c1f0");
    test_class_info(&lv, &cd_S7135C1);
    dp->~S7135C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7135C1(Test_S7135C1, "S7135C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7135C1C1Ev();
extern void _ZN7S7135C1D1Ev();
Name_Map name_map_S7135C1[] = {
  NSPAIR(_ZN7S7135C1C1Ev),
  NSPAIR(_ZN7S7135C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7135C2;
extern VTBL_ENTRY _ZTI7S7135C2[];
extern  VTBL_ENTRY _ZTV7S7135C2[];
static Base_Class bases_S7135C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7135C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7135C1[];
extern void _ZN7S7135C22v8Ev();
extern void _ZN7S7135C22v9Ev();
extern void _ZN7S7135C23v10Ev();
extern void _ZN7S7135C23v11Ev();
extern void _ZN7S7135C12v1Ev();
extern void _ZN7S7135C12v2Ev();
extern void _ZN7S7135C12v3Ev();
extern void _ZN7S7135C12v4Ev();
extern void _ZN7S7135C12v5Ev();
extern void _ZN7S7135C12v6Ev();
extern void _ZN7S7135C12v7Ev();
static  VTBL_ENTRY vtc_S7135C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7135C1[0]),
  (VTBL_ENTRY)&_ZN7S7135C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7135C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7135C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7135C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7135C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7135C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7135C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7135C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7135C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7135C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7135C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S7135C1[];
extern  VTBL_ENTRY _ZTV7S7135C1[];
Class_Descriptor cd_S7135C1 = {  "S7135C1", // class name
  bases_S7135C1, 1,
  &(vtc_S7135C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7135C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7135C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7173C2  {
  long s7173c2f0[5];
  void *s7173c2f1;
  virtual void  v9(); // _ZN7S7173C22v9Ev
  virtual void  v10(); // _ZN7S7173C23v10Ev
  ~S7173C2(); // tgen
  S7173C2(); // tgen
};
//SIG(-1 S7173C2) C1{ v1 v2 Fl[5] Fp}


void  S7173C2 ::v9(){vfunc_called(this, "_ZN7S7173C22v9Ev");}
void  S7173C2 ::v10(){vfunc_called(this, "_ZN7S7173C23v10Ev");}
S7173C2 ::~S7173C2(){ note_dtor("S7173C2", this);} // tgen
S7173C2 ::S7173C2(){ note_ctor("S7173C2", this);} // tgen

static void Test_S7173C2()
{
  extern Class_Descriptor cd_S7173C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7173C2, buf);
    S7173C2 *dp, &lv = *(dp=new (buf) S7173C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7173C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7173C2)");
    check_field_offset(lv, s7173c2f0, ABISELECT(8,4), "S7173C2.s7173c2f0");
    check_field_offset(lv, s7173c2f1, ABISELECT(48,24), "S7173C2.s7173c2f1");
    test_class_info(&lv, &cd_S7173C2);
    dp->~S7173C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7173C2(Test_S7173C2, "S7173C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7173C2C1Ev();
extern void _ZN7S7173C2D1Ev();
Name_Map name_map_S7173C2[] = {
  NSPAIR(_ZN7S7173C2C1Ev),
  NSPAIR(_ZN7S7173C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7173C2[];
extern void _ZN7S7173C22v9Ev();
extern void _ZN7S7173C23v10Ev();
static  VTBL_ENTRY vtc_S7173C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7173C2[0]),
  (VTBL_ENTRY)&_ZN7S7173C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7173C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7173C2[];
extern  VTBL_ENTRY _ZTV7S7173C2[];
Class_Descriptor cd_S7173C2 = {  "S7173C2", // class name
  0,0,//no base classes
  &(vtc_S7173C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7173C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7173C2),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  S7173C1  : S7173C2 {
  int s7173c1f0;
  virtual void  v1(); // _ZN7S7173C12v1Ev
  virtual void  v2(); // _ZN7S7173C12v2Ev
  virtual void  v3(); // _ZN7S7173C12v3Ev
  virtual void  v4(); // _ZN7S7173C12v4Ev
  virtual void  v5(); // _ZN7S7173C12v5Ev
  virtual void  v6(); // _ZN7S7173C12v6Ev
  virtual void  v7(); // _ZN7S7173C12v7Ev
  virtual void  v8(); // _ZN7S7173C12v8Ev
  ~S7173C1(); // tgen
  S7173C1(); // tgen
};
//SIG(1 S7173C1) C1{ BC2{ v9 v10 Fl[5] Fp} v1 v2 v3 v4 v5 v6 v7 v8 Fi}


void  S7173C1 ::v1(){vfunc_called(this, "_ZN7S7173C12v1Ev");}
void  S7173C1 ::v2(){vfunc_called(this, "_ZN7S7173C12v2Ev");}
void  S7173C1 ::v3(){vfunc_called(this, "_ZN7S7173C12v3Ev");}
void  S7173C1 ::v4(){vfunc_called(this, "_ZN7S7173C12v4Ev");}
void  S7173C1 ::v5(){vfunc_called(this, "_ZN7S7173C12v5Ev");}
void  S7173C1 ::v6(){vfunc_called(this, "_ZN7S7173C12v6Ev");}
void  S7173C1 ::v7(){vfunc_called(this, "_ZN7S7173C12v7Ev");}
void  S7173C1 ::v8(){vfunc_called(this, "_ZN7S7173C12v8Ev");}
S7173C1 ::~S7173C1(){ note_dtor("S7173C1", this);} // tgen
S7173C1 ::S7173C1(){ note_ctor("S7173C1", this);} // tgen

static void Test_S7173C1()
{
  extern Class_Descriptor cd_S7173C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7173C1, buf);
    S7173C1 *dp, &lv = *(dp=new (buf) S7173C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7173C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7173C1)");
    check_base_class_offset(lv, (S7173C2*), 0, "S7173C1");
    check_field_offset(lv, s7173c1f0, ABISELECT(56,28), "S7173C1.s7173c1f0");
    test_class_info(&lv, &cd_S7173C1);
    dp->~S7173C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7173C1(Test_S7173C1, "S7173C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7173C1C1Ev();
extern void _ZN7S7173C1D1Ev();
Name_Map name_map_S7173C1[] = {
  NSPAIR(_ZN7S7173C1C1Ev),
  NSPAIR(_ZN7S7173C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7173C2;
extern VTBL_ENTRY _ZTI7S7173C2[];
extern  VTBL_ENTRY _ZTV7S7173C2[];
static Base_Class bases_S7173C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7173C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7173C1[];
extern void _ZN7S7173C22v9Ev();
extern void _ZN7S7173C23v10Ev();
extern void _ZN7S7173C12v1Ev();
extern void _ZN7S7173C12v2Ev();
extern void _ZN7S7173C12v3Ev();
extern void _ZN7S7173C12v4Ev();
extern void _ZN7S7173C12v5Ev();
extern void _ZN7S7173C12v6Ev();
extern void _ZN7S7173C12v7Ev();
extern void _ZN7S7173C12v8Ev();
static  VTBL_ENTRY vtc_S7173C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7173C1[0]),
  (VTBL_ENTRY)&_ZN7S7173C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7173C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7173C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7173C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7173C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7173C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7173C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7173C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7173C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7173C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S7173C1[];
extern  VTBL_ENTRY _ZTV7S7173C1[];
Class_Descriptor cd_S7173C1 = {  "S7173C1", // class name
  bases_S7173C1, 1,
  &(vtc_S7173C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7173C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7173C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11548C2  {
  int s11548c2f0[2];
  __tsi64 s11548c2f1;
  int s11548c2f2[2];
  char s11548c2f3[8];
};
//SIG(-1 S11548C2) C1{ Fi[2] FL Fi[2] Fc[8]}



static void Test_S11548C2()
{
  {
    init_simple_test("S11548C2");
    S11548C2 lv;
    check2(sizeof(lv), 32, "sizeof(S11548C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11548C2)");
    check_field_offset(lv, s11548c2f0, 0, "S11548C2.s11548c2f0");
    check_field_offset(lv, s11548c2f1, 8, "S11548C2.s11548c2f1");
    check_field_offset(lv, s11548c2f2, 16, "S11548C2.s11548c2f2");
    check_field_offset(lv, s11548c2f3, 24, "S11548C2.s11548c2f3");
  }
}
static Arrange_To_Call_Me vS11548C2(Test_S11548C2, "S11548C2", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11548C1  {
  ::S11548C2 s11548c1f0;
  __tsi64 s11548c1f1;
  void *s11548c1f2;
  int s11548c1f3[2];
  void *s11548c1f4;
  int s11548c1f5[2];
};
//SIG(1 S11548C1) C1{ FC2{ Fi[2] FL Fi[2] Fc[8]} FL Fp Fi[2] Fp Fi[2]}



static void Test_S11548C1()
{
  {
    init_simple_test("S11548C1");
    S11548C1 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S11548C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11548C1)");
    check_field_offset(lv, s11548c1f0, 0, "S11548C1.s11548c1f0");
    check_field_offset(lv, s11548c1f1, 32, "S11548C1.s11548c1f1");
    check_field_offset(lv, s11548c1f2, 40, "S11548C1.s11548c1f2");
    check_field_offset(lv, s11548c1f3, ABISELECT(48,44), "S11548C1.s11548c1f3");
    check_field_offset(lv, s11548c1f4, ABISELECT(56,52), "S11548C1.s11548c1f4");
    check_field_offset(lv, s11548c1f5, ABISELECT(64,56), "S11548C1.s11548c1f5");
  }
}
static Arrange_To_Call_Me vS11548C1(Test_S11548C1, "S11548C1", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16262C1  {
  ::S2014C20_nt s16262c1f0;
  int s16262c1f1;
  char s16262c1f2[3];
  ::S3639C14_nt s16262c1f3;
  int s16262c1f4;
  void  mf16262c1(); // _ZN8S16262C19mf16262c1Ev
};
//SIG(1 S16262C1) C1{ m FC2{ m Fp Fi FC3{ m}} Fi Fc[3] FC4{ m Fp[2]} Fi}


void  S16262C1 ::mf16262c1(){}

static void Test_S16262C1()
{
  {
    init_simple_test("S16262C1");
    S16262C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S16262C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16262C1)");
    check_field_offset(lv, s16262c1f0, 0, "S16262C1.s16262c1f0");
    check_field_offset(lv, s16262c1f1, ABISELECT(16,12), "S16262C1.s16262c1f1");
    check_field_offset(lv, s16262c1f2, ABISELECT(20,16), "S16262C1.s16262c1f2");
    check_field_offset(lv, s16262c1f3, ABISELECT(24,20), "S16262C1.s16262c1f3");
    check_field_offset(lv, s16262c1f4, ABISELECT(40,28), "S16262C1.s16262c1f4");
  }
}
static Arrange_To_Call_Me vS16262C1(Test_S16262C1, "S16262C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S409C4  : S2014C41_nt {
  char s409c4f0;
};
//SIG(-1 S409C4) C1{ BC2{ m FL} Fc}



static void Test_S409C4()
{
  extern Class_Descriptor cd_S409C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S409C4, buf);
    S409C4 &lv = *(new (buf) S409C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S409C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S409C4)");
    check_base_class_offset(lv, (S2014C41_nt*), 0, "S409C4");
    check_field_offset(lv, s409c4f0, 8, "S409C4.s409c4f0");
    test_class_info(&lv, &cd_S409C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS409C4(Test_S409C4, "S409C4", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
static Base_Class bases_S409C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S409C4 = {  "S409C4", // class name
  bases_S409C4, 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  S409C3  : S409C4 {
  int s409c3f0;
};
//SIG(-1 S409C3) C1{ BC2{ BC3{ m FL} Fc} Fi}



static void Test_S409C3()
{
  extern Class_Descriptor cd_S409C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,5)];
    init_test(&cd_S409C3, buf);
    S409C3 &lv = *(new (buf) S409C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 16, "sizeof(S409C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S409C3)");
    check_base_class_offset(lv, (S2014C41_nt*)(S409C4*), 0, "S409C3");
    check_base_class_offset(lv, (S409C4*), 0, "S409C3");
    check_field_offset(lv, s409c3f0, 12, "S409C3.s409c3f0");
    test_class_info(&lv, &cd_S409C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS409C3(Test_S409C3, "S409C3", 16);

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
extern Class_Descriptor cd_S409C4;
static Base_Class bases_S409C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S409C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S409C3 = {  "S409C3", // class name
  bases_S409C3, 2,
  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  S409C2  : S409C3 {
  ::S3222C4_nt s409c2f0;
};
//SIG(-1 S409C2) C1{ BC2{ BC3{ BC4{ m FL} Fc} Fi} FC5{ m Fi[2]}}



static void Test_S409C2()
{
  extern Class_Descriptor cd_S409C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,7)];
    init_test(&cd_S409C2, buf);
    S409C2 &lv = *(new (buf) S409C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 24, "sizeof(S409C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S409C2)");
    check_base_class_offset(lv, (S2014C41_nt*)(S409C4*)(S409C3*), 0, "S409C2");
    check_base_class_offset(lv, (S409C4*)(S409C3*), 0, "S409C2");
    check_base_class_offset(lv, (S409C3*), 0, "S409C2");
    check_field_offset(lv, s409c2f0, 16, "S409C2.s409c2f0");
    test_class_info(&lv, &cd_S409C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS409C2(Test_S409C2, "S409C2", 24);

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
extern Class_Descriptor cd_S409C4;
extern Class_Descriptor cd_S409C3;
static Base_Class bases_S409C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S409C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S409C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S409C2 = {  "S409C2", // class name
  bases_S409C2, 3,
  0, // no vftv
  0, //no vtt
  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  S409C1  : S409C2 {
  ::S3222C4_nt s409c1f0;
};
//SIG(1 S409C1) C1{ BC2{ BC3{ BC4{ BC5{ m FL} Fc} Fi} FC6{ m Fi[2]}} FC6}



static void Test_S409C1()
{
  extern Class_Descriptor cd_S409C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,9)];
    init_test(&cd_S409C1, buf);
    S409C1 &lv = *(new (buf) S409C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 32, "sizeof(S409C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S409C1)");
    check_base_class_offset(lv, (S2014C41_nt*)(S409C4*)(S409C3*)(S409C2*), 0, "S409C1");
    check_base_class_offset(lv, (S409C4*)(S409C3*)(S409C2*), 0, "S409C1");
    check_base_class_offset(lv, (S409C3*)(S409C2*), 0, "S409C1");
    check_base_class_offset(lv, (S409C2*), 0, "S409C1");
    check_field_offset(lv, s409c1f0, 24, "S409C1.s409c1f0");
    test_class_info(&lv, &cd_S409C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS409C1(Test_S409C1, "S409C1", 32);

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
extern Class_Descriptor cd_S409C4;
extern Class_Descriptor cd_S409C3;
extern Class_Descriptor cd_S409C2;
static Base_Class bases_S409C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S409C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S409C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S409C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S409C1 = {  "S409C1", // class name
  bases_S409C1, 4,
  0, // no vftv
  0, //no vtt
  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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3515C4  {
  virtual void  v1(); // _ZN7S3515C42v1Ev
  ~S3515C4(); // tgen
  S3515C4(); // tgen
};
//SIG(-1 S3515C4) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S3515C4C1Ev();
extern void _ZN7S3515C4D1Ev();
Name_Map name_map_S3515C4[] = {
  NSPAIR(_ZN7S3515C4C1Ev),
  NSPAIR(_ZN7S3515C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3515C4[];
extern void _ZN7S3515C42v1Ev();
static  VTBL_ENTRY vtc_S3515C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3515C4[0]),
  (VTBL_ENTRY)&_ZN7S3515C42v1Ev,
};
extern VTBL_ENTRY _ZTI7S3515C4[];
extern  VTBL_ENTRY _ZTV7S3515C4[];
Class_Descriptor cd_S3515C4 = {  "S3515C4", // class name
  0,0,//no base classes
  &(vtc_S3515C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3515C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3515C4),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  S3515C3  : virtual S3515C4 {
  int s3515c3f0;
  void *s3515c3f1;
  virtual  ~S3515C3(); // _ZN7S3515C3D2Ev
  virtual void  v2(); // _ZN7S3515C32v2Ev
  virtual void  v3(); // _ZN7S3515C32v3Ev
  S3515C3(); // tgen
};
//SIG(-1 S3515C3) C1{ VBC2{ v3} vd v1 v2 Fi Fp}


 S3515C3 ::~S3515C3(){ note_dtor("S3515C3", this);}
void  S3515C3 ::v2(){vfunc_called(this, "_ZN7S3515C32v2Ev");}
void  S3515C3 ::v3(){vfunc_called(this, "_ZN7S3515C32v3Ev");}
S3515C3 ::S3515C3(){ note_ctor("S3515C3", this);} // tgen

static void Test_S3515C3()
{
  extern Class_Descriptor cd_S3515C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3515C3, buf);
    S3515C3 *dp, &lv = *(dp=new (buf) S3515C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3515C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3515C3)");
    check_base_class_offset(lv, (S3515C4*), 0, "S3515C3");
    check_field_offset(lv, s3515c3f0, ABISELECT(8,4), "S3515C3.s3515c3f0");
    check_field_offset(lv, s3515c3f1, ABISELECT(16,8), "S3515C3.s3515c3f1");
    test_class_info(&lv, &cd_S3515C3);
    dp->~S3515C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3515C3(Test_S3515C3, "S3515C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3515C3C1Ev();
extern void _ZN7S3515C3D2Ev();
Name_Map name_map_S3515C3[] = {
  NSPAIR(_ZN7S3515C3C1Ev),
  NSPAIR(_ZN7S3515C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3515C4;
extern VTBL_ENTRY _ZTI7S3515C4[];
extern  VTBL_ENTRY _ZTV7S3515C4[];
static Base_Class bases_S3515C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3515C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3515C3[];
extern void _ZN7S3515C42v1Ev();
extern void _ZN7S3515C3D1Ev();
extern void _ZN7S3515C3D0Ev();
extern void _ZN7S3515C32v2Ev();
extern void _ZN7S3515C32v3Ev();
static  VTBL_ENTRY vtc_S3515C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3515C3[0]),
  (VTBL_ENTRY)&_ZN7S3515C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3515C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3515C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v3Ev,
};
extern VTBL_ENTRY _ZTV7S3515C3[];
static  VTT_ENTRY vtt_S3515C3[] = {
  {&(_ZTV7S3515C3[4]),  4,9},
  {&(_ZTV7S3515C3[4]),  4,9},
};
extern VTBL_ENTRY _ZTI7S3515C3[];
extern  VTBL_ENTRY _ZTV7S3515C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3515C3[];
Class_Descriptor cd_S3515C3 = {  "S3515C3", // class name
  bases_S3515C3, 1,
  &(vtc_S3515C3[0]), // expected_vtbl_contents
  &(vtt_S3515C3[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3515C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3515C3),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3515C3),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  S3515C2  : S3515C3 {
  long double s3515c2f0[8];
  virtual void  v4(); // _ZN7S3515C22v4Ev
  virtual void  v5(); // _ZN7S3515C22v5Ev
  ~S3515C2(); // tgen
  S3515C2(); // tgen
};
//SIG(-1 S3515C2) C1{ BC2{ VBC3{ v3} vd v4 v5 Fi Fp} v1 v2 FD[8]}


void  S3515C2 ::v4(){vfunc_called(this, "_ZN7S3515C22v4Ev");}
void  S3515C2 ::v5(){vfunc_called(this, "_ZN7S3515C22v5Ev");}
S3515C2 ::~S3515C2(){ note_dtor("S3515C2", this);} // tgen
S3515C2 ::S3515C2(){ note_ctor("S3515C2", this);} // tgen

static void Test_S3515C2()
{
  extern Class_Descriptor cd_S3515C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S3515C2, buf);
    S3515C2 *dp, &lv = *(dp=new (buf) S3515C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S3515C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3515C2)");
    check_base_class_offset(lv, (S3515C4*)(S3515C3*), 0, "S3515C2");
    check_base_class_offset(lv, (S3515C3*), 0, "S3515C2");
    check_field_offset(lv, s3515c2f0, ABISELECT(32,12), "S3515C2.s3515c2f0");
    test_class_info(&lv, &cd_S3515C2);
    dp->~S3515C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3515C2(Test_S3515C2, "S3515C2", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S3515C2C1Ev();
extern void _ZN7S3515C2D1Ev();
Name_Map name_map_S3515C2[] = {
  NSPAIR(_ZN7S3515C2C1Ev),
  NSPAIR(_ZN7S3515C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3515C4;
extern VTBL_ENTRY _ZTI7S3515C4[];
extern  VTBL_ENTRY _ZTV7S3515C4[];
extern Class_Descriptor cd_S3515C3;
extern VTBL_ENTRY _ZTI7S3515C3[];
extern  VTBL_ENTRY _ZTV7S3515C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3515C3[];
static Base_Class bases_S3515C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3515C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3515C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3515C2[];
extern void _ZN7S3515C42v1Ev();
extern void _ZN7S3515C2D1Ev();
extern void _ZN7S3515C2D0Ev();
extern void _ZN7S3515C32v2Ev();
extern void _ZN7S3515C32v3Ev();
extern void _ZN7S3515C22v4Ev();
extern void _ZN7S3515C22v5Ev();
static  VTBL_ENTRY vtc_S3515C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3515C2[0]),
  (VTBL_ENTRY)&_ZN7S3515C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3515C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3515C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3515C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3515C22v5Ev,
};
extern VTBL_ENTRY _ZTV7S3515C2[];
extern void _ZN7S3515C42v1Ev();
extern void _ZN7S3515C3D1Ev();
extern void _ZN7S3515C3D0Ev();
extern void _ZN7S3515C32v2Ev();
extern void _ZN7S3515C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3515C3__7S3515C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3515C3[0]),
  (VTBL_ENTRY)&_ZN7S3515C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3515C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3515C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v3Ev,
};
static  VTT_ENTRY vtt_S3515C2[] = {
  {&(_ZTV7S3515C2[4]),  4,11},
  {&(_tg__ZTV7S3515C3__7S3515C2[4]),  4,9},
  {&(_tg__ZTV7S3515C3__7S3515C2[4]),  4,9},
  {&(_ZTV7S3515C2[4]),  4,11},
};
extern VTBL_ENTRY _ZTI7S3515C2[];
extern  VTBL_ENTRY _ZTV7S3515C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3515C2[];
Class_Descriptor cd_S3515C2 = {  "S3515C2", // class name
  bases_S3515C2, 2,
  &(vtc_S3515C2[0]), // expected_vtbl_contents
  &(vtt_S3515C2[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S3515C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3515C2),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3515C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3515C1  : S3515C2 {
  ~S3515C1(); // tgen
  S3515C1(); // tgen
};
//SIG(1 S3515C1) C1{ BC2{ BC3{ VBC4{ v1} vd v2 v3 Fi Fp} v4 v5 FD[8]}}


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

static void Test_S3515C1()
{
  extern Class_Descriptor cd_S3515C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S3515C1, buf);
    S3515C1 *dp, &lv = *(dp=new (buf) S3515C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S3515C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3515C1)");
    check_base_class_offset(lv, (S3515C4*)(S3515C3*)(S3515C2*), 0, "S3515C1");
    check_base_class_offset(lv, (S3515C3*)(S3515C2*), 0, "S3515C1");
    check_base_class_offset(lv, (S3515C2*), 0, "S3515C1");
    test_class_info(&lv, &cd_S3515C1);
    dp->~S3515C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3515C1(Test_S3515C1, "S3515C1", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN7S3515C1C1Ev();
extern void _ZN7S3515C1D1Ev();
Name_Map name_map_S3515C1[] = {
  NSPAIR(_ZN7S3515C1C1Ev),
  NSPAIR(_ZN7S3515C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3515C4;
extern VTBL_ENTRY _ZTI7S3515C4[];
extern  VTBL_ENTRY _ZTV7S3515C4[];
extern Class_Descriptor cd_S3515C3;
extern VTBL_ENTRY _ZTI7S3515C3[];
extern  VTBL_ENTRY _ZTV7S3515C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3515C3[];
extern Class_Descriptor cd_S3515C2;
extern VTBL_ENTRY _ZTI7S3515C2[];
extern  VTBL_ENTRY _ZTV7S3515C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3515C2[];
static Base_Class bases_S3515C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3515C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3515C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3515C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3515C1[];
extern void _ZN7S3515C42v1Ev();
extern void _ZN7S3515C1D1Ev();
extern void _ZN7S3515C1D0Ev();
extern void _ZN7S3515C32v2Ev();
extern void _ZN7S3515C32v3Ev();
extern void _ZN7S3515C22v4Ev();
extern void _ZN7S3515C22v5Ev();
static  VTBL_ENTRY vtc_S3515C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3515C1[0]),
  (VTBL_ENTRY)&_ZN7S3515C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3515C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3515C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3515C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3515C22v5Ev,
};
extern VTBL_ENTRY _ZTV7S3515C1[];
extern void _ZN7S3515C42v1Ev();
extern void _ZN7S3515C2D1Ev();
extern void _ZN7S3515C2D0Ev();
extern void _ZN7S3515C32v2Ev();
extern void _ZN7S3515C32v3Ev();
extern void _ZN7S3515C22v4Ev();
extern void _ZN7S3515C22v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3515C2__7S3515C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3515C2[0]),
  (VTBL_ENTRY)&_ZN7S3515C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3515C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3515C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3515C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3515C22v5Ev,
};
extern void _ZN7S3515C42v1Ev();
extern void _ZN7S3515C3D1Ev();
extern void _ZN7S3515C3D0Ev();
extern void _ZN7S3515C32v2Ev();
extern void _ZN7S3515C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3515C37S3515C2__7S3515C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3515C3[0]),
  (VTBL_ENTRY)&_ZN7S3515C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3515C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3515C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3515C32v3Ev,
};
static  VTT_ENTRY vtt_S3515C1[] = {
  {&(_ZTV7S3515C1[4]),  4,11},
  {&(_tg__ZTV7S3515C2__7S3515C1[4]),  4,11},
  {&(_tg__ZTV7S3515C37S3515C2__7S3515C1[4]),  4,9},
  {&(_tg__ZTV7S3515C37S3515C2__7S3515C1[4]),  4,9},
  {&(_tg__ZTV7S3515C2__7S3515C1[4]),  4,11},
  {&(_ZTV7S3515C1[4]),  4,11},
};
extern VTBL_ENTRY _ZTI7S3515C1[];
extern  VTBL_ENTRY _ZTV7S3515C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3515C1[];
Class_Descriptor cd_S3515C1 = {  "S3515C1", // class name
  bases_S3515C1, 3,
  &(vtc_S3515C1[0]), // expected_vtbl_contents
  &(vtt_S3515C1[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI7S3515C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3515C1),11, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3515C1),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11632C2  {
  int s11632c2f0[4];
  __tsi64 s11632c2f1;
  int s11632c2f2[2];
  char s11632c2f3[8];
};
//SIG(-1 S11632C2) C1{ Fi[4] FL Fi[2] Fc[8]}



static void Test_S11632C2()
{
  {
    init_simple_test("S11632C2");
    S11632C2 lv;
    check2(sizeof(lv), 40, "sizeof(S11632C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11632C2)");
    check_field_offset(lv, s11632c2f0, 0, "S11632C2.s11632c2f0");
    check_field_offset(lv, s11632c2f1, 16, "S11632C2.s11632c2f1");
    check_field_offset(lv, s11632c2f2, 24, "S11632C2.s11632c2f2");
    check_field_offset(lv, s11632c2f3, 32, "S11632C2.s11632c2f3");
  }
}
static Arrange_To_Call_Me vS11632C2(Test_S11632C2, "S11632C2", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11632C1  {
  ::S11632C2 s11632c1f0;
  __tsi64 s11632c1f1;
  int s11632c1f2[3];
  void *s11632c1f3;
  int s11632c1f4[2];
};
//SIG(1 S11632C1) C1{ FC2{ Fi[4] FL Fi[2] Fc[8]} FL Fi[3] Fp Fi[2]}



static void Test_S11632C1()
{
  {
    init_simple_test("S11632C1");
    S11632C1 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S11632C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11632C1)");
    check_field_offset(lv, s11632c1f0, 0, "S11632C1.s11632c1f0");
    check_field_offset(lv, s11632c1f1, 40, "S11632C1.s11632c1f1");
    check_field_offset(lv, s11632c1f2, 48, "S11632C1.s11632c1f2");
    check_field_offset(lv, s11632c1f3, ABISELECT(64,60), "S11632C1.s11632c1f3");
    check_field_offset(lv, s11632c1f4, ABISELECT(72,64), "S11632C1.s11632c1f4");
  }
}
static Arrange_To_Call_Me vS11632C1(Test_S11632C1, "S11632C1", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6597C2  {
  virtual  ~S6597C2(); // _ZN7S6597C2D1Ev
  virtual void  v2(); // _ZN7S6597C22v2Ev
  S6597C2(); // tgen
};
//SIG(-1 S6597C2) C1{ vd v1}


 S6597C2 ::~S6597C2(){ note_dtor("S6597C2", this);}
void  S6597C2 ::v2(){vfunc_called(this, "_ZN7S6597C22v2Ev");}
S6597C2 ::S6597C2(){ note_ctor("S6597C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6597C2C1Ev();
extern void _ZN7S6597C2D1Ev();
Name_Map name_map_S6597C2[] = {
  NSPAIR(_ZN7S6597C2C1Ev),
  NSPAIR(_ZN7S6597C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6597C2[];
extern void _ZN7S6597C2D1Ev();
extern void _ZN7S6597C2D0Ev();
extern void _ZN7S6597C22v2Ev();
static  VTBL_ENTRY vtc_S6597C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6597C2[0]),
  (VTBL_ENTRY)&_ZN7S6597C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6597C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6597C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6597C2[];
extern  VTBL_ENTRY _ZTV7S6597C2[];
Class_Descriptor cd_S6597C2 = {  "S6597C2", // class name
  0,0,//no base classes
  &(vtc_S6597C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6597C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6597C2),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  S6597C1  : S6597C2 {
  void *s6597c1f0[7];
  ::S2014C20_nt s6597c1f1;
  virtual  ~S6597C1(); // _ZN7S6597C1D1Ev
  virtual void  v1(); // _ZN7S6597C12v1Ev
  S6597C1(); // tgen
};
//SIG(1 S6597C1) C1{ BC2{ vd v2} vd v1 Fp[7] FC3{ m Fp Fi FC4{ m}}}


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

static void Test_S6597C1()
{
  extern Class_Descriptor cd_S6597C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S6597C1, buf);
    S6597C1 *dp, &lv = *(dp=new (buf) S6597C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S6597C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6597C1)");
    check_base_class_offset(lv, (S6597C2*), 0, "S6597C1");
    check_field_offset(lv, s6597c1f0, ABISELECT(8,4), "S6597C1.s6597c1f0");
    check_field_offset(lv, s6597c1f1, ABISELECT(64,32), "S6597C1.s6597c1f1");
    test_class_info(&lv, &cd_S6597C1);
    dp->~S6597C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6597C1(Test_S6597C1, "S6597C1", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S6597C1C1Ev();
extern void _ZN7S6597C1D1Ev();
Name_Map name_map_S6597C1[] = {
  NSPAIR(_ZN7S6597C1C1Ev),
  NSPAIR(_ZN7S6597C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6597C2;
extern VTBL_ENTRY _ZTI7S6597C2[];
extern  VTBL_ENTRY _ZTV7S6597C2[];
static Base_Class bases_S6597C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6597C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6597C1[];
extern void _ZN7S6597C1D1Ev();
extern void _ZN7S6597C1D0Ev();
extern void _ZN7S6597C22v2Ev();
extern void _ZN7S6597C12v1Ev();
static  VTBL_ENTRY vtc_S6597C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6597C1[0]),
  (VTBL_ENTRY)&_ZN7S6597C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6597C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6597C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6597C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6597C1[];
extern  VTBL_ENTRY _ZTV7S6597C1[];
Class_Descriptor cd_S6597C1 = {  "S6597C1", // class name
  bases_S6597C1, 1,
  &(vtc_S6597C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S6597C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6597C1),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  S14512C2  {
  void *s14512c2f0[3];
  int s14512c2f1[3];
  char s14512c2f2[3];
};
//SIG(-1 S14512C2) C1{ Fp[3] Fi[3] Fc[3]}



static void Test_S14512C2()
{
  {
    init_simple_test("S14512C2");
    S14512C2 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S14512C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14512C2)");
    check_field_offset(lv, s14512c2f0, 0, "S14512C2.s14512c2f0");
    check_field_offset(lv, s14512c2f1, ABISELECT(24,12), "S14512C2.s14512c2f1");
    check_field_offset(lv, s14512c2f2, ABISELECT(36,24), "S14512C2.s14512c2f2");
  }
}
static Arrange_To_Call_Me vS14512C2(Test_S14512C2, "S14512C2", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14512C1  {
  void *s14512c1f0[2];
  int s14512c1f1;
  void *s14512c1f2;
  int s14512c1f3[3];
  ::S14512C2 s14512c1f4;
};
//SIG(1 S14512C1) C1{ Fp[2] Fi Fp Fi[3] FC2{ Fp[3] Fi[3] Fc[3]}}



static void Test_S14512C1()
{
  {
    init_simple_test("S14512C1");
    S14512C1 lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S14512C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14512C1)");
    check_field_offset(lv, s14512c1f0, 0, "S14512C1.s14512c1f0");
    check_field_offset(lv, s14512c1f1, ABISELECT(16,8), "S14512C1.s14512c1f1");
    check_field_offset(lv, s14512c1f2, ABISELECT(24,12), "S14512C1.s14512c1f2");
    check_field_offset(lv, s14512c1f3, ABISELECT(32,16), "S14512C1.s14512c1f3");
    check_field_offset(lv, s14512c1f4, ABISELECT(48,28), "S14512C1.s14512c1f4");
  }
}
static Arrange_To_Call_Me vS14512C1(Test_S14512C1, "S14512C1", ABISELECT(88,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12054C1  {
  ::S3222C4_nt s12054c1f0;
  int s12054c1f1[2];
  ::S4531C12_nt s12054c1f2;
  int s12054c1f3[9];
  unsigned int s12054c1f4:1;
};
//SIG(1 S12054C1) C1{ FC2{ m Fi[2]} Fi[2] FC3{ m Fi[4]} Fi[9] Fi:1}



static void Test_S12054C1()
{
  {
    init_simple_test("S12054C1");
    static S12054C1 lv;
    check2(sizeof(lv), 72, "sizeof(S12054C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12054C1)");
    check_field_offset(lv, s12054c1f0, 0, "S12054C1.s12054c1f0");
    check_field_offset(lv, s12054c1f1, 8, "S12054C1.s12054c1f1");
    check_field_offset(lv, s12054c1f2, 16, "S12054C1.s12054c1f2");
    check_field_offset(lv, s12054c1f3, 32, "S12054C1.s12054c1f3");
    set_bf_and_test(lv, s12054c1f4, 68, 0, 1, 1, "S12054C1");
  }
}
static Arrange_To_Call_Me vS12054C1(Test_S12054C1, "S12054C1", 72);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11547C1  {
  ::S11548C2 s11547c1f0;
  int s11547c1f1[2];
  void *s11547c1f2;
  int s11547c1f3[2];
};
//SIG(1 S11547C1) C1{ FC2{ Fi[2] FL Fi[2] Fc[8]} Fi[2] Fp Fi[2]}



static void Test_S11547C1()
{
  {
    init_simple_test("S11547C1");
    S11547C1 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S11547C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11547C1)");
    check_field_offset(lv, s11547c1f0, 0, "S11547C1.s11547c1f0");
    check_field_offset(lv, s11547c1f1, 32, "S11547C1.s11547c1f1");
    check_field_offset(lv, s11547c1f2, 40, "S11547C1.s11547c1f2");
    check_field_offset(lv, s11547c1f3, ABISELECT(48,44), "S11547C1.s11547c1f3");
  }
}
static Arrange_To_Call_Me vS11547C1(Test_S11547C1, "S11547C1", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11549C1  {
  ::S11548C2 s11549c1f0;
  __tsi64 s11549c1f1;
  void *s11549c1f2[2];
  int s11549c1f3[2];
};
//SIG(1 S11549C1) C1{ FC2{ Fi[2] FL Fi[2] Fc[8]} FL Fp[2] Fi[2]}



static void Test_S11549C1()
{
  {
    init_simple_test("S11549C1");
    S11549C1 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S11549C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11549C1)");
    check_field_offset(lv, s11549c1f0, 0, "S11549C1.s11549c1f0");
    check_field_offset(lv, s11549c1f1, 32, "S11549C1.s11549c1f1");
    check_field_offset(lv, s11549c1f2, 40, "S11549C1.s11549c1f2");
    check_field_offset(lv, s11549c1f3, ABISELECT(56,48), "S11549C1.s11549c1f3");
  }
}
static Arrange_To_Call_Me vS11549C1(Test_S11549C1, "S11549C1", ABISELECT(64,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17858C1  {
  void *s17858c1f0[2];
  char s17858c1f1;
  ::S3222C17 s17858c1f2;
  int s17858c1f3;
  void  mf17858c1(); // _ZN8S17858C19mf17858c1Ev
};
//SIG(1 S17858C1) C1{ m Fp[2] Fc FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi}


void  S17858C1 ::mf17858c1(){}

static void Test_S17858C1()
{
  {
    init_simple_test("S17858C1");
    S17858C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S17858C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17858C1)");
    check_field_offset(lv, s17858c1f0, 0, "S17858C1.s17858c1f0");
    check_field_offset(lv, s17858c1f1, ABISELECT(16,8), "S17858C1.s17858c1f1");
    check_field_offset(lv, s17858c1f2, ABISELECT(24,12), "S17858C1.s17858c1f2");
    check_field_offset(lv, s17858c1f3, ABISELECT(40,24), "S17858C1.s17858c1f3");
  }
}
static Arrange_To_Call_Me vS17858C1(Test_S17858C1, "S17858C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S137C5  : S2014C41_nt {
  char s137c5f0;
};
//SIG(-1 S137C5) C1{ BC2{ m FL} Fc}



static void Test_S137C5()
{
  extern Class_Descriptor cd_S137C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S137C5, buf);
    S137C5 &lv = *(new (buf) S137C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S137C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S137C5)");
    check_base_class_offset(lv, (S2014C41_nt*), 0, "S137C5");
    check_field_offset(lv, s137c5f0, 8, "S137C5.s137c5f0");
    test_class_info(&lv, &cd_S137C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS137C5(Test_S137C5, "S137C5", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
static Base_Class bases_S137C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S137C5 = {  "S137C5", // class name
  bases_S137C5, 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  S137C4  : S137C5 {
  int s137c4f0;
};
//SIG(-1 S137C4) C1{ BC2{ BC3{ m FL} Fc} Fi}



static void Test_S137C4()
{
  extern Class_Descriptor cd_S137C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,5)];
    init_test(&cd_S137C4, buf);
    S137C4 &lv = *(new (buf) S137C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 16, "sizeof(S137C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S137C4)");
    check_base_class_offset(lv, (S2014C41_nt*)(S137C5*), 0, "S137C4");
    check_base_class_offset(lv, (S137C5*), 0, "S137C4");
    check_field_offset(lv, s137c4f0, 12, "S137C4.s137c4f0");
    test_class_info(&lv, &cd_S137C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS137C4(Test_S137C4, "S137C4", 16);

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
extern Class_Descriptor cd_S137C5;
static Base_Class bases_S137C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S137C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S137C4 = {  "S137C4", // class name
  bases_S137C4, 2,
  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  S137C3  : S137C4 {
  void *s137c3f0;
};
//SIG(-1 S137C3) C1{ BC2{ BC3{ BC4{ m FL} Fc} Fi} Fp}



static void Test_S137C3()
{
  extern Class_Descriptor cd_S137C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S137C3, buf);
    S137C3 &lv = *(new (buf) S137C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S137C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S137C3)");
    check_base_class_offset(lv, (S2014C41_nt*)(S137C5*)(S137C4*), 0, "S137C3");
    check_base_class_offset(lv, (S137C5*)(S137C4*), 0, "S137C3");
    check_base_class_offset(lv, (S137C4*), 0, "S137C3");
    check_field_offset(lv, s137c3f0, 16, "S137C3.s137c3f0");
    test_class_info(&lv, &cd_S137C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS137C3(Test_S137C3, "S137C3", ABISELECT(24,20));

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
extern Class_Descriptor cd_S137C5;
extern Class_Descriptor cd_S137C4;
static Base_Class bases_S137C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S137C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S137C3 = {  "S137C3", // class name
  bases_S137C3, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S137C2  : S137C3 {
  void *s137c2f0;
};
//SIG(-1 S137C2) C1{ BC2{ BC3{ BC4{ BC5{ m FL} Fc} Fi} Fp} Fp}



static void Test_S137C2()
{
  extern Class_Descriptor cd_S137C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S137C2, buf);
    S137C2 &lv = *(new (buf) S137C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S137C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S137C2)");
    check_base_class_offset(lv, (S2014C41_nt*)(S137C5*)(S137C4*)(S137C3*), 0, "S137C2");
    check_base_class_offset(lv, (S137C5*)(S137C4*)(S137C3*), 0, "S137C2");
    check_base_class_offset(lv, (S137C4*)(S137C3*), 0, "S137C2");
    check_base_class_offset(lv, (S137C3*), 0, "S137C2");
    check_field_offset(lv, s137c2f0, ABISELECT(24,20), "S137C2.s137c2f0");
    test_class_info(&lv, &cd_S137C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS137C2(Test_S137C2, "S137C2", ABISELECT(32,24));

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
extern Class_Descriptor cd_S137C5;
extern Class_Descriptor cd_S137C4;
extern Class_Descriptor cd_S137C3;
static Base_Class bases_S137C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S137C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S137C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S137C2 = {  "S137C2", // class name
  bases_S137C2, 4,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S137C1  : S137C2 {
};
//SIG(1 S137C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ m FL} Fc} Fi} Fp} Fp}}



static void Test_S137C1()
{
  extern Class_Descriptor cd_S137C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S137C1, buf);
    S137C1 &lv = *(new (buf) S137C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S137C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S137C1)");
    check_base_class_offset(lv, (S2014C41_nt*)(S137C5*)(S137C4*)(S137C3*)(S137C2*), 0, "S137C1");
    check_base_class_offset(lv, (S137C5*)(S137C4*)(S137C3*)(S137C2*), 0, "S137C1");
    check_base_class_offset(lv, (S137C4*)(S137C3*)(S137C2*), 0, "S137C1");
    check_base_class_offset(lv, (S137C3*)(S137C2*), 0, "S137C1");
    check_base_class_offset(lv, (S137C2*), 0, "S137C1");
    test_class_info(&lv, &cd_S137C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS137C1(Test_S137C1, "S137C1", ABISELECT(32,24));

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
extern Class_Descriptor cd_S137C5;
extern Class_Descriptor cd_S137C4;
extern Class_Descriptor cd_S137C3;
extern Class_Descriptor cd_S137C2;
static Base_Class bases_S137C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S137C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S137C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S137C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S137C1 = {  "S137C1", // class name
  bases_S137C1, 5,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9736C2  {
  void *s9736c2f0;
  char s9736c2f1;
  void *s9736c2f2;
  char s9736c2f3;
  virtual  ~S9736C2(); // _ZN7S9736C2D1Ev
  virtual void  v4(); // _ZN7S9736C22v4Ev
  virtual void  v5(); // _ZN7S9736C22v5Ev
  virtual void  v6(); // _ZN7S9736C22v6Ev
  S9736C2(); // tgen
};
//SIG(-1 S9736C2) C1{ vd v1 v2 v3 Fp Fc Fp Fc}


 S9736C2 ::~S9736C2(){ note_dtor("S9736C2", this);}
void  S9736C2 ::v4(){vfunc_called(this, "_ZN7S9736C22v4Ev");}
void  S9736C2 ::v5(){vfunc_called(this, "_ZN7S9736C22v5Ev");}
void  S9736C2 ::v6(){vfunc_called(this, "_ZN7S9736C22v6Ev");}
S9736C2 ::S9736C2(){ note_ctor("S9736C2", this);} // tgen

static void Test_S9736C2()
{
  extern Class_Descriptor cd_S9736C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S9736C2, buf);
    S9736C2 *dp, &lv = *(dp=new (buf) S9736C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S9736C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9736C2)");
    check_field_offset(lv, s9736c2f0, ABISELECT(8,4), "S9736C2.s9736c2f0");
    check_field_offset(lv, s9736c2f1, ABISELECT(16,8), "S9736C2.s9736c2f1");
    check_field_offset(lv, s9736c2f2, ABISELECT(24,12), "S9736C2.s9736c2f2");
    check_field_offset(lv, s9736c2f3, ABISELECT(32,16), "S9736C2.s9736c2f3");
    test_class_info(&lv, &cd_S9736C2);
    dp->~S9736C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9736C2(Test_S9736C2, "S9736C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S9736C2C1Ev();
extern void _ZN7S9736C2D1Ev();
Name_Map name_map_S9736C2[] = {
  NSPAIR(_ZN7S9736C2C1Ev),
  NSPAIR(_ZN7S9736C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9736C2[];
extern void _ZN7S9736C2D1Ev();
extern void _ZN7S9736C2D0Ev();
extern void _ZN7S9736C22v4Ev();
extern void _ZN7S9736C22v5Ev();
extern void _ZN7S9736C22v6Ev();
static  VTBL_ENTRY vtc_S9736C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9736C2[0]),
  (VTBL_ENTRY)&_ZN7S9736C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9736C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9736C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9736C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9736C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9736C2[];
extern  VTBL_ENTRY _ZTV7S9736C2[];
Class_Descriptor cd_S9736C2 = {  "S9736C2", // class name
  0,0,//no base classes
  &(vtc_S9736C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S9736C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9736C2),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  S9736C1  : S9736C2 {
  virtual void  v1(); // _ZN7S9736C12v1Ev
  virtual void  v2(); // _ZN7S9736C12v2Ev
  virtual void  v3(); // _ZN7S9736C12v3Ev
  ~S9736C1(); // tgen
  S9736C1(); // tgen
};
//SIG(1 S9736C1) C1{ BC2{ vd v4 v5 v6 Fp Fc Fp Fc} v1 v2 v3}


void  S9736C1 ::v1(){vfunc_called(this, "_ZN7S9736C12v1Ev");}
void  S9736C1 ::v2(){vfunc_called(this, "_ZN7S9736C12v2Ev");}
void  S9736C1 ::v3(){vfunc_called(this, "_ZN7S9736C12v3Ev");}
S9736C1 ::~S9736C1(){ note_dtor("S9736C1", this);} // tgen
S9736C1 ::S9736C1(){ note_ctor("S9736C1", this);} // tgen

static void Test_S9736C1()
{
  extern Class_Descriptor cd_S9736C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S9736C1, buf);
    S9736C1 *dp, &lv = *(dp=new (buf) S9736C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S9736C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9736C1)");
    check_base_class_offset(lv, (S9736C2*), 0, "S9736C1");
    test_class_info(&lv, &cd_S9736C1);
    dp->~S9736C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9736C1(Test_S9736C1, "S9736C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S9736C1C1Ev();
extern void _ZN7S9736C1D1Ev();
Name_Map name_map_S9736C1[] = {
  NSPAIR(_ZN7S9736C1C1Ev),
  NSPAIR(_ZN7S9736C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9736C2;
extern VTBL_ENTRY _ZTI7S9736C2[];
extern  VTBL_ENTRY _ZTV7S9736C2[];
static Base_Class bases_S9736C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9736C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9736C1[];
extern void _ZN7S9736C1D1Ev();
extern void _ZN7S9736C1D0Ev();
extern void _ZN7S9736C22v4Ev();
extern void _ZN7S9736C22v5Ev();
extern void _ZN7S9736C22v6Ev();
extern void _ZN7S9736C12v1Ev();
extern void _ZN7S9736C12v2Ev();
extern void _ZN7S9736C12v3Ev();
static  VTBL_ENTRY vtc_S9736C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9736C1[0]),
  (VTBL_ENTRY)&_ZN7S9736C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9736C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9736C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9736C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9736C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9736C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9736C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9736C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9736C1[];
extern  VTBL_ENTRY _ZTV7S9736C1[];
Class_Descriptor cd_S9736C1 = {  "S9736C1", // class name
  bases_S9736C1, 1,
  &(vtc_S9736C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S9736C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9736C1),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  S18277C3  {
  char s18277c3f0[14];
  void  mf18277c3(); // _ZN8S18277C39mf18277c3Ev
};
//SIG(-1 S18277C3) C1{ m Fc[14]}


void  S18277C3 ::mf18277c3(){}

static void Test_S18277C3()
{
  {
    init_simple_test("S18277C3");
    S18277C3 lv;
    check2(sizeof(lv), 14, "sizeof(S18277C3)");
    check2(__alignof__(lv), 1, "__alignof__(S18277C3)");
    check_field_offset(lv, s18277c3f0, 0, "S18277C3.s18277c3f0");
  }
}
static Arrange_To_Call_Me vS18277C3(Test_S18277C3, "S18277C3", 14);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18277C2  {
  void *s18277c2f0;
  ::S18277C3 s18277c2f1;
  void  mf18277c2(); // _ZN8S18277C29mf18277c2Ev
};
//SIG(-1 S18277C2) C1{ m Fp FC2{ m Fc[14]}}


void  S18277C2 ::mf18277c2(){}

static void Test_S18277C2()
{
  {
    init_simple_test("S18277C2");
    S18277C2 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S18277C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18277C2)");
    check_field_offset(lv, s18277c2f0, 0, "S18277C2.s18277c2f0");
    check_field_offset(lv, s18277c2f1, ABISELECT(8,4), "S18277C2.s18277c2f1");
  }
}
static Arrange_To_Call_Me vS18277C2(Test_S18277C2, "S18277C2", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18277C1  {
  void *s18277c1f0[3];
  ::S18277C2 s18277c1f1;
  char s18277c1f2[2];
  void  mf18277c1(); // _ZN8S18277C19mf18277c1Ev
};
//SIG(1 S18277C1) C1{ m Fp[3] FC2{ m Fp FC3{ m Fc[14]}} Fc[2]}


void  S18277C1 ::mf18277c1(){}

static void Test_S18277C1()
{
  {
    init_simple_test("S18277C1");
    S18277C1 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S18277C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18277C1)");
    check_field_offset(lv, s18277c1f0, 0, "S18277C1.s18277c1f0");
    check_field_offset(lv, s18277c1f1, ABISELECT(24,12), "S18277C1.s18277c1f1");
    check_field_offset(lv, s18277c1f2, ABISELECT(48,32), "S18277C1.s18277c1f2");
  }
}
static Arrange_To_Call_Me vS18277C1(Test_S18277C1, "S18277C1", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21932C1  {
  void *s21932c1f0[2];
  ::S3639C14_nt s21932c1f1;
  void *s21932c1f2[2];
  int s21932c1f3[2];
  virtual  ~S21932C1(); // _ZN8S21932C1D1Ev
  virtual void  v1(); // _ZN8S21932C12v1Ev
  S21932C1(); // tgen
};
//SIG(1 S21932C1) C1{ vd v1 Fp[2] FC2{ m Fp[2]} Fp[2] Fi[2]}


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

static void Test_S21932C1()
{
  extern Class_Descriptor cd_S21932C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S21932C1, buf);
    S21932C1 *dp, &lv = *(dp=new (buf) S21932C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S21932C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21932C1)");
    check_field_offset(lv, s21932c1f0, ABISELECT(8,4), "S21932C1.s21932c1f0");
    check_field_offset(lv, s21932c1f1, ABISELECT(24,12), "S21932C1.s21932c1f1");
    check_field_offset(lv, s21932c1f2, ABISELECT(40,20), "S21932C1.s21932c1f2");
    check_field_offset(lv, s21932c1f3, ABISELECT(56,28), "S21932C1.s21932c1f3");
    test_class_info(&lv, &cd_S21932C1);
    dp->~S21932C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21932C1(Test_S21932C1, "S21932C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S21932C1C1Ev();
extern void _ZN8S21932C1D1Ev();
Name_Map name_map_S21932C1[] = {
  NSPAIR(_ZN8S21932C1C1Ev),
  NSPAIR(_ZN8S21932C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21932C1[];
extern void _ZN8S21932C1D1Ev();
extern void _ZN8S21932C1D0Ev();
extern void _ZN8S21932C12v1Ev();
static  VTBL_ENTRY vtc_S21932C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21932C1[0]),
  (VTBL_ENTRY)&_ZN8S21932C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21932C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21932C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S21932C1[];
extern  VTBL_ENTRY _ZTV8S21932C1[];
Class_Descriptor cd_S21932C1 = {  "S21932C1", // class name
  0,0,//no base classes
  &(vtc_S21932C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S21932C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21932C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14087C1  {
  void *s14087c1f0;
  ::S3222C17 s14087c1f1;
  ::S3222C17 s14087c1f2;
  int s14087c1f3;
};
//SIG(1 S14087C1) C1{ Fp FC2{ BC3{ BC4{ m Fp Fi[2]}}} FC2 Fi}



static void Test_S14087C1()
{
  {
    init_simple_test("S14087C1");
    S14087C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S14087C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14087C1)");
    check_field_offset(lv, s14087c1f0, 0, "S14087C1.s14087c1f0");
    check_field_offset(lv, s14087c1f1, ABISELECT(8,4), "S14087C1.s14087c1f1");
    check_field_offset(lv, s14087c1f2, ABISELECT(24,16), "S14087C1.s14087c1f2");
    check_field_offset(lv, s14087c1f3, ABISELECT(40,28), "S14087C1.s14087c1f3");
  }
}
static Arrange_To_Call_Me vS14087C1(Test_S14087C1, "S14087C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20231C2  {
  long s20231c2f0[5];
  void *s20231c2f1;
  virtual void  v5(); // _ZN8S20231C22v5Ev
  virtual void  v6(); // _ZN8S20231C22v6Ev
  ~S20231C2(); // tgen
  S20231C2(); // tgen
};
//SIG(-1 S20231C2) C1{ v1 v2 Fl[5] Fp}


void  S20231C2 ::v5(){vfunc_called(this, "_ZN8S20231C22v5Ev");}
void  S20231C2 ::v6(){vfunc_called(this, "_ZN8S20231C22v6Ev");}
S20231C2 ::~S20231C2(){ note_dtor("S20231C2", this);} // tgen
S20231C2 ::S20231C2(){ note_ctor("S20231C2", this);} // tgen

static void Test_S20231C2()
{
  extern Class_Descriptor cd_S20231C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20231C2, buf);
    S20231C2 *dp, &lv = *(dp=new (buf) S20231C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20231C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20231C2)");
    check_field_offset(lv, s20231c2f0, ABISELECT(8,4), "S20231C2.s20231c2f0");
    check_field_offset(lv, s20231c2f1, ABISELECT(48,24), "S20231C2.s20231c2f1");
    test_class_info(&lv, &cd_S20231C2);
    dp->~S20231C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20231C2(Test_S20231C2, "S20231C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20231C2C1Ev();
extern void _ZN8S20231C2D1Ev();
Name_Map name_map_S20231C2[] = {
  NSPAIR(_ZN8S20231C2C1Ev),
  NSPAIR(_ZN8S20231C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20231C2[];
extern void _ZN8S20231C22v5Ev();
extern void _ZN8S20231C22v6Ev();
static  VTBL_ENTRY vtc_S20231C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20231C2[0]),
  (VTBL_ENTRY)&_ZN8S20231C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20231C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20231C2[];
extern  VTBL_ENTRY _ZTV8S20231C2[];
Class_Descriptor cd_S20231C2 = {  "S20231C2", // class name
  0,0,//no base classes
  &(vtc_S20231C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20231C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20231C2),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  S20231C1  : virtual S20231C2 {
  char s20231c1f0;
  virtual void  v1(); // _ZN8S20231C12v1Ev
  virtual void  v2(); // _ZN8S20231C12v2Ev
  virtual void  v3(); // _ZN8S20231C12v3Ev
  virtual void  v4(); // _ZN8S20231C12v4Ev
  ~S20231C1(); // tgen
  S20231C1(); // tgen
};
//SIG(1 S20231C1) C1{ VBC2{ v5 v6 Fl[5] Fp} v1 v2 v3 v4 Fc}


void  S20231C1 ::v1(){vfunc_called(this, "_ZN8S20231C12v1Ev");}
void  S20231C1 ::v2(){vfunc_called(this, "_ZN8S20231C12v2Ev");}
void  S20231C1 ::v3(){vfunc_called(this, "_ZN8S20231C12v3Ev");}
void  S20231C1 ::v4(){vfunc_called(this, "_ZN8S20231C12v4Ev");}
S20231C1 ::~S20231C1(){ note_dtor("S20231C1", this);} // tgen
S20231C1 ::S20231C1(){ note_ctor("S20231C1", this);} // tgen

static void Test_S20231C1()
{
  extern Class_Descriptor cd_S20231C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20231C1, buf);
    S20231C1 *dp, &lv = *(dp=new (buf) S20231C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20231C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20231C1)");
    check_base_class_offset(lv, (S20231C2*), ABISELECT(16,8), "S20231C1");
    check_field_offset(lv, s20231c1f0, ABISELECT(8,4), "S20231C1.s20231c1f0");
    test_class_info(&lv, &cd_S20231C1);
    dp->~S20231C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20231C1(Test_S20231C1, "S20231C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S20231C1C1Ev();
extern void _ZN8S20231C1D1Ev();
Name_Map name_map_S20231C1[] = {
  NSPAIR(_ZN8S20231C1C1Ev),
  NSPAIR(_ZN8S20231C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20231C2;
extern VTBL_ENTRY _ZTI8S20231C2[];
extern  VTBL_ENTRY _ZTV8S20231C2[];
static Base_Class bases_S20231C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20231C2,    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
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20231C1[];
extern void _ZN8S20231C12v1Ev();
extern void _ZN8S20231C12v2Ev();
extern void _ZN8S20231C12v3Ev();
extern void _ZN8S20231C12v4Ev();
extern void _ZN8S20231C22v5Ev();
extern void _ZN8S20231C22v6Ev();
static  VTBL_ENTRY vtc_S20231C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20231C1[0]),
  (VTBL_ENTRY)&_ZN8S20231C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20231C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20231C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20231C12v4Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20231C1[0]),
  (VTBL_ENTRY)&_ZN8S20231C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20231C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S20231C1[];
static  VTT_ENTRY vtt_S20231C1[] = {
  {&(_ZTV8S20231C1[3]),  3,13},
  {&(_ZTV8S20231C1[11]),  11,13},
};
extern VTBL_ENTRY _ZTI8S20231C1[];
extern  VTBL_ENTRY _ZTV8S20231C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20231C1[];
Class_Descriptor cd_S20231C1 = {  "S20231C1", // class name
  bases_S20231C1, 1,
  &(vtc_S20231C1[0]), // expected_vtbl_contents
  &(vtt_S20231C1[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S20231C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20231C1),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20231C1),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  S9747C2  {
  void *s9747c2f0[2];
  virtual  ~S9747C2(); // _ZN7S9747C2D1Ev
  virtual void  v4(); // _ZN7S9747C22v4Ev
  virtual void  v5(); // _ZN7S9747C22v5Ev
  virtual void  v6(); // _ZN7S9747C22v6Ev
  S9747C2(); // tgen
};
//SIG(-1 S9747C2) C1{ vd v1 v2 v3 Fp[2]}


 S9747C2 ::~S9747C2(){ note_dtor("S9747C2", this);}
void  S9747C2 ::v4(){vfunc_called(this, "_ZN7S9747C22v4Ev");}
void  S9747C2 ::v5(){vfunc_called(this, "_ZN7S9747C22v5Ev");}
void  S9747C2 ::v6(){vfunc_called(this, "_ZN7S9747C22v6Ev");}
S9747C2 ::S9747C2(){ note_ctor("S9747C2", this);} // tgen

static void Test_S9747C2()
{
  extern Class_Descriptor cd_S9747C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9747C2, buf);
    S9747C2 *dp, &lv = *(dp=new (buf) S9747C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9747C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9747C2)");
    check_field_offset(lv, s9747c2f0, ABISELECT(8,4), "S9747C2.s9747c2f0");
    test_class_info(&lv, &cd_S9747C2);
    dp->~S9747C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9747C2(Test_S9747C2, "S9747C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9747C2C1Ev();
extern void _ZN7S9747C2D1Ev();
Name_Map name_map_S9747C2[] = {
  NSPAIR(_ZN7S9747C2C1Ev),
  NSPAIR(_ZN7S9747C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9747C2[];
extern void _ZN7S9747C2D1Ev();
extern void _ZN7S9747C2D0Ev();
extern void _ZN7S9747C22v4Ev();
extern void _ZN7S9747C22v5Ev();
extern void _ZN7S9747C22v6Ev();
static  VTBL_ENTRY vtc_S9747C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9747C2[0]),
  (VTBL_ENTRY)&_ZN7S9747C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9747C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9747C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9747C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9747C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9747C2[];
extern  VTBL_ENTRY _ZTV7S9747C2[];
Class_Descriptor cd_S9747C2 = {  "S9747C2", // class name
  0,0,//no base classes
  &(vtc_S9747C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9747C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9747C2),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  S9747C1  : S9747C2 {
  virtual  ~S9747C1(); // _ZN7S9747C1D1Ev
  virtual void  v1(); // _ZN7S9747C12v1Ev
  virtual void  v2(); // _ZN7S9747C12v2Ev
  virtual void  v3(); // _ZN7S9747C12v3Ev
  S9747C1(); // tgen
};
//SIG(1 S9747C1) C1{ BC2{ vd v4 v5 v6 Fp[2]} vd v1 v2 v3}


 S9747C1 ::~S9747C1(){ note_dtor("S9747C1", this);}
void  S9747C1 ::v1(){vfunc_called(this, "_ZN7S9747C12v1Ev");}
void  S9747C1 ::v2(){vfunc_called(this, "_ZN7S9747C12v2Ev");}
void  S9747C1 ::v3(){vfunc_called(this, "_ZN7S9747C12v3Ev");}
S9747C1 ::S9747C1(){ note_ctor("S9747C1", this);} // tgen

static void Test_S9747C1()
{
  extern Class_Descriptor cd_S9747C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9747C1, buf);
    S9747C1 *dp, &lv = *(dp=new (buf) S9747C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9747C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9747C1)");
    check_base_class_offset(lv, (S9747C2*), 0, "S9747C1");
    test_class_info(&lv, &cd_S9747C1);
    dp->~S9747C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9747C1(Test_S9747C1, "S9747C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9747C1C1Ev();
extern void _ZN7S9747C1D1Ev();
Name_Map name_map_S9747C1[] = {
  NSPAIR(_ZN7S9747C1C1Ev),
  NSPAIR(_ZN7S9747C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9747C2;
extern VTBL_ENTRY _ZTI7S9747C2[];
extern  VTBL_ENTRY _ZTV7S9747C2[];
static Base_Class bases_S9747C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9747C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9747C1[];
extern void _ZN7S9747C1D1Ev();
extern void _ZN7S9747C1D0Ev();
extern void _ZN7S9747C22v4Ev();
extern void _ZN7S9747C22v5Ev();
extern void _ZN7S9747C22v6Ev();
extern void _ZN7S9747C12v1Ev();
extern void _ZN7S9747C12v2Ev();
extern void _ZN7S9747C12v3Ev();
static  VTBL_ENTRY vtc_S9747C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9747C1[0]),
  (VTBL_ENTRY)&_ZN7S9747C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9747C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9747C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9747C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9747C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9747C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9747C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9747C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9747C1[];
extern  VTBL_ENTRY _ZTV7S9747C1[];
Class_Descriptor cd_S9747C1 = {  "S9747C1", // class name
  bases_S9747C1, 1,
  &(vtc_S9747C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9747C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9747C1),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  S15737C1  {
  ::S8710C8_nt s15737c1f0;
  void *s15737c1f1[2];
  short s15737c1f2;
  char s15737c1f3[2];
  void  mf15737c1(); // _ZN8S15737C19mf15737c1Ev
};
//SIG(1 S15737C1) C1{ m FC2{ m FC3{ FL[4]}} Fp[2] Fs Fc[2]}


void  S15737C1 ::mf15737c1(){}

static void Test_S15737C1()
{
  {
    init_simple_test("S15737C1");
    S15737C1 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S15737C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15737C1)");
    check_field_offset(lv, s15737c1f0, 0, "S15737C1.s15737c1f0");
    check_field_offset(lv, s15737c1f1, 32, "S15737C1.s15737c1f1");
    check_field_offset(lv, s15737c1f2, ABISELECT(48,40), "S15737C1.s15737c1f2");
    check_field_offset(lv, s15737c1f3, ABISELECT(50,42), "S15737C1.s15737c1f3");
  }
}
static Arrange_To_Call_Me vS15737C1(Test_S15737C1, "S15737C1", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18023C1  {
  void *s18023c1f0[2];
  ::S2014C20_nt s18023c1f1;
  int s18023c1f2;
  void *s18023c1f3;
  void  mf18023c1(); // _ZN8S18023C19mf18023c1Ev
};
//SIG(1 S18023C1) C1{ m Fp[2] FC2{ m Fp Fi FC3{ m}} Fi Fp}


void  S18023C1 ::mf18023c1(){}

static void Test_S18023C1()
{
  {
    init_simple_test("S18023C1");
    S18023C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S18023C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18023C1)");
    check_field_offset(lv, s18023c1f0, 0, "S18023C1.s18023c1f0");
    check_field_offset(lv, s18023c1f1, ABISELECT(16,8), "S18023C1.s18023c1f1");
    check_field_offset(lv, s18023c1f2, ABISELECT(32,20), "S18023C1.s18023c1f2");
    check_field_offset(lv, s18023c1f3, ABISELECT(40,24), "S18023C1.s18023c1f3");
  }
}
static Arrange_To_Call_Me vS18023C1(Test_S18023C1, "S18023C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7596C3  {
  int s7596c3f0;
  void *s7596c3f1;
  virtual void  v4(); // _ZN7S7596C32v4Ev
  ~S7596C3(); // tgen
  S7596C3(); // tgen
};
//SIG(-1 S7596C3) C1{ v1 Fi Fp}


void  S7596C3 ::v4(){vfunc_called(this, "_ZN7S7596C32v4Ev");}
S7596C3 ::~S7596C3(){ note_dtor("S7596C3", this);} // tgen
S7596C3 ::S7596C3(){ note_ctor("S7596C3", this);} // tgen

static void Test_S7596C3()
{
  extern Class_Descriptor cd_S7596C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7596C3, buf);
    S7596C3 *dp, &lv = *(dp=new (buf) S7596C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7596C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7596C3)");
    check_field_offset(lv, s7596c3f0, ABISELECT(8,4), "S7596C3.s7596c3f0");
    check_field_offset(lv, s7596c3f1, ABISELECT(16,8), "S7596C3.s7596c3f1");
    test_class_info(&lv, &cd_S7596C3);
    dp->~S7596C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7596C3(Test_S7596C3, "S7596C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7596C3C1Ev();
extern void _ZN7S7596C3D1Ev();
Name_Map name_map_S7596C3[] = {
  NSPAIR(_ZN7S7596C3C1Ev),
  NSPAIR(_ZN7S7596C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7596C3[];
extern void _ZN7S7596C32v4Ev();
static  VTBL_ENTRY vtc_S7596C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7596C3[0]),
  (VTBL_ENTRY)&_ZN7S7596C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S7596C3[];
extern  VTBL_ENTRY _ZTV7S7596C3[];
Class_Descriptor cd_S7596C3 = {  "S7596C3", // class name
  0,0,//no base classes
  &(vtc_S7596C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7596C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7596C3),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  S7596C2  : virtual S7596C3 {
  virtual void  v5(); // _ZN7S7596C22v5Ev
  virtual void  v6(); // _ZN7S7596C22v6Ev
  ~S7596C2(); // tgen
  S7596C2(); // tgen
};
//SIG(-1 S7596C2) C1{ VBC2{ v3 Fi Fp} v1 v2}


void  S7596C2 ::v5(){vfunc_called(this, "_ZN7S7596C22v5Ev");}
void  S7596C2 ::v6(){vfunc_called(this, "_ZN7S7596C22v6Ev");}
S7596C2 ::~S7596C2(){ note_dtor("S7596C2", this);} // tgen
S7596C2 ::S7596C2(){ note_ctor("S7596C2", this);} // tgen

static void Test_S7596C2()
{
  extern Class_Descriptor cd_S7596C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7596C2, buf);
    S7596C2 *dp, &lv = *(dp=new (buf) S7596C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7596C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7596C2)");
    check_base_class_offset(lv, (S7596C3*), ABISELECT(8,4), "S7596C2");
    test_class_info(&lv, &cd_S7596C2);
    dp->~S7596C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7596C2(Test_S7596C2, "S7596C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7596C2C1Ev();
extern void _ZN7S7596C2D1Ev();
Name_Map name_map_S7596C2[] = {
  NSPAIR(_ZN7S7596C2C1Ev),
  NSPAIR(_ZN7S7596C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7596C3;
extern VTBL_ENTRY _ZTI7S7596C3[];
extern  VTBL_ENTRY _ZTV7S7596C3[];
static Base_Class bases_S7596C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7596C3,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7596C2[];
extern void _ZN7S7596C22v5Ev();
extern void _ZN7S7596C22v6Ev();
extern void _ZN7S7596C32v4Ev();
static  VTBL_ENTRY vtc_S7596C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7596C2[0]),
  (VTBL_ENTRY)&_ZN7S7596C22v5Ev,
  (VTBL_ENTRY)&_ZN7S7596C22v6Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7596C2[0]),
  (VTBL_ENTRY)&_ZN7S7596C32v4Ev,
};
extern VTBL_ENTRY _ZTV7S7596C2[];
static  VTT_ENTRY vtt_S7596C2[] = {
  {&(_ZTV7S7596C2[3]),  3,9},
  {&(_ZTV7S7596C2[8]),  8,9},
};
extern VTBL_ENTRY _ZTI7S7596C2[];
extern  VTBL_ENTRY _ZTV7S7596C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7596C2[];
Class_Descriptor cd_S7596C2 = {  "S7596C2", // class name
  bases_S7596C2, 1,
  &(vtc_S7596C2[0]), // expected_vtbl_contents
  &(vtt_S7596C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7596C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7596C2),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7596C2),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  S7596C1  : S7596C2 {
  virtual void  v1(); // _ZN7S7596C12v1Ev
  virtual void  v2(); // _ZN7S7596C12v2Ev
  virtual void  v3(); // _ZN7S7596C12v3Ev
  ~S7596C1(); // tgen
  S7596C1(); // tgen
};
//SIG(1 S7596C1) C1{ BC2{ VBC3{ v4 Fi Fp} v5 v6} v1 v2 v3}


void  S7596C1 ::v1(){vfunc_called(this, "_ZN7S7596C12v1Ev");}
void  S7596C1 ::v2(){vfunc_called(this, "_ZN7S7596C12v2Ev");}
void  S7596C1 ::v3(){vfunc_called(this, "_ZN7S7596C12v3Ev");}
S7596C1 ::~S7596C1(){ note_dtor("S7596C1", this);} // tgen
S7596C1 ::S7596C1(){ note_ctor("S7596C1", this);} // tgen

static void Test_S7596C1()
{
  extern Class_Descriptor cd_S7596C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7596C1, buf);
    S7596C1 *dp, &lv = *(dp=new (buf) S7596C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7596C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7596C1)");
    check_base_class_offset(lv, (S7596C3*)(S7596C2*), ABISELECT(8,4), "S7596C1");
    check_base_class_offset(lv, (S7596C2*), 0, "S7596C1");
    test_class_info(&lv, &cd_S7596C1);
    dp->~S7596C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7596C1(Test_S7596C1, "S7596C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7596C1C1Ev();
extern void _ZN7S7596C1D1Ev();
Name_Map name_map_S7596C1[] = {
  NSPAIR(_ZN7S7596C1C1Ev),
  NSPAIR(_ZN7S7596C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7596C3;
extern VTBL_ENTRY _ZTI7S7596C3[];
extern  VTBL_ENTRY _ZTV7S7596C3[];
extern Class_Descriptor cd_S7596C2;
extern VTBL_ENTRY _ZTI7S7596C2[];
extern  VTBL_ENTRY _ZTV7S7596C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7596C2[];
static Base_Class bases_S7596C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7596C3,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7596C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7596C1[];
extern void _ZN7S7596C22v5Ev();
extern void _ZN7S7596C22v6Ev();
extern void _ZN7S7596C12v1Ev();
extern void _ZN7S7596C12v2Ev();
extern void _ZN7S7596C12v3Ev();
extern void _ZN7S7596C32v4Ev();
static  VTBL_ENTRY vtc_S7596C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7596C1[0]),
  (VTBL_ENTRY)&_ZN7S7596C22v5Ev,
  (VTBL_ENTRY)&_ZN7S7596C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7596C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7596C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7596C12v3Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7596C1[0]),
  (VTBL_ENTRY)&_ZN7S7596C32v4Ev,
};
extern VTBL_ENTRY _ZTV7S7596C1[];
extern void _ZN7S7596C22v5Ev();
extern void _ZN7S7596C22v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7596C2__7S7596C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7596C2[0]),
  (VTBL_ENTRY)&_ZN7S7596C22v5Ev,
  (VTBL_ENTRY)&_ZN7S7596C22v6Ev,
};
extern void _ZN7S7596C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7596C3__7S7596C2__7S7596C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7596C2[0]),
  (VTBL_ENTRY)&_ZN7S7596C32v4Ev,
};
static  VTT_ENTRY vtt_S7596C1[] = {
  {&(_ZTV7S7596C1[3]),  3,12},
  {&(_tg__ZTV7S7596C2__7S7596C1[3]),  3,5},
  {&(_tg__ZTV7S7596C3__7S7596C2__7S7596C1[3]),  3,4},
  {&(_ZTV7S7596C1[11]),  11,12},
};
extern VTBL_ENTRY _ZTI7S7596C1[];
extern  VTBL_ENTRY _ZTV7S7596C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7596C1[];
Class_Descriptor cd_S7596C1 = {  "S7596C1", // class name
  bases_S7596C1, 2,
  &(vtc_S7596C1[0]), // expected_vtbl_contents
  &(vtt_S7596C1[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7596C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7596C1),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7596C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11414C2_nt  {
  int s11414c2f0;
  void *s11414c2f1[3];
  int s11414c2f2;
  void *s11414c2f3;
  int s11414c2f4[17];
};
//SIG(-1 S11414C2_nt) C1{ Fi Fp[3] Fi Fp Fi[17]}



//skip512 S11414C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11414C1  {
  ::S11414C2_nt s11414c1f0;
  int s11414c1f1[4];
};
//SIG(1 S11414C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi[4]}



static void Test_S11414C1()
{
  {
    init_simple_test("S11414C1");
    S11414C1 lv;
    check2(sizeof(lv), ABISELECT(136,108), "sizeof(S11414C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11414C1)");
    check_field_offset(lv, s11414c1f0, 0, "S11414C1.s11414c1f0");
    check_field_offset(lv, s11414c1f1, ABISELECT(120,92), "S11414C1.s11414c1f1");
  }
}
static Arrange_To_Call_Me vS11414C1(Test_S11414C1, "S11414C1", ABISELECT(136,108));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18685C1  {
  void *s18685c1f0;
  ::S20038C2 s18685c1f1;
  virtual void  v1(); // _ZN8S18685C12v1Ev
  virtual void  v2(); // _ZN8S18685C12v2Ev
  virtual void  v3(); // _ZN8S18685C12v3Ev
  virtual void  v4(); // _ZN8S18685C12v4Ev
  ~S18685C1(); // tgen
  S18685C1(); // tgen
};
//SIG(1 S18685C1) C1{ v1 v2 v3 v4 Fp FC2{ v5 v6 Fs[6]}}


void  S18685C1 ::v1(){vfunc_called(this, "_ZN8S18685C12v1Ev");}
void  S18685C1 ::v2(){vfunc_called(this, "_ZN8S18685C12v2Ev");}
void  S18685C1 ::v3(){vfunc_called(this, "_ZN8S18685C12v3Ev");}
void  S18685C1 ::v4(){vfunc_called(this, "_ZN8S18685C12v4Ev");}
S18685C1 ::~S18685C1(){ note_dtor("S18685C1", this);} // tgen
S18685C1 ::S18685C1(){ note_ctor("S18685C1", this);} // tgen

static void Test_S18685C1()
{
  extern Class_Descriptor cd_S18685C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S18685C1, buf);
    S18685C1 *dp, &lv = *(dp=new (buf) S18685C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S18685C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18685C1)");
    check_field_offset(lv, s18685c1f0, ABISELECT(8,4), "S18685C1.s18685c1f0");
    check_field_offset(lv, s18685c1f1, ABISELECT(16,8), "S18685C1.s18685c1f1");
    test_class_info(&lv, &cd_S18685C1);
    dp->~S18685C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18685C1(Test_S18685C1, "S18685C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S18685C1C1Ev();
extern void _ZN8S18685C1D1Ev();
Name_Map name_map_S18685C1[] = {
  NSPAIR(_ZN8S18685C1C1Ev),
  NSPAIR(_ZN8S18685C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18685C1[];
extern void _ZN8S18685C12v1Ev();
extern void _ZN8S18685C12v2Ev();
extern void _ZN8S18685C12v3Ev();
extern void _ZN8S18685C12v4Ev();
static  VTBL_ENTRY vtc_S18685C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18685C1[0]),
  (VTBL_ENTRY)&_ZN8S18685C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18685C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18685C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18685C12v4Ev,
};
extern VTBL_ENTRY _ZTI8S18685C1[];
extern  VTBL_ENTRY _ZTV8S18685C1[];
Class_Descriptor cd_S18685C1 = {  "S18685C1", // class name
  0,0,//no base classes
  &(vtc_S18685C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S18685C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18685C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12455C2  {
  int s12455c2f0[3];
  short s12455c2f1;
  int s12455c2f2;
  char s12455c2f3;
  int s12455c2f4;
  void *s12455c2f5;
};
//SIG(-1 S12455C2) C1{ Fi[3] Fs Fi Fc Fi Fp}



static void Test_S12455C2()
{
  {
    init_simple_test("S12455C2");
    S12455C2 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S12455C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12455C2)");
    check_field_offset(lv, s12455c2f0, 0, "S12455C2.s12455c2f0");
    check_field_offset(lv, s12455c2f1, 12, "S12455C2.s12455c2f1");
    check_field_offset(lv, s12455c2f2, 16, "S12455C2.s12455c2f2");
    check_field_offset(lv, s12455c2f3, 20, "S12455C2.s12455c2f3");
    check_field_offset(lv, s12455c2f4, 24, "S12455C2.s12455c2f4");
    check_field_offset(lv, s12455c2f5, ABISELECT(32,28), "S12455C2.s12455c2f5");
  }
}
static Arrange_To_Call_Me vS12455C2(Test_S12455C2, "S12455C2", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12455C1  {
  int s12455c1f0;
  ::S12455C2 s12455c1f1;
  void *s12455c1f2;
};
//SIG(1 S12455C1) C1{ Fi FC2{ Fi[3] Fs Fi Fc Fi Fp} Fp}



static void Test_S12455C1()
{
  {
    init_simple_test("S12455C1");
    S12455C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S12455C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12455C1)");
    check_field_offset(lv, s12455c1f0, 0, "S12455C1.s12455c1f0");
    check_field_offset(lv, s12455c1f1, ABISELECT(8,4), "S12455C1.s12455c1f1");
    check_field_offset(lv, s12455c1f2, ABISELECT(48,36), "S12455C1.s12455c1f2");
  }
}
static Arrange_To_Call_Me vS12455C1(Test_S12455C1, "S12455C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13302C1  {
  int s13302c1f0[3];
  char s13302c1f1[2];
  int s13302c1f2;
  void *s13302c1f3;
  int s13302c1f4[2];
  short s13302c1f5[6];
};
//SIG(1 S13302C1) C1{ Fi[3] Fc[2] Fi Fp Fi[2] Fs[6]}



static void Test_S13302C1()
{
  {
    init_simple_test("S13302C1");
    S13302C1 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S13302C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13302C1)");
    check_field_offset(lv, s13302c1f0, 0, "S13302C1.s13302c1f0");
    check_field_offset(lv, s13302c1f1, 12, "S13302C1.s13302c1f1");
    check_field_offset(lv, s13302c1f2, 16, "S13302C1.s13302c1f2");
    check_field_offset(lv, s13302c1f3, ABISELECT(24,20), "S13302C1.s13302c1f3");
    check_field_offset(lv, s13302c1f4, ABISELECT(32,24), "S13302C1.s13302c1f4");
    check_field_offset(lv, s13302c1f5, ABISELECT(40,32), "S13302C1.s13302c1f5");
  }
}
static Arrange_To_Call_Me vS13302C1(Test_S13302C1, "S13302C1", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10972C1  {
  char s10972c1f0[6];
  int s10972c1f1[2];
  void *s10972c1f2[4];
  int s10972c1f3;
  short s10972c1f4[2];
  int s10972c1f5;
};
//SIG(1 S10972C1) C1{ Fc[6] Fi[2] Fp[4] Fi Fs[2] Fi}



static void Test_S10972C1()
{
  {
    init_simple_test("S10972C1");
    S10972C1 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S10972C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10972C1)");
    check_field_offset(lv, s10972c1f0, 0, "S10972C1.s10972c1f0");
    check_field_offset(lv, s10972c1f1, 8, "S10972C1.s10972c1f1");
    check_field_offset(lv, s10972c1f2, 16, "S10972C1.s10972c1f2");
    check_field_offset(lv, s10972c1f3, ABISELECT(48,32), "S10972C1.s10972c1f3");
    check_field_offset(lv, s10972c1f4, ABISELECT(52,36), "S10972C1.s10972c1f4");
    check_field_offset(lv, s10972c1f5, ABISELECT(56,40), "S10972C1.s10972c1f5");
  }
}
static Arrange_To_Call_Me vS10972C1(Test_S10972C1, "S10972C1", ABISELECT(64,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8321C1  : S19169C11_nt {
  ::S3639C14_nt s8321c1f0[64];
  virtual  ~S8321C1(); // _ZN7S8321C1D1Ev
  S8321C1(); // tgen
};
//SIG(1 S8321C1) C1{ BC2{ vd m} vd FC3{ m Fp[2]}[64]}


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

static void Test_S8321C1()
{
  extern Class_Descriptor cd_S8321C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[130];
    init_test(&cd_S8321C1, buf);
    S8321C1 *dp, &lv = *(dp=new (buf) S8321C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1032,516), "sizeof(S8321C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8321C1)");
    check_base_class_offset(lv, (S19169C11_nt*), 0, "S8321C1");
    check_field_offset(lv, s8321c1f0, ABISELECT(8,4), "S8321C1.s8321c1f0");
    test_class_info(&lv, &cd_S8321C1);
    dp->~S8321C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8321C1(Test_S8321C1, "S8321C1", ABISELECT(1032,516));

#else // __cplusplus

extern void _ZN7S8321C1C1Ev();
extern void _ZN7S8321C1D1Ev();
Name_Map name_map_S8321C1[] = {
  NSPAIR(_ZN7S8321C1C1Ev),
  NSPAIR(_ZN7S8321C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19169C11_nt;
extern VTBL_ENTRY _ZTI12S19169C11_nt[];
extern  VTBL_ENTRY _ZTV12S19169C11_nt[];
static Base_Class bases_S8321C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19169C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8321C1[];
extern void _ZN7S8321C1D1Ev();
extern void _ZN7S8321C1D0Ev();
static  VTBL_ENTRY vtc_S8321C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8321C1[0]),
  (VTBL_ENTRY)&_ZN7S8321C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8321C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8321C1[];
extern  VTBL_ENTRY _ZTV7S8321C1[];
Class_Descriptor cd_S8321C1 = {  "S8321C1", // class name
  bases_S8321C1, 1,
  &(vtc_S8321C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1032,516), // object size
  NSPAIRA(_ZTI7S8321C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8321C1),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  S17290C1  {
  int s17290c1f0[7];
  ::S3222C18 s17290c1f1;
  void  mf17290c1(); // _ZN8S17290C19mf17290c1Ev
};
//SIG(1 S17290C1) C1{ m Fi[7] FC2{ BC3{ m Fp Fi[2]}}}


void  S17290C1 ::mf17290c1(){}

static void Test_S17290C1()
{
  {
    init_simple_test("S17290C1");
    S17290C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S17290C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17290C1)");
    check_field_offset(lv, s17290c1f0, 0, "S17290C1.s17290c1f0");
    check_field_offset(lv, s17290c1f1, ABISELECT(32,28), "S17290C1.s17290c1f1");
  }
}
static Arrange_To_Call_Me vS17290C1(Test_S17290C1, "S17290C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17036C2_nt  {
  void *s17036c2f0;
  int s17036c2f1;
  void  mf17036c2(); // _ZN11S17036C2_nt9mf17036c2Ev
};
//SIG(-1 S17036C2_nt) C1{ m Fp Fi}


void  S17036C2_nt ::mf17036c2(){}

//skip512 S17036C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17036C1  {
  int s17036c1f0[128];
  ::S17036C2_nt s17036c1f1;
  int s17036c1f2[2];
  void  mf17036c1(); // _ZN8S17036C19mf17036c1Ev
};
//SIG(1 S17036C1) C1{ m Fi[128] FC2{ m Fp Fi} Fi[2]}


void  S17036C1 ::mf17036c1(){}

static void Test_S17036C1()
{
  {
    init_simple_test("S17036C1");
    S17036C1 lv;
    check2(sizeof(lv), ABISELECT(536,528), "sizeof(S17036C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17036C1)");
    check_field_offset(lv, s17036c1f0, 0, "S17036C1.s17036c1f0");
    check_field_offset(lv, s17036c1f1, 512, "S17036C1.s17036c1f1");
    check_field_offset(lv, s17036c1f2, ABISELECT(528,520), "S17036C1.s17036c1f2");
  }
}
static Arrange_To_Call_Me vS17036C1(Test_S17036C1, "S17036C1", ABISELECT(536,528));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14269C3_nt  {
  int s14269c3f0;
  int s14269c3f1;
};
//SIG(1 S14269C3_nt) C1{ Fi[2]}



//skip512 S14269C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14269C2  {
  int s14269c2f0;
  int s14269c2f1;
  ::S14269C3_nt s14269c2f2;
};
//SIG(1 S14269C2) U1{ Fi Fi FC2{ Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14269C1  {
  void *s14269c1f0;
  int s14269c1f1;
  ::S14269C2 s14269c1f2;
};
//SIG(1 S14269C1) C1{ Fp Fi FU2{ Fi Fi FC3{ Fi Fi}}}



static void Test_S14269C1()
{
  {
    init_simple_test("S14269C1");
    S14269C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S14269C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14269C1)");
    check_field_offset(lv, s14269c1f0, 0, "S14269C1.s14269c1f0");
    check_field_offset(lv, s14269c1f1, ABISELECT(8,4), "S14269C1.s14269c1f1");
    check_field_offset(lv, s14269c1f2, ABISELECT(12,8), "S14269C1.s14269c1f2");
  }
}
static Arrange_To_Call_Me vS14269C1(Test_S14269C1, "S14269C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16044C3_nt  {
  int s16044c3f0[3];
  void  mf16044c3(); // _ZN11S16044C3_nt9mf16044c3Ev
};
//SIG(-1 S16044C3_nt) C1{ m Fi[3]}


void  S16044C3_nt ::mf16044c3(){}

//skip512 S16044C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16044C1  {
  ::S3222C13_nt s16044c1f0;
  ::S16044C3_nt s16044c1f1;
  void  mf16044c1(); // _ZN8S16044C19mf16044c1Ev
};
//SIG(1 S16044C1) C1{ m FC2{ m Fi[3]} FC3{ m Fi[3]}}


void  S16044C1 ::mf16044c1(){}

static void Test_S16044C1()
{
  {
    init_simple_test("S16044C1");
    S16044C1 lv;
    check2(sizeof(lv), 24, "sizeof(S16044C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16044C1)");
    check_field_offset(lv, s16044c1f0, 0, "S16044C1.s16044c1f0");
    check_field_offset(lv, s16044c1f1, 12, "S16044C1.s16044c1f1");
  }
}
static Arrange_To_Call_Me vS16044C1(Test_S16044C1, "S16044C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13863C2_nt  {
  char s13863c2f0[16];
  int s13863c2f1;
};
//SIG(-1 S13863C2_nt) C1{ Fc[16] Fi}



//skip512 S13863C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13863C1  {
  __tsi64 s13863c1f0;
  short s13863c1f1;
  char s13863c1f2[2];
  ::S13863C2_nt s13863c1f3;
};
//SIG(1 S13863C1) C1{ FL Fs Fc[2] FC2{ Fc[16] Fi}}



static void Test_S13863C1()
{
  {
    init_simple_test("S13863C1");
    S13863C1 lv;
    check2(sizeof(lv), 32, "sizeof(S13863C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13863C1)");
    check_field_offset(lv, s13863c1f0, 0, "S13863C1.s13863c1f0");
    check_field_offset(lv, s13863c1f1, 8, "S13863C1.s13863c1f1");
    check_field_offset(lv, s13863c1f2, 10, "S13863C1.s13863c1f2");
    check_field_offset(lv, s13863c1f3, 12, "S13863C1.s13863c1f3");
  }
}
static Arrange_To_Call_Me vS13863C1(Test_S13863C1, "S13863C1", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12895C2  {
  void *s12895c2f0;
  void *s12895c2f1;
  void *s12895c2f2;
  void *s12895c2f3;
  void *s12895c2f4;
  void *s12895c2f5;
};
//SIG(1 S12895C2) U1{ Fp Fp Fp Fp Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12895C1  {
  int s12895c1f0;
  ::S12895C2 s12895c1f1;
};
//SIG(1 S12895C1) C1{ Fi FU2{ Fp Fp Fp Fp Fp Fp}}



static void Test_S12895C1()
{
  {
    init_simple_test("S12895C1");
    S12895C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S12895C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12895C1)");
    check_field_offset(lv, s12895c1f0, 0, "S12895C1.s12895c1f0");
    check_field_offset(lv, s12895c1f1, ABISELECT(8,4), "S12895C1.s12895c1f1");
  }
}
static Arrange_To_Call_Me vS12895C1(Test_S12895C1, "S12895C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11860C2  {
  void *s11860c2f0[2];
  int s11860c2f1[2];
  __tsi64 s11860c2f2[24];
};
//SIG(-1 S11860C2) C1{ Fp[2] Fi[2] FL[24]}



static void Test_S11860C2()
{
  {
    init_simple_test("S11860C2");
    S11860C2 lv;
    check2(sizeof(lv), ABISELECT(216,208), "sizeof(S11860C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11860C2)");
    check_field_offset(lv, s11860c2f0, 0, "S11860C2.s11860c2f0");
    check_field_offset(lv, s11860c2f1, ABISELECT(16,8), "S11860C2.s11860c2f1");
    check_field_offset(lv, s11860c2f2, ABISELECT(24,16), "S11860C2.s11860c2f2");
  }
}
static Arrange_To_Call_Me vS11860C2(Test_S11860C2, "S11860C2", ABISELECT(216,208));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11860C1  {
  ::S11860C2 s11860c1f0;
  int s11860c1f1;
};
//SIG(1 S11860C1) C1{ FC2{ Fp[2] Fi[2] FL[24]} Fi}



static void Test_S11860C1()
{
  {
    init_simple_test("S11860C1");
    S11860C1 lv;
    check2(sizeof(lv), ABISELECT(224,212), "sizeof(S11860C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11860C1)");
    check_field_offset(lv, s11860c1f0, 0, "S11860C1.s11860c1f0");
    check_field_offset(lv, s11860c1f1, ABISELECT(216,208), "S11860C1.s11860c1f1");
  }
}
static Arrange_To_Call_Me vS11860C1(Test_S11860C1, "S11860C1", ABISELECT(224,212));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19710C1  : virtual S3222C4_nt {
  virtual  ~S19710C1(); // _ZN8S19710C1D2Ev
  virtual void  v1(); // _ZN8S19710C12v1Ev
  virtual void  v2(); // _ZN8S19710C12v2Ev
  virtual void  v3(); // _ZN8S19710C12v3Ev
  S19710C1(); // tgen
};
//SIG(1 S19710C1) C1{ VBC2{ m Fi[2]} vd v1 v2 v3}


 S19710C1 ::~S19710C1(){ note_dtor("S19710C1", this);}
void  S19710C1 ::v1(){vfunc_called(this, "_ZN8S19710C12v1Ev");}
void  S19710C1 ::v2(){vfunc_called(this, "_ZN8S19710C12v2Ev");}
void  S19710C1 ::v3(){vfunc_called(this, "_ZN8S19710C12v3Ev");}
S19710C1 ::S19710C1(){ note_ctor("S19710C1", this);} // tgen

static void Test_S19710C1()
{
  extern Class_Descriptor cd_S19710C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19710C1, buf);
    S19710C1 *dp, &lv = *(dp=new (buf) S19710C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19710C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19710C1)");
    check_base_class_offset(lv, (S3222C4_nt*), ABISELECT(8,4), "S19710C1");
    test_class_info(&lv, &cd_S19710C1);
    dp->~S19710C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19710C1(Test_S19710C1, "S19710C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19710C1C1Ev();
extern void _ZN8S19710C1D2Ev();
Name_Map name_map_S19710C1[] = {
  NSPAIR(_ZN8S19710C1C1Ev),
  NSPAIR(_ZN8S19710C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3222C4_nt;
extern VTBL_ENTRY _ZTI10S3222C4_nt[];
static Base_Class bases_S19710C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3222C4_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 _ZTI8S19710C1[];
extern void _ZN8S19710C1D1Ev();
extern void _ZN8S19710C1D0Ev();
extern void _ZN8S19710C12v1Ev();
extern void _ZN8S19710C12v2Ev();
extern void _ZN8S19710C12v3Ev();
static  VTBL_ENTRY vtc_S19710C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19710C1[0]),
  (VTBL_ENTRY)&_ZN8S19710C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19710C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19710C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19710C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19710C12v3Ev,
};
extern VTBL_ENTRY _ZTV8S19710C1[];
static  VTT_ENTRY vtt_S19710C1[] = {
  {&(_ZTV8S19710C1[3]),  3,8},
};
extern VTBL_ENTRY _ZTI8S19710C1[];
extern  VTBL_ENTRY _ZTV8S19710C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19710C1[];
Class_Descriptor cd_S19710C1 = {  "S19710C1", // class name
  bases_S19710C1, 1,
  &(vtc_S19710C1[0]), // expected_vtbl_contents
  &(vtt_S19710C1[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19710C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19710C1),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19710C1),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  S6776C2  {
  virtual  ~S6776C2(); // _ZN7S6776C2D1Ev
  virtual void  v3(); // _ZN7S6776C22v3Ev
  virtual void  v4(); // _ZN7S6776C22v4Ev
  S6776C2(); // tgen
};
//SIG(-1 S6776C2) C1{ vd v1 v2}


 S6776C2 ::~S6776C2(){ note_dtor("S6776C2", this);}
void  S6776C2 ::v3(){vfunc_called(this, "_ZN7S6776C22v3Ev");}
void  S6776C2 ::v4(){vfunc_called(this, "_ZN7S6776C22v4Ev");}
S6776C2 ::S6776C2(){ note_ctor("S6776C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6776C2C1Ev();
extern void _ZN7S6776C2D1Ev();
Name_Map name_map_S6776C2[] = {
  NSPAIR(_ZN7S6776C2C1Ev),
  NSPAIR(_ZN7S6776C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6776C2[];
extern void _ZN7S6776C2D1Ev();
extern void _ZN7S6776C2D0Ev();
extern void _ZN7S6776C22v3Ev();
extern void _ZN7S6776C22v4Ev();
static  VTBL_ENTRY vtc_S6776C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6776C2[0]),
  (VTBL_ENTRY)&_ZN7S6776C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6776C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6776C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6776C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6776C2[];
extern  VTBL_ENTRY _ZTV7S6776C2[];
Class_Descriptor cd_S6776C2 = {  "S6776C2", // class name
  0,0,//no base classes
  &(vtc_S6776C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6776C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6776C2),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  S6776C1  : S6776C2 {
  void *s6776c1f0;
  virtual  ~S6776C1(); // _ZN7S6776C1D1Ev
  virtual void  v1(); // _ZN7S6776C12v1Ev
  virtual void  v2(); // _ZN7S6776C12v2Ev
  S6776C1(); // tgen
};
//SIG(1 S6776C1) C1{ BC2{ vd v3 v4} vd v1 v2 Fp}


 S6776C1 ::~S6776C1(){ note_dtor("S6776C1", this);}
void  S6776C1 ::v1(){vfunc_called(this, "_ZN7S6776C12v1Ev");}
void  S6776C1 ::v2(){vfunc_called(this, "_ZN7S6776C12v2Ev");}
S6776C1 ::S6776C1(){ note_ctor("S6776C1", this);} // tgen

static void Test_S6776C1()
{
  extern Class_Descriptor cd_S6776C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6776C1, buf);
    S6776C1 *dp, &lv = *(dp=new (buf) S6776C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6776C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6776C1)");
    check_base_class_offset(lv, (S6776C2*), 0, "S6776C1");
    check_field_offset(lv, s6776c1f0, ABISELECT(8,4), "S6776C1.s6776c1f0");
    test_class_info(&lv, &cd_S6776C1);
    dp->~S6776C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6776C1(Test_S6776C1, "S6776C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6776C1C1Ev();
extern void _ZN7S6776C1D1Ev();
Name_Map name_map_S6776C1[] = {
  NSPAIR(_ZN7S6776C1C1Ev),
  NSPAIR(_ZN7S6776C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6776C2;
extern VTBL_ENTRY _ZTI7S6776C2[];
extern  VTBL_ENTRY _ZTV7S6776C2[];
static Base_Class bases_S6776C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6776C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6776C1[];
extern void _ZN7S6776C1D1Ev();
extern void _ZN7S6776C1D0Ev();
extern void _ZN7S6776C22v3Ev();
extern void _ZN7S6776C22v4Ev();
extern void _ZN7S6776C12v1Ev();
extern void _ZN7S6776C12v2Ev();
static  VTBL_ENTRY vtc_S6776C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6776C1[0]),
  (VTBL_ENTRY)&_ZN7S6776C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6776C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6776C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6776C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6776C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6776C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6776C1[];
extern  VTBL_ENTRY _ZTV7S6776C1[];
Class_Descriptor cd_S6776C1 = {  "S6776C1", // class name
  bases_S6776C1, 1,
  &(vtc_S6776C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6776C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6776C1),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  S18790C1  {
  short s18790c1f0;
  int s18790c1f1;
  virtual void  v1(); // _ZN8S18790C12v1Ev
  virtual void  v2(); // _ZN8S18790C12v2Ev
  virtual void  v3(); // _ZN8S18790C12v3Ev
  virtual void  v4(); // _ZN8S18790C12v4Ev
  virtual void  v5(); // _ZN8S18790C12v5Ev
  virtual void  v6(); // _ZN8S18790C12v6Ev
  ~S18790C1(); // tgen
  S18790C1(); // tgen
};
//SIG(1 S18790C1) C1{ v1 v2 v3 v4 v5 v6 Fs Fi}


void  S18790C1 ::v1(){vfunc_called(this, "_ZN8S18790C12v1Ev");}
void  S18790C1 ::v2(){vfunc_called(this, "_ZN8S18790C12v2Ev");}
void  S18790C1 ::v3(){vfunc_called(this, "_ZN8S18790C12v3Ev");}
void  S18790C1 ::v4(){vfunc_called(this, "_ZN8S18790C12v4Ev");}
void  S18790C1 ::v5(){vfunc_called(this, "_ZN8S18790C12v5Ev");}
void  S18790C1 ::v6(){vfunc_called(this, "_ZN8S18790C12v6Ev");}
S18790C1 ::~S18790C1(){ note_dtor("S18790C1", this);} // tgen
S18790C1 ::S18790C1(){ note_ctor("S18790C1", this);} // tgen

static void Test_S18790C1()
{
  extern Class_Descriptor cd_S18790C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18790C1, buf);
    S18790C1 *dp, &lv = *(dp=new (buf) S18790C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18790C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18790C1)");
    check_field_offset(lv, s18790c1f0, ABISELECT(8,4), "S18790C1.s18790c1f0");
    check_field_offset(lv, s18790c1f1, ABISELECT(12,8), "S18790C1.s18790c1f1");
    test_class_info(&lv, &cd_S18790C1);
    dp->~S18790C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18790C1(Test_S18790C1, "S18790C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18790C1C1Ev();
extern void _ZN8S18790C1D1Ev();
Name_Map name_map_S18790C1[] = {
  NSPAIR(_ZN8S18790C1C1Ev),
  NSPAIR(_ZN8S18790C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18790C1[];
extern void _ZN8S18790C12v1Ev();
extern void _ZN8S18790C12v2Ev();
extern void _ZN8S18790C12v3Ev();
extern void _ZN8S18790C12v4Ev();
extern void _ZN8S18790C12v5Ev();
extern void _ZN8S18790C12v6Ev();
static  VTBL_ENTRY vtc_S18790C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18790C1[0]),
  (VTBL_ENTRY)&_ZN8S18790C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18790C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18790C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18790C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18790C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18790C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18790C1[];
extern  VTBL_ENTRY _ZTV8S18790C1[];
Class_Descriptor cd_S18790C1 = {  "S18790C1", // class name
  0,0,//no base classes
  &(vtc_S18790C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18790C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18790C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14288C1  {
  void *s14288c1f0;
  int s14288c1f1[2];
  __tsi64 s14288c1f2[3];
  int s14288c1f3[2];
  char s14288c1f4;
};
//SIG(1 S14288C1) C1{ Fp Fi[2] FL[3] Fi[2] Fc}



static void Test_S14288C1()
{
  {
    init_simple_test("S14288C1");
    S14288C1 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S14288C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14288C1)");
    check_field_offset(lv, s14288c1f0, 0, "S14288C1.s14288c1f0");
    check_field_offset(lv, s14288c1f1, ABISELECT(8,4), "S14288C1.s14288c1f1");
    check_field_offset(lv, s14288c1f2, ABISELECT(16,12), "S14288C1.s14288c1f2");
    check_field_offset(lv, s14288c1f3, ABISELECT(40,36), "S14288C1.s14288c1f3");
    check_field_offset(lv, s14288c1f4, ABISELECT(48,44), "S14288C1.s14288c1f4");
  }
}
static Arrange_To_Call_Me vS14288C1(Test_S14288C1, "S14288C1", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13866C1  {
  long s13866c1f0;
  short s13866c1f1;
  char s13866c1f2[6];
  int s13866c1f3[2];
  void *s13866c1f4;
  int s13866c1f5;
};
//SIG(1 S13866C1) C1{ Fl Fs Fc[6] Fi[2] Fp Fi}



static void Test_S13866C1()
{
  {
    init_simple_test("S13866C1");
    S13866C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13866C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13866C1)");
    check_field_offset(lv, s13866c1f0, 0, "S13866C1.s13866c1f0");
    check_field_offset(lv, s13866c1f1, ABISELECT(8,4), "S13866C1.s13866c1f1");
    check_field_offset(lv, s13866c1f2, ABISELECT(10,6), "S13866C1.s13866c1f2");
    check_field_offset(lv, s13866c1f3, ABISELECT(16,12), "S13866C1.s13866c1f3");
    check_field_offset(lv, s13866c1f4, ABISELECT(24,20), "S13866C1.s13866c1f4");
    check_field_offset(lv, s13866c1f5, ABISELECT(32,24), "S13866C1.s13866c1f5");
  }
}
static Arrange_To_Call_Me vS13866C1(Test_S13866C1, "S13866C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18744C1  {
  unsigned short s18744c1f0:1;
  __tsi64 s18744c1f1;
  virtual void  v1(); // _ZN8S18744C12v1Ev
  virtual void  v2(); // _ZN8S18744C12v2Ev
  virtual void  v3(); // _ZN8S18744C12v3Ev
  virtual void  v4(); // _ZN8S18744C12v4Ev
  virtual void  v5(); // _ZN8S18744C12v5Ev
  ~S18744C1(); // tgen
  S18744C1(); // tgen
};
//SIG(1 S18744C1) C1{ v1 v2 v3 v4 v5 Fs:1 FL}


void  S18744C1 ::v1(){vfunc_called(this, "_ZN8S18744C12v1Ev");}
void  S18744C1 ::v2(){vfunc_called(this, "_ZN8S18744C12v2Ev");}
void  S18744C1 ::v3(){vfunc_called(this, "_ZN8S18744C12v3Ev");}
void  S18744C1 ::v4(){vfunc_called(this, "_ZN8S18744C12v4Ev");}
void  S18744C1 ::v5(){vfunc_called(this, "_ZN8S18744C12v5Ev");}
S18744C1 ::~S18744C1(){ note_dtor("S18744C1", this);} // tgen
S18744C1 ::S18744C1(){ note_ctor("S18744C1", this);} // tgen

static void Test_S18744C1()
{
  extern Class_Descriptor cd_S18744C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S18744C1, buf);
    S18744C1 *dp, &lv = *(dp=new (buf) S18744C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18744C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18744C1)");
    set_bf_and_test(lv, s18744c1f0, ABISELECT(8,4), 0, 1, 1, "S18744C1");
    check_field_offset(lv, s18744c1f1, ABISELECT(16,8), "S18744C1.s18744c1f1");
    test_class_info(&lv, &cd_S18744C1);
    dp->~S18744C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18744C1(Test_S18744C1, "S18744C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S18744C1C1Ev();
extern void _ZN8S18744C1D1Ev();
Name_Map name_map_S18744C1[] = {
  NSPAIR(_ZN8S18744C1C1Ev),
  NSPAIR(_ZN8S18744C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18744C1[];
extern void _ZN8S18744C12v1Ev();
extern void _ZN8S18744C12v2Ev();
extern void _ZN8S18744C12v3Ev();
extern void _ZN8S18744C12v4Ev();
extern void _ZN8S18744C12v5Ev();
static  VTBL_ENTRY vtc_S18744C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18744C1[0]),
  (VTBL_ENTRY)&_ZN8S18744C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18744C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18744C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18744C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18744C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18744C1[];
extern  VTBL_ENTRY _ZTV8S18744C1[];
Class_Descriptor cd_S18744C1 = {  "S18744C1", // class name
  0,0,//no base classes
  &(vtc_S18744C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S18744C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18744C1),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  S12045C1  {
  ::S3222C4_nt s12045c1f0;
  ::S3222C4_nt s12045c1f1;
  void *s12045c1f2[2];
};
//SIG(1 S12045C1) C1{ FC2{ m Fi[2]} FC2 Fp[2]}



static void Test_S12045C1()
{
  {
    init_simple_test("S12045C1");
    S12045C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S12045C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12045C1)");
    check_field_offset(lv, s12045c1f0, 0, "S12045C1.s12045c1f0");
    check_field_offset(lv, s12045c1f1, 8, "S12045C1.s12045c1f1");
    check_field_offset(lv, s12045c1f2, 16, "S12045C1.s12045c1f2");
  }
}
static Arrange_To_Call_Me vS12045C1(Test_S12045C1, "S12045C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5862C1  : S6118C14_nt {
  ::S3639C14_nt s5862c1f0;
};
//SIG(1 S5862C1) C1{ BC2{ m Fi} FC3{ m Fp[2]}}



static void Test_S5862C1()
{
  extern Class_Descriptor cd_S5862C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5862C1, buf);
    S5862C1 &lv = *(new (buf) S5862C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5862C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5862C1)");
    check_base_class_offset(lv, (S6118C14_nt*), 0, "S5862C1");
    check_field_offset(lv, s5862c1f0, ABISELECT(8,4), "S5862C1.s5862c1f0");
    test_class_info(&lv, &cd_S5862C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5862C1(Test_S5862C1, "S5862C1", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S6118C14_nt;
extern VTBL_ENTRY _ZTI11S6118C14_nt[];
static Base_Class bases_S5862C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6118C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5862C1 = {  "S5862C1", // class name
  bases_S5862C1, 1,
  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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15265C1  {
  char s15265c1f0[64];
  int s15265c1f1;
  __tsi64 s15265c1f2;
  int s15265c1f3[5];
  void  mf15265c1(); // _ZN8S15265C19mf15265c1Ev
};
//SIG(1 S15265C1) C1{ m Fc[64] Fi FL Fi[5]}


void  S15265C1 ::mf15265c1(){}

static void Test_S15265C1()
{
  {
    init_simple_test("S15265C1");
    S15265C1 lv;
    check2(sizeof(lv), ABISELECT(104,96), "sizeof(S15265C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15265C1)");
    check_field_offset(lv, s15265c1f0, 0, "S15265C1.s15265c1f0");
    check_field_offset(lv, s15265c1f1, 64, "S15265C1.s15265c1f1");
    check_field_offset(lv, s15265c1f2, ABISELECT(72,68), "S15265C1.s15265c1f2");
    check_field_offset(lv, s15265c1f3, ABISELECT(80,76), "S15265C1.s15265c1f3");
  }
}
static Arrange_To_Call_Me vS15265C1(Test_S15265C1, "S15265C1", ABISELECT(104,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13766C1  {
  __tsi64 s13766c1f0;
  int s13766c1f1;
  short s13766c1f2[6];
  char s13766c1f3[1024];
};
//SIG(1 S13766C1) C1{ FL Fi Fs[6] Fc[1024]}



static void Test_S13766C1()
{
  {
    init_simple_test("S13766C1");
    S13766C1 lv;
    check2(sizeof(lv), 1048, "sizeof(S13766C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13766C1)");
    check_field_offset(lv, s13766c1f0, 0, "S13766C1.s13766c1f0");
    check_field_offset(lv, s13766c1f1, 8, "S13766C1.s13766c1f1");
    check_field_offset(lv, s13766c1f2, 12, "S13766C1.s13766c1f2");
    check_field_offset(lv, s13766c1f3, 24, "S13766C1.s13766c1f3");
  }
}
static Arrange_To_Call_Me vS13766C1(Test_S13766C1, "S13766C1", 1048);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11736C2_nt  {
  long s11736c2f0[2];
};
//SIG(-1 S11736C2_nt) C1{ Fl[2]}



//skip512 S11736C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11736C1  {
  ::S11736C2_nt s11736c1f0;
  ::S13506C2_nt s11736c1f1;
};
//SIG(1 S11736C1) C1{ FC2{ Fl[2]} FC3{ Fl[4]}}



static void Test_S11736C1()
{
  {
    init_simple_test("S11736C1");
    S11736C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S11736C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11736C1)");
    check_field_offset(lv, s11736c1f0, 0, "S11736C1.s11736c1f0");
    check_field_offset(lv, s11736c1f1, ABISELECT(16,8), "S11736C1.s11736c1f1");
  }
}
static Arrange_To_Call_Me vS11736C1(Test_S11736C1, "S11736C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13979C1  {
  __tsi64 s13979c1f0[3];
  int s13979c1f1[4];
  char s13979c1f2[376];
};
//SIG(1 S13979C1) C1{ FL[3] Fi[4] Fc[376]}



static void Test_S13979C1()
{
  {
    init_simple_test("S13979C1");
    S13979C1 lv;
    check2(sizeof(lv), 416, "sizeof(S13979C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13979C1)");
    check_field_offset(lv, s13979c1f0, 0, "S13979C1.s13979c1f0");
    check_field_offset(lv, s13979c1f1, 24, "S13979C1.s13979c1f1");
    check_field_offset(lv, s13979c1f2, 40, "S13979C1.s13979c1f2");
  }
}
static Arrange_To_Call_Me vS13979C1(Test_S13979C1, "S13979C1", 416);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16945C1  {
  int s16945c1f0;
  void *s16945c1f1;
  int s16945c1f2[9];
  void *s16945c1f3[4];
  void  mf16945c1(); // _ZN8S16945C19mf16945c1Ev
};
//SIG(1 S16945C1) C1{ m Fi Fp Fi[9] Fp[4]}


void  S16945C1 ::mf16945c1(){}

static void Test_S16945C1()
{
  {
    init_simple_test("S16945C1");
    S16945C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S16945C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16945C1)");
    check_field_offset(lv, s16945c1f0, 0, "S16945C1.s16945c1f0");
    check_field_offset(lv, s16945c1f1, ABISELECT(8,4), "S16945C1.s16945c1f1");
    check_field_offset(lv, s16945c1f2, ABISELECT(16,8), "S16945C1.s16945c1f2");
    check_field_offset(lv, s16945c1f3, ABISELECT(56,44), "S16945C1.s16945c1f3");
  }
}
static Arrange_To_Call_Me vS16945C1(Test_S16945C1, "S16945C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13934C1  {
  __tsi64 s13934c1f0[2];
  int s13934c1f1[3];
  char s13934c1f2[12];
};
//SIG(1 S13934C1) C1{ FL[2] Fi[3] Fc[12]}



static void Test_S13934C1()
{
  {
    init_simple_test("S13934C1");
    S13934C1 lv;
    check2(sizeof(lv), 40, "sizeof(S13934C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13934C1)");
    check_field_offset(lv, s13934c1f0, 0, "S13934C1.s13934c1f0");
    check_field_offset(lv, s13934c1f1, 16, "S13934C1.s13934c1f1");
    check_field_offset(lv, s13934c1f2, 28, "S13934C1.s13934c1f2");
  }
}
static Arrange_To_Call_Me vS13934C1(Test_S13934C1, "S13934C1", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14488C1  {
  void *s14488c1f0[2];
  ::S3222C4_nt s14488c1f1;
};
//SIG(1 S14488C1) C1{ Fp[2] FC2{ m Fi[2]}}



static void Test_S14488C1()
{
  {
    init_simple_test("S14488C1");
    S14488C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S14488C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14488C1)");
    check_field_offset(lv, s14488c1f0, 0, "S14488C1.s14488c1f0");
    check_field_offset(lv, s14488c1f1, ABISELECT(16,8), "S14488C1.s14488c1f1");
  }
}
static Arrange_To_Call_Me vS14488C1(Test_S14488C1, "S14488C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13372C1  {
  int s13372c1f0[3];
  void *s13372c1f1;
  int s13372c1f2;
  void *s13372c1f3[3];
};
//SIG(1 S13372C1) C1{ Fi[3] Fp Fi Fp[3]}



static void Test_S13372C1()
{
  {
    init_simple_test("S13372C1");
    S13372C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S13372C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13372C1)");
    check_field_offset(lv, s13372c1f0, 0, "S13372C1.s13372c1f0");
    check_field_offset(lv, s13372c1f1, ABISELECT(16,12), "S13372C1.s13372c1f1");
    check_field_offset(lv, s13372c1f2, ABISELECT(24,16), "S13372C1.s13372c1f2");
    check_field_offset(lv, s13372c1f3, ABISELECT(32,20), "S13372C1.s13372c1f3");
  }
}
static Arrange_To_Call_Me vS13372C1(Test_S13372C1, "S13372C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18388C1  {
  void *s18388c1f0[7];
  char s18388c1f1[11];
  void *s18388c1f2;
  void  mf18388c1(); // _ZN8S18388C19mf18388c1Ev
};
//SIG(1 S18388C1) C1{ m Fp[7] Fc[11] Fp}


void  S18388C1 ::mf18388c1(){}

static void Test_S18388C1()
{
  {
    init_simple_test("S18388C1");
    S18388C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S18388C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18388C1)");
    check_field_offset(lv, s18388c1f0, 0, "S18388C1.s18388c1f0");
    check_field_offset(lv, s18388c1f1, ABISELECT(56,28), "S18388C1.s18388c1f1");
    check_field_offset(lv, s18388c1f2, ABISELECT(72,40), "S18388C1.s18388c1f2");
  }
}
static Arrange_To_Call_Me vS18388C1(Test_S18388C1, "S18388C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13482C1  {
  int s13482c1f0[4];
  long s13482c1f1[4];
  int s13482c1f2[3];
};
//SIG(1 S13482C1) C1{ Fi[4] Fl[4] Fi[3]}



static void Test_S13482C1()
{
  {
    init_simple_test("S13482C1");
    S13482C1 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S13482C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13482C1)");
    check_field_offset(lv, s13482c1f0, 0, "S13482C1.s13482c1f0");
    check_field_offset(lv, s13482c1f1, 16, "S13482C1.s13482c1f1");
    check_field_offset(lv, s13482c1f2, ABISELECT(48,32), "S13482C1.s13482c1f2");
  }
}
static Arrange_To_Call_Me vS13482C1(Test_S13482C1, "S13482C1", ABISELECT(64,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18315C1  {
  void *s18315c1f0[3];
  int s18315c1f1;
  void *s18315c1f2;
  int s18315c1f3;
  void  mf18315c1(); // _ZN8S18315C19mf18315c1Ev
};
//SIG(1 S18315C1) C1{ m Fp[3] Fi Fp Fi}


void  S18315C1 ::mf18315c1(){}

static void Test_S18315C1()
{
  {
    init_simple_test("S18315C1");
    S18315C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S18315C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18315C1)");
    check_field_offset(lv, s18315c1f0, 0, "S18315C1.s18315c1f0");
    check_field_offset(lv, s18315c1f1, ABISELECT(24,12), "S18315C1.s18315c1f1");
    check_field_offset(lv, s18315c1f2, ABISELECT(32,16), "S18315C1.s18315c1f2");
    check_field_offset(lv, s18315c1f3, ABISELECT(40,20), "S18315C1.s18315c1f3");
  }
}
static Arrange_To_Call_Me vS18315C1(Test_S18315C1, "S18315C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18355C1  {
  void *s18355c1f0[4];
  int s18355c1f1;
  void *s18355c1f2[6];
  void  mf18355c1(); // _ZN8S18355C19mf18355c1Ev
};
//SIG(1 S18355C1) C1{ m Fp[4] Fi Fp[6]}


void  S18355C1 ::mf18355c1(){}

static void Test_S18355C1()
{
  {
    init_simple_test("S18355C1");
    S18355C1 lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S18355C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18355C1)");
    check_field_offset(lv, s18355c1f0, 0, "S18355C1.s18355c1f0");
    check_field_offset(lv, s18355c1f1, ABISELECT(32,16), "S18355C1.s18355c1f1");
    check_field_offset(lv, s18355c1f2, ABISELECT(40,20), "S18355C1.s18355c1f2");
  }
}
static Arrange_To_Call_Me vS18355C1(Test_S18355C1, "S18355C1", ABISELECT(88,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18607C1  {
  char s18607c1f0:8;
  long double s18607c1f1;
  virtual void  v1(); // _ZN8S18607C12v1Ev
  virtual void  v2(); // _ZN8S18607C12v2Ev
  virtual void  v3(); // _ZN8S18607C12v3Ev
  ~S18607C1(); // tgen
  S18607C1(); // tgen
};
//SIG(1 S18607C1) C1{ v1 v2 v3 Fc:8 FD}


void  S18607C1 ::v1(){vfunc_called(this, "_ZN8S18607C12v1Ev");}
void  S18607C1 ::v2(){vfunc_called(this, "_ZN8S18607C12v2Ev");}
void  S18607C1 ::v3(){vfunc_called(this, "_ZN8S18607C12v3Ev");}
S18607C1 ::~S18607C1(){ note_dtor("S18607C1", this);} // tgen
S18607C1 ::S18607C1(){ note_ctor("S18607C1", this);} // tgen

static void Test_S18607C1()
{
  extern Class_Descriptor cd_S18607C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,6)];
    init_test(&cd_S18607C1, buf);
    S18607C1 *dp, &lv = *(dp=new (buf) S18607C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18607C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18607C1)");
    set_bf_and_test(lv, s18607c1f0, ABISELECT(8,4), 0, 8, 1, "S18607C1");
    set_bf_and_test(lv, s18607c1f0, ABISELECT(8,4), 0, 8, hide_sll(1LL<<7), "S18607C1");
    check_field_offset(lv, s18607c1f1, ABISELECT(16,8), "S18607C1.s18607c1f1");
    test_class_info(&lv, &cd_S18607C1);
    dp->~S18607C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18607C1(Test_S18607C1, "S18607C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18607C1C1Ev();
extern void _ZN8S18607C1D1Ev();
Name_Map name_map_S18607C1[] = {
  NSPAIR(_ZN8S18607C1C1Ev),
  NSPAIR(_ZN8S18607C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18607C1[];
extern void _ZN8S18607C12v1Ev();
extern void _ZN8S18607C12v2Ev();
extern void _ZN8S18607C12v3Ev();
static  VTBL_ENTRY vtc_S18607C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18607C1[0]),
  (VTBL_ENTRY)&_ZN8S18607C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18607C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18607C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18607C1[];
extern  VTBL_ENTRY _ZTV8S18607C1[];
Class_Descriptor cd_S18607C1 = {  "S18607C1", // class name
  0,0,//no base classes
  &(vtc_S18607C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18607C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18607C1),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  S2768C2  : S2014C41_nt {
  char s2768c2f0;
};
//SIG(-1 S2768C2) C1{ BC2{ m FL} Fc}



static void Test_S2768C2()
{
  extern Class_Descriptor cd_S2768C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2768C2, buf);
    S2768C2 &lv = *(new (buf) S2768C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2768C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2768C2)");
    check_base_class_offset(lv, (S2014C41_nt*), 0, "S2768C2");
    check_field_offset(lv, s2768c2f0, 8, "S2768C2.s2768c2f0");
    test_class_info(&lv, &cd_S2768C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2768C2(Test_S2768C2, "S2768C2", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
static Base_Class bases_S2768C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2768C2 = {  "S2768C2", // class name
  bases_S2768C2, 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  S2768C1  : S2768C2 {
};
//SIG(1 S2768C1) C1{ BC2{ BC3{ m FL} Fc}}



static void Test_S2768C1()
{
  extern Class_Descriptor cd_S2768C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2768C1, buf);
    S2768C1 &lv = *(new (buf) S2768C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2768C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2768C1)");
    check_base_class_offset(lv, (S2014C41_nt*)(S2768C2*), 0, "S2768C1");
    check_base_class_offset(lv, (S2768C2*), 0, "S2768C1");
    test_class_info(&lv, &cd_S2768C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2768C1(Test_S2768C1, "S2768C1", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2014C41_nt;
extern Class_Descriptor cd_S2768C2;
static Base_Class bases_S2768C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2014C41_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2768C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2768C1 = {  "S2768C1", // class name
  bases_S2768C1, 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  S14646C1  {
  void *s14646c1f0[3];
  long s14646c1f1[2];
  int s14646c1f2;
};
//SIG(1 S14646C1) C1{ Fp[3] Fl[2] Fi}



static void Test_S14646C1()
{
  {
    init_simple_test("S14646C1");
    S14646C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S14646C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14646C1)");
    check_field_offset(lv, s14646c1f0, 0, "S14646C1.s14646c1f0");
    check_field_offset(lv, s14646c1f1, ABISELECT(24,12), "S14646C1.s14646c1f1");
    check_field_offset(lv, s14646c1f2, ABISELECT(40,20), "S14646C1.s14646c1f2");
  }
}
static Arrange_To_Call_Me vS14646C1(Test_S14646C1, "S14646C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12651C1  {
  int s12651c1f0;
  void *s12651c1f1;
  char s12651c1f2;
  void *s12651c1f3;
  char s12651c1f4;
};
//SIG(1 S12651C1) C1{ Fi Fp Fc Fp Fc}



static void Test_S12651C1()
{
  {
    init_simple_test("S12651C1");
    S12651C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S12651C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12651C1)");
    check_field_offset(lv, s12651c1f0, 0, "S12651C1.s12651c1f0");
    check_field_offset(lv, s12651c1f1, ABISELECT(8,4), "S12651C1.s12651c1f1");
    check_field_offset(lv, s12651c1f2, ABISELECT(16,8), "S12651C1.s12651c1f2");
    check_field_offset(lv, s12651c1f3, ABISELECT(24,12), "S12651C1.s12651c1f3");
    check_field_offset(lv, s12651c1f4, ABISELECT(32,16), "S12651C1.s12651c1f4");
  }
}
static Arrange_To_Call_Me vS12651C1(Test_S12651C1, "S12651C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13375C1  {
  int s13375c1f0[3];
  void *s13375c1f1;
  int s13375c1f2[2];
};
//SIG(1 S13375C1) C1{ Fi[3] Fp Fi[2]}



static void Test_S13375C1()
{
  {
    init_simple_test("S13375C1");
    S13375C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13375C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13375C1)");
    check_field_offset(lv, s13375c1f0, 0, "S13375C1.s13375c1f0");
    check_field_offset(lv, s13375c1f1, ABISELECT(16,12), "S13375C1.s13375c1f1");
    check_field_offset(lv, s13375c1f2, ABISELECT(24,16), "S13375C1.s13375c1f2");
  }
}
static Arrange_To_Call_Me vS13375C1(Test_S13375C1, "S13375C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15159C1  {
  char s15159c1f0[1024];
  int s15159c1f1;
  void  mf15159c1(); // _ZN8S15159C19mf15159c1Ev
};
//SIG(1 S15159C1) C1{ m Fc[1024] Fi}


void  S15159C1 ::mf15159c1(){}

static void Test_S15159C1()
{
  {
    init_simple_test("S15159C1");
    S15159C1 lv;
    check2(sizeof(lv), 1028, "sizeof(S15159C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15159C1)");
    check_field_offset(lv, s15159c1f0, 0, "S15159C1.s15159c1f0");
    check_field_offset(lv, s15159c1f1, 1024, "S15159C1.s15159c1f1");
  }
}
static Arrange_To_Call_Me vS15159C1(Test_S15159C1, "S15159C1", 1028);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18564C1  {
  ::S19762C18_nt s18564c1f0;
  char s18564c1f1;
  virtual void  v1(); // _ZN8S18564C12v1Ev
  virtual void  v2(); // _ZN8S18564C12v2Ev
  ~S18564C1(); // tgen
  S18564C1(); // tgen
};
//SIG(1 S18564C1) C1{ v1 v2 FC2{} Fc}


void  S18564C1 ::v1(){vfunc_called(this, "_ZN8S18564C12v1Ev");}
void  S18564C1 ::v2(){vfunc_called(this, "_ZN8S18564C12v2Ev");}
S18564C1 ::~S18564C1(){ note_dtor("S18564C1", this);} // tgen
S18564C1 ::S18564C1(){ note_ctor("S18564C1", this);} // tgen

static void Test_S18564C1()
{
  extern Class_Descriptor cd_S18564C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18564C1, buf);
    S18564C1 *dp, &lv = *(dp=new (buf) S18564C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18564C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18564C1)");
    check_field_offset(lv, s18564c1f0, ABISELECT(8,4), "S18564C1.s18564c1f0");
    check_field_offset(lv, s18564c1f1, ABISELECT(9,5), "S18564C1.s18564c1f1");
    test_class_info(&lv, &cd_S18564C1);
    dp->~S18564C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18564C1(Test_S18564C1, "S18564C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18564C1C1Ev();
extern void _ZN8S18564C1D1Ev();
Name_Map name_map_S18564C1[] = {
  NSPAIR(_ZN8S18564C1C1Ev),
  NSPAIR(_ZN8S18564C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18564C1[];
extern void _ZN8S18564C12v1Ev();
extern void _ZN8S18564C12v2Ev();
static  VTBL_ENTRY vtc_S18564C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18564C1[0]),
  (VTBL_ENTRY)&_ZN8S18564C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18564C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18564C1[];
extern  VTBL_ENTRY _ZTV8S18564C1[];
Class_Descriptor cd_S18564C1 = {  "S18564C1", // class name
  0,0,//no base classes
  &(vtc_S18564C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18564C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18564C1),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  S10783C1  {
  char s10783c1f0[256];
  int s10783c1f1[2];
};
//SIG(1 S10783C1) C1{ Fc[256] Fi[2]}



static void Test_S10783C1()
{
  {
    init_simple_test("S10783C1");
    S10783C1 lv;
    check2(sizeof(lv), 264, "sizeof(S10783C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10783C1)");
    check_field_offset(lv, s10783c1f0, 0, "S10783C1.s10783c1f0");
    check_field_offset(lv, s10783c1f1, 256, "S10783C1.s10783c1f1");
  }
}
static Arrange_To_Call_Me vS10783C1(Test_S10783C1, "S10783C1", 264);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10713C1  {
  char s10713c1f0[20];
  int s10713c1f1[2];
};
//SIG(1 S10713C1) C1{ Fc[20] Fi[2]}



static void Test_S10713C1()
{
  {
    init_simple_test("S10713C1");
    S10713C1 lv;
    check2(sizeof(lv), 28, "sizeof(S10713C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10713C1)");
    check_field_offset(lv, s10713c1f0, 0, "S10713C1.s10713c1f0");
    check_field_offset(lv, s10713c1f1, 20, "S10713C1.s10713c1f1");
  }
}
static Arrange_To_Call_Me vS10713C1(Test_S10713C1, "S10713C1", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13815C1  {
  long s13815c1f0;
  __tsi64 s13815c1f1;
  long s13815c1f2[2];
};
//SIG(1 S13815C1) C1{ Fl FL Fl[2]}



static void Test_S13815C1()
{
  {
    init_simple_test("S13815C1");
    S13815C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S13815C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13815C1)");
    check_field_offset(lv, s13815c1f0, 0, "S13815C1.s13815c1f0");
    check_field_offset(lv, s13815c1f1, ABISELECT(8,4), "S13815C1.s13815c1f1");
    check_field_offset(lv, s13815c1f2, ABISELECT(16,12), "S13815C1.s13815c1f2");
  }
}
static Arrange_To_Call_Me vS13815C1(Test_S13815C1, "S13815C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12715C1  {
  int s12715c1f0;
  void *s12715c1f1;
  int s12715c1f2[3];
};
//SIG(1 S12715C1) C1{ Fi Fp Fi[3]}



static void Test_S12715C1()
{
  {
    init_simple_test("S12715C1");
    S12715C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S12715C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12715C1)");
    check_field_offset(lv, s12715c1f0, 0, "S12715C1.s12715c1f0");
    check_field_offset(lv, s12715c1f1, ABISELECT(8,4), "S12715C1.s12715c1f1");
    check_field_offset(lv, s12715c1f2, ABISELECT(16,8), "S12715C1.s12715c1f2");
  }
}
static Arrange_To_Call_Me vS12715C1(Test_S12715C1, "S12715C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14920C1  {
  short s14920c1f0[3];
  char s14920c1f1[2];
};
//SIG(1 S14920C1) C1{ Fs[3] Fc[2]}



static void Test_S14920C1()
{
  {
    init_simple_test("S14920C1");
    S14920C1 lv;
    check2(sizeof(lv), 8, "sizeof(S14920C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14920C1)");
    check_field_offset(lv, s14920c1f0, 0, "S14920C1.s14920c1f0");
    check_field_offset(lv, s14920c1f1, 6, "S14920C1.s14920c1f1");
  }
}
static Arrange_To_Call_Me vS14920C1(Test_S14920C1, "S14920C1", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17158C1  {
  int s17158c1f0[2];
  short s17158c1f1;
  void  mf17158c1(); // _ZN8S17158C19mf17158c1Ev
};
//SIG(1 S17158C1) C1{ m Fi[2] Fs}


void  S17158C1 ::mf17158c1(){}

static void Test_S17158C1()
{
  {
    init_simple_test("S17158C1");
    S17158C1 lv;
    check2(sizeof(lv), 12, "sizeof(S17158C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17158C1)");
    check_field_offset(lv, s17158c1f0, 0, "S17158C1.s17158c1f0");
    check_field_offset(lv, s17158c1f1, 8, "S17158C1.s17158c1f1");
  }
}
static Arrange_To_Call_Me vS17158C1(Test_S17158C1, "S17158C1", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11027C1  {
  char s11027c1f0[85];
  int s11027c1f1;
};
//SIG(1 S11027C1) C1{ Fc[85] Fi}



static void Test_S11027C1()
{
  {
    init_simple_test("S11027C1");
    S11027C1 lv;
    check2(sizeof(lv), 92, "sizeof(S11027C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11027C1)");
    check_field_offset(lv, s11027c1f0, 0, "S11027C1.s11027c1f0");
    check_field_offset(lv, s11027c1f1, 88, "S11027C1.s11027c1f1");
  }
}
static Arrange_To_Call_Me vS11027C1(Test_S11027C1, "S11027C1", 92);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14816C1  {
  short s14816c1f0;
  int s14816c1f1;
  void *s14816c1f2;
};
//SIG(1 S14816C1) C1{ Fs Fi Fp}



static void Test_S14816C1()
{
  {
    init_simple_test("S14816C1");
    S14816C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S14816C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14816C1)");
    check_field_offset(lv, s14816c1f0, 0, "S14816C1.s14816c1f0");
    check_field_offset(lv, s14816c1f1, 4, "S14816C1.s14816c1f1");
    check_field_offset(lv, s14816c1f2, 8, "S14816C1.s14816c1f2");
  }
}
static Arrange_To_Call_Me vS14816C1(Test_S14816C1, "S14816C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14391C1  {
  void *s14391c1f0;
  __tsi64 s14391c1f1;
  void *s14391c1f2;
};
//SIG(1 S14391C1) C1{ Fp FL Fp}



static void Test_S14391C1()
{
  {
    init_simple_test("S14391C1");
    S14391C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S14391C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14391C1)");
    check_field_offset(lv, s14391c1f0, 0, "S14391C1.s14391c1f0");
    check_field_offset(lv, s14391c1f1, ABISELECT(8,4), "S14391C1.s14391c1f1");
    check_field_offset(lv, s14391c1f2, ABISELECT(16,12), "S14391C1.s14391c1f2");
  }
}
static Arrange_To_Call_Me vS14391C1(Test_S14391C1, "S14391C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10715C1  {
  char s10715c1f0[200];
};
//SIG(1 S10715C1) C1{ Fc[200]}



static void Test_S10715C1()
{
  {
    init_simple_test("S10715C1");
    S10715C1 lv;
    check2(sizeof(lv), 200, "sizeof(S10715C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10715C1)");
    check_field_offset(lv, s10715c1f0, 0, "S10715C1.s10715c1f0");
  }
}
static Arrange_To_Call_Me vS10715C1(Test_S10715C1, "S10715C1", 200);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12943C1  {
  int s12943c1f0;
};
//SIG(1 S12943C1) C1{ Fi}



static void Test_S12943C1()
{
  {
    init_simple_test("S12943C1");
    S12943C1 lv;
    check2(sizeof(lv), 4, "sizeof(S12943C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12943C1)");
    check_field_offset(lv, s12943c1f0, 0, "S12943C1.s12943c1f0");
  }
}
static Arrange_To_Call_Me vS12943C1(Test_S12943C1, "S12943C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

