code: private int newYear(int gyear) {
  
          long cacheValue = newYearCache.get(gyear);
  
          if (cacheValue == CalendarCache.EMPTY) {
  
              int solsticeBefore= winterSolstice(gyear - 1);
              int solsticeAfter = winterSolstice(gyear);
              int newMoon1 = newMoonNear(solsticeBefore + 1, true);
              int newMoon2 = newMoonNear(newMoon1 + SYNODIC_GAP, true);
              int newMoon11 = newMoonNear(solsticeAfter + 1, false);
              
              if (synodicMonthsBetween(newMoon1, newMoon11) == 12 &&
                  (hasNoMajorSolarTerm(newMoon1) || hasNoMajorSolarTerm(newMoon2))) {
                  cacheValue = newMoonNear(newMoon2 + SYNODIC_GAP, true);
              } else {
                  cacheValue = newMoon2;
              }
  
              newYearCache.put(gyear, cacheValue);
          }
          return (int) cacheValue;
      }
docs: Return the Chinese new year of the given Gregorian year.
  @param gyear a Gregorian year
  @return days after January 1, 1970 0:00 astronomical base zone of the
  Chinese new year of the given year (this will be a new moon)