private HashMatch scoreMatch(FunctionRecord functionRecord, HashFamily family,
			TaskMonitor monitor) throws CancelledException {
		if (functionRecord.autoFail()) {
			return null;
		}
		int functionCodeUnits = functionRecord.getCodeUnitSize();
		int specificCodeUnits = 0;
		HashLookupListMode mode = HashLookupListMode.FULL;
		if (functionRecord.getSpecificHash() == family.getHash().getSpecificHash()) {
			specificCodeUnits = functionRecord.getSpecificHashAdditionalSize();
			mode = HashLookupListMode.SPECIFIC;
		}

		if (functionRecord.isForceSpecific() && (mode != HashLookupListMode.SPECIFIC)) {
			return null;
		}
		if (functionRecord.autoPass()) {
			if (functionCodeUnits < mediumHashCodeUnitLengthLimit) {
				functionCodeUnits = mediumHashCodeUnitLengthLimit;
			}
		}

		int childCodeUnits = 0;

		for (FidHashQuad fidHashQuad : family.getChildren()) {
			monitor.checkCancelled();
			if (fidQueryService.getSuperiorFullRelation(functionRecord, fidHashQuad)) {
				childCodeUnits += fidHashQuad.getCodeUnitSize();
			}
		}

		if (functionRecord.isForceRelation() && childCodeUnits == 0) {
			return null;
		}

		int parentCodeUnits = 0;

		if (family.getParents().size() < MAX_NUM_PARENTS_FOR_SCORE) {
			for (FidHashQuad fidHashQuad : family.getParents()) {
				monitor.checkCancelled();
				if (fidQueryService.getInferiorFullRelation(fidHashQuad, functionRecord)) {
					parentCodeUnits += fidHashQuad.getCodeUnitSize();
				}
			}
		}

		float functionScore = functionCodeUnits;
		functionScore += 0.67 * specificCodeUnits; // Each specific constant count is worth 2/3 of a whole code unit
		float childScore = childCodeUnits;
		float parentScore = parentCodeUnits;
		if (functionScore + childScore + parentScore < scoreThreshold) {
			return null;
		}

		HashMatch result =
			new HashMatch(functionRecord, functionScore, mode, childScore, parentScore);

		return result;
	}
Generates a hash mash, and adds its score to the "global" statistics.
@param functionRecord the potential match
@param family the hash family of the function
@param stats global statistics
@param monitor a task monitor
@return the generated hash match
@throws CancelledException if the user cancels
Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/FidProgramSeeker.java