code: public static IPv6AddressPool fromRangeAndSubnet(final IPv6AddressRange range,
                                                       final IPv6NetworkMask allocationSubnetSize)
      {
          // in the beginning, all is free
          return new IPv6AddressPool(range, allocationSubnetSize, new TreeSet<IPv6AddressRange>(Arrays.asList(range)), null);
      }
docs: Create a pool of the given range (boundaries inclusive) which is completely free. The given subnet size is the network mask (thus
  size) of the allocated subnets in this range. This constructor verifies that the whole range is "aligned" with subnets of this size
  (i.e. there should not be a waste of space in the beginning or end which is smaller than one subnet of the given subnet size).
  
  @param range                range from within to allocate
  @param allocationSubnetSize size of the subnets that will be allocated
  @return ipv6 address pool