private ByteProvider matchUniversalBinaryProvider(ByteProvider provider, LoadSpec loadSpec,
			TaskMonitor monitor) throws IOException {
		ByteProvider ret = null;
		boolean stop = false;
		for (ByteProvider machoProvider : getUniveralBinaryProviders(provider)) {
			for (LoadSpec ls : findSupportedLoadSpecs(machoProvider)) {
				if (monitor.isCancelled()) {
					stop = true;
					break;
				}
				if (loadSpec.getLanguageCompilerSpec().equals(ls.getLanguageCompilerSpec())) {
					ret = machoProvider;
					stop = true;
					break;
				}
			}
			if (stop) {
				break;
			}
		}
		if (ret == null) {
			throw new IOException("Failed to match the load spec to a Universal Binary Mach-O");
		}
		return ret;
	}
Attempts to match a Mach-O entry in the given Universal Binary {@link ByteProvider} to the 
given {@link LoadSpec}

@param provider A Universal Binary {@link ByteProvider}
@param loadSpec The {@link LoadSpec} to match
@param monitor A {@link TaskMonitor monitor}
@return The matched Mach-O {@link ByteProvider}, or {@code null} if a match was not found
@throws IOException if an IO-related error occurred
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MachoLoader.java