private void runPasses(int minLength, int maxLength, boolean wholeBlock, boolean matchBlock,
			int maxPasses) throws MemoryAccessException, CancelledException {
		srcStore.calcHashes(minLength, maxLength, wholeBlock, matchBlock, hashCalc);
		destStore.calcHashes(minLength, maxLength, wholeBlock, matchBlock, hashCalc);
		for (int pass = 0; pass < maxPasses; ++pass) {
			int curMatch = srcStore.numMatchedInstructions();
			if (curMatch == srcStore.getTotalInstructions())
				break;			// quit if there are no unmatched instructions
			srcStore.clearSort();
			destStore.clearSort();

			srcStore.insertHashes();
			destStore.insertHashes();

			findMatches();
			if (curMatch == srcStore.numMatchedInstructions())
				break;		// quit if no new matched instructions
		}
	}
Run multiple passes with one n-gram/hash generation configuration. A pass consists of generating the sorted
lists of n-grams for both sides, running through the lists looking for matches, and, if matches aren't unique,
running through the disambiguation strategies. Matches that aren't unique and couldn't be disambiguated in one
pass may be matched in later passes.
@param minLength is the minimum length of an n-gram for these passes
@param maxLength is the maximum length of an n-gram for these passes
@param wholeBlock if true, allows blocks that are smaller than the minimum length to be considered as 1 n-gram.
@param matchBlock if true, only generates n-grams for sequences in previously matched blocks
@param maxPasses is the number of passes to run with this configuration
@throws MemoryAccessException
@throws CancelledException
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashedFunctionAddressCorrelation.java