docs: static Generator byMonthDayGenerator(int[] dates, final DateValue dtStart) {
          final int[] udates = Util.uniquify(dates);
  
          return new Generator() {
              int year = dtStart.year();
              int month = dtStart.month();
              /** list of generated dates for the current month */
              int[] posDates;
              /** index of next date to return */
              int i = 0;
  
              {
                  convertDatesToAbsolute();
              }
  
              private void convertDatesToAbsolute() {
                  IntSet posDates = new IntSet();
                  int nDays = TimeUtils.monthLength(year, month);
                  for (int j = 0; j < udates.length; ++j) {
                      int date = udates[j];
                      if (date < 0) {
                          date += nDays + 1;
                      }
                      if (date >= 1 && date <= nDays) {
                          posDates.add(date);
                      }
                  }
                  this.posDates = posDates.toIntArray();
              }
  
              @Override
              boolean generate(DTBuilder builder) {
                  if (year != builder.year || month != builder.month) {
                      year = builder.year;
                      month = builder.month;
  
                      convertDatesToAbsolute();
  
                      i = 0;
                  }
                  if (i >= posDates.length) {
                      return false;
                  }
                  builder.day = posDates[i++];
                  return true;
              }
  
              @Override
              public String toString() {
                  return "byMonthDayGenerator";
              }
          };
      }