code: @Override
      public List<LocalDate> getIMMDates(final LocalDate start, final LocalDate end, final IMMPeriod period) {
          final List<LocalDate> dates = new ArrayList<>();
  
          LocalDate date = start;
          while (true) {
              date = getNextIMMDate(true, date, period);
              if (!date.isAfter(end)) {
                  dates.add(date);
              } else {
                  break;
              }
          }
  
          return dates;
      }
docs: Returns a list of IMM dates between 2 dates, it will exclude the start
  date if it is an IMM date but would include the end date if it is an IMM.
  
  @param start
  start of the interval, excluded
  @param end
  end of the interval, may be included.
  @param period
  specify when the "next" IMM is, if quarterly then it is the
  conventional algorithm.
  @return list of IMM dates