static <T> Spliterator<T> tryAdvanceWithTail(Spliterator<T> target, Consumer<? super T> action) { while (true) { if (target instanceof TailSpliterator) { Spliterator<T> spltr = ((TailSpliterator<T>) target).tryAdvanceOrTail(action); if (spltr == null || spltr == target) return spltr; target = spltr; } else { return target.tryAdvance(action) ? target : null; } } }