// ec = U_INVALID_FORMAT_ERROR;
throw new IllegalArgumentException("Invalid Format");
}
// Transitions list may be empty
UResourceBundle r = res.get(0);
transitionTimes = r.getIntVector();
if ((transitionTimes.length<0 || transitionTimes.length>0x7FFF) ) {
throw new IllegalArgumentException("Invalid Format");
}
transitionCount = (int) transitionTimes.length;
// Type offsets list must be of even size, with size >= 2
r = res.get( 1);
typeOffsets = r.getIntVector();
if ((typeOffsets.length<2 || typeOffsets.length>0x7FFE || ((typeOffsets.length&1)!=0))) {
throw new IllegalArgumentException("Invalid Format");
}
typeCount = (int) typeOffsets.length >> 1;
// Type data must be of the same size as the transitions list
r = res.get(2);
typeData = r.getBinary().array();
if (typeData.length != transitionCount) {
throw new IllegalArgumentException("Invalid Format");
}
// Process final rule and data, if any
if (size >= 5) {
String ruleid = res.getString(3);
r = res.get(4);
int[] data = r.getIntVector();
if (data != null && data.length == 2) {
int rawOffset = data[0] * Grego.MILLIS_PER_SECOND;
// Subtract one from the actual final year; we
// actually store final year - 1, and compare
// using > rather than >=. This allows us to use
// INT32_MAX as an exclusive upper limit for all
// years, including INT32_MAX.
if (ASSERT) Assert.assrt("data[1] > Integer.MIN_VALUE", data[1] > Integer.MIN_VALUE);
finalYear = data[1] - 1;
// Also compute the millis for Jan 1, 0:00 GMT of the
// finalYear. This reduces runtime computations.
finalMillis = Grego.fieldsToDay(data[1], 0, 1) * Grego.MILLIS_PER_DAY;
//U_DEBUG_TZ_MSG(("zone%s|%s: {%d,%d}, finalYear%d, finalMillis%.1lf\n",
// zKey,rKey, data[0], data[1], finalYear, finalMillis));
r = loadRule(top, ruleid);
// 3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
data = r.getIntVector();
if ( data.length == 11) {
//U_DEBUG_TZ_MSG(("zone%s, rule%s: {%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d}", zKey, ures_getKey(r),
// data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10]));
finalZone = new SimpleTimeZone(rawOffset, "",
data[0], data[1], data[2],