code: private void initGMTOffsetPatterns(String[] gmtOffsetPatterns) {
          int size = GMTOffsetPatternType.values().length;
          if (gmtOffsetPatterns.length < size) {
              throw new IllegalArgumentException("Insufficient number of elements in gmtOffsetPatterns");
          }
          Object[][] gmtOffsetPatternItems = new Object[size][];
          for (GMTOffsetPatternType t : GMTOffsetPatternType.values()) {
              int idx = t.ordinal();
              // Note: parseOffsetPattern will validate the given pattern and throws
              // IllegalArgumentException when pattern is not valid
              Object[] parsedItems = parseOffsetPattern(gmtOffsetPatterns[idx], t.required());
              gmtOffsetPatternItems[idx] = parsedItems;
          }
  
          _gmtOffsetPatterns = new String[size];
          System.arraycopy(gmtOffsetPatterns, 0, _gmtOffsetPatterns, 0, size);
          _gmtOffsetPatternItems = gmtOffsetPatternItems;
          checkAbuttingHoursAndMinutes();
      }
docs: Initialize localized GMT format offset hour/min/sec patterns.
  This method parses patterns into optimized run-time format.
  This method must be called at deserialization time.
  
  @param gmtOffsetPatterns patterns, String[4]
  @throws IllegalArgumentException when patterns are not valid