code: public List<IPv6AddressRange> remove(IPv6Network network)
      {
          if (network == null)
              throw new IllegalArgumentException("invalid network [null]");
  
          if (!contains(network))
              return Collections.singletonList(this);
          else if (this.equals(network))
              return Collections.emptyList();
          else if (first.equals(network.getFirst()))
              return Collections.singletonList(fromFirstAndLast(network.getLast().add(1), last));
          else if (last.equals(network.getLast()))
              return Collections.singletonList(fromFirstAndLast(first, network.getFirst().subtract(1)));
          else
              return Arrays.asList(fromFirstAndLast(first, network.getFirst().subtract(1)),
                      fromFirstAndLast(network.getLast().add(1), last));
  
      }
docs: Remove a network from the range, resulting in one, none or two new ranges. If a network outside (or partially outside) the range is
  removed, this has no effect. If the network which is removed is aligned with the beginning or end of the range, a single new ranges
  is returned (potentially empty if the range was equal to the network which is removed from it). If a network somewhere else in the
  range is removed, two new ranges are returned.
  
  @param network network to remove from the range
  @return list of resulting ranges