public int altBlackWhiteBoundary() {
		int fwe = firstValleyEnd() - offset;
		
		// Find the last peak.
		int bestValue = -1;
		int lastPeak = hg.length - 1;
		for (int i = hg.length - 1; i >= 0; i--) {
			if (hg[i] < bestValue) {
				break;
			} else {
				lastPeak = i;
				bestValue = hg[i];
			}
		}
				
		// Now go to the left until we reach somewhere that's at least mult smaller than that peak.
		int blackWhitePoint = lastPeak - 1;
		for (; blackWhitePoint >= fwe; blackWhitePoint--) {
			if (hg[blackWhitePoint] < bestValue * 0.2) {
				break;
			}
		}
		
		// Now finally slide down from there until we hit our first increase, or until we hit
		// firstValleyEnd.
		int cmpVal = hg[blackWhitePoint];
		for (; blackWhitePoint >= fwe; blackWhitePoint--) {
			if (hg[blackWhitePoint] > cmpVal) {
				return blackWhitePoint + offset;
			} else {
				cmpVal = hg[blackWhitePoint];
			}
		}
		
		return fwe + offset;
	}