private void findVirtualBaseVxtPtrs(MsVxtManager vxtManager) throws PdbException {
		// Walk direct bases to find vxts of virtual bases.  TODO: also notate all rolled up
		//  virtuals for each direct base.
		for (DirectLayoutBaseClass base : directLayoutBaseClasses) {

			CppCompositeType cppBaseType = base.getBaseClassType();
			ClassID baseId = cppBaseType.getClassId();
			for (VxtPtrInfo info : cppBaseType.getPropagatedDirectVirtualBaseVfts()) {
				VxtPtrInfo newInfo = createSelfOwnedVirtualVxtPtrInfo(info);
				updateVft(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatedDirectVirtualBaseVfts, finalVftPtrInfoByOffset,
					vfTableIdByOffset, vftOffsetByTableId, newInfo);
			}
			for (VxtPtrInfo info : cppBaseType.getPropagatedDirectVirtualBaseVbts()) {
				VxtPtrInfo newInfo = createSelfOwnedVirtualVxtPtrInfo(info);
				updateVbt(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatedDirectVirtualBaseVbts, finalVbtPtrInfoByOffset,
					vbTableIdByOffset, vbtOffsetByTableId, newInfo);
			}
			for (VxtPtrInfo info : cppBaseType.getPropagatedIndirectVirtualBaseVfts()) {
				VxtPtrInfo newInfo = createSelfOwnedVirtualVxtPtrInfo(info);
				updateVft(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatededIndirectVirtualBaseVfts, finalVftPtrInfoByOffset,
					vfTableIdByOffset, vftOffsetByTableId, newInfo);
			}
			for (VxtPtrInfo info : cppBaseType.getPropagatedIndirectVirtualBaseVbts()) {
				VxtPtrInfo newInfo = createSelfOwnedVirtualVxtPtrInfo(info);
				updateVbt(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatedIndirectVirtualBaseVbts, finalVbtPtrInfoByOffset,
					vbTableIdByOffset, vbtOffsetByTableId, newInfo);
			}
		}

		// This loop is currently purposefully separate from the above; we want to determine if
		//  separate vs. together has bearing on order in the lists that might match layout, etc.
		//  if we didn't have VBT in memory to consult.
		for (DirectVirtualLayoutBaseClass base : directVirtualLayoutBaseClasses) {

			CppCompositeType cppBaseType = base.getBaseClassType();
			ClassID baseId = cppBaseType.getClassId();

			for (VxtPtrInfo info : cppBaseType.getPropagatedSelfBaseVfts()) {
				VxtPtrInfo newInfo = createVirtualOwnedSelfVxtPtrInfo(info, baseId);
				updateVft(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatedDirectVirtualBaseVfts, finalVftPtrInfoByOffset,
					vfTableIdByOffset, vftOffsetByTableId, newInfo);
			}
			for (VxtPtrInfo info : cppBaseType.getPropagatedSelfBaseVbts()) {
				VxtPtrInfo newInfo = createVirtualOwnedSelfVxtPtrInfo(info, baseId);
				updateVbt(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatedDirectVirtualBaseVbts, finalVbtPtrInfoByOffset,
					vbTableIdByOffset, vbtOffsetByTableId, newInfo);
			}
			for (VxtPtrInfo info : cppBaseType.getPropagatedDirectVirtualBaseVfts()) {
				VxtPtrInfo newInfo = createVirtualOwnedVirtualVxtPtrInfo(info);
				updateVft(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatededIndirectVirtualBaseVfts, finalVftPtrInfoByOffset,
					vfTableIdByOffset, vftOffsetByTableId, newInfo);
			}
			for (VxtPtrInfo info : cppBaseType.getPropagatedDirectVirtualBaseVbts()) {
				VxtPtrInfo newInfo = createVirtualOwnedVirtualVxtPtrInfo(info);
				updateVbt(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatedIndirectVirtualBaseVbts, finalVbtPtrInfoByOffset,
					vbTableIdByOffset, vbtOffsetByTableId, newInfo);
			}
			for (VxtPtrInfo info : cppBaseType.getPropagatedIndirectVirtualBaseVfts()) {
				VxtPtrInfo newInfo = createVirtualOwnedVirtualVxtPtrInfo(info);
				updateVft(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatededIndirectVirtualBaseVfts, finalVftPtrInfoByOffset,
					vfTableIdByOffset, vftOffsetByTableId, newInfo);
			}
			for (VxtPtrInfo info : cppBaseType.getPropagatedIndirectVirtualBaseVbts()) {
				VxtPtrInfo newInfo = createVirtualOwnedVirtualVxtPtrInfo(info);
				updateVbt(vxtManager, baseId, newInfo, info);
				storeVxtInfo(propagatedIndirectVirtualBaseVbts, finalVbtPtrInfoByOffset,
					vbTableIdByOffset, vbtOffsetByTableId, newInfo);
			}
		}

	}
Finds all virtual base and virtual function pointers in the hierarchy of this class's
 virtual bases.  Gathers results from the accumulation of all "direct" virtual base classes;
 we are not relying on the "indirect" virtual base class information from the PDB.  This
 is done this way so that we can collect parentage information for the pointers.
@throws PdbException upon issue finding base offset
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java