code: @Override
  	public Iterator<? extends IPAddress> prefixBlockIterator(int prefLength) {
  		if(prefLength < 0) {
  			throw new PrefixLenException(prefLength);
  		}
  		IPv6Address lower = getLower();
  		IPv6Address upper = getUpper();
  		AddressCreator<IPv6Address, ?, ?, IPv6AddressSegment> creator = getAddressCreator();
  		return iterator(
  				lower,
  				upper,
  				creator,
  				IPv6Address::getSegment,
  				(seg, segIndex) -> seg.iterator(),
  				(addr1, addr2, index) -> {
  					Integer segPrefLength = ParsedAddressGrouping.getPrefixedSegmentPrefixLength(IPv6Address.BITS_PER_SEGMENT, prefLength, index);
  					if(segPrefLength == null) {
  						return addr1.getSegment(index).getSegmentValue() == addr2.getSegment(index).getSegmentValue();
  					}
  					int shift = IPv6Address.BITS_PER_SEGMENT - segPrefLength;
  					return addr1.getSegment(index).getSegmentValue() >>> shift == addr2.getSegment(index).getSegmentValue() >>> shift;
  				},
  				getNetworkSegmentIndex(prefLength, IPv6Address.BYTES_PER_SEGMENT, IPv6Address.BITS_PER_SEGMENT),
  				getHostSegmentIndex(prefLength, IPv6Address.BYTES_PER_SEGMENT, IPv6Address.BITS_PER_SEGMENT),
  				(seg, index) -> {
  					Integer segPrefLength = ParsedAddressGrouping.getPrefixedSegmentPrefixLength(IPv6Address.BITS_PER_SEGMENT, prefLength, index);
  					if(segPrefLength == null) {
  						return seg.iterator();
  					}
  					return seg.prefixBlockIterator(segPrefLength);
  				});
  	}
docs: /* (non-Javadoc)
  @see inet.ipaddr.IPAddressRange#prefixBlockIterator(int)