code: static ThrottledGenerator serialYearGenerator(final int interval, final DateValue dtStart) {
  		return new ThrottledGenerator() {
  			//the last year seen
  			int year = dtStart.year() - interval;
  
  			int throttle = MAX_YEARS_BETWEEN_INSTANCES;
  
  			@Override
  			boolean generate(DTBuilder builder) throws IteratorShortCircuitingException {
  				/*
  				 * Make sure things halt even if the RRULE is bad. For example,
  				 * the following rules should halt:
  				 * 
  				 * FREQ=YEARLY;BYMONTHDAY=30;BYMONTH=2
  				 */
  				if (--throttle < 0) {
  					throw IteratorShortCircuitingException.instance();
  				}
  				year += interval;
  				builder.year = year;
  				return true;
  			}
  
  			@Override
  			void workDone() {
  				this.throttle = MAX_YEARS_BETWEEN_INSTANCES;
  			}
  
  			@Override
  			public String toString() {
  				return "serialYearGenerator:" + interval;
  			}
  		};
  	}
docs: Constructs a generator that generates years successively counting from
  the first year passed in.
  @param interval number of years to advance each step
  @param dtStart the start date
  @return the year in dtStart the first time called and interval + last
  return value on subsequent calls