private Set<Function> getTwoCallCommonFunctionsUsingVftables(List<Address> vftableAddresses)
			throws CancelledException {

		Set<Function> twoCallCommonFunctions = new HashSet<Function>();

		for (Address vftableAddress : vftableAddresses) {
			monitor.checkCancelled();

			List<Function> possibleCDFunctions = geFunctionsThatReferenceAddress(vftableAddress);

			List<Function> virtualFunctions = getVfunctions(vftableAddress);

			for (Function cdFunction : possibleCDFunctions) {
				monitor.checkCancelled();

				// if it isn't on both lists continue
				if (!virtualFunctions.contains(cdFunction)) {
					continue;
				}

				// if it doesn't have exactly two calls continue
				if (!hasNCalls(cdFunction, 2)) {
					continue;
				}

				// else add it to the set to return
				twoCallCommonFunctions.add(cdFunction);

			}
		}
		return twoCallCommonFunctions;
	}
Method to find all class functions that are on both the vfunction list and the possible 
constructor/destructor list for the same class 
@param recoveredClasses the list of all known classes
@return all functions on both their class constructor/destructor list and virtual function 
list
@throws CancelledException if cancelled
Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RecoveredClassHelper.java