code: func (i *Intervals) Next() (start, end uint64) {
  	i.mu.RLock()
  	defer i.mu.RUnlock()
  
  	l := len(i.ranges)
  	if l == 0 {
  		return i.start, 0
  	}
  	if i.ranges[0][0] != i.start {
  		return i.start, i.ranges[0][0] - 1
  	}
  	if l == 1 {
  		return i.ranges[0][1] + 1, 0
  	}
  	return i.ranges[0][1] + 1, i.ranges[1][0] - 1
  }
docs: // Next returns the first range interval that is not fulfilled. Returned
  // start and end values are both inclusive, meaning that the whole range
  // including start and end need to be added in order to full the gap
  // in intervals.
  // Returned value for end is 0 if the next interval is after the whole
  // range that is stored in Intervals. Zero end value represents no limit
  // on the next interval length.