[sword-svn] r162 - in trunk: . as_is/borland source/common source/common/unicode source/data/brkitr source/data/misc source/data/translit source/i18n source/i18n/unicode source/layout source/test/cintltst source/test/intltest source/test/perf/strsrchperf source/test/testdata

chrislit at crosswire.org chrislit at crosswire.org
Sat Feb 7 03:08:34 MST 2009


Author: chrislit
Date: 2009-02-07 03:08:34 -0700 (Sat, 07 Feb 2009)
New Revision: 162

Added:
   trunk/APIChangeReport_401.html
   trunk/icu4c.css
   trunk/source/i18n/bms.cpp
   trunk/source/i18n/bmsearch.cpp
   trunk/source/i18n/colldata.cpp
   trunk/source/i18n/unicode/bms.h
   trunk/source/i18n/unicode/bmsearch.h
   trunk/source/i18n/unicode/colldata.h
Modified:
   trunk/APIChangeReport.html
   trunk/as_is/borland/icuin.bpf
   trunk/as_is/borland/icuin.bpr
   trunk/readme.html
   trunk/source/common/ucnv2022.c
   trunk/source/common/ucnvhz.c
   trunk/source/common/ucnvmbcs.c
   trunk/source/common/unicode/ucasemap.h
   trunk/source/common/unicode/uloc.h
   trunk/source/common/unicode/uniset.h
   trunk/source/common/unicode/unistr.h
   trunk/source/common/unicode/uscript.h
   trunk/source/common/unicode/uset.h
   trunk/source/common/unicode/utext.h
   trunk/source/common/unicode/uversion.h
   trunk/source/data/brkitr/brkfiles.mk
   trunk/source/data/misc/metazoneInfo.txt
   trunk/source/data/misc/supplementalData.txt
   trunk/source/data/misc/zoneinfo.txt
   trunk/source/data/translit/root.txt
   trunk/source/i18n/Makefile.in
   trunk/source/i18n/i18n.vcproj
   trunk/source/i18n/timezone.cpp
   trunk/source/i18n/ucln_in.h
   trunk/source/i18n/ucol.cpp
   trunk/source/i18n/ucol_imp.h
   trunk/source/i18n/ucol_sit.cpp
   trunk/source/i18n/ucoleitr.cpp
   trunk/source/i18n/unicode/basictz.h
   trunk/source/i18n/unicode/dtitvinf.h
   trunk/source/i18n/unicode/dtptngen.h
   trunk/source/i18n/unicode/dtrule.h
   trunk/source/i18n/unicode/rbtz.h
   trunk/source/i18n/unicode/simpletz.h
   trunk/source/i18n/unicode/timezone.h
   trunk/source/i18n/unicode/tzrule.h
   trunk/source/i18n/unicode/tztrans.h
   trunk/source/i18n/unicode/ucal.h
   trunk/source/i18n/unicode/ucoleitr.h
   trunk/source/i18n/unicode/udatpg.h
   trunk/source/i18n/unicode/utmscale.h
   trunk/source/i18n/unicode/vtzone.h
   trunk/source/i18n/usearch.cpp
   trunk/source/layout/LEScripts.h
   trunk/source/test/cintltst/callcoll.c
   trunk/source/test/cintltst/nccbtst.c
   trunk/source/test/cintltst/nucnvtst.c
   trunk/source/test/cintltst/usrchtst.c
   trunk/source/test/intltest/ssearch.cpp
   trunk/source/test/intltest/ssearch.h
   trunk/source/test/intltest/transrt.cpp
   trunk/source/test/intltest/tztest.cpp
   trunk/source/test/perf/strsrchperf/strsrchperf.cpp
   trunk/source/test/perf/strsrchperf/strsrchperf.h
   trunk/source/test/perf/strsrchperf/strsrchperf.vcproj
   trunk/source/test/testdata/conversion.txt
   trunk/source/test/testdata/ssearch.xml
Log:
ICU 4.0.1 update

Modified: trunk/APIChangeReport.html
===================================================================
--- trunk/APIChangeReport.html	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/APIChangeReport.html	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,1936 +1,4 @@
-<html>
-<!-- Copyright (c) 2008 International Business Machines and others. All rights reserved. -->
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ICU4C API Comparison: ICU 3.8.1 with ICU 4.0</title>
-</head>
-<body>
-<h1>ICU4C API Comparison: ICU 3.8.1 with ICU 4.0</h1>
-<hr>
-<h2>Removed from ICU 3.8.1</h2>
-<table BORDER="1">
-<THEAD>
-<tr>
-<th>File</th><th>Public API Prototype</th><th>ICU 3.8.1</th><th>ICU 4.0</th>
-</tr>
-</THEAD>
-<tr STYLE="color: red">
-<td>LESwaps.h</td><td>static le_uint32 LESwaps::swapLong(le_uint32 value)</td><td>Stable</td><td>None</td>
-</tr>
-<tr STYLE="color: red">
-<td>LESwaps.h</td><td>static le_uint16 LESwaps::swapWord(le_uint16 value)</td><td>Stable</td><td>None</td>
-</tr>
-<tr STYLE="color: red">
-<td>LESwaps.h</td><td>static le_uint8 LESwaps::isBigEndian()</td><td>Stable</td><td>None</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>UBool MessageFormat::Subformat::operator!=(const Subformat &amp;that) const</td><td>Internal</td><td>None</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>Subformat&amp; MessageFormat::Subformat::operator=(const Subformat &amp;that)</td><td>Internal</td><td>None</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>UBool MessageFormat::Subformat::operator==(const Subformat &amp;that) const</td><td>Internal</td><td>None</td>
-</tr>
-<tr STYLE="">
-<td>ucol.h</td><td>int32_t ucol_identifierToShortString(uint32_t identifier, char *buffer, int32_t capacity, UBool forceDefaults, UErrorCode *status)</td><td>Internal</td><td>None</td>
-</tr>
-<tr STYLE="">
-<td>ucol.h</td><td>UCollator* ucol_openFromIdentifier(uint32_t identifier, UBool forceDefaults, UErrorCode *status)</td><td>Internal</td><td>None</td>
-</tr>
-<tr STYLE="">
-<td>ucol.h</td><td>uint32_t ucol_shortStringToIdentifier(const char *definition, UBool forceDefaults, UErrorCode *status)</td><td>Internal</td><td>None</td>
-</tr>
-<tr STYLE="">
-<td>ucol.h</td><td>uint32_t ucol_collatorToIdentifier(const UCollator *coll, const char *locale, UErrorCode *status)</td><td>Internal</td><td>None</td>
-</tr>
-</table>
-<P></P>
-<hr>
-<h2>Deprecated or Obsoleted in ICU 4.0</h2>
-<table BORDER="1">
-<THEAD>
-<tr>
-<th>File</th><th>Public API Prototype</th><th>ICU 3.8.1</th><th>ICU 4.0</th>
-</tr>
-</THEAD>
-</table>
-<P></P>
-<hr>
-<h2>Changed in  ICU 4.0 (old, new)</h2>
-<table BORDER="1">
-<THEAD>
-<tr>
-<th>File</th><th>Public API Prototype</th><th>ICU 3.8.1</th><th>ICU 4.0</th>
-</tr>
-</THEAD>
-<tr STYLE="">
-<td>basictz.h</td><td>void BasicTimeZone::getSimpleRulesNear(UDate date, InitialTimeZoneRule *&amp;initial, AnnualTimeZoneRule *&amp;std, AnnualTimeZoneRule *&amp;dst, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>void BasicTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)=0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>int32_t BasicTimeZone::countTransitionRules(UErrorCode &amp;status)=0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>UBool BasicTimeZone::hasEquivalentTransitions(BasicTimeZone &amp;tz, UDate start, UDate end, UBool ignoreDstAmount, UErrorCode &amp;ec)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>UBool BasicTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)=0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>UBool BasicTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)=0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>BasicTimeZone::~BasicTimeZone()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>StringEnumeration* DateTimePatternGenerator::getBaseSkeletons(UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createInstance(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UBool DateTimePatternGenerator::operator!=(const DateTimePatternGenerator &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getBestPattern(const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>void DateTimePatternGenerator::setDecimal(const UnicodeString &amp;decimal)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>void DateTimePatternGenerator::setAppendItemName(UDateTimePatternField field, const UnicodeString &amp;value)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getPatternForSkeleton(const UnicodeString &amp;skeleton) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>DateTimePatternGenerator* DateTimePatternGenerator::clone() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>DateTimePatternGenerator::~DateTimePatternGenerator()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getBaseSkeleton(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UClassID DateTimePatternGenerator::getDynamicClassID() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>static UClassID DateTimePatternGenerator::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UDateTimePatternConflict DateTimePatternGenerator::addPattern(const UnicodeString &amp;pattern, UBool override, UnicodeString &amp;conflictingPattern, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createEmptyInstance(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::replaceFieldTypes(const UnicodeString &amp;pattern, const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getAppendItemFormat(UDateTimePatternField field) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>void DateTimePatternGenerator::setAppendItemFormat(UDateTimePatternField field, const UnicodeString &amp;value)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createInstance(const Locale &amp;uLocale, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getAppendItemName(UDateTimePatternField field) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>void DateTimePatternGenerator::setDateTimeFormat(const UnicodeString &amp;dateTimeFormat)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>StringEnumeration* DateTimePatternGenerator::getSkeletons(UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getDateTimeFormat() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UBool DateTimePatternGenerator::operator==(const DateTimePatternGenerator &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getDecimal() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getSkeleton(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::~DateTimeRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleWeekInMonth(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>UBool DateTimeRule::operator==(const DateTimeRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleDayOfMonth(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>UBool DateTimeRule::operator!=(const DateTimeRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::DateTimeRule(const DateTimeRule &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule* DateTimeRule::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>static UClassID DateTimeRule::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleMonth(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule&amp; DateTimeRule::operator=(const DateTimeRule &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, UBool after, int32_t millisInDay, TimeRuleType timeType)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t weekInMonth, int32_t dayOfWeek, int32_t millisInDay, TimeRuleType timeType)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleMillisInDay(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t millisInDay, TimeRuleType timeType)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateRuleType DateTimeRule::getDateRuleType(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>TimeRuleType DateTimeRule::getTimeRuleType(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleDayOfWeek(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>UClassID DateTimeRule::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>RuleBasedTimeZone::RuleBasedTimeZone(const RuleBasedTimeZone &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::hasSameRules(const TimeZone &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::addTransitionRule(TimeZoneRule *rule, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>int32_t RuleBasedTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>RuleBasedTimeZone&amp; RuleBasedTimeZone::operator=(const RuleBasedTimeZone &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>RuleBasedTimeZone::RuleBasedTimeZone(const UnicodeString &amp;id, InitialTimeZoneRule *initialRule)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UClassID RuleBasedTimeZone::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::useDaylightTime(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::setRawOffset(int32_t offsetMillis)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::getOffset(UDate date, UBool local, int32_t &amp;rawOffset, int32_t &amp;dstOffset, UErrorCode &amp;ec) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>static UClassID RuleBasedTimeZone::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::operator!=(const TimeZone &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, int32_t monthLength, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::complete(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>TimeZone* RuleBasedTimeZone::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>RuleBasedTimeZone::~RuleBasedTimeZone()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getRawOffset(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::operator==(const TimeZone &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>simpletz.h</td><td>void SimpleTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>simpletz.h</td><td>UBool SimpleTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>simpletz.h</td><td>UBool SimpleTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>simpletz.h</td><td>int32_t SimpleTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>timezone.h</td><td>static const char* TimeZone::getTZDataVersion(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t AnnualTimeZoneRule::getStartYear(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule* AnnualTimeZoneRule::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule&amp; InitialTimeZoneRule::operator=(const InitialTimeZoneRule &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule::~AnnualTimeZoneRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>static UClassID TimeArrayTimeZoneRule::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t TimeZoneRule::getRawOffset(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule::InitialTimeZoneRule(const InitialTimeZoneRule &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t AnnualTimeZoneRule::getEndYear(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule::~InitialTimeZoneRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule::InitialTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule* InitialTimeZoneRule::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule::~TimeArrayTimeZoneRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>const DateTimeRule* AnnualTimeZoneRule::getRule(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule&amp; AnnualTimeZoneRule::operator=(const AnnualTimeZoneRule &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>static UClassID InitialTimeZoneRule::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule&amp; TimeArrayTimeZoneRule::operator=(const TimeArrayTimeZoneRule &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeZoneRule* TimeZoneRule::clone(void) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t TimeZoneRule::getDSTSavings(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UClassID AnnualTimeZoneRule::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t TimeArrayTimeZoneRule::countStartTimes(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule::TimeArrayTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, const UDate *startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UClassID TimeArrayTimeZoneRule::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>DateTimeRule::TimeRuleType TimeArrayTimeZoneRule::getTimeType(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const AnnualTimeZoneRule &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule::TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeZoneRule::~TimeZoneRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UnicodeString&amp; TimeZoneRule::getName(UnicodeString &amp;name) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, const DateTimeRule &amp;dateTimeRule, int32_t startYear, int32_t endYear)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule* TimeArrayTimeZoneRule::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>static UClassID AnnualTimeZoneRule::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getStartTimeAt(int32_t index, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, DateTimeRule *dateTimeRule, int32_t startYear, int32_t endYear)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UClassID InitialTimeZoneRule::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>UBool TimeZoneTransition::operator!=(const TimeZoneTransition &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition* TimeZoneTransition::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>const TimeZoneRule* TimeZoneTransition::getFrom(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>UClassID TimeZoneTransition::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>UBool TimeZoneTransition::operator==(const TimeZoneTransition &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::adoptFrom(TimeZoneRule *from)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition(UDate time, const TimeZoneRule &amp;from, const TimeZoneRule &amp;to)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::adoptTo(TimeZoneRule *to)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>UDate TimeZoneTransition::getTime(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>static UClassID TimeZoneTransition::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::setFrom(const TimeZoneRule &amp;from)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::setTime(UDate time)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>const TimeZoneRule* TimeZoneTransition::getTo(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition::~TimeZoneTransition()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition&amp; TimeZoneTransition::operator=(const TimeZoneTransition &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::setTo(const TimeZoneRule &amp;to)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition(const TimeZoneTransition &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucal.h</td><td>const char* ucal_getTZDataVersion(UErrorCode *status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>int32_t ucasemap_utf8FoldCase(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>void ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>const UBreakIterator* ucasemap_getBreakIterator(const UCaseMap *csm)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>int32_t ucasemap_utf8ToTitle(UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>int32_t ucasemap_toTitle(UCaseMap *csm, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>int32_t udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t length, UChar *baseSkeleton, int32_t capacity, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>int32_t udatpg_getSkeleton(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t length, UChar *skeleton, int32_t capacity, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UEnumeration* udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_close(UDateTimePatternGenerator *dtpg)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_openEmpty(UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg, UDateTimePatternField field, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg, UDateTimePatternField field, const UChar *value, int32_t length)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_open(const char *locale, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getDecimal(const UDateTimePatternGenerator *dtpg, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>int32_t udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, const UChar *skeleton, int32_t length, UChar *bestPattern, int32_t capacity, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg, const UChar *skeleton, int32_t skeletonLength, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg, UDateTimePatternField field, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UEnumeration* udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UDateTimePatternConflict udatpg_addPattern(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t patternLength, UBool override, UChar *conflictingPattern, int32_t capacity, int32_t *pLength, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_setDecimal(UDateTimePatternGenerator *dtpg, const UChar *decimal, int32_t length)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg, UDateTimePatternField field, const UChar *value, int32_t length)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>int32_t udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t patternLength, const UChar *skeleton, int32_t skeletonLength, UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, const UChar *dtFormat, int32_t length)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uloc.h</td><td>int32_t uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity, UErrorCode *status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>int32_t UnicodeSet::span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>UnicodeFunctor* UnicodeSet::freeze()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>int32_t UnicodeSet::spanBackUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>UnicodeFunctor* UnicodeSet::cloneAsThawed() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>int32_t UnicodeSet::spanBack(const UChar *s, int32_t length, USetSpanCondition spanCondition) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>int32_t UnicodeSet::spanUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>UBool UnicodeSet::isFrozen() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>unistr.h</td><td>UnicodeString&amp; UnicodeString::toTitle(BreakIterator *titleIter, const Locale &amp;locale, uint32_t options)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="color: red">
-<td>unistr.h</td><td>int32_t u_strlen(const UChar *s)</td><td>Stable</td><td></td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>void uset_freeze(USet *set)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>UBool uset_isFrozen(const USet *set)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>int32_t uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>USet* uset_cloneAsThawed(const USet *set)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>int32_t uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>int32_t uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>USet* uset_clone(const USet *set)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>int32_t uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::write(UDate start, UnicodeString &amp;result, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>int32_t VTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, int32_t monthLength, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>VTimeZone&amp; VTimeZone::operator=(const VTimeZone &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>static VTimeZone* VTimeZone::createVTimeZone(const UnicodeString &amp;vtzdata, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::useDaylightTime(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UClassID VTimeZone::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::getOffset(UDate date, UBool local, int32_t &amp;rawOffset, int32_t &amp;dstOffset, UErrorCode &amp;ec) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::operator!=(const TimeZone &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>int32_t VTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::write(UnicodeString &amp;result, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>static VTimeZone* VTimeZone::createVTimeZoneByID(const UnicodeString &amp;ID)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>static UClassID VTimeZone::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::operator==(const TimeZone &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>int32_t VTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::setLastModified(UDate lastModified)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::getTZURL(UnicodeString &amp;url) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::setTZURL(const UnicodeString &amp;url)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::getLastModified(UDate &amp;lastModified) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>TimeZone* VTimeZone::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::setRawOffset(int32_t offsetMillis)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>int32_t VTimeZone::getRawOffset(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::hasSameRules(const TimeZone &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::writeSimple(UDate time, UnicodeString &amp;result, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>VTimeZone::~VTimeZone()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>VTimeZone::VTimeZone(const VTimeZone &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-</table>
-<P></P>
-<hr>
-<h2>Promoted to stable in ICU 4.0</h2>
-<table BORDER="1">
-<THEAD>
-<tr>
-<th>File</th><th>Public API Prototype</th><th>ICU 3.8.1</th><th>ICU 4.0</th>
-</tr>
-</THEAD>
-<tr STYLE="">
-<td>basictz.h</td><td>void BasicTimeZone::getSimpleRulesNear(UDate date, InitialTimeZoneRule *&amp;initial, AnnualTimeZoneRule *&amp;std, AnnualTimeZoneRule *&amp;dst, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>void BasicTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)=0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>int32_t BasicTimeZone::countTransitionRules(UErrorCode &amp;status)=0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>UBool BasicTimeZone::hasEquivalentTransitions(BasicTimeZone &amp;tz, UDate start, UDate end, UBool ignoreDstAmount, UErrorCode &amp;ec)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>UBool BasicTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)=0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>UBool BasicTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)=0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>basictz.h</td><td>BasicTimeZone::~BasicTimeZone()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>UBool DateIntervalInfo::operator==(const DateIntervalInfo &amp;other) const</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>UBool DateIntervalInfo::operator!=(const DateIntervalInfo &amp;other) const</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>static UClassID DateIntervalInfo::getStaticClassID()</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>UClassID DateIntervalInfo::getDynamicClassID() const</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>StringEnumeration* DateTimePatternGenerator::getBaseSkeletons(UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createInstance(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UBool DateTimePatternGenerator::operator!=(const DateTimePatternGenerator &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getBestPattern(const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>void DateTimePatternGenerator::setDecimal(const UnicodeString &amp;decimal)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>void DateTimePatternGenerator::setAppendItemName(UDateTimePatternField field, const UnicodeString &amp;value)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getPatternForSkeleton(const UnicodeString &amp;skeleton) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>DateTimePatternGenerator* DateTimePatternGenerator::clone() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>DateTimePatternGenerator::~DateTimePatternGenerator()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getBaseSkeleton(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UClassID DateTimePatternGenerator::getDynamicClassID() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>static UClassID DateTimePatternGenerator::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UDateTimePatternConflict DateTimePatternGenerator::addPattern(const UnicodeString &amp;pattern, UBool override, UnicodeString &amp;conflictingPattern, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createEmptyInstance(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::replaceFieldTypes(const UnicodeString &amp;pattern, const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getAppendItemFormat(UDateTimePatternField field) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>void DateTimePatternGenerator::setAppendItemFormat(UDateTimePatternField field, const UnicodeString &amp;value)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createInstance(const Locale &amp;uLocale, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getAppendItemName(UDateTimePatternField field) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>void DateTimePatternGenerator::setDateTimeFormat(const UnicodeString &amp;dateTimeFormat)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>StringEnumeration* DateTimePatternGenerator::getSkeletons(UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getDateTimeFormat() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UBool DateTimePatternGenerator::operator==(const DateTimePatternGenerator &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getDecimal() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getSkeleton(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::~DateTimeRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleWeekInMonth(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>UBool DateTimeRule::operator==(const DateTimeRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleDayOfMonth(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>UBool DateTimeRule::operator!=(const DateTimeRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::DateTimeRule(const DateTimeRule &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule* DateTimeRule::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>static UClassID DateTimeRule::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleMonth(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule&amp; DateTimeRule::operator=(const DateTimeRule &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, UBool after, int32_t millisInDay, TimeRuleType timeType)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t weekInMonth, int32_t dayOfWeek, int32_t millisInDay, TimeRuleType timeType)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleMillisInDay(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t millisInDay, TimeRuleType timeType)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>DateRuleType DateTimeRule::getDateRuleType(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>TimeRuleType DateTimeRule::getTimeRuleType(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>int32_t DateTimeRule::getRuleDayOfWeek(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtrule.h</td><td>UClassID DateTimeRule::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>LESwaps.h</td><td>static le_uint16 LESwaps::swapWord(const le_uint16 &amp;value)</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>LESwaps.h</td><td>static le_uint32 LESwaps::swapLong(const le_uint32 &amp;value)</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>UnicodeString&amp; MessageFormat::format(const UnicodeString *argumentNames, const Formattable *arguments, int32_t count, UnicodeString &amp;appendTo, UErrorCode &amp;status) const</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>RuleBasedTimeZone::RuleBasedTimeZone(const RuleBasedTimeZone &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::hasSameRules(const TimeZone &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::addTransitionRule(TimeZoneRule *rule, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>int32_t RuleBasedTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>RuleBasedTimeZone&amp; RuleBasedTimeZone::operator=(const RuleBasedTimeZone &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>RuleBasedTimeZone::RuleBasedTimeZone(const UnicodeString &amp;id, InitialTimeZoneRule *initialRule)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UClassID RuleBasedTimeZone::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::useDaylightTime(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::setRawOffset(int32_t offsetMillis)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::getOffset(UDate date, UBool local, int32_t &amp;rawOffset, int32_t &amp;dstOffset, UErrorCode &amp;ec) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>static UClassID RuleBasedTimeZone::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::operator!=(const TimeZone &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, int32_t monthLength, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::complete(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>void RuleBasedTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>TimeZone* RuleBasedTimeZone::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>RuleBasedTimeZone::~RuleBasedTimeZone()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getRawOffset(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>rbtz.h</td><td>UBool RuleBasedTimeZone::operator==(const TimeZone &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>simpletz.h</td><td>void SimpleTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>simpletz.h</td><td>UBool SimpleTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>simpletz.h</td><td>UBool SimpleTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>simpletz.h</td><td>int32_t SimpleTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>timezone.h</td><td>static const char* TimeZone::getTZDataVersion(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t AnnualTimeZoneRule::getStartYear(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule* AnnualTimeZoneRule::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule&amp; InitialTimeZoneRule::operator=(const InitialTimeZoneRule &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule::~AnnualTimeZoneRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>static UClassID TimeArrayTimeZoneRule::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t TimeZoneRule::getRawOffset(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule::InitialTimeZoneRule(const InitialTimeZoneRule &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t AnnualTimeZoneRule::getEndYear(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule::~InitialTimeZoneRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule::InitialTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>InitialTimeZoneRule* InitialTimeZoneRule::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule::~TimeArrayTimeZoneRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>const DateTimeRule* AnnualTimeZoneRule::getRule(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule&amp; AnnualTimeZoneRule::operator=(const AnnualTimeZoneRule &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>static UClassID InitialTimeZoneRule::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule&amp; TimeArrayTimeZoneRule::operator=(const TimeArrayTimeZoneRule &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeZoneRule* TimeZoneRule::clone(void) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t TimeZoneRule::getDSTSavings(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UClassID AnnualTimeZoneRule::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>int32_t TimeArrayTimeZoneRule::countStartTimes(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule::TimeArrayTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, const UDate *startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UClassID TimeArrayTimeZoneRule::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>DateTimeRule::TimeRuleType TimeArrayTimeZoneRule::getTimeType(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const AnnualTimeZoneRule &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule::TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeZoneRule::~TimeZoneRule()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UnicodeString&amp; TimeZoneRule::getName(UnicodeString &amp;name) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, const DateTimeRule &amp;dateTimeRule, int32_t startYear, int32_t endYear)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>TimeArrayTimeZoneRule* TimeArrayTimeZoneRule::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>static UClassID AnnualTimeZoneRule::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const =0</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getStartTimeAt(int32_t index, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, DateTimeRule *dateTimeRule, int32_t startYear, int32_t endYear)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UClassID InitialTimeZoneRule::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tzrule.h</td><td>UBool InitialTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>UBool TimeZoneTransition::operator!=(const TimeZoneTransition &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition* TimeZoneTransition::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>const TimeZoneRule* TimeZoneTransition::getFrom(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>UClassID TimeZoneTransition::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>UBool TimeZoneTransition::operator==(const TimeZoneTransition &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::adoptFrom(TimeZoneRule *from)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition(UDate time, const TimeZoneRule &amp;from, const TimeZoneRule &amp;to)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::adoptTo(TimeZoneRule *to)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>UDate TimeZoneTransition::getTime(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>static UClassID TimeZoneTransition::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::setFrom(const TimeZoneRule &amp;from)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::setTime(UDate time)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>const TimeZoneRule* TimeZoneTransition::getTo(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition::~TimeZoneTransition()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition&amp; TimeZoneTransition::operator=(const TimeZoneTransition &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>void TimeZoneTransition::setTo(const TimeZoneRule &amp;to)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition(const TimeZoneTransition &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucal.h</td><td>const char* ucal_getTZDataVersion(UErrorCode *status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>int32_t ucasemap_utf8FoldCase(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>void ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>const UBreakIterator* ucasemap_getBreakIterator(const UCaseMap *csm)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>int32_t ucasemap_utf8ToTitle(UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>ucasemap.h</td><td>int32_t ucasemap_toTitle(UCaseMap *csm, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>int32_t udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t length, UChar *baseSkeleton, int32_t capacity, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>int32_t udatpg_getSkeleton(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t length, UChar *skeleton, int32_t capacity, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UEnumeration* udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_close(UDateTimePatternGenerator *dtpg)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_openEmpty(UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg, UDateTimePatternField field, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg, UDateTimePatternField field, const UChar *value, int32_t length)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_open(const char *locale, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getDecimal(const UDateTimePatternGenerator *dtpg, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>int32_t udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, const UChar *skeleton, int32_t length, UChar *bestPattern, int32_t capacity, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg, const UChar *skeleton, int32_t skeletonLength, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>const UChar* udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg, UDateTimePatternField field, int32_t *pLength)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UEnumeration* udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>UDateTimePatternConflict udatpg_addPattern(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t patternLength, UBool override, UChar *conflictingPattern, int32_t capacity, int32_t *pLength, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_setDecimal(UDateTimePatternGenerator *dtpg, const UChar *decimal, int32_t length)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg, UDateTimePatternField field, const UChar *value, int32_t length)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>int32_t udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t patternLength, const UChar *skeleton, int32_t skeletonLength, UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>udatpg.h</td><td>void udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, const UChar *dtFormat, int32_t length)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uloc.h</td><td>int32_t uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity, UErrorCode *status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>int32_t UnicodeSet::span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>UnicodeFunctor* UnicodeSet::freeze()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>int32_t UnicodeSet::spanBackUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>UnicodeFunctor* UnicodeSet::cloneAsThawed() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>int32_t UnicodeSet::spanBack(const UChar *s, int32_t length, USetSpanCondition spanCondition) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>int32_t UnicodeSet::spanUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>UBool UnicodeSet::isFrozen() const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>unistr.h</td><td>UnicodeString&amp; UnicodeString::toTitle(BreakIterator *titleIter, const Locale &amp;locale, uint32_t options)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>void uset_freeze(USet *set)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>UBool uset_isFrozen(const USet *set)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>int32_t uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>USet* uset_cloneAsThawed(const USet *set)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>int32_t uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>int32_t uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>USet* uset_clone(const USet *set)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>uset.h</td><td>int32_t uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::write(UDate start, UnicodeString &amp;result, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>int32_t VTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, int32_t monthLength, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>VTimeZone&amp; VTimeZone::operator=(const VTimeZone &amp;right)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>static VTimeZone* VTimeZone::createVTimeZone(const UnicodeString &amp;vtzdata, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::useDaylightTime(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UClassID VTimeZone::getDynamicClassID(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::getOffset(UDate date, UBool local, int32_t &amp;rawOffset, int32_t &amp;dstOffset, UErrorCode &amp;ec) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::operator!=(const TimeZone &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>int32_t VTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::write(UnicodeString &amp;result, UErrorCode &amp;status) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>static VTimeZone* VTimeZone::createVTimeZoneByID(const UnicodeString &amp;ID)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>static UClassID VTimeZone::getStaticClassID(void)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::operator==(const TimeZone &amp;that) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>int32_t VTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::setLastModified(UDate lastModified)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::getTZURL(UnicodeString &amp;url) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::setTZURL(const UnicodeString &amp;url)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::getLastModified(UDate &amp;lastModified) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>TimeZone* VTimeZone::clone(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::setRawOffset(int32_t offsetMillis)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>int32_t VTimeZone::getRawOffset(void) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>UBool VTimeZone::hasSameRules(const TimeZone &amp;other) const</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>void VTimeZone::writeSimple(UDate time, UnicodeString &amp;result, UErrorCode &amp;status)</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>VTimeZone::~VTimeZone()</td><td>Draft</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>vtzone.h</td><td>VTimeZone::VTimeZone(const VTimeZone &amp;source)</td><td>Draft</td><td>Stable</td>
-</tr>
-</table>
-<P></P>
-<hr>
-<h2>Added in ICU 4.0</h2>
-<table BORDER="1">
-<THEAD>
-<tr>
-<th>File</th><th>Public API Prototype</th><th>ICU 3.8.1</th><th>ICU 4.0</th>
-</tr>
-</THEAD>
-<tr STYLE="">
-<td>datefmt.h</td><td>static DateFormat* DateFormat::createPatternInstance(const UnicodeString &amp;skeleton, const Locale &amp;locale, UErrorCode &amp;status)</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>DateInterval::DateInterval(UDate fromDate, UDate toDate)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>UClassID DateInterval::getDynamicClassID(void) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>static UClassID DateInterval::getStaticClassID(void)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>DateInterval&amp; DateInterval::operator=(const DateInterval &amp;)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>DateInterval::DateInterval(const DateInterval &amp;other)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>DateInterval::~DateInterval()</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>UBool DateInterval::operator==(const DateInterval &amp;other) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>UBool DateInterval::operator!=(const DateInterval &amp;other) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>UDate DateInterval::getToDate() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>DateInterval* DateInterval::clone() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtintrv.h</td><td>UDate DateInterval::getFromDate() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &amp;skeleton, const Locale &amp;locale, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>UBool DateIntervalFormat::operator==(const Format &amp;other) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>const DateIntervalInfo* DateIntervalFormat::getDateIntervalInfo(void) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>UClassID DateIntervalFormat::getDynamicClassID(void) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &amp;skeleton, const DateIntervalInfo &amp;dtitvinf, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>UnicodeString&amp; DateIntervalFormat::format(const Formattable &amp;obj, UnicodeString &amp;appendTo, FieldPosition &amp;fieldPosition, UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>DateIntervalFormat::~DateIntervalFormat()</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &amp;skeleton, const Locale &amp;locale, const DateIntervalInfo &amp;dtitvinf, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>UnicodeString&amp; DateIntervalFormat::format(Calendar &amp;fromCalendar, Calendar &amp;toCalendar, UnicodeString &amp;appendTo, FieldPosition &amp;fieldPosition, UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>void DateIntervalFormat::setDateIntervalInfo(const DateIntervalInfo &amp;newIntervalPatterns, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>UnicodeString&amp; DateIntervalFormat::format(const DateInterval *dtInterval, UnicodeString &amp;appendTo, FieldPosition &amp;fieldPosition, UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>UBool DateIntervalFormat::operator!=(const Format &amp;other) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>void DateIntervalFormat::parseObject(const UnicodeString &amp;source, Formattable &amp;result, ParsePosition &amp;parse_pos) const</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>const DateFormat* DateIntervalFormat::getDateFormat(void) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>static UClassID DateIntervalFormat::getStaticClassID(void)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvfmt.h</td><td>Format* DateIntervalFormat::clone(void) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>void DateIntervalInfo::setFallbackIntervalPattern(const UnicodeString &amp;fallbackPattern, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>U_NAMESPACE_BEGIN static U_CDECL_BEGIN UBool U_CALLCONV hashTableValueComparator(UHashTok val1, UHashTok val2)</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>UBool DateIntervalInfo::operator==(const DateIntervalInfo &amp;other) const</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>DateIntervalInfo* DateIntervalInfo::clone(void) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>DateIntervalInfo::DateIntervalInfo(const DateIntervalInfo &amp;)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>UnicodeString&amp; DateIntervalInfo::getIntervalPattern(const UnicodeString &amp;skeleton, UCalendarDateFields field, UnicodeString &amp;result, UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>void DateIntervalInfo::setIntervalPattern(const UnicodeString &amp;skeleton, UCalendarDateFields lrgDiffCalUnit, const UnicodeString &amp;intervalPattern, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>UBool DateIntervalInfo::operator!=(const DateIntervalInfo &amp;other) const</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>DateIntervalInfo::DateIntervalInfo(const Locale &amp;locale, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>UBool DateIntervalInfo::getDefaultOrder() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>UnicodeString&amp; DateIntervalInfo::getFallbackIntervalPattern(UnicodeString &amp;result) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>DateIntervalInfo&amp; DateIntervalInfo::operator=(const DateIntervalInfo &amp;)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>DateIntervalInfo::~DateIntervalInfo()</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>static UClassID DateIntervalInfo::getStaticClassID()</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>UClassID DateIntervalInfo::getDynamicClassID() const</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>dtitvinf.h</td><td>DateIntervalInfo::DateIntervalInfo(UErrorCode &amp;status)</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>LESwaps.h</td><td>static le_uint16 LESwaps::swapWord(const le_uint16 &amp;value)</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>LESwaps.h</td><td>static le_uint32 LESwaps::swapLong(const le_uint32 &amp;value)</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>Format* MessageFormat::getFormat(const UnicodeString &amp;formatName, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>UnicodeString&amp; MessageFormat::format(const UnicodeString *argumentNames, const Formattable *arguments, int32_t count, UnicodeString &amp;appendTo, UErrorCode &amp;status) const</td><td>None</td><td>Stable</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>void MessageFormat::setFormat(const UnicodeString &amp;formatName, const Format &amp;format, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>UBool MessageFormat::usesNamedArguments() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>StringEnumeration* MessageFormat::getFormatNames(UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>msgfmt.h</td><td>void MessageFormat::adoptFormat(const UnicodeString &amp;formatName, Format *formatToAdopt, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::PluralFormat(const Locale &amp;locale, const PluralRules &amp;rules, const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>Format* PluralFormat::clone(void) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>static UClassID PluralFormat::getStaticClassID(void)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::PluralFormat(const Locale &amp;locale, const PluralRules &amp;rules, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>UBool PluralFormat::operator==(const Format &amp;other) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>UnicodeString&amp; PluralFormat::format(double number, UnicodeString &amp;appendTo, FieldPosition &amp;pos, UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>void PluralFormat::setNumberFormat(const NumberFormat *format, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>UClassID PluralFormat::getDynamicClassID() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::PluralFormat(const PluralFormat &amp;other)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::PluralFormat(const Locale &amp;locale, const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::PluralFormat(UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>UnicodeString PluralFormat::format(int32_t number, UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>void PluralFormat::setLocale(const Locale &amp;locale, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>UnicodeString PluralFormat::format(double number, UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>UnicodeString&amp; PluralFormat::format(const Formattable &amp;obj, UnicodeString &amp;appendTo, FieldPosition &amp;pos, UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat&amp; PluralFormat::operator=(const PluralFormat &amp;other)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>void PluralFormat::parseObject(const UnicodeString &amp;source, Formattable &amp;result, ParsePosition &amp;parse_pos) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>UBool PluralFormat::operator!=(const Format &amp;other) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::PluralFormat(const Locale &amp;locale, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::PluralFormat(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::PluralFormat(const PluralRules &amp;rules, const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::~PluralFormat()</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>UnicodeString&amp; PluralFormat::format(int32_t number, UnicodeString &amp;appendTo, FieldPosition &amp;pos, UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>UnicodeString&amp; PluralFormat::toPattern(UnicodeString &amp;appendTo)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>void PluralFormat::applyPattern(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurfmt.h</td><td>PluralFormat::PluralFormat(const PluralRules &amp;rules, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>StringEnumeration* PluralRules::getKeywords(UErrorCode &amp;status) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>PluralRules* PluralRules::clone() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>UnicodeString PluralRules::select(int32_t number) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>PluralRules::~PluralRules()</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>UnicodeString PluralRules::select(double number) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>PluralRules&amp; PluralRules::operator=(const PluralRules &amp;)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>PluralRules::PluralRules(const PluralRules &amp;other)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>UBool PluralRules::operator!=(const PluralRules &amp;other) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>UBool PluralRules::isKeyword(const UnicodeString &amp;keyword) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>static UClassID PluralRules::getStaticClassID(void)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>static PluralRules* PluralRules::forLocale(const Locale &amp;locale, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>UBool PluralRules::operator==(const PluralRules &amp;other) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>PluralRules::PluralRules(UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>static PluralRules* PluralRules::createRules(const UnicodeString &amp;description, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>static PluralRules* PluralRules::createDefaultRules(UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>UnicodeString PluralRules::getKeywordOther() const</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>plurrule.h</td><td>UClassID PluralRules::getDynamicClassID() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>void RegexMatcher::setMatchCallback(URegexMatchCallback *callback, const void *context, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>int32_t RegexMatcher::getStackLimit() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>RegexMatcher&amp; RegexMatcher::region(int32_t start, int32_t limit, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>void RegexMatcher::resetPreserveRegion()</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>UBool RegexMatcher::hasTransparentBounds() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>int32_t RegexMatcher::regionEnd() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>UBool RegexMatcher::requireEnd() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>void RegexMatcher::getMatchCallback(URegexMatchCallback *&amp;callback, const void *&amp;context, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>RegexMatcher&amp; RegexMatcher::useAnchoringBounds(UBool b)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>int32_t RegexMatcher::getTimeLimit() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>UBool RegexMatcher::hitEnd() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>void RegexMatcher::setTimeLimit(int32_t limit, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>RegexMatcher&amp; RegexMatcher::useTransparentBounds(UBool b)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>UBool RegexMatcher::hasAnchoringBounds() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>void RegexMatcher::setStackLimit(int32_t limit, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>regex.h</td><td>int32_t RegexMatcher::regionStart() const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>smpdtfmt.h</td><td>const Locale&amp; SimpleDateFormat::getSmpFmtLocale(void) const</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>smpdtfmt.h</td><td>static UBool SimpleDateFormat::isFieldUnitIgnored(const UnicodeString &amp;pattern, UCalendarDateFields field)</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>smpdtfmt.h</td><td>UBool SimpleDateFormat::isFieldUnitIgnored(UCalendarDateFields field) const</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>timezone.h</td><td>static UnicodeString&amp; TimeZone::getCanonicalID(const UnicodeString &amp;id, UnicodeString &amp;canonicalID, UBool &amp;isSystemID, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>timezone.h</td><td>static UnicodeString&amp; TimeZone::getCanonicalID(const UnicodeString &amp;id, UnicodeString &amp;canonicalID, UErrorCode &amp;status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>ucal.h</td><td>UCalendar* ucal_clone(const UCalendar *cal, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>ucal.h</td><td>int32_t ucal_getCanonicalTimeZoneID(const UChar *id, int32_t len, UChar *result, int32_t resultCapacity, UBool *isSystemID, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>ucoleitr.h</td><td>int64_t ucol_previousProcessed(UCollationElements *elems, int32_t *ixLow, int32_t *ixHigh, UErrorCode *status)</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>ucoleitr.h</td><td>int64_t ucol_nextProcessed(UCollationElements *elems, int32_t *ixLow, int32_t *ixHigh, UErrorCode *status)</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>ucurr.h</td><td>int32_t ucurr_countCurrencies(const char *locale, UDate date, UErrorCode *ec)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>ucurr.h</td><td>int32_t ucurr_forLocaleAndDate(const char *locale, UDate date, int32_t index, UChar *buff, int32_t buffCapacity, UErrorCode *ec)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uloc.h</td><td>int32_t uloc_addLikelySubtags(const char *localeID, char *maximizedLocaleID, int32_t maximizedLocaleIDCapacity, UErrorCode *err)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uloc.h</td><td>int32_t uloc_minimizeSubtags(const char *localeID, char *minimizedLocaleID, int32_t minimizedLocaleIDCapacity, UErrorCode *err)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uloc.h</td><td>ULayoutType uloc_getLineOrientation(const char *localeId, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uloc.h</td><td>ULayoutType uloc_getCharacterOrientation(const char *localeId, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>UnicodeSet&amp; UnicodeSet::removeAllStrings()</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>UBool UnicodeSet::isBogus(void) const</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uniset.h</td><td>void UnicodeSet::setToBogus()</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>void uregex_getMatchCallback(const URegularExpression *regexp, URegexMatchCallback **callback, const void **context, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>int32_t uregex_getStackLimit(const URegularExpression *regexp, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>UBool uregex_hitEnd(const URegularExpression *regexp, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>void uregex_useAnchoringBounds(URegularExpression *regexp, UBool b, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>int32_t uregex_getTimeLimit(const URegularExpression *regexp, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>U_CDECL_END void uregex_setMatchCallback(URegularExpression *regexp, URegexMatchCallback *callback, const void *context, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>void uregex_setTimeLimit(URegularExpression *regexp, int32_t limit, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>UBool uregex_hasAnchoringBounds(const URegularExpression *regexp, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>int32_t uregex_regionEnd(const URegularExpression *regexp, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>UBool uregex_requireEnd(const URegularExpression *regexp, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>void uregex_setRegion(URegularExpression *regexp, int32_t regionStart, int32_t regionLimit, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>void uregex_useTransparentBounds(URegularExpression *regexp, UBool b, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>UBool uregex_hasTransparentBounds(const URegularExpression *regexp, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>void uregex_setStackLimit(URegularExpression *regexp, int32_t limit, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>int32_t uregex_regionStart(const URegularExpression *regexp, UErrorCode *status)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>uregex.h</td><td>U_CDECL_BEGIN typedef UBool U_CALLCONV URegexMatchCallback(const void *context, int32_t steps)</td><td>None</td><td>Draft</td>
-</tr>
-<tr STYLE="">
-<td>usearch.h</td><td>UBool usearch_search(UStringSearch *strsrch, int32_t startIdx, int32_t *matchStart, int32_t *matchLimit, UErrorCode *status)</td><td>None</td><td>Internal</td>
-</tr>
-<tr STYLE="">
-<td>usearch.h</td><td>UBool usearch_searchBackwards(UStringSearch *strsrch, int32_t startIdx, int32_t *matchStart, int32_t *matchLimit, UErrorCode *status)</td><td>None</td><td>Internal</td>
-</tr>
-</table>
-<P></P>
-<hr>
-<p>
-<i><font size="-1">Contents generated by StableAPI tool on Fri Jun 27 08:52:04 PDT 2008<br>Copyright (C) 2008, International Business Machines Corporation, All Rights Reserved.</font></i>
-</p>
-</body>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+	 Copyright (C)  2008, International Business Machines Corporation, All Rights Reserved. 
+	--><html><head><title>ICU4C API Comparison: 3.8.1 with 4.0</title><link type="text/css" rel="stylesheet" href="icu4c.css"/></head><body><h1>ICU4C API Comparison: 3.8.1 with 4.0</h1><hr/><h2>Removed from 3.8.1</h2><table BORDER="1"><THEAD><tr><th>File</th><th>API</th><th>3.8.1</th><th>4.0</th></tr></THEAD><tr class="row1"><td>LESwaps.h</td><td>static le_uint16 LESwaps::swapWord(le_uint16 value)</td><td class="stabchange">Stable<br/>2.8</td><td>None<br/><span class=""><span/></span></td></tr><tr class="row0"><td>LESwaps.h</td><td>static le_uint32 LESwaps::swapLong(le_uint32 value)</td><td class="stabchange">Stable<br/>2.8</td><td>None<br/><span class=""><span/></span></td></tr><tr class="row1"><td>LESwaps.h</td><td>static le_uint8 LESwaps::isBigEndian()</td><td class="stabchange">Stable<br/>2.8</td><td>None<br/><span class=""><span/></span></td></tr><tr class="row0"><td>msgfmt.h</td><td>UBool MessageFormat::Subformat::operator==(const Subformat &amp;that) const</td><td class="">Internal<br/>.</td><td>None<br/><span class=""><span/></span></td></tr><tr class="row1"><td>msgfmt.h</td><td>Subformat&amp; MessageFormat::Subformat::operator=(const Subformat &amp;that)</td><td class="">Internal<br/>.</td><td>None<br/><span class=""><span/></span></td></tr><tr class="row0"><td>msgfmt.h</td><td>UBool MessageFormat::Subformat::operator!=(const Subformat &amp;that) const</td><td class="">Internal<br/>.</td><td>None<br/><span class=""><span/></span></td></tr><tr class="row1"><td>ucol.h</td><td>UCollator* ucol_openFromIdentifier(uint32_t identifier, UBool forceDefaults, UErrorCode *status)</td><td class="">Internal<br/>3.0</td><td>None<br/><span class=""><span/></span></td></tr><tr class="row0"><td>ucol.h</td><td>int32_t ucol_identifierToShortString(uint32_t identifier, char *buffer, int32_t capacity, UBool forceDefaults, UErrorCode *status)</td><td class="">Internal<br/>3.0</td><td>None<br/><span class=""><span/></span></td></tr><tr class="row1"><td>ucol.h</td><td>uint32_t ucol_shortStringToIdentifier(const char *definition, UBool forceDefaults, UErrorCode *status)</td><td class="">Internal<br/>3.0</td><td>None<br/><span class=""><span/></span></td></tr><tr class="row0"><td>ucol.h</td><td>uint32_t ucol_collatorToIdentifier(const UCollator *coll, const char *locale, UErrorCode *status)</td><td class="">Internal<br/>3.0</td><td>None<br/><span class=""><span/></span></td></tr></table><P/><hr/><h2>Deprecated or Obsoleted in 4.0</h2><table BORDER="1"><THEAD><tr><th>File</th><th>API</th><th>3.8.1</th><th>4.0</th></tr></THEAD></table><P/><hr/><h2>Changed in  4.0 (old, new)</h2><table BORDER="1"><THEAD><tr><th>File</th><th>API</th><th>3.8.1</th><th>4.0</th></tr></THEAD><tr class="row1"><td>basictz.h</td><td>int32_t BasicTimeZone::countTransitionRules(UErrorCode &amp;status)=0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>basictz.h</td><td>BasicTimeZone::~BasicTimeZone()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>basictz.h</td><td>void BasicTimeZone::getSimpleRulesNear(UDate date, InitialTimeZoneRule *&amp;initial, AnnualTimeZoneRule *&amp;std, AnnualTimeZoneRule *&amp;dst, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>basictz.h</td><td>UBool BasicTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)=0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>basictz.h</td><td>UBool BasicTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)=0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>basictz.h</td><td>void BasicTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)=0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>basictz.h</td><td>UBool BasicTimeZone::hasEquivalentTransitions(BasicTimeZone &amp;tz, UDate start, UDate end, UBool ignoreDstAmount, UErrorCode &amp;ec)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>UBool DateTimePatternGenerator::operator!=(const DateTimePatternGenerator &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getAppendItemName(UDateTimePatternField field) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getPatternForSkeleton(const UnicodeString &amp;skeleton) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>StringEnumeration* DateTimePatternGenerator::getBaseSkeletons(UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>DateTimePatternGenerator::~DateTimePatternGenerator()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getSkeleton(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>static UClassID DateTimePatternGenerator::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::replaceFieldTypes(const UnicodeString &amp;pattern, const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>UBool DateTimePatternGenerator::operator==(const DateTimePatternGenerator &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>DateTimePatternGenerator* DateTimePatternGenerator::clone() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createInstance(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getDecimal() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getAppendItemFormat(UDateTimePatternField field) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UClassID DateTimePatternGenerator::getDynamicClassID() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>void DateTimePatternGenerator::setAppendItemName(UDateTimePatternField field, const UnicodeString &amp;value)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>void DateTimePatternGenerator::setAppendItemFormat(UDateTimePatternField field, const UnicodeString &amp;value)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>void DateTimePatternGenerator::setDecimal(const UnicodeString &amp;decimal)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createEmptyInstance(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>StringEnumeration* DateTimePatternGenerator::getSkeletons(UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>void DateTimePatternGenerator::setDateTimeFormat(const UnicodeString &amp;dateTimeFormat)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createInstance(const Locale &amp;uLocale, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getBaseSkeleton(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getDateTimeFormat() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getBestPattern(const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>UDateTimePatternConflict DateTimePatternGenerator::addPattern(const UnicodeString &amp;pattern, UBool override, UnicodeString &amp;conflictingPattern, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t millisInDay, TimeRuleType timeType)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleWeekInMonth(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleMonth(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, UBool after, int32_t millisInDay, TimeRuleType timeType)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule* DateTimeRule::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>UClassID DateTimeRule::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule::~DateTimeRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleDayOfWeek(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>UBool DateTimeRule::operator==(const DateTimeRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>DateRuleType DateTimeRule::getDateRuleType(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleDayOfMonth(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>UBool DateTimeRule::operator!=(const DateTimeRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule&amp; DateTimeRule::operator=(const DateTimeRule &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t weekInMonth, int32_t dayOfWeek, int32_t millisInDay, TimeRuleType timeType)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>TimeRuleType DateTimeRule::getTimeRuleType(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleMillisInDay(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule::DateTimeRule(const DateTimeRule &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>static UClassID DateTimeRule::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>RuleBasedTimeZone::RuleBasedTimeZone(const UnicodeString &amp;id, InitialTimeZoneRule *initialRule)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>UClassID RuleBasedTimeZone::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>void RuleBasedTimeZone::addTransitionRule(TimeZoneRule *rule, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>void RuleBasedTimeZone::getOffset(UDate date, UBool local, int32_t &amp;rawOffset, int32_t &amp;dstOffset, UErrorCode &amp;ec) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::hasSameRules(const TimeZone &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>static UClassID RuleBasedTimeZone::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>void RuleBasedTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>void RuleBasedTimeZone::complete(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getRawOffset(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>void RuleBasedTimeZone::setRawOffset(int32_t offsetMillis)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>RuleBasedTimeZone&amp; RuleBasedTimeZone::operator=(const RuleBasedTimeZone &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::operator==(const TimeZone &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::useDaylightTime(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::operator!=(const TimeZone &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>RuleBasedTimeZone::~RuleBasedTimeZone()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, int32_t monthLength, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>TimeZone* RuleBasedTimeZone::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>int32_t RuleBasedTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>RuleBasedTimeZone::RuleBasedTimeZone(const RuleBasedTimeZone &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>simpletz.h</td><td>UBool SimpleTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>simpletz.h</td><td>void SimpleTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>simpletz.h</td><td>UBool SimpleTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>simpletz.h</td><td>int32_t SimpleTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>timezone.h</td><td>static const char* TimeZone::getTZDataVersion(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>TimeArrayTimeZoneRule&amp; TimeArrayTimeZoneRule::operator=(const TimeArrayTimeZoneRule &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>AnnualTimeZoneRule&amp; AnnualTimeZoneRule::operator=(const AnnualTimeZoneRule &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UClassID TimeArrayTimeZoneRule::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UClassID AnnualTimeZoneRule::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const AnnualTimeZoneRule &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>InitialTimeZoneRule* InitialTimeZoneRule::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>AnnualTimeZoneRule::~AnnualTimeZoneRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>InitialTimeZoneRule::InitialTimeZoneRule(const InitialTimeZoneRule &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>int32_t TimeZoneRule::getRawOffset(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>int32_t TimeArrayTimeZoneRule::countStartTimes(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>TimeArrayTimeZoneRule* TimeArrayTimeZoneRule::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>static UClassID TimeArrayTimeZoneRule::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>int32_t TimeZoneRule::getDSTSavings(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UnicodeString&amp; TimeZoneRule::getName(UnicodeString &amp;name) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>TimeArrayTimeZoneRule::~TimeArrayTimeZoneRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UClassID InitialTimeZoneRule::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>const DateTimeRule* AnnualTimeZoneRule::getRule(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>TimeZoneRule* TimeZoneRule::clone(void) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>static UClassID AnnualTimeZoneRule::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>TimeArrayTimeZoneRule::TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>TimeZoneRule::~TimeZoneRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>int32_t AnnualTimeZoneRule::getStartYear(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, const DateTimeRule &amp;dateTimeRule, int32_t startYear, int32_t endYear)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>InitialTimeZoneRule::~InitialTimeZoneRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>TimeArrayTimeZoneRule::TimeArrayTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, const UDate *startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>InitialTimeZoneRule&amp; InitialTimeZoneRule::operator=(const InitialTimeZoneRule &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, DateTimeRule *dateTimeRule, int32_t startYear, int32_t endYear)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getStartTimeAt(int32_t index, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>InitialTimeZoneRule::InitialTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>AnnualTimeZoneRule* AnnualTimeZoneRule::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>static UClassID InitialTimeZoneRule::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>int32_t AnnualTimeZoneRule::getEndYear(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>DateTimeRule::TimeRuleType TimeArrayTimeZoneRule::getTimeType(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>void TimeZoneTransition::setTo(const TimeZoneRule &amp;to)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition(UDate time, const TimeZoneRule &amp;from, const TimeZoneRule &amp;to)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>UBool TimeZoneTransition::operator==(const TimeZoneTransition &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>UBool TimeZoneTransition::operator!=(const TimeZoneTransition &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>void TimeZoneTransition::adoptTo(TimeZoneRule *to)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>const TimeZoneRule* TimeZoneTransition::getFrom(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>UClassID TimeZoneTransition::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>static UClassID TimeZoneTransition::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>void TimeZoneTransition::setTime(UDate time)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition(const TimeZoneTransition &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>TimeZoneTransition::~TimeZoneTransition()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>void TimeZoneTransition::adoptFrom(TimeZoneRule *from)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>TimeZoneTransition&amp; TimeZoneTransition::operator=(const TimeZoneTransition &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>UDate TimeZoneTransition::getTime(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>TimeZoneTransition* TimeZoneTransition::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>const TimeZoneRule* TimeZoneTransition::getTo(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>void TimeZoneTransition::setFrom(const TimeZoneRule &amp;from)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>ucal.h</td><td>const char* ucal_getTZDataVersion(UErrorCode *status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>ucasemap.h</td><td>int32_t ucasemap_toTitle(UCaseMap *csm, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>ucasemap.h</td><td>const UBreakIterator* ucasemap_getBreakIterator(const UCaseMap *csm)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>ucasemap.h</td><td>int32_t ucasemap_utf8ToTitle(UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>ucasemap.h</td><td>void ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>ucasemap.h</td><td>int32_t ucasemap_utf8FoldCase(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>UEnumeration* udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>const UChar* udatpg_getDecimal(const UDateTimePatternGenerator *dtpg, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>void udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg, UDateTimePatternField field, const UChar *value, int32_t length)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_open(const char *locale, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>const UChar* udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg, UDateTimePatternField field, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>void udatpg_setDecimal(UDateTimePatternGenerator *dtpg, const UChar *decimal, int32_t length)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>int32_t udatpg_getSkeleton(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t length, UChar *skeleton, int32_t capacity, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>void udatpg_close(UDateTimePatternGenerator *dtpg)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>void udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, const UChar *dtFormat, int32_t length)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>int32_t udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, const UChar *skeleton, int32_t length, UChar *bestPattern, int32_t capacity, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>const UChar* udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>void udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg, UDateTimePatternField field, const UChar *value, int32_t length)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_openEmpty(UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>UDateTimePatternConflict udatpg_addPattern(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t patternLength, UBool override, UChar *conflictingPattern, int32_t capacity, int32_t *pLength, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>UEnumeration* udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>const UChar* udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg, const UChar *skeleton, int32_t skeletonLength, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>int32_t udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t length, UChar *baseSkeleton, int32_t capacity, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>const UChar* udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg, UDateTimePatternField field, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>int32_t udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t patternLength, const UChar *skeleton, int32_t skeletonLength, UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uloc.h</td><td>int32_t uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity, UErrorCode *status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uniset.h</td><td>UBool UnicodeSet::isFrozen() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uniset.h</td><td>UnicodeFunctor* UnicodeSet::freeze()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uniset.h</td><td>int32_t UnicodeSet::spanBackUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uniset.h</td><td>int32_t UnicodeSet::span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uniset.h</td><td>int32_t UnicodeSet::spanBack(const UChar *s, int32_t length, USetSpanCondition spanCondition) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uniset.h</td><td>int32_t UnicodeSet::spanUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uniset.h</td><td>UnicodeFunctor* UnicodeSet::cloneAsThawed() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>unistr.h</td><td>UnicodeString&amp; UnicodeString::toTitle(BreakIterator *titleIter, const Locale &amp;locale, uint32_t options)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uset.h</td><td>int32_t uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uset.h</td><td>int32_t uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uset.h</td><td>int32_t uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uset.h</td><td>UBool uset_isFrozen(const USet *set)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uset.h</td><td>int32_t uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uset.h</td><td>USet* uset_cloneAsThawed(const USet *set)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uset.h</td><td>USet* uset_clone(const USet *set)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uset.h</td><td>void uset_freeze(USet *set)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>UBool VTimeZone::operator!=(const TimeZone &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>void VTimeZone::setRawOffset(int32_t offsetMillis)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>UBool VTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>TimeZone* VTimeZone::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>UBool VTimeZone::hasSameRules(const TimeZone &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>VTimeZone&amp; VTimeZone::operator=(const VTimeZone &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>static VTimeZone* VTimeZone::createVTimeZone(const UnicodeString &amp;vtzdata, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>void VTimeZone::write(UDate start, UnicodeString &amp;result, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>UBool VTimeZone::useDaylightTime(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>UClassID VTimeZone::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>void VTimeZone::write(UnicodeString &amp;result, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>static UClassID VTimeZone::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>int32_t VTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>void VTimeZone::setLastModified(UDate lastModified)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>UBool VTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>void VTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>UBool VTimeZone::getTZURL(UnicodeString &amp;url) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>static VTimeZone* VTimeZone::createVTimeZoneByID(const UnicodeString &amp;ID)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>VTimeZone::~VTimeZone()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>UBool VTimeZone::operator==(const TimeZone &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>UBool VTimeZone::getLastModified(UDate &amp;lastModified) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>int32_t VTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, int32_t monthLength, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>VTimeZone::VTimeZone(const VTimeZone &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>int32_t VTimeZone::getRawOffset(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>void VTimeZone::getOffset(UDate date, UBool local, int32_t &amp;rawOffset, int32_t &amp;dstOffset, UErrorCode &amp;ec) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>void VTimeZone::writeSimple(UDate time, UnicodeString &amp;result, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>void VTimeZone::setTZURL(const UnicodeString &amp;url)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>int32_t VTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr></table><P/><hr/><h2>Promoted to stable in 4.0</h2><table BORDER="1"><THEAD><tr><th>File</th><th>API</th><th>3.8.1</th><th>4.0</th></tr></THEAD><tr class="row1"><td>basictz.h</td><td>int32_t BasicTimeZone::countTransitionRules(UErrorCode &amp;status)=0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>basictz.h</td><td>BasicTimeZone::~BasicTimeZone()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>basictz.h</td><td>void BasicTimeZone::getSimpleRulesNear(UDate date, InitialTimeZoneRule *&amp;initial, AnnualTimeZoneRule *&amp;std, AnnualTimeZoneRule *&amp;dst, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>basictz.h</td><td>UBool BasicTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)=0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>basictz.h</td><td>UBool BasicTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)=0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>basictz.h</td><td>void BasicTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)=0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>basictz.h</td><td>UBool BasicTimeZone::hasEquivalentTransitions(BasicTimeZone &amp;tz, UDate start, UDate end, UBool ignoreDstAmount, UErrorCode &amp;ec)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>UClassID DateIntervalInfo::getDynamicClassID() const</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>static UClassID DateIntervalInfo::getStaticClassID()</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>UBool DateIntervalInfo::operator==(const DateIntervalInfo &amp;other) const</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>UBool DateIntervalInfo::operator!=(const DateIntervalInfo &amp;other) const</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>UBool DateTimePatternGenerator::operator!=(const DateTimePatternGenerator &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getAppendItemName(UDateTimePatternField field) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getPatternForSkeleton(const UnicodeString &amp;skeleton) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>StringEnumeration* DateTimePatternGenerator::getBaseSkeletons(UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>DateTimePatternGenerator::~DateTimePatternGenerator()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getSkeleton(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>static UClassID DateTimePatternGenerator::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::replaceFieldTypes(const UnicodeString &amp;pattern, const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>UBool DateTimePatternGenerator::operator==(const DateTimePatternGenerator &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>DateTimePatternGenerator* DateTimePatternGenerator::clone() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createInstance(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getDecimal() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getAppendItemFormat(UDateTimePatternField field) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UClassID DateTimePatternGenerator::getDynamicClassID() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>void DateTimePatternGenerator::setAppendItemName(UDateTimePatternField field, const UnicodeString &amp;value)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>void DateTimePatternGenerator::setAppendItemFormat(UDateTimePatternField field, const UnicodeString &amp;value)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>void DateTimePatternGenerator::setDecimal(const UnicodeString &amp;decimal)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createEmptyInstance(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>StringEnumeration* DateTimePatternGenerator::getSkeletons(UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>void DateTimePatternGenerator::setDateTimeFormat(const UnicodeString &amp;dateTimeFormat)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>static DateTimePatternGenerator* DateTimePatternGenerator::createInstance(const Locale &amp;uLocale, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getBaseSkeleton(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>const UnicodeString&amp; DateTimePatternGenerator::getDateTimeFormat() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtptngen.h</td><td>UnicodeString DateTimePatternGenerator::getBestPattern(const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtptngen.h</td><td>UDateTimePatternConflict DateTimePatternGenerator::addPattern(const UnicodeString &amp;pattern, UBool override, UnicodeString &amp;conflictingPattern, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t millisInDay, TimeRuleType timeType)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleWeekInMonth(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleMonth(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, UBool after, int32_t millisInDay, TimeRuleType timeType)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule* DateTimeRule::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>UClassID DateTimeRule::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule::~DateTimeRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleDayOfWeek(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>UBool DateTimeRule::operator==(const DateTimeRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>DateRuleType DateTimeRule::getDateRuleType(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleDayOfMonth(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>UBool DateTimeRule::operator!=(const DateTimeRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule&amp; DateTimeRule::operator=(const DateTimeRule &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>DateTimeRule::DateTimeRule(int32_t month, int32_t weekInMonth, int32_t dayOfWeek, int32_t millisInDay, TimeRuleType timeType)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>TimeRuleType DateTimeRule::getTimeRuleType(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>int32_t DateTimeRule::getRuleMillisInDay(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>dtrule.h</td><td>DateTimeRule::DateTimeRule(const DateTimeRule &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>dtrule.h</td><td>static UClassID DateTimeRule::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>LESwaps.h</td><td>static le_uint16 LESwaps::swapWord(const le_uint16 &amp;value)</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>2.8</span></span></td></tr><tr class="row0"><td>LESwaps.h</td><td>static le_uint32 LESwaps::swapLong(const le_uint32 &amp;value)</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>2.8</span></span></td></tr><tr class="row1"><td>msgfmt.h</td><td>UnicodeString&amp; MessageFormat::format(const UnicodeString *argumentNames, const Formattable *arguments, int32_t count, UnicodeString &amp;appendTo, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>RuleBasedTimeZone::RuleBasedTimeZone(const UnicodeString &amp;id, InitialTimeZoneRule *initialRule)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>UClassID RuleBasedTimeZone::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>void RuleBasedTimeZone::addTransitionRule(TimeZoneRule *rule, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>void RuleBasedTimeZone::getOffset(UDate date, UBool local, int32_t &amp;rawOffset, int32_t &amp;dstOffset, UErrorCode &amp;ec) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::hasSameRules(const TimeZone &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>static UClassID RuleBasedTimeZone::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>void RuleBasedTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>void RuleBasedTimeZone::complete(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getRawOffset(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>void RuleBasedTimeZone::setRawOffset(int32_t offsetMillis)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>RuleBasedTimeZone&amp; RuleBasedTimeZone::operator=(const RuleBasedTimeZone &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::operator==(const TimeZone &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::useDaylightTime(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::operator!=(const TimeZone &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>UBool RuleBasedTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>RuleBasedTimeZone::~RuleBasedTimeZone()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, int32_t monthLength, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>TimeZone* RuleBasedTimeZone::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>int32_t RuleBasedTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>rbtz.h</td><td>RuleBasedTimeZone::RuleBasedTimeZone(const RuleBasedTimeZone &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>rbtz.h</td><td>int32_t RuleBasedTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>simpletz.h</td><td>UBool SimpleTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>simpletz.h</td><td>void SimpleTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>simpletz.h</td><td>UBool SimpleTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>simpletz.h</td><td>int32_t SimpleTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>timezone.h</td><td>static const char* TimeZone::getTZDataVersion(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>TimeArrayTimeZoneRule&amp; TimeArrayTimeZoneRule::operator=(const TimeArrayTimeZoneRule &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>AnnualTimeZoneRule&amp; AnnualTimeZoneRule::operator=(const AnnualTimeZoneRule &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UClassID TimeArrayTimeZoneRule::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UClassID AnnualTimeZoneRule::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const AnnualTimeZoneRule &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>InitialTimeZoneRule* InitialTimeZoneRule::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>AnnualTimeZoneRule::~AnnualTimeZoneRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>InitialTimeZoneRule::InitialTimeZoneRule(const InitialTimeZoneRule &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>int32_t TimeZoneRule::getRawOffset(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>int32_t TimeArrayTimeZoneRule::countStartTimes(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>TimeArrayTimeZoneRule* TimeArrayTimeZoneRule::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>static UClassID TimeArrayTimeZoneRule::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>int32_t TimeZoneRule::getDSTSavings(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UnicodeString&amp; TimeZoneRule::getName(UnicodeString &amp;name) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>TimeArrayTimeZoneRule::~TimeArrayTimeZoneRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UClassID InitialTimeZoneRule::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>const DateTimeRule* AnnualTimeZoneRule::getRule(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>TimeZoneRule* TimeZoneRule::clone(void) const =0</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>static UClassID AnnualTimeZoneRule::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>TimeArrayTimeZoneRule::TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>TimeZoneRule::~TimeZoneRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>int32_t AnnualTimeZoneRule::getStartYear(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, UBool inclusive, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, const DateTimeRule &amp;dateTimeRule, int32_t startYear, int32_t endYear)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>InitialTimeZoneRule::~InitialTimeZoneRule()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>TimeArrayTimeZoneRule::TimeArrayTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, const UDate *startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool InitialTimeZoneRule::getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>InitialTimeZoneRule&amp; InitialTimeZoneRule::operator=(const InitialTimeZoneRule &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeZoneRule::operator!=(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>AnnualTimeZoneRule::AnnualTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings, DateTimeRule *dateTimeRule, int32_t startYear, int32_t endYear)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeArrayTimeZoneRule::getStartTimeAt(int32_t index, UDate &amp;result) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>InitialTimeZoneRule::InitialTimeZoneRule(const UnicodeString &amp;name, int32_t rawOffset, int32_t dstSavings)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeZoneRule::operator==(const TimeZoneRule &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>AnnualTimeZoneRule* AnnualTimeZoneRule::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>static UClassID InitialTimeZoneRule::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>int32_t AnnualTimeZoneRule::getEndYear(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tzrule.h</td><td>UBool TimeZoneRule::isEquivalentTo(const TimeZoneRule &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tzrule.h</td><td>DateTimeRule::TimeRuleType TimeArrayTimeZoneRule::getTimeType(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>void TimeZoneTransition::setTo(const TimeZoneRule &amp;to)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition(UDate time, const TimeZoneRule &amp;from, const TimeZoneRule &amp;to)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>UBool TimeZoneTransition::operator==(const TimeZoneTransition &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>UBool TimeZoneTransition::operator!=(const TimeZoneTransition &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>void TimeZoneTransition::adoptTo(TimeZoneRule *to)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>const TimeZoneRule* TimeZoneTransition::getFrom(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>UClassID TimeZoneTransition::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>static UClassID TimeZoneTransition::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>void TimeZoneTransition::setTime(UDate time)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>TimeZoneTransition::TimeZoneTransition(const TimeZoneTransition &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>TimeZoneTransition::~TimeZoneTransition()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>void TimeZoneTransition::adoptFrom(TimeZoneRule *from)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>TimeZoneTransition&amp; TimeZoneTransition::operator=(const TimeZoneTransition &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>UDate TimeZoneTransition::getTime(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>TimeZoneTransition* TimeZoneTransition::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>tztrans.h</td><td>const TimeZoneRule* TimeZoneTransition::getTo(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>tztrans.h</td><td>void TimeZoneTransition::setFrom(const TimeZoneRule &amp;from)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>ucal.h</td><td>const char* ucal_getTZDataVersion(UErrorCode *status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>ucasemap.h</td><td>int32_t ucasemap_toTitle(UCaseMap *csm, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>ucasemap.h</td><td>const UBreakIterator* ucasemap_getBreakIterator(const UCaseMap *csm)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>ucasemap.h</td><td>int32_t ucasemap_utf8ToTitle(UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>ucasemap.h</td><td>void ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>ucasemap.h</td><td>int32_t ucasemap_utf8FoldCase(const UCaseMap *csm, char *dest, int32_t destCapacity, const char *src, int32_t srcLength, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>UEnumeration* udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>const UChar* udatpg_getDecimal(const UDateTimePatternGenerator *dtpg, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>void udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg, UDateTimePatternField field, const UChar *value, int32_t length)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_open(const char *locale, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>const UChar* udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg, UDateTimePatternField field, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>void udatpg_setDecimal(UDateTimePatternGenerator *dtpg, const UChar *decimal, int32_t length)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>int32_t udatpg_getSkeleton(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t length, UChar *skeleton, int32_t capacity, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>void udatpg_close(UDateTimePatternGenerator *dtpg)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>void udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, const UChar *dtFormat, int32_t length)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>int32_t udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, const UChar *skeleton, int32_t length, UChar *bestPattern, int32_t capacity, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>const UChar* udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>void udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg, UDateTimePatternField field, const UChar *value, int32_t length)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>UDateTimePatternGenerator* udatpg_openEmpty(UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>UDateTimePatternConflict udatpg_addPattern(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t patternLength, UBool override, UChar *conflictingPattern, int32_t capacity, int32_t *pLength, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>UEnumeration* udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>const UChar* udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg, const UChar *skeleton, int32_t skeletonLength, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>int32_t udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t length, UChar *baseSkeleton, int32_t capacity, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>udatpg.h</td><td>const UChar* udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg, UDateTimePatternField field, int32_t *pLength)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>udatpg.h</td><td>int32_t udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg, const UChar *pattern, int32_t patternLength, const UChar *skeleton, int32_t skeletonLength, UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uloc.h</td><td>int32_t uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity, UErrorCode *status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uniset.h</td><td>UBool UnicodeSet::isFrozen() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uniset.h</td><td>UnicodeFunctor* UnicodeSet::freeze()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uniset.h</td><td>int32_t UnicodeSet::spanBackUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uniset.h</td><td>int32_t UnicodeSet::span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uniset.h</td><td>int32_t UnicodeSet::spanBack(const UChar *s, int32_t length, USetSpanCondition spanCondition) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uniset.h</td><td>int32_t UnicodeSet::spanUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uniset.h</td><td>UnicodeFunctor* UnicodeSet::cloneAsThawed() const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>unistr.h</td><td>UnicodeString&amp; UnicodeString::toTitle(BreakIterator *titleIter, const Locale &amp;locale, uint32_t options)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uset.h</td><td>int32_t uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uset.h</td><td>int32_t uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uset.h</td><td>int32_t uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uset.h</td><td>UBool uset_isFrozen(const USet *set)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uset.h</td><td>int32_t uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uset.h</td><td>USet* uset_cloneAsThawed(const USet *set)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>uset.h</td><td>USet* uset_clone(const USet *set)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>uset.h</td><td>void uset_freeze(USet *set)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>UBool VTimeZone::operator!=(const TimeZone &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>void VTimeZone::setRawOffset(int32_t offsetMillis)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>UBool VTimeZone::getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>TimeZone* VTimeZone::clone(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>UBool VTimeZone::hasSameRules(const TimeZone &amp;other) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>VTimeZone&amp; VTimeZone::operator=(const VTimeZone &amp;right)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>static VTimeZone* VTimeZone::createVTimeZone(const UnicodeString &amp;vtzdata, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>void VTimeZone::write(UDate start, UnicodeString &amp;result, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>UBool VTimeZone::useDaylightTime(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>UClassID VTimeZone::getDynamicClassID(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>void VTimeZone::write(UnicodeString &amp;result, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>static UClassID VTimeZone::getStaticClassID(void)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>int32_t VTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>void VTimeZone::setLastModified(UDate lastModified)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>UBool VTimeZone::getNextTransition(UDate base, UBool inclusive, TimeZoneTransition &amp;result)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>void VTimeZone::getTimeZoneRules(const InitialTimeZoneRule *&amp;initial, const TimeZoneRule *trsrules[], int32_t &amp;trscount, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>UBool VTimeZone::getTZURL(UnicodeString &amp;url) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>static VTimeZone* VTimeZone::createVTimeZoneByID(const UnicodeString &amp;ID)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>VTimeZone::~VTimeZone()</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>UBool VTimeZone::operator==(const TimeZone &amp;that) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>UBool VTimeZone::getLastModified(UDate &amp;lastModified) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>int32_t VTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, int32_t monthLength, UErrorCode &amp;status) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>VTimeZone::VTimeZone(const VTimeZone &amp;source)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>int32_t VTimeZone::getRawOffset(void) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>void VTimeZone::getOffset(UDate date, UBool local, int32_t &amp;rawOffset, int32_t &amp;dstOffset, UErrorCode &amp;ec) const</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>void VTimeZone::writeSimple(UDate time, UnicodeString &amp;result, UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row1"><td>vtzone.h</td><td>void VTimeZone::setTZURL(const UnicodeString &amp;url)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr><tr class="row0"><td>vtzone.h</td><td>int32_t VTimeZone::countTransitionRules(UErrorCode &amp;status)</td><td class="">Draft<br/>3.8</td><td>Stable<br/><span class=""><span>3.8</span></span></td></tr></table><P/><hr/><h2>Added in 4.0</h2><table BORDER="1"><THEAD><tr><th>File</th><th>API</th><th>3.8.1</th><th>4.0</th></tr></THEAD><tr class="row1"><td>datefmt.h</td><td>static DateFormat* DateFormat::createPatternInstance(const UnicodeString &amp;skeleton, const Locale &amp;locale, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtintrv.h</td><td>UBool DateInterval::operator==(const DateInterval &amp;other) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtintrv.h</td><td>DateInterval* DateInterval::clone() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtintrv.h</td><td>UBool DateInterval::operator!=(const DateInterval &amp;other) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtintrv.h</td><td>UDate DateInterval::getFromDate() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtintrv.h</td><td>UDate DateInterval::getToDate() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtintrv.h</td><td>DateInterval&amp; DateInterval::operator=(const DateInterval &amp;)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtintrv.h</td><td>DateInterval::~DateInterval()</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtintrv.h</td><td>DateInterval::DateInterval(const DateInterval &amp;other)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtintrv.h</td><td>DateInterval::DateInterval(UDate fromDate, UDate toDate)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtintrv.h</td><td>UClassID DateInterval::getDynamicClassID(void) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtintrv.h</td><td>static UClassID DateInterval::getStaticClassID(void)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvfmt.h</td><td>UnicodeString&amp; DateIntervalFormat::format(const Formattable &amp;obj, UnicodeString &amp;appendTo, FieldPosition &amp;fieldPosition, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvfmt.h</td><td>const DateIntervalInfo* DateIntervalFormat::getDateIntervalInfo(void) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvfmt.h</td><td>void DateIntervalFormat::parseObject(const UnicodeString &amp;source, Formattable &amp;result, ParsePosition &amp;parse_pos) const</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvfmt.h</td><td>static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &amp;skeleton, const Locale &amp;locale, const DateIntervalInfo &amp;dtitvinf, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvfmt.h</td><td>UClassID DateIntervalFormat::getDynamicClassID(void) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvfmt.h</td><td>static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &amp;skeleton, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvfmt.h</td><td>UnicodeString&amp; DateIntervalFormat::format(Calendar &amp;fromCalendar, Calendar &amp;toCalendar, UnicodeString &amp;appendTo, FieldPosition &amp;fieldPosition, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvfmt.h</td><td>static UClassID DateIntervalFormat::getStaticClassID(void)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvfmt.h</td><td>UnicodeString&amp; DateIntervalFormat::format(const DateInterval *dtInterval, UnicodeString &amp;appendTo, FieldPosition &amp;fieldPosition, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvfmt.h</td><td>void DateIntervalFormat::setDateIntervalInfo(const DateIntervalInfo &amp;newIntervalPatterns, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvfmt.h</td><td>static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &amp;skeleton, const Locale &amp;locale, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvfmt.h</td><td>UBool DateIntervalFormat::operator!=(const Format &amp;other) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvfmt.h</td><td>const DateFormat* DateIntervalFormat::getDateFormat(void) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvfmt.h</td><td>static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &amp;skeleton, const DateIntervalInfo &amp;dtitvinf, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvfmt.h</td><td>DateIntervalFormat::~DateIntervalFormat()</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvfmt.h</td><td>Format* DateIntervalFormat::clone(void) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvfmt.h</td><td>UBool DateIntervalFormat::operator==(const Format &amp;other) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>UClassID DateIntervalInfo::getDynamicClassID() const</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>DateIntervalInfo::DateIntervalInfo(const Locale &amp;locale, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>UBool DateIntervalInfo::getDefaultOrder() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>UnicodeString&amp; DateIntervalInfo::getFallbackIntervalPattern(UnicodeString &amp;result) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>DateIntervalInfo::DateIntervalInfo(const DateIntervalInfo &amp;)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>void DateIntervalInfo::setFallbackIntervalPattern(const UnicodeString &amp;fallbackPattern, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>DateIntervalInfo::~DateIntervalInfo()</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>DateIntervalInfo* DateIntervalInfo::clone(void) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>DateIntervalInfo::DateIntervalInfo(UErrorCode &amp;status)</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>UnicodeString&amp; DateIntervalInfo::getIntervalPattern(const UnicodeString &amp;skeleton, UCalendarDateFields field, UnicodeString &amp;result, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>static UClassID DateIntervalInfo::getStaticClassID()</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>DateIntervalInfo&amp; DateIntervalInfo::operator=(const DateIntervalInfo &amp;)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>UBool DateIntervalInfo::operator==(const DateIntervalInfo &amp;other) const</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>UBool DateIntervalInfo::operator!=(const DateIntervalInfo &amp;other) const</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>dtitvinf.h</td><td>U_NAMESPACE_BEGIN static U_CDECL_BEGIN UBool U_CALLCONV hashTableValueComparator(UHashTok val1, UHashTok val2)</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>dtitvinf.h</td><td>void DateIntervalInfo::setIntervalPattern(const UnicodeString &amp;skeleton, UCalendarDateFields lrgDiffCalUnit, const UnicodeString &amp;intervalPattern, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>LESwaps.h</td><td>static le_uint16 LESwaps::swapWord(const le_uint16 &amp;value)</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>2.8</span></span></td></tr><tr class="row1"><td>LESwaps.h</td><td>static le_uint32 LESwaps::swapLong(const le_uint32 &amp;value)</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>2.8</span></span></td></tr><tr class="row0"><td>msgfmt.h</td><td>Format* MessageFormat::getFormat(const UnicodeString &amp;formatName, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>msgfmt.h</td><td>void MessageFormat::setFormat(const UnicodeString &amp;formatName, const Format &amp;format, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>msgfmt.h</td><td>void MessageFormat::adoptFormat(const UnicodeString &amp;formatName, Format *formatToAdopt, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>msgfmt.h</td><td>UnicodeString&amp; MessageFormat::format(const UnicodeString *argumentNames, const Formattable *arguments, int32_t count, UnicodeString &amp;appendTo, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Stable<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>msgfmt.h</td><td>UBool MessageFormat::usesNamedArguments() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>msgfmt.h</td><td>StringEnumeration* MessageFormat::getFormatNames(UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>PluralFormat&amp; PluralFormat::operator=(const PluralFormat &amp;other)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>void PluralFormat::parseObject(const UnicodeString &amp;source, Formattable &amp;result, ParsePosition &amp;parse_pos) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>PluralFormat::PluralFormat(const Locale &amp;locale, const PluralRules &amp;rules, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>void PluralFormat::setLocale(const Locale &amp;locale, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>Format* PluralFormat::clone(void) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>PluralFormat::PluralFormat(const PluralRules &amp;rules, const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>UnicodeString&amp; PluralFormat::format(double number, UnicodeString &amp;appendTo, FieldPosition &amp;pos, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>PluralFormat::PluralFormat(const Locale &amp;locale, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>PluralFormat::PluralFormat(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>UnicodeString&amp; PluralFormat::toPattern(UnicodeString &amp;appendTo)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>UnicodeString PluralFormat::format(double number, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>UnicodeString&amp; PluralFormat::format(const Formattable &amp;obj, UnicodeString &amp;appendTo, FieldPosition &amp;pos, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>static UClassID PluralFormat::getStaticClassID(void)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>PluralFormat::~PluralFormat()</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>UBool PluralFormat::operator==(const Format &amp;other) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>UClassID PluralFormat::getDynamicClassID() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>UnicodeString&amp; PluralFormat::format(int32_t number, UnicodeString &amp;appendTo, FieldPosition &amp;pos, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>UBool PluralFormat::operator!=(const Format &amp;other) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>PluralFormat::PluralFormat(const Locale &amp;locale, const PluralRules &amp;rules, const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>UnicodeString PluralFormat::format(int32_t number, UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>void PluralFormat::setNumberFormat(const NumberFormat *format, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>PluralFormat::PluralFormat(const PluralRules &amp;rules, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>PluralFormat::PluralFormat(const Locale &amp;locale, const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>void PluralFormat::applyPattern(const UnicodeString &amp;pattern, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurfmt.h</td><td>PluralFormat::PluralFormat(const PluralFormat &amp;other)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurfmt.h</td><td>PluralFormat::PluralFormat(UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurrule.h</td><td>UClassID PluralRules::getDynamicClassID() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurrule.h</td><td>PluralRules::PluralRules(const PluralRules &amp;other)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurrule.h</td><td>static PluralRules* PluralRules::createRules(const UnicodeString &amp;description, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurrule.h</td><td>static PluralRules* PluralRules::forLocale(const Locale &amp;locale, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurrule.h</td><td>PluralRules&amp; PluralRules::operator=(const PluralRules &amp;)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurrule.h</td><td>PluralRules::PluralRules(UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurrule.h</td><td>UBool PluralRules::operator!=(const PluralRules &amp;other) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurrule.h</td><td>UnicodeString PluralRules::select(double number) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurrule.h</td><td>PluralRules::~PluralRules()</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurrule.h</td><td>UnicodeString PluralRules::select(int32_t number) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurrule.h</td><td>static UClassID PluralRules::getStaticClassID(void)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurrule.h</td><td>static PluralRules* PluralRules::createDefaultRules(UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurrule.h</td><td>PluralRules* PluralRules::clone() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurrule.h</td><td>UBool PluralRules::operator==(const PluralRules &amp;other) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurrule.h</td><td>UnicodeString PluralRules::getKeywordOther() const</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>plurrule.h</td><td>UBool PluralRules::isKeyword(const UnicodeString &amp;keyword) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>plurrule.h</td><td>StringEnumeration* PluralRules::getKeywords(UErrorCode &amp;status) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>regex.h</td><td>RegexMatcher&amp; RegexMatcher::useTransparentBounds(UBool b)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>regex.h</td><td>UBool RegexMatcher::requireEnd() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>regex.h</td><td>UBool RegexMatcher::hasAnchoringBounds() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>regex.h</td><td>RegexMatcher&amp; RegexMatcher::useAnchoringBounds(UBool b)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>regex.h</td><td>void RegexMatcher::setTimeLimit(int32_t limit, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>regex.h</td><td>int32_t RegexMatcher::regionStart() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>regex.h</td><td>UBool RegexMatcher::hitEnd() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>regex.h</td><td>int32_t RegexMatcher::getStackLimit() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>regex.h</td><td>void RegexMatcher::resetPreserveRegion()</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>.</span></span></td></tr><tr class="row0"><td>regex.h</td><td>RegexMatcher&amp; RegexMatcher::region(int32_t start, int32_t limit, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>regex.h</td><td>void RegexMatcher::setMatchCallback(URegexMatchCallback *callback, const void *context, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>regex.h</td><td>int32_t RegexMatcher::getTimeLimit() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>regex.h</td><td>void RegexMatcher::setStackLimit(int32_t limit, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>regex.h</td><td>UBool RegexMatcher::hasTransparentBounds() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>regex.h</td><td>int32_t RegexMatcher::regionEnd() const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>regex.h</td><td>void RegexMatcher::getMatchCallback(URegexMatchCallback *&amp;callback, const void *&amp;context, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>smpdtfmt.h</td><td>const Locale&amp; SimpleDateFormat::getSmpFmtLocale(void) const</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>smpdtfmt.h</td><td>UBool SimpleDateFormat::isFieldUnitIgnored(UCalendarDateFields field) const</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>smpdtfmt.h</td><td>static UBool SimpleDateFormat::isFieldUnitIgnored(const UnicodeString &amp;pattern, UCalendarDateFields field)</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>timezone.h</td><td>static UnicodeString&amp; TimeZone::getCanonicalID(const UnicodeString &amp;id, UnicodeString &amp;canonicalID, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>timezone.h</td><td>static UnicodeString&amp; TimeZone::getCanonicalID(const UnicodeString &amp;id, UnicodeString &amp;canonicalID, UBool &amp;isSystemID, UErrorCode &amp;status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>ucal.h</td><td>int32_t ucal_getCanonicalTimeZoneID(const UChar *id, int32_t len, UChar *result, int32_t resultCapacity, UBool *isSystemID, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>ucal.h</td><td>UCalendar* ucal_clone(const UCalendar *cal, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>ucoleitr.h</td><td>int64_t ucol_previousProcessed(UCollationElements *elems, int32_t *ixLow, int32_t *ixHigh, UErrorCode *status)</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>.</span></span></td></tr><tr class="row1"><td>ucoleitr.h</td><td>int64_t ucol_nextProcessed(UCollationElements *elems, int32_t *ixLow, int32_t *ixHigh, UErrorCode *status)</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>.</span></span></td></tr><tr class="row0"><td>ucurr.h</td><td>int32_t ucurr_countCurrencies(const char *locale, UDate date, UErrorCode *ec)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>ucurr.h</td><td>int32_t ucurr_forLocaleAndDate(const char *locale, UDate date, int32_t index, UChar *buff, int32_t buffCapacity, UErrorCode *ec)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uloc.h</td><td>ULayoutType uloc_getCharacterOrientation(const char *localeId, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uloc.h</td><td>int32_t uloc_minimizeSubtags(const char *localeID, char *minimizedLocaleID, int32_t minimizedLocaleIDCapacity, UErrorCode *err)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uloc.h</td><td>ULayoutType uloc_getLineOrientation(const char *localeId, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uloc.h</td><td>int32_t uloc_addLikelySubtags(const char *localeID, char *maximizedLocaleID, int32_t maximizedLocaleIDCapacity, UErrorCode *err)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uniset.h</td><td>UnicodeSet&amp; UnicodeSet::removeAllStrings()</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>.</span></span></td></tr><tr class="row1"><td>uniset.h</td><td>UBool UnicodeSet::isBogus(void) const</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uniset.h</td><td>void UnicodeSet::setToBogus()</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uregex.h</td><td>UBool uregex_hitEnd(const URegularExpression *regexp, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uregex.h</td><td>int32_t uregex_getTimeLimit(const URegularExpression *regexp, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uregex.h</td><td>void uregex_setTimeLimit(URegularExpression *regexp, int32_t limit, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uregex.h</td><td>UBool uregex_requireEnd(const URegularExpression *regexp, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uregex.h</td><td>void uregex_useAnchoringBounds(URegularExpression *regexp, UBool b, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uregex.h</td><td>void uregex_setStackLimit(URegularExpression *regexp, int32_t limit, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uregex.h</td><td>int32_t uregex_regionEnd(const URegularExpression *regexp, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uregex.h</td><td>UBool uregex_hasAnchoringBounds(const URegularExpression *regexp, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uregex.h</td><td>U_CDECL_BEGIN typedef UBool U_CALLCONV URegexMatchCallback(const void *context, int32_t steps)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uregex.h</td><td>UBool uregex_hasTransparentBounds(const URegularExpression *regexp, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uregex.h</td><td>void uregex_setRegion(URegularExpression *regexp, int32_t regionStart, int32_t regionLimit, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uregex.h</td><td>int32_t uregex_getStackLimit(const URegularExpression *regexp, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uregex.h</td><td>void uregex_getMatchCallback(const URegularExpression *regexp, URegexMatchCallback **callback, const void **context, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uregex.h</td><td>void uregex_useTransparentBounds(URegularExpression *regexp, UBool b, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>uregex.h</td><td>U_CDECL_END void uregex_setMatchCallback(URegularExpression *regexp, URegexMatchCallback *callback, const void *context, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row0"><td>uregex.h</td><td>int32_t uregex_regionStart(const URegularExpression *regexp, UErrorCode *status)</td><td class="">None<br/></td><td>Draft<br/><span class=""><span>4.0</span></span></td></tr><tr class="row1"><td>usearch.h</td><td>UBool usearch_searchBackwards(UStringSearch *strsrch, int32_t startIdx, int32_t *matchStart, int32_t *matchLimit, UErrorCode *status)</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>.</span></span></td></tr><tr class="row0"><td>usearch.h</td><td>UBool usearch_search(UStringSearch *strsrch, int32_t startIdx, int32_t *matchStart, int32_t *matchLimit, UErrorCode *status)</td><td class="">None<br/></td><td>Internal<br/><span class=""><span>.</span></span></td></tr></table><P/><hr/><p><i><font size="-1">Contents generated by StableAPI tool on Mon Jul 21 12:20:55 PDT 2008<br/>Copyright (C) 2008, International Business Machines Corporation, All Rights Reserved.</font></i></p></body></html>
\ No newline at end of file

Added: trunk/APIChangeReport_401.html
===================================================================
--- trunk/APIChangeReport_401.html	                        (rev 0)
+++ trunk/APIChangeReport_401.html	2009-02-07 10:08:34 UTC (rev 162)
@@ -0,0 +1,901 @@
+<?xml version="1.0" encoding="UTF-8"?> <!--
+	 Copyright (C)  2009, International Business Machines Corporation, All Rights Reserved. 
+	-->
+<html>
+	<head>
+		<title>
+			ICU4C API Comparison: 4.0 with 4.0.1
+		</title>
+		<link type="text/css" rel="stylesheet" href="icu4c.css"/>
+	</head>
+	<body>
+		<h1>
+			ICU4C API Comparison: 4.0 with 4.0.1
+		</h1>
+		<hr/>
+		<h2>
+			Removed from 4.0
+		</h2>
+<!--		<table BORDER="1">
+			<THEAD>
+			<tr>
+				<th>
+					File
+				</th>
+				<th>
+					API
+				</th>
+				<th>
+					4.0
+				</th>
+				<th>
+					4.0.1
+				</th>
+			</tr>
+			</THEAD>
+		</table>
+-->		<P/><hr/>
+		<h2>
+			Deprecated or Obsoleted in 4.0.1
+		</h2>
+<!--		<table BORDER="1">
+			<THEAD>
+			<tr>
+				<th>
+					File
+				</th>
+				<th>
+					API
+				</th>
+				<th>
+					4.0
+				</th>
+				<th>
+					4.0.1
+				</th>
+			</tr>
+			</THEAD>
+		</table>
+-->		<P/><hr/>
+		<h2>
+			Changed in 4.0.1 (old, new)
+		</h2>
+<!--		<table BORDER="1">
+			<THEAD>
+			<tr>
+				<th>
+					File
+				</th>
+				<th>
+					API
+				</th>
+				<th>
+					4.0
+				</th>
+				<th>
+					4.0.1
+				</th>
+			</tr>
+			</THEAD>
+		</table>
+-->		<P/><hr/>
+		<h2>
+			Promoted to stable in 4.0.1
+		</h2>
+<!--		Spurious: these items are stable 2.2 in the *base* class. 
+    		<table BORDER="1">
+			<THEAD>
+			<tr>
+				<th>
+					File
+				</th>
+				<th>
+					API
+				</th>
+				<th>
+					4.0
+				</th>
+				<th>
+					4.0.1
+				</th>
+			</tr>
+			</THEAD>
+			<tr class="row1">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					UClassID BoyerMooreSearch::getDynamicClassID() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					UClassID CollData::getDynamicClassID() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					UClassID CEList::getDynamicClassID() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					UClassID StringList::getDynamicClassID() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+		</table>
+-->		<P/><hr/>
+		<h2>
+			Added in 4.0.1
+		</h2>
+		<table BORDER="1">
+			<THEAD>
+			<tr>
+				<th>
+					File
+				</th>
+				<th>
+					API
+				</th>
+				<th>
+					4.0
+				</th>
+				<th>
+					4.0.1
+				</th>
+			</tr>
+			</THEAD>
+			<tr class="row1">
+				<td>
+					bms.h
+				</td>
+				<td>
+					UBool bms_search(BMS *bms, int32_t offset, int32_t *start, int32_t *end)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bms.h
+				</td>
+				<td>
+					void bms_setTargetString(BMS *bms, const UChar *target, int32_t targetLength, UErrorCode *status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bms.h
+				</td>
+				<td>
+					void ucd_freeCache()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bms.h
+				</td>
+				<td>
+					UBool bms_empty(BMS *bms)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bms.h
+				</td>
+				<td>
+					UCollator* ucd_getCollator(UCD *ucd)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bms.h
+				</td>
+				<td>
+					void bms_close(BMS *bms)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bms.h
+				</td>
+				<td>
+					UCD* ucd_open(UCollator *coll, UErrorCode *status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bms.h
+				</td>
+				<td>
+					void ucd_flushCache()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bms.h
+				</td>
+				<td>
+					UCD* bms_getData(BMS *bms)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bms.h
+				</td>
+				<td>
+					void ucd_close(UCD *ucd)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bms.h
+				</td>
+				<td>
+					BMS* bms_open(UCD *ucd, const UChar *pattern, int32_t patternLength, const UChar *target, int32_t targetLength, UErrorCode *status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					BoyerMooreSearch::BoyerMooreSearch(CollData *theData, const UnicodeString &amp;patternString, const UnicodeString *targetString, UErrorCode &amp;status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					GoodSuffixTable* BoyerMooreSearch::getGoodSuffixTable()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					BadCharacterTable* BoyerMooreSearch::getBadCharacterTable()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					UClassID BoyerMooreSearch::getDynamicClassID() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview<!-- incorrectly: stable 2.2 --></span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					void BoyerMooreSearch::setTargetString(const UnicodeString *targetString, UErrorCode &amp;status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					UBool BoyerMooreSearch::empty()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					CollData* BoyerMooreSearch::getData()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					CEList* BoyerMooreSearch::getPatternCEs()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					BoyerMooreSearch::~BoyerMooreSearch()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					UBool BoyerMooreSearch::search(int32_t offset, int32_t &amp;start, int32_t &amp;end)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					bmsearch.h
+				</td>
+				<td>
+					static UClassID BoyerMooreSearch::getStaticClassID()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					void CollData::freeCEList(const CEList *list)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					StringList::StringList(UErrorCode &amp;status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					static void CollData::flushCollDataCache()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					static void CollData::freeCollDataCache()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					static void CollData::close(CollData *collData)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					UClassID CollData::getDynamicClassID() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview<!-- incorrectly: stable 2.2 --></span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					int32_t StringList::size() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					void StringList::add(const UChar *chars, int32_t count, UErrorCode &amp;status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					UCollator* CollData::getCollator() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					CEList::~CEList()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					int32_t CEList::size() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					int32_t CollData::minLengthInChars(const CEList *ces, int32_t offset, int32_t *history) const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					static UClassID StringList::getStaticClassID()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					uint32_t&amp; CEList::operator[](int32_t index) const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					StringList::~StringList()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					static UClassID CollData::getStaticClassID()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					const CEList* CollData::getCEList(const UnicodeString *string) const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview.</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					const UnicodeString* StringList::get(int32_t index) const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					static UClassID CEList::getStaticClassID()
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					<br/><span class=""><span/></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					UClassID CEList::getDynamicClassID() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview<!-- incorrectly: stable 2.2 --></span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					void StringList::add(const UnicodeString *string, UErrorCode &amp;status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					UClassID StringList::getDynamicClassID() const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview<!-- incorrectly: stable 2.2 --></span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					uint32_t CEList::get(int32_t index) const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					CEList::CEList(UCollator *coll, const UnicodeString &amp;string, UErrorCode &amp;status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					static CollData* CollData::open(UCollator *collator, UErrorCode &amp;status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					UBool CEList::matchesAt(int32_t offset, const CEList *other) const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					const StringList* CollData::getStringList(int32_t ce) const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview.</span></span>
+				</td>
+			</tr>
+			<tr class="row0">
+				<td>
+					colldata.h
+				</td>
+				<td>
+					int32_t CollData::minLengthInChars(const CEList *ces, int32_t offset) const
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>4.0.1 technology preview</span></span>
+				</td>
+			</tr>
+			<tr class="row1">
+				<td>
+					ucoleitr.h
+				</td>
+				<td>
+					void ucol_forceHanImplicit(UCollationElements *elems, UErrorCode *status)
+				</td>
+				<td class="">
+					None<br/>
+				</td>
+				<td>
+					Internal<br/><span class=""><span>.</span></span>
+				</td>
+			</tr>
+		</table>
+		<P/><hr/>
+		<p>
+			<i><font size="-1">Contents generated by StableAPI tool on Wed Jan 07 00:21:49 PST 2009<br/>Copyright (C) 2009, International Business Machines Corporation, All Rights Reserved.</font></i>
+		</p>
+	</body>
+</html>

Modified: trunk/as_is/borland/icuin.bpf
===================================================================
--- trunk/as_is/borland/icuin.bpf	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/as_is/borland/icuin.bpf	2009-02-07 10:08:34 UTC (rev 162)
@@ -128,6 +128,9 @@
 USEUNIT("..\..\source\i18n\plurrule.cpp");
 USEUNIT("..\..\source\i18n\dtitvfmt.cpp");
 USEUNIT("..\..\source\i18n\dtitvinf.cpp");
+USEUNIT("..\..\source\i18n\colldata.cpp");
+USEUNIT("..\..\source\i18n\bms.cpp");
+USEUNIT("..\..\source\i18n\bmsearch.cpp");
 //---------------------------------------------------------------------------
 #define Library
 

Modified: trunk/as_is/borland/icuin.bpr
===================================================================
--- trunk/as_is/borland/icuin.bpr	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/as_is/borland/icuin.bpr	2009-02-07 10:08:34 UTC (rev 162)
@@ -65,7 +65,9 @@
       ..\..\source\i18n\brktrans.obj ..\..\source\i18n\cecal.obj 
       ..\..\source\i18n\coptccal.obj ..\..\source\i18n\ethpccal.obj 
       ..\..\source\i18n\plurfmt.obj ..\..\source\i18n\plurrule.obj 
-      ..\..\source\i18n\dtitvfmt.obj ..\..\source\i18n\dtitvinf.obj"/>
+      ..\..\source\i18n\dtitvfmt.obj ..\..\source\i18n\dtitvinf.obj 
+      ..\..\source\i18n\colldata.obj ..\..\source\i18n\bms.obj 
+      ..\..\source\i18n\bmsearch.obj"/>
     <RESFILES value=""/>
     <IDLFILES value=""/>
     <IDLGENFILES value=""/>

Added: trunk/icu4c.css
===================================================================
--- trunk/icu4c.css	                        (rev 0)
+++ trunk/icu4c.css	2009-02-07 10:08:34 UTC (rev 162)
@@ -0,0 +1,245 @@
+/*
+ * Default CSS style sheet for the ICU Open Source site
+ * Copyright (C) 2005-2008, International Business Machines
+ * Corporation and others.  All Rights Reserved.
+ */
+
+/* Global styles */
+body,p,li,ol,ul,th,td {
+	font-size: 10pt;
+	font-family: "Arial", "Helvetica", sans-serif;
+}
+
+body {
+	margin: 1em;
+}
+
+body.draft {
+	background-image: url(images/draftbg.png);
+}
+
+.mainbody {
+	padding: 1em;
+}
+
+/*
+ * Customize the headers to have less space around them than usual
+ */
+h1 {
+	margin-bottom: 5pt;
+	margin-top: 5pt;
+	font-weight: 700;
+	font-size: 20pt;
+	font-family: "Arial", "Helvetica", sans-serif;
+}
+
+h2 {
+	margin-bottom: 0pt;
+	margin-top: 12pt;
+	font-weight: 700;
+	font-size: 14pt;
+	font-family: "Arial", "Helvetica", sans-serif;
+}
+
+h3 {
+	background-color: #666666;
+	color: White;
+	margin-bottom: 0pt;
+	margin-top: 12pt;
+	padding-left: 0.75em;
+	font-size: 1em;
+	font-family: "Arial", "Helvetica", sans-serif;
+}
+
+h4 {
+	margin-bottom: 0pt;
+	margin-top: 12pt;
+	font-size: 1em;
+	font-family: "Arial", "Helvetica", sans-serif;
+}
+
+h5, h6 {
+	margin-bottom: 0pt;
+	margin-top: 12pt;
+	padding-left: 0.75em;
+	font-size: x-small;
+	font-family: "Arial", "Helvetica", sans-serif;
+}
+
+/*
+ * Navigation sidebar on the left hand of most pages
+ */
+td.sidebar1 { 
+	background-color: #99CCFF;
+	font-weight: 700;
+	margin-top: 0px;
+	margin-bottom: 0px;
+	padding-top: 1em;
+	padding-left: 0.2em;
+	white-space: nowrap;
+}
+
+td.sidebar2 { 
+	background-color: #99CCFF;
+	margin-top: 0px;
+	margin-bottom: 0px;
+	margin-left: 0px;
+	padding-top: 1px;
+	padding-bottom: 1px;
+	padding-left: 1px;
+	padding-right: 0.5em;
+	white-space: nowrap;
+	text-decoration: none;
+	display: block;
+}
+td.sidebar2:hover { 
+	background-color: #EEEEFF;
+	padding-top: 1px;
+	padding-bottom: 1px;
+	padding-left: 1px;
+	padding-right: 0.5em;
+}
+
+a.sidebar2 {
+	text-decoration: none;
+	display: block;
+	width: 100%;
+}
+a.sidebar2:link {
+	color: #000099;
+	display: block;
+}
+a.sidebar2:hover {
+	background-color: #EEEEFF;
+	display: block;
+}
+.underlinehover:hover {
+	background-color: #EEEEFF;
+	text-decoration: underline;
+}
+
+/* This is the faded header at the top */
+td.fadedtop {
+	background-color: #006699;
+	background-image: url(http://www.icu-project.org/images/gr100.gif);
+}
+
+/* Related site on the left */
+p.relatedsite {
+	color: White;
+	font-weight: 700;
+	font-size: 10pt;
+	margin-top: 1em;
+	margin-bottom: 0;
+	padding-left: 0.2em;
+	white-space: nowrap;
+}
+
+/* Related site on the left */
+p.sidebar3 {
+	margin-top: 0.75em;
+	margin-bottom: 0;
+	padding-left: 0.8em;
+}
+a.sidebar3 {
+	font-size: 0.9em;
+	text-decoration: none;
+}
+a.sidebar3:link {
+	text-decoration: none;
+	color: White;
+}
+a.sidebar3:hover {
+	text-decoration: underline;
+}
+
+/* FAQ */
+li.faq_contents {
+	font-weight: 500;
+}
+p.faq_q {
+	font-weight: 700; 
+	margin-bottom: 0px;
+}
+p.faq_a {
+	margin-top: 0px;
+}
+
+/* News items */
+table.newsItem {
+	padding-left: 1em;
+	padding-right: 1em;
+	border-width: medium;
+}
+th.newsItem {
+	background-color: #666666;
+	color: White;
+}
+td.newsItem {
+	background-color: #CCCCCC;
+}
+
+td.release-line,th.release-line {
+	padding-left: 0.5em;
+	padding-right: 0.5em;
+	white-space: nowrap;
+	border:1px;
+}
+.note {
+	font-style: italic;
+	font-size: small;
+	margin-left: 1em;
+}
+samp {
+	margin-left: 1em;
+	margin-right: 2em;
+	border-style: groove;
+	padding: 1em;
+	display: block;
+	background-color: #EEEEEE
+}
+table.rtable caption {
+	margin-left: 2px;
+	margin-right: 2px;
+	padding: 3px;
+	font-weight: bold;
+	background-color: #dee2ff;
+	text-align: left;
+}
+table.rtable tr th {
+	background-color: #dee2ff;
+	text-align: left;
+}
+table.rtable tr td {
+	background-color: #c0c0fd;
+	padding: 3px;
+}
+
+/*  APIChangeReport specific things */
+.row0 {
+	background-color: white;	
+}
+
+.row1 {
+	background-color: #dfd;
+}
+
+.verchange {
+	color:  red;
+	font-weight: bold;
+	font-size:  large;
+}
+
+.stabchange {
+	color:  red;
+	font-size:  large;
+}
+
+.bigwarn {
+	color: red;
+	background-color: white;
+	font-size:  x-large;
+	margin:  0.5 em;
+}
+
+

Modified: trunk/readme.html
===================================================================
--- trunk/readme.html	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/readme.html	2009-02-07 10:08:34 UTC (rev 162)
@@ -30,10 +30,10 @@
 
   <body>
     <h1>International Components for Unicode<br />
-     <abbr title="International Components for Unicode">ICU</abbr> 4.0 ReadMe</h1>
+     <abbr title="International Components for Unicode">ICU</abbr> 4.0.1 ReadMe</h1>
 
-    <p>Version: 2008 June 30th<br />
-     Copyright &copy; 1997-2008 International Business Machines Corporation and
+    <p>Version: 2009 Jan 15th<br />
+     Copyright &copy; 1997-2009 International Business Machines Corporation and
     others. All Rights Reserved.</p>
     <!-- Remember that there is a copyright at the end too -->
     <hr />
@@ -211,12 +211,15 @@
     <h2><a name="News" href="#News" id="News">What is new in this
     release?</a></h2>
 
-    <p>To see which APIs are new or changed in this release, view the <a href="APIChangeReport.html">ICU4C API Change Report</a>. </p>
+    <p>To see which APIs are new or changed in this release since the previous feature release (3.8), view the <a href="APIChangeReport.html">ICU4C API Change Report</a>. </p>
 
+    <p>This is a an update release of 4.0, containing mostly selected bug fixes and implementations of inherited API, but
+    does not introduce new API or functionality. These changes will be rolled into the next release of ICU4J </p>
 
-    <p><!-- The following list concentrates on <em>changes that affect existing
-    applications migrating from previous ICU releases</em>. --> For more news about
-    this release, see the <a href="http://www.icu-project.org/download/">ICU 4.0
+    <p>To see which non-stable APIs are new or changed in 4.0.1 since 4.0, view the <a href="APIChangeReport_401.html">ICU4C 4.0 vs. 4.0.1 API Change Report</a>. </p>
+
+	 <p>For more news about
+    this release, see the <a href="http://www.icu-project.org/download/">ICU 4.0.1
     download page</a>.</p>
 
     <h2><a name="Download" href="#Download" id="Download">How To Download the

Modified: trunk/source/common/ucnv2022.c
===================================================================
--- trunk/source/common/ucnv2022.c	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/ucnv2022.c	2009-02-07 10:08:34 UTC (rev 162)
@@ -754,6 +754,7 @@
     UConverterDataISO2022* myData2022 = ((UConverterDataISO2022*)_this->extraInfo);
     uint32_t key = myData2022->key;
     int32_t offset = 0;
+    int8_t initialToULength = _this->toULength;
     char c;
 
     value = VALID_NON_TERMINAL_2022;
@@ -806,7 +807,6 @@
         return;
     } else if (value == INVALID_2022 ) {
         *err = U_ILLEGAL_ESCAPE_SEQUENCE;
-        return;
     } else /* value == VALID_TERMINAL_2022 */ {
         switch(var){
 #ifdef U_ENABLE_GENERIC_ISO_2022
@@ -938,6 +938,35 @@
     }
     if(U_SUCCESS(*err)) {
         _this->toULength = 0;
+    } else if(*err==U_ILLEGAL_ESCAPE_SEQUENCE) {
+        if(_this->toULength>1) {
+            /*
+             * Ticket 5691: consistent illegal sequences:
+             * - We include at least the first byte (ESC) in the illegal sequence.
+             * - If any of the non-initial bytes could be the start of a character,
+             *   we stop the illegal sequence before the first one of those.
+             *   In escape sequences, all following bytes are "printable", that is,
+             *   unless they are completely illegal (>7f in SBCS, outside 21..7e in DBCS),
+             *   they are valid single/lead bytes.
+             *   For simplicity, we always only report the initial ESC byte as the
+             *   illegal sequence and back out all other bytes we looked at.
+             */
+            /* Back out some bytes. */
+            int8_t backOutDistance=_this->toULength-1;
+            int8_t bytesFromThisBuffer=_this->toULength-initialToULength;
+            if(backOutDistance<=bytesFromThisBuffer) {
+                /* same as initialToULength<=1 */
+                *source-=backOutDistance;
+            } else {
+                /* Back out bytes from the previous buffer: Need to replay them. */
+                _this->preToULength=(int8_t)(bytesFromThisBuffer-backOutDistance);
+                /* same as -(initialToULength-1) */
+                /* preToULength is negative! */
+                uprv_memcpy(_this->preToU, _this->toUBytes+1, -_this->preToULength);
+                *source-=bytesFromThisBuffer;
+            }
+            _this->toULength=1;
+        }
     } else if(*err==U_UNSUPPORTED_ESCAPE_SEQUENCE) {
         _this->toUCallbackReason = UCNV_UNASSIGNED;
     }
@@ -1118,6 +1147,7 @@
     }
 }
 
+#if 0 /* 5691: Call sites now check for validity. They can just += 0x8080 after that. */
 /*
  * This method does the reverse of _2022FromGR94DBCS(). Given the 2022 code point, it returns the
  * 2 byte value that is in the range A1..FE for each byte. Otherwise it returns the 2022 code point
@@ -1133,6 +1163,7 @@
         return value;
     }
 }
+#endif
 
 #ifdef U_ENABLE_GENERIC_ISO_2022
 
@@ -1990,6 +2021,7 @@
         mySourceChar = args->converter->toUBytes[0];
         args->converter->toULength = 0;
         cs = (StateEnum)pToU2022State->cs[pToU2022State->g];
+        targetUniChar = missingCharMarker;
         goto getTrailByte;
     }
 
@@ -2119,21 +2151,44 @@
                 default:
                     /* G0 DBCS */
                     if(mySource < mySourceLimit) {
-                        char trailByte;
+                        int leadIsOk, trailIsOk;
+                        uint8_t trailByte;
 getTrailByte:
-                        trailByte = *mySource++;
-                        tmpSourceChar = (mySourceChar << 8) | (uint8_t)(trailByte);
-                        if(cs == JISX208) {
-                            _2022ToSJIS((uint8_t)mySourceChar, (uint8_t)trailByte, tempBuf);
-                        } else {
-                            if (cs == KSC5601) {
-                                tmpSourceChar = _2022ToGR94DBCS(tmpSourceChar);
+                        trailByte = (uint8_t)*mySource;
+                        /*
+                         * Ticket 5691: consistent illegal sequences:
+                         * - We include at least the first byte in the illegal sequence.
+                         * - If any of the non-initial bytes could be the start of a character,
+                         *   we stop the illegal sequence before the first one of those.
+                         *
+                         * In ISO-2022 DBCS, if the second byte is in the 21..7e range or is
+                         * an ESC/SO/SI, we report only the first byte as the illegal sequence.
+                         * Otherwise we convert or report the pair of bytes.
+                         */
+                        leadIsOk = (uint8_t)(mySourceChar - 0x21) <= (0x7e - 0x21);
+                        trailIsOk = (uint8_t)(trailByte - 0x21) <= (0x7e - 0x21);
+                        if (leadIsOk && trailIsOk) {
+                            ++mySource;
+                            tmpSourceChar = (mySourceChar << 8) | trailByte;
+                            if(cs == JISX208) {
+                                _2022ToSJIS((uint8_t)mySourceChar, trailByte, tempBuf);
+                                mySourceChar = tmpSourceChar;
+                            } else {
+                                /* Copy before we modify tmpSourceChar so toUnicodeCallback() sees the correct bytes. */
+                                mySourceChar = tmpSourceChar;
+                                if (cs == KSC5601) {
+                                    tmpSourceChar += 0x8080;  /* = _2022ToGR94DBCS(tmpSourceChar) */
+                                }
+                                tempBuf[0] = (char)(tmpSourceChar >> 8);
+                                tempBuf[1] = (char)(tmpSourceChar);
                             }
-                            tempBuf[0] = (char)(tmpSourceChar >> 8);
-                            tempBuf[1] = (char)(tmpSourceChar);
+                            targetUniChar = ucnv_MBCSSimpleGetNextUChar(myData->myConverterArray[cs], tempBuf, 2, FALSE);
+                        } else if (!(trailIsOk || IS_2022_CONTROL(trailByte))) {
+                            /* report a pair of illegal bytes if the second byte is not a DBCS starter */
+                            ++mySource;
+                            /* add another bit so that the code below writes 2 bytes in case of error */
+                            mySourceChar = 0x10000 | (mySourceChar << 8) | trailByte;
                         }
-                        targetUniChar = ucnv_MBCSSimpleGetNextUChar(myData->myConverterArray[cs], tempBuf, 2, FALSE);
-                        mySourceChar = tmpSourceChar;
                     } else {
                         args->converter->toUBytes[0] = (uint8_t)mySourceChar;
                         args->converter->toULength = 1;
@@ -2275,7 +2330,12 @@
             }
             /* only DBCS or SBCS characters are expected*/
             /* DB characters with high bit set to 1 are expected */
-            if(length > 2 || length==0 ||(((targetByteUnit & 0x8080) != 0x8080)&& length==2)){
+            if( length > 2 || length==0 ||
+                (length == 1 && targetByteUnit > 0x7f) ||
+                (length == 2 &&
+                    ((uint16_t)(targetByteUnit - 0xa1a1) > (0xfefe - 0xa1a1) ||
+                    (uint8_t)(targetByteUnit - 0xa1) > (0xfe - 0xa1)))
+            ) {
                 targetByteUnit=missingCharMarker;
             }
             if (targetByteUnit != missingCharMarker){
@@ -2604,17 +2664,34 @@
             myData->isEmptySegment = FALSE;	/* Any invalid char errors will be detected separately, so just reset this */
             if(myData->toU2022State.g == 1) {
                 if(mySource < mySourceLimit) {
-                    char trailByte;
+                    int leadIsOk, trailIsOk;
+                    uint8_t trailByte;
 getTrailByte:
-                    trailByte = *mySource++;
-                    tempBuf[0] = (char)(mySourceChar + 0x80);
-                    tempBuf[1] = (char)(trailByte + 0x80);
-                    mySourceChar = (mySourceChar << 8) | (uint8_t)(trailByte);
-                    if((mySourceChar & 0x8080) == 0) {
+                    targetUniChar = missingCharMarker;
+                    trailByte = (uint8_t)*mySource;
+                    /*
+                     * Ticket 5691: consistent illegal sequences:
+                     * - We include at least the first byte in the illegal sequence.
+                     * - If any of the non-initial bytes could be the start of a character,
+                     *   we stop the illegal sequence before the first one of those.
+                     *
+                     * In ISO-2022 DBCS, if the second byte is in the 21..7e range or is
+                     * an ESC/SO/SI, we report only the first byte as the illegal sequence.
+                     * Otherwise we convert or report the pair of bytes.
+                     */
+                    leadIsOk = (uint8_t)(mySourceChar - 0x21) <= (0x7e - 0x21);
+                    trailIsOk = (uint8_t)(trailByte - 0x21) <= (0x7e - 0x21);
+                    if (leadIsOk && trailIsOk) {
+                        ++mySource;
+                        tempBuf[0] = (char)(mySourceChar + 0x80);
+                        tempBuf[1] = (char)(trailByte + 0x80);
                         targetUniChar = ucnv_MBCSSimpleGetNextUChar(sharedData, tempBuf, 2, useFallback);
-                    } else {
-                        /* illegal bytes > 0x7f */
-                        targetUniChar = missingCharMarker;
+                        mySourceChar = (mySourceChar << 8) | trailByte;
+                    } else if (!(trailIsOk || IS_2022_CONTROL(trailByte))) {
+                        /* report a pair of illegal bytes if the second byte is not a DBCS starter */
+                        ++mySource;
+                        /* add another bit so that the code below writes 2 bytes in case of error */
+                        mySourceChar = 0x10000 | (mySourceChar << 8) | trailByte;
                     }
                 } else {
                     args->converter->toUBytes[0] = (uint8_t)mySourceChar;
@@ -2622,8 +2699,10 @@
                     break;
                 }
             }
-            else{
+            else if(mySourceChar <= 0x7f) {
                 targetUniChar = ucnv_MBCSSimpleGetNextUChar(sharedData, mySource - 1, 1, useFallback);
+            } else {
+                targetUniChar = 0xffff;
             }
             if(targetUniChar < 0xfffe){
                 if(args->offsets) {
@@ -3120,6 +3199,7 @@
         /* continue with a partial double-byte character */
         mySourceChar = args->converter->toUBytes[0];
         args->converter->toULength = 0;
+        targetUniChar = missingCharMarker;
         goto getTrailByte;
     }
 
@@ -3199,29 +3279,50 @@
                         UConverterSharedData *cnv;
                         StateEnum tempState;
                         int32_t tempBufLen;
-                        char trailByte;
+                        int leadIsOk, trailIsOk;
+                        uint8_t trailByte;
 getTrailByte:
-                        trailByte = *mySource++;
-                        tempState = (StateEnum)pToU2022State->cs[pToU2022State->g];
-                        if(tempState >= CNS_11643_0) {
-                            cnv = myData->myConverterArray[CNS_11643];
-                            tempBuf[0] = (char) (0x80+(tempState-CNS_11643_0));
-                            tempBuf[1] = (char) (mySourceChar);
-                            tempBuf[2] = trailByte;
-                            tempBufLen = 3;
+                        trailByte = (uint8_t)*mySource;
+                        /*
+                         * Ticket 5691: consistent illegal sequences:
+                         * - We include at least the first byte in the illegal sequence.
+                         * - If any of the non-initial bytes could be the start of a character,
+                         *   we stop the illegal sequence before the first one of those.
+                         *
+                         * In ISO-2022 DBCS, if the second byte is in the 21..7e range or is
+                         * an ESC/SO/SI, we report only the first byte as the illegal sequence.
+                         * Otherwise we convert or report the pair of bytes.
+                         */
+                        leadIsOk = (uint8_t)(mySourceChar - 0x21) <= (0x7e - 0x21);
+                        trailIsOk = (uint8_t)(trailByte - 0x21) <= (0x7e - 0x21);
+                        if (leadIsOk && trailIsOk) {
+                            ++mySource;
+                            tempState = (StateEnum)pToU2022State->cs[pToU2022State->g];
+                            if(tempState >= CNS_11643_0) {
+                                cnv = myData->myConverterArray[CNS_11643];
+                                tempBuf[0] = (char) (0x80+(tempState-CNS_11643_0));
+                                tempBuf[1] = (char) (mySourceChar);
+                                tempBuf[2] = (char) trailByte;
+                                tempBufLen = 3;
 
-                        }else{
-                            cnv = myData->myConverterArray[tempState];
-                            tempBuf[0] = (char) (mySourceChar);
-                            tempBuf[1] = trailByte;
-                            tempBufLen = 2;
+                            }else{
+                                cnv = myData->myConverterArray[tempState];
+                                tempBuf[0] = (char) (mySourceChar);
+                                tempBuf[1] = (char) trailByte;
+                                tempBufLen = 2;
+                            }
+                            targetUniChar = ucnv_MBCSSimpleGetNextUChar(cnv, tempBuf, tempBufLen, FALSE);
+                            mySourceChar = (mySourceChar << 8) | trailByte;
+                        } else if (!(trailIsOk || IS_2022_CONTROL(trailByte))) {
+                            /* report a pair of illegal bytes if the second byte is not a DBCS starter */
+                            ++mySource;
+                            /* add another bit so that the code below writes 2 bytes in case of error */
+                            mySourceChar = 0x10000 | (mySourceChar << 8) | trailByte;
                         }
-                        mySourceChar = (mySourceChar << 8) | (uint8_t)(trailByte);
                         if(pToU2022State->g>=2) {
                             /* return from a single-shift state to the previous one */
                             pToU2022State->g=pToU2022State->prevG;
                         }
-                        targetUniChar = ucnv_MBCSSimpleGetNextUChar(cnv, tempBuf, tempBufLen, FALSE);
                     } else {
                         args->converter->toUBytes[0] = (uint8_t)mySourceChar;
                         args->converter->toULength = 1;

Modified: trunk/source/common/ucnvhz.c
===================================================================
--- trunk/source/common/ucnvhz.c	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/ucnvhz.c	2009-02-07 10:08:34 UTC (rev 162)
@@ -198,10 +198,30 @@
                      /* if the first byte is equal to TILDE and the trail byte
                      * is not a valid byte then it is an error condition
                      */
-                    mySourceChar = 0x7e00 | mySourceChar;
-                    targetUniChar = 0xffff;
+                    /*
+                     * Ticket 5691: consistent illegal sequences:
+                     * - We include at least the first byte in the illegal sequence.
+                     * - If any of the non-initial bytes could be the start of a character,
+                     *   we stop the illegal sequence before the first one of those.
+                     */
                     myData->isEmptySegment = FALSE; /* different error here, reset this to avoid spurious future error */
-                    break;
+                    *err = U_ILLEGAL_ESCAPE_SEQUENCE;
+                    args->converter->toUBytes[0] = UCNV_TILDE;
+                    if( myData->isStateDBCS ?
+                            (0x21 <= mySourceChar && mySourceChar <= 0x7e) :
+                            mySourceChar <= 0x7f
+                    ) {
+                        /* The current byte could be the start of a character: Back it out. */
+                        args->converter->toULength = 1;
+                        --mySource;
+                    } else {
+                        /* Include the current byte in the illegal sequence. */
+                        args->converter->toUBytes[1] = mySourceChar;
+                        args->converter->toULength = 2;
+                    }
+                    args->target = myTarget;
+                    args->source = mySource;
+                    return;
                 }
             } else if(myData->isStateDBCS) {
                 if(args->converter->toUnicodeStatus == 0x00){
@@ -217,19 +237,36 @@
                 }
                 else{
                     /* trail byte */
+                    int leadIsOk, trailIsOk;
                     uint32_t leadByte = args->converter->toUnicodeStatus & 0xff;
-                    if( (uint8_t)(leadByte - 0x21) <= (0x7d - 0x21) &&
-                        (uint8_t)(mySourceChar - 0x21) <= (0x7e - 0x21)
-                    ) {
+                    targetUniChar = 0xffff;
+                    /*
+                     * Ticket 5691: consistent illegal sequences:
+                     * - We include at least the first byte in the illegal sequence.
+                     * - If any of the non-initial bytes could be the start of a character,
+                     *   we stop the illegal sequence before the first one of those.
+                     *
+                     * In HZ DBCS, if the second byte is in the 21..7e range,
+                     * we report only the first byte as the illegal sequence.
+                     * Otherwise we convert or report the pair of bytes.
+                     */
+                    leadIsOk = (uint8_t)(leadByte - 0x21) <= (0x7d - 0x21);
+                    trailIsOk = (uint8_t)(mySourceChar - 0x21) <= (0x7e - 0x21);
+                    if (leadIsOk && trailIsOk) {
                         tempBuf[0] = (char) (leadByte+0x80) ;
                         tempBuf[1] = (char) (mySourceChar+0x80);
                         targetUniChar = ucnv_MBCSSimpleGetNextUChar(myData->gbConverter->sharedData,
                             tempBuf, 2, args->converter->useFallback);
+                        mySourceChar= (leadByte << 8) | mySourceChar;
+                    } else if (trailIsOk) {
+                        /* report a single illegal byte and continue with the following DBCS starter byte */
+                        --mySource;
+                        mySourceChar = (int32_t)leadByte;
                     } else {
-                        targetUniChar = 0xffff;
+                        /* report a pair of illegal bytes if the second byte is not a DBCS starter */
+                        /* add another bit so that the code below writes 2 bytes in case of error */
+                        mySourceChar= 0x10000 | (leadByte << 8) | mySourceChar;
                     }
-                    /* add another bit so that the code below writes 2 bytes in case of error */
-                    mySourceChar= 0x10000 | (leadByte << 8) | mySourceChar;
                     args->converter->toUnicodeStatus =0x00;
                 }
             }

Modified: trunk/source/common/ucnvmbcs.c
===================================================================
--- trunk/source/common/ucnvmbcs.c	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/ucnvmbcs.c	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,7 +1,7 @@
 /*
 ******************************************************************************
 *
-*   Copyright (C) 2000-2007, International Business Machines
+*   Copyright (C) 2000-2008, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ******************************************************************************
@@ -2151,6 +2151,65 @@
     pArgs->offsets=offsets;
 }
 
+static UBool
+hasValidTrailBytes(const int32_t (*stateTable)[256], uint8_t state) {
+    const int32_t *row=stateTable[state];
+    int32_t b, entry;
+    /* First test for final entries in this state for some commonly valid byte values. */
+    entry=row[0xa1];
+    if( !MBCS_ENTRY_IS_TRANSITION(entry) &&
+        MBCS_ENTRY_FINAL_ACTION(entry)!=MBCS_STATE_ILLEGAL
+    ) {
+        return TRUE;
+    }
+    entry=row[0x41];
+    if( !MBCS_ENTRY_IS_TRANSITION(entry) &&
+        MBCS_ENTRY_FINAL_ACTION(entry)!=MBCS_STATE_ILLEGAL
+    ) {
+        return TRUE;
+    }
+    /* Then test for final entries in this state. */
+    for(b=0; b<=0xff; ++b) {
+        entry=row[b];
+        if( !MBCS_ENTRY_IS_TRANSITION(entry) &&
+            MBCS_ENTRY_FINAL_ACTION(entry)!=MBCS_STATE_ILLEGAL
+        ) {
+            return TRUE;
+        }
+    }
+    /* Then recurse for transition entries. */
+    for(b=0; b<=0xff; ++b) {
+        entry=row[b];
+        if( MBCS_ENTRY_IS_TRANSITION(entry) &&
+            hasValidTrailBytes(stateTable, (uint8_t)MBCS_ENTRY_TRANSITION_STATE(entry))
+        ) {
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+/*
+ * Is byte b a single/lead byte in this state?
+ * Recurse for transition states, because here we don't want to say that
+ * b is a lead byte if all byte sequences that start with b are illegal.
+ */
+static UBool
+isSingleOrLead(const int32_t (*stateTable)[256], uint8_t state, UBool isDBCSOnly, uint8_t b) {
+    const int32_t *row=stateTable[state];
+    int32_t entry=row[b];
+    if(MBCS_ENTRY_IS_TRANSITION(entry)) {   /* lead byte */
+        return hasValidTrailBytes(stateTable, (uint8_t)MBCS_ENTRY_TRANSITION_STATE(entry));
+    } else {
+        uint8_t action=(uint8_t)(MBCS_ENTRY_FINAL_ACTION(entry));
+        if(action==MBCS_STATE_CHANGE_ONLY && isDBCSOnly) {
+            return FALSE;   /* SI/SO are illegal for DBCS-only conversion */
+        } else {
+            return action!=MBCS_STATE_ILLEGAL;
+        }
+    }
+}
+
 U_CFUNC void
 ucnv_MBCSToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs,
                           UErrorCode *pErrorCode) {
@@ -2506,6 +2565,34 @@
             sourceIndex=nextSourceIndex;
         } else if(U_FAILURE(*pErrorCode)) {
             /* callback(illegal) */
+            if(byteIndex>1) {
+                /*
+                 * Ticket 5691: consistent illegal sequences:
+                 * - We include at least the first byte in the illegal sequence.
+                 * - If any of the non-initial bytes could be the start of a character,
+                 *   we stop the illegal sequence before the first one of those.
+                 */
+                UBool isDBCSOnly=(UBool)(cnv->sharedData->mbcs.dbcsOnlyState!=0);
+                int8_t i;
+                for(i=1;
+                    i<byteIndex && !isSingleOrLead(stateTable, state, isDBCSOnly, bytes[i]);
+                    ++i) {}
+                if(i<byteIndex) {
+                    /* Back out some bytes. */
+                    int8_t backOutDistance=byteIndex-i;
+                    int32_t bytesFromThisBuffer=(int32_t)(source-(const uint8_t *)pArgs->source);
+                    byteIndex=i;  /* length of reported illegal byte sequence */
+                    if(backOutDistance<=bytesFromThisBuffer) {
+                        source-=backOutDistance;
+                    } else {
+                        /* Back out bytes from the previous buffer: Need to replay them. */
+                        cnv->preToULength=(int8_t)(bytesFromThisBuffer-backOutDistance);
+                        /* preToULength is negative! */
+                        uprv_memcpy(cnv->preToU, bytes+i, -cnv->preToULength);
+                        source=(const uint8_t *)pArgs->source;
+                    }
+                }
+            }
             break;
         } else /* unassigned sequences indicated with byteIndex>0 */ {
             /* try an extension mapping */
@@ -2516,7 +2603,7 @@
                               &offsets, sourceIndex,
                               pArgs->flush,
                               pErrorCode);
-            sourceIndex=nextSourceIndex+(int32_t)(source-(const uint8_t *)pArgs->source);
+            sourceIndex=nextSourceIndex+=(int32_t)(source-(const uint8_t *)pArgs->source);
 
             if(U_FAILURE(*pErrorCode)) {
                 /* not mappable or buffer overflow */
@@ -2807,15 +2894,37 @@
 
     if(c<0) {
         if(U_SUCCESS(*pErrorCode) && source==sourceLimit && lastSource<source) {
-            *pErrorCode=U_TRUNCATED_CHAR_FOUND;
-        }
-        if(U_FAILURE(*pErrorCode)) {
             /* incomplete character byte sequence */
             uint8_t *bytes=cnv->toUBytes;
             cnv->toULength=(int8_t)(source-lastSource);
             do {
                 *bytes++=*lastSource++;
             } while(lastSource<source);
+            *pErrorCode=U_TRUNCATED_CHAR_FOUND;
+        } else if(U_FAILURE(*pErrorCode)) {
+            /* callback(illegal) */
+            /*
+             * Ticket 5691: consistent illegal sequences:
+             * - We include at least the first byte in the illegal sequence.
+             * - If any of the non-initial bytes could be the start of a character,
+             *   we stop the illegal sequence before the first one of those.
+             */
+            UBool isDBCSOnly=(UBool)(cnv->sharedData->mbcs.dbcsOnlyState!=0);
+            uint8_t *bytes=cnv->toUBytes;
+            *bytes++=*lastSource++;     /* first byte */
+            if(lastSource==source) {
+                cnv->toULength=1;
+            } else /* lastSource<source: multi-byte character */ {
+                int8_t i;
+                for(i=1;
+                    lastSource<source && !isSingleOrLead(stateTable, state, isDBCSOnly, *lastSource);
+                    ++i
+                ) {
+                    *bytes++=*lastSource++;
+                }
+                cnv->toULength=i;
+                source=lastSource;
+            }
         } else {
             /* no output because of empty input or only state changes */
             *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;

Modified: trunk/source/common/unicode/ucasemap.h
===================================================================
--- trunk/source/common/unicode/ucasemap.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/unicode/ucasemap.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -136,7 +136,7 @@
  * @see ucasemap_toTitle
  * @see ucasemap_utf8ToTitle
  * @see UnicodeString::toTitle
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 #define U_TITLECASE_NO_LOWERCASE 0x100
 
@@ -161,7 +161,7 @@
  * @see ucasemap_utf8ToTitle
  * @see UnicodeString::toTitle
  * @see U_TITLECASE_NO_LOWERCASE
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 #define U_TITLECASE_NO_BREAK_ADJUSTMENT 0x200
 
@@ -174,7 +174,7 @@
  * Do not modify the returned break iterator.
  * @param csm UCaseMap service object.
  * @return titlecasing break iterator
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT const UBreakIterator * U_EXPORT2
 ucasemap_getBreakIterator(const UCaseMap *csm);
@@ -197,7 +197,7 @@
  *
  * @see ucasemap_toTitle
  * @see ucasemap_utf8ToTitle
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT void U_EXPORT2
 ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode);
@@ -241,7 +241,7 @@
  *         in which case it will be greater than destCapacity.
  *
  * @see u_strToTitle
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT int32_t U_EXPORT2
 ucasemap_toTitle(UCaseMap *csm,
@@ -348,7 +348,7 @@
  * @see u_strToTitle
  * @see U_TITLECASE_NO_LOWERCASE
  * @see U_TITLECASE_NO_BREAK_ADJUSTMENT
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT int32_t U_EXPORT2
 ucasemap_utf8ToTitle(UCaseMap *csm,
@@ -384,7 +384,7 @@
  * @see ucasemap_setOptions
  * @see U_FOLD_CASE_DEFAULT
  * @see U_FOLD_CASE_EXCLUDE_SPECIAL_I
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT int32_t U_EXPORT2
 ucasemap_utf8FoldCase(const UCaseMap *csm,

Modified: trunk/source/common/unicode/uloc.h
===================================================================
--- trunk/source/common/unicode/uloc.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/unicode/uloc.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -957,7 +957,7 @@
  * @param status an error is returned if the LCID is unrecognized or the output buffer
  *  is too small
  * @return actual the actual size of the locale ID, not including NUL-termination 
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT int32_t U_EXPORT2
 uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity,

Modified: trunk/source/common/unicode/uniset.h
===================================================================
--- trunk/source/common/unicode/uniset.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/unicode/uniset.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -480,7 +480,7 @@
      * @return TRUE/FALSE for whether the set has been frozen
      * @see freeze
      * @see cloneAsThawed
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     inline UBool isFrozen() const;
 
@@ -495,7 +495,7 @@
      * @return this set.
      * @see isFrozen
      * @see cloneAsThawed
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UnicodeFunctor *freeze();
 
@@ -505,7 +505,7 @@
      * @return the mutable clone
      * @see freeze
      * @see isFrozen
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UnicodeFunctor *cloneAsThawed() const;
 
@@ -816,7 +816,7 @@
      * @param spanCondition specifies the containment condition
      * @return the length of the initial substring according to the spanCondition;
      *         0 if the start of the string does not fit the spanCondition
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      * @see USetSpanCondition
      */
     int32_t span(const UChar *s, int32_t length, USetSpanCondition spanCondition) const;
@@ -835,7 +835,7 @@
      * @param spanCondition specifies the containment condition
      * @return the start of the trailing substring according to the spanCondition;
      *         the string length if the end of the string does not fit the spanCondition
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      * @see USetSpanCondition
      */
     int32_t spanBack(const UChar *s, int32_t length, USetSpanCondition spanCondition) const;
@@ -855,7 +855,7 @@
      * @param spanCondition specifies the containment condition
      * @return the length of the initial substring according to the spanCondition;
      *         0 if the start of the string does not fit the spanCondition
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      * @see USetSpanCondition
      */
     int32_t spanUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const;
@@ -874,7 +874,7 @@
      * @param spanCondition specifies the containment condition
      * @return the start of the trailing substring according to the spanCondition;
      *         the string length if the end of the string does not fit the spanCondition
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      * @see USetSpanCondition
      */
     int32_t spanBackUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const;

Modified: trunk/source/common/unicode/unistr.h
===================================================================
--- trunk/source/common/unicode/unistr.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/unicode/unistr.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -2501,7 +2501,7 @@
    * @see U_TITLECASE_NO_LOWERCASE
    * @see U_TITLECASE_NO_BREAK_ADJUSTMENT
    * @see ucasemap_open
-   * @stable ICU 4.0
+   * @stable ICU 3.8
    */
   UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options);
 

Modified: trunk/source/common/unicode/uscript.h
===================================================================
--- trunk/source/common/unicode/uscript.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/unicode/uscript.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -161,7 +161,7 @@
       USCRIPT_UNWRITTEN_LANGUAGES           = 102,/* Zxxx */
       USCRIPT_UNKNOWN                       = 103,/* Zzzz */ /* Unknown="Code for uncoded script", for unassigned code points */
 
-      /* New script codes from ISO 15924 @stable ICU 4.0 */
+      /* New script codes from ISO 15924 @stable ICU 3.8 */
       USCRIPT_CARIAN                        = 104,/* Cari */
       USCRIPT_JAPANESE                      = 105,/* Jpan */
       USCRIPT_LANNA                         = 106,/* Lana */

Modified: trunk/source/common/unicode/uset.h
===================================================================
--- trunk/source/common/unicode/uset.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/unicode/uset.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -152,7 +152,7 @@
  * (strings with unpaired surrogates which cannot be converted to UTF-8)
  * are ignored.
  *
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 typedef enum USetSpanCondition {
     /**
@@ -164,7 +164,7 @@
      * it returned consists only of characters that are not in the set,
      * and none of its strings overlap with the span.
      *
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     USET_SPAN_NOT_CONTAINED = 0,
     /**
@@ -179,7 +179,7 @@
      * (There must be a single, non-overlapping concatenation of characters or strings.)
      * This is equivalent to a POSIX regular expression for (OR of each set element)*.
      *
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     USET_SPAN_CONTAINED = 1,
     /**
@@ -198,12 +198,12 @@
      * Use this span condition together with other longest-match algorithms,
      * such as ICU converters (ucnv_getUnicodeSet()).
      *
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     USET_SPAN_SIMPLE = 2,
     /**
      * One more than the last span condition.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     USET_SPAN_CONDITION_COUNT
 } USetSpanCondition;
@@ -300,7 +300,7 @@
  * @param set the original set
  * @return the newly allocated copy of the set
  * @see uset_cloneAsThawed
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT USet * U_EXPORT2
 uset_clone(const USet *set);
@@ -312,7 +312,7 @@
  * @return TRUE/FALSE for whether the set has been frozen
  * @see uset_freeze
  * @see uset_cloneAsThawed
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT UBool U_EXPORT2
 uset_isFrozen(const USet *set);
@@ -329,7 +329,7 @@
  * @return the same set, now frozen
  * @see uset_isFrozen
  * @see uset_cloneAsThawed
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT void U_EXPORT2
 uset_freeze(USet *set);
@@ -342,7 +342,7 @@
  * @see uset_freeze
  * @see uset_isFrozen
  * @see uset_clone
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT USet * U_EXPORT2
 uset_cloneAsThawed(const USet *set);
@@ -855,7 +855,7 @@
  * @param spanCondition specifies the containment condition
  * @return the length of the initial substring according to the spanCondition;
  *         0 if the start of the string does not fit the spanCondition
- * @stable ICU 4.0
+ * @stable ICU 3.8
  * @see USetSpanCondition
  */
 U_DRAFT int32_t U_EXPORT2
@@ -876,7 +876,7 @@
  * @param spanCondition specifies the containment condition
  * @return the start of the trailing substring according to the spanCondition;
  *         the string length if the end of the string does not fit the spanCondition
- * @stable ICU 4.0
+ * @stable ICU 3.8
  * @see USetSpanCondition
  */
 U_DRAFT int32_t U_EXPORT2
@@ -898,7 +898,7 @@
  * @param spanCondition specifies the containment condition
  * @return the length of the initial substring according to the spanCondition;
  *         0 if the start of the string does not fit the spanCondition
- * @stable ICU 4.0
+ * @stable ICU 3.8
  * @see USetSpanCondition
  */
 U_DRAFT int32_t U_EXPORT2
@@ -919,7 +919,7 @@
  * @param spanCondition specifies the containment condition
  * @return the start of the trailing substring according to the spanCondition;
  *         the string length if the end of the string does not fit the spanCondition
- * @stable ICU 4.0
+ * @stable ICU 3.8
  * @see USetSpanCondition
  */
 U_DRAFT int32_t U_EXPORT2

Modified: trunk/source/common/unicode/utext.h
===================================================================
--- trunk/source/common/unicode/utext.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/unicode/utext.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -726,7 +726,7 @@
   * If the index is out of range, it will be pinned to be within
   * the range of the input text.
   *
-  * @stable ICU 4.0
+  * @stable ICU 3.8
   */
 #define UTEXT_SETNATIVEINDEX(ut, ix)                       \
     { int64_t __offset = (ix) - (ut)->chunkNativeStart; \

Modified: trunk/source/common/unicode/uversion.h
===================================================================
--- trunk/source/common/unicode/uversion.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/common/unicode/uversion.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -74,7 +74,7 @@
  *  This value will change in the subsequent releases of ICU
  *  @stable ICU 2.4
  */
-#define U_ICU_VERSION_PATCHLEVEL_NUM 0
+#define U_ICU_VERSION_PATCHLEVEL_NUM 1
 
 /** The current ICU build level version as an integer.  
  *  This value is for use by ICU clients. It defaults to 0.
@@ -95,7 +95,7 @@
  *  This value will change in the subsequent releases of ICU
  *  @stable ICU 2.4
  */
-#define U_ICU_VERSION "4.0"
+#define U_ICU_VERSION "4.0.1"
 
 /** The current ICU library major/minor version as a string without dots, for library name suffixes. 
  *  This value will change in the subsequent releases of ICU

Modified: trunk/source/data/brkitr/brkfiles.mk
===================================================================
--- trunk/source/data/brkitr/brkfiles.mk	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/data/brkitr/brkfiles.mk	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 # *   Copyright (C) 1998-2008, International Business Machines
 # *   Corporation and others.  All Rights Reserved.
-BRK_RES_CLDR_VERSION = 1.6
+BRK_RES_CLDR_VERSION = 1.6.1
 # A list of txt's to build
 # Note: 
 #

Modified: trunk/source/data/misc/metazoneInfo.txt
===================================================================
--- trunk/source/data/misc/metazoneInfo.txt	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/data/misc/metazoneInfo.txt	2009-02-07 10:08:34 UTC (rev 162)
@@ -565,24 +565,34 @@
             mz0{
                 "Argentina",
                 "1970-01-01 00:00",
-                "1991-03-01 02:00",
+                "1990-03-14 02:00",
             }
             mz1{
                 "Argentina_Western",
-                "1991-03-01 02:00",
-                "1991-05-07 04:00",
+                "1990-03-14 02:00",
+                "1991-06-01 04:00",
             }
             mz2{
                 "Argentina",
-                "1991-05-07 04:00",
-                "2004-05-31 03:00",
+                "1991-06-01 04:00",
+                "1999-10-03 03:00",
             }
             mz3{
                 "Argentina_Western",
+                "1999-10-03 03:00",
+                "2000-03-03 03:00",
+            }
+            mz4{
+                "Argentina",
+                "2000-03-03 03:00",
                 "2004-05-31 03:00",
+            }
+            mz5{
+                "Argentina_Western",
+                "2004-05-31 03:00",
                 "2004-07-25 04:00",
             }
-            mz4{
+            mz6{
                 "Argentina",
                 "2004-07-25 04:00",
                 "9999-12-31 23:59",
@@ -940,6 +950,11 @@
             mz0{
                 "Acre",
                 "1970-01-01 00:00",
+                "2008-06-24 05:00",
+            }
+            mz1{
+                "Amazon",
+                "2008-06-24 05:00",
                 "9999-12-31 23:59",
             }
         }
@@ -1678,9 +1693,26 @@
             mz0{
                 "Acre",
                 "1970-01-01 00:00",
+                "2008-06-24 05:00",
+            }
+            mz1{
+                "Amazon",
+                "2008-06-24 05:00",
                 "9999-12-31 23:59",
             }
         }
+        "America:Santarem"{
+            mz0{
+                "Amazon",
+                "1970-01-01 00:00",
+                "2008-06-24 04:00",
+            }
+            mz1{
+                "Brasilia",
+                "2008-06-24 04:00",
+                "9999-12-31 23:59",
+            }
+        }
         "America:Santiago"{
             mz0{
                 "Chile",

Modified: trunk/source/data/misc/supplementalData.txt
===================================================================
--- trunk/source/data/misc/supplementalData.txt	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/data/misc/supplementalData.txt	2009-02-07 10:08:34 UTC (rev 162)
@@ -4395,7 +4395,7 @@
             "TW",
         }
     }
-    cldrVersion{"1.6"}
+    cldrVersion{"1.6.1"}  // ICU 4.0 and 4.0.1 used CLDR 1.6.1 data, but CLDR's supplementalData.xml was not updated properly.
     languageData{
         aa{
             primary{

Modified: trunk/source/data/misc/zoneinfo.txt
===================================================================
--- trunk/source/data/misc/zoneinfo.txt	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/data/misc/zoneinfo.txt	2009-02-07 10:08:34 UTC (rev 162)
@@ -3,20 +3,20 @@
 // Corporation and others.  All Rights Reserved.
 //---------------------------------------------------------
 // Build tool: tz2icu
-// Build date: Tue May 27 11:55:54 2008
+// Build date: Mon Oct 27 11:56:39 2008
 // Olson source: ftp://elsie.nci.nih.gov/pub/
-// Olson version: 2008c
-// ICU version: 4.0
+// Olson version: 2008i
+// ICU version: 4.1.2
 //---------------------------------------------------------
 // >> !!! >>   THIS IS A MACHINE-GENERATED FILE   << !!! <<
 // >> !!! >>>            DO NOT EDIT             <<< !!! <<
 //---------------------------------------------------------
 
 zoneinfo:table(nofallback) {
- TZVersion { "2008c" }
+ TZVersion { "2008i" }
  Zones:array { 
-  /* ACT */ :int { 328 } //Z#0
-,  /* AET */ :int { 340 } //Z#1
+  /* ACT */ :int { 330 } //Z#0
+,  /* AET */ :int { 342 } //Z#1
 ,  /* AGT */ :int { 63 } //Z#2
 ,  /* ART */ :int { 18 } //Z#3
 ,  /* AST */ :int { 59 } //Z#4
@@ -34,7 +34,7 @@
     :intvector { -2147483648, -1062210920 }
     :intvector { 9320, 0, 10800, 0 }
     :bin { "0001" }
-    :intvector { 7, 369 }
+    :intvector { 7, 371 }
   } //Z#7
 ,  /* Africa/Algiers */ :array {
     :intvector { -2147483648, -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1531443600, -956365200, -950486400, -942012000, -812502000, -796262400, -781052400, -766630800, -733280400, -439430400, -212029200, 41468400, 54774000, 231724800, 246236400, 259545600, 275274000, 309740400, 325468800, 341802000, 357523200 }
@@ -90,10 +90,10 @@
     :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Egypt"
     :intvector { 7200, 2009 }
-    :intvector { 3, 18, 374 }
+    :intvector { 3, 18, 376 }
   } //Z#18
 ,  /* Africa/Casablanca */ :array {
-    :intvector { -2147483648, -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1222556400 }
+    :intvector { -2147483648, -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1220223600 }
     :intvector { -1820, 0, 0, 0, 0, 3600, 3600, 0 }
     :bin { "00010201020102010201020102010201020103010201" }
   } //Z#19
@@ -148,7 +148,7 @@
     :intvector { -2147483648, -2109290652 }
     :intvector { 7200, 0, 7452, 0 }
     :bin { "0100" }
-    :intvector { 29, 351 }
+    :intvector { 29, 353 }
   } //Z#29
 ,  /* Africa/Johannesburg */ :array {
     :intvector { -2147483648, -2109288600, -860976000, -845254800, -829526400, -813805200 }
@@ -275,7 +275,7 @@
     :intvector { -2147483648, -1577926364, -574902000, -568087200, -512175600, -504928800, -449888400, -441856800, -347158800, 378684000, 386463600, 402271200, 417999600, 433807200, 449622000, 465429600, 481590000, 496965600, 512953200, 528674400, 544230000, 560037600, 575852400, 591660000, 607388400, 623196000, 641775600, 844034400, 860108400, 875916000 }
     :intvector { 3164, 0, 3600, 0, 3600, 3600, 7200, 0 }
     :bin { "000102010201020103010201020102010201020102010201020103010203" }
-    :intvector { 55, 500 }
+    :intvector { 55, 502 }
   } //Z#55
 ,  /* Africa/Tunis */ :array {
     :intvector { -2147483648, -1855958961, -969242400, -950493600, -941940000, -891136800, -877827600, -857257200, -844556400, -842918400, -842223600, -828230400, -812502000, -796269600, -781052400, -766634400, 231202800, 243903600, 262825200, 276044400, 581122800, 591145200, 606870000, 622594800, 641516400, 654649200, 1114902000, 1128038400, 1143334800, 1162083600 }
@@ -297,7 +297,7 @@
     :bin { "000101000001000100010001000100010001000100010001000100010001000100010202030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "US"
     :intvector { -36000, 2008 }
-    :intvector { 58, 78, 584 }
+    :intvector { 58, 79, 586 }
   } //Z#58
 ,  /* America/Anchorage */ :array {
     :intvector { -2147483648, -880200000, -769395600, -765378000, -86882400, -21470400, -5749200, 9979200, 25700400, 41428800, 57754800, 73483200, 89204400, 104932800, 120654000, 126705600, 152103600, 162388800, 183553200, 199281600, 215607600, 230731200, 247057200, 262785600, 278506800, 294235200, 309956400, 325684800, 341406000, 357134400, 372855600, 388584000, 404910000, 420033600, 436359600, 439030800, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
@@ -305,7 +305,7 @@
     :bin { "000101000001000100010001000100010001000100010001000100010001000100010202030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "US"
     :intvector { -32400, 2008 }
-    :intvector { 4, 59, 580, 583 }
+    :intvector { 4, 59, 582, 585 }
   } //Z#59
 ,  /* America/Anguilla */ :array {
     :intvector { -2147483648, -1825098464 }
@@ -323,2451 +323,2449 @@
     :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
   } //Z#62
 ,  /* America/Argentina/Buenos_Aires */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800, 1223175600 }
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800, 1224385200 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201030403040304030403040304030203040304" }
     "Arg"
     :intvector { -10800, 2009 }
-    :intvector { 2, 63, 87 }
+    :intvector { 2, 63, 88 }
   } //Z#63
 ,  /* America/Argentina/Catamarca */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087704000, 1198983600, 1205632800, 1223175600 }
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087704000, 1198983600, 1205632800 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
-    :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010304030403040304010403040302030103040304" }
-    "Arg"
-    :intvector { -10800, 2009 }
-    :intvector { 64, 65, 92 }
+    :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020103040304030403040104030403020301030403" }
+    :intvector { 64, 65, 93 }
   } //Z#64
 ,  /* America/Argentina/ComodRivadavia */ :int { 64 } //Z#65
 ,  /* America/Argentina/Cordoba */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800, 1223175600 }
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800, 1224385200 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201030403040304030401040304030203040304" }
     "Arg"
     :intvector { -10800, 2009 }
-    :intvector { 66, 98, 185 }
+    :intvector { 66, 99, 186 }
   } //Z#66
 ,  /* America/Argentina/Jujuy */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 657086400, 669178800, 686721600, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800, 1223175600 }
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 657086400, 669178800, 686721600, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
-    :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201030403040304010201040304030203040304" }
-    "Arg"
-    :intvector { -10800, 2009 }
-    :intvector { 67, 138 }
+    :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010304030403040102010403040302030403" }
+    :intvector { 67, 139 }
   } //Z#67
 ,  /* America/Argentina/La_Rioja */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667792800, 673588800, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087704000, 1198983600, 1205632800, 1223175600 }
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667792800, 673588800, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087704000, 1198983600, 1205632800 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
-    :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201030403040304030401030403040302030103040304" }
-    "Arg"
-    :intvector { -10800, 2009 }
+    :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010304030403040304010304030403020301030403" }
   } //Z#68
 ,  /* America/Argentina/Mendoza */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 655963200, 667796400, 687499200, 699418800, 719380800, 731469600, 938919600, 952052400, 1085281200, 1096171200, 1198983600, 1205632800, 1223175600 }
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 655963200, 667796400, 687499200, 699418800, 719380800, 731469600, 938919600, 952052400, 1085281200, 1096171200, 1198983600, 1205632800 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
-    :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010304030403040102010201040302030103040304" }
-    "Arg"
-    :intvector { -10800, 2009 }
-    :intvector { 69, 153 }
+    :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020103040304030401020102010403020301030403" }
+    :intvector { 69, 154 }
   } //Z#69
 ,  /* America/Argentina/Rio_Gallegos */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087704000, 1198983600, 1205632800, 1223175600 }
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087704000, 1198983600, 1205632800 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
-    :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010304030403040304030403040302030103040304" }
-    "Arg"
-    :intvector { -10800, 2009 }
+    :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020103040304030403040304030403020301030403" }
   } //Z#70
-,  /* America/Argentina/San_Juan */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667792800, 673588800, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1085972400, 1090728000, 1198983600, 1205632800, 1223175600 }
+,  /* America/Argentina/Salta */ :array {
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
-    :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201030403040304030401030403040302030103040304" }
-    "Arg"
-    :intvector { -10800, 2009 }
+    :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010304030403040304010403040302030403" }
   } //Z#71
-,  /* America/Argentina/San_Luis */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667792800, 673588800, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1085972400, 1090728000, 1198983600, 1200880800 }
+,  /* America/Argentina/San_Juan */ :array {
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667792800, 673588800, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1085972400, 1090728000, 1198983600, 1205632800 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
     :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010304030403040304010304030403020301030403" }
   } //Z#72
+,  /* America/Argentina/San_Luis */ :array {
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 637380000, 655963200, 667796400, 675748800, 938919600, 952052400, 1085972400, 1090728000, 1198983600, 1200880800 }
+    :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
+    :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020103040304030401020103020301030403" }
+  } //Z#73
 ,  /* America/Argentina/Tucuman */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087099200, 1198983600, 1205632800, 1223175600 }
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087099200, 1198983600, 1205632800, 1224385200 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
     :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010304030403040304010403040302030103040304" }
     "Arg"
     :intvector { -10800, 2009 }
-  } //Z#73
+  } //Z#74
 ,  /* America/Argentina/Ushuaia */ :array {
-    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1085886000, 1087704000, 1198983600, 1205632800, 1223175600 }
+    :intvector { -2147483648, -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1085886000, 1087704000, 1198983600, 1205632800 }
     :intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
-    :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010304030403040304030403040302030103040304" }
-    "Arg"
-    :intvector { -10800, 2009 }
-  } //Z#74
+    :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020103040304030403040304030403020301030403" }
+  } //Z#75
 ,  /* America/Aruba */ :array {
     :intvector { -2147483648, -1826738376, -157750200 }
     :intvector { -16824, 0, -16200, 0, -14400, 0 }
     :bin { "000102" }
-  } //Z#75
+  } //Z#76
 ,  /* America/Asuncion */ :array {
     :intvector { -2147483648, -1206389360, 86760000, 134017200, 181368000, 194497200, 212990400, 226033200, 244526400, 257569200, 276062400, 291783600, 307598400, 323406000, 339220800, 354942000, 370756800, 386478000, 402292800, 418014000, 433828800, 449636400, 465451200, 481172400, 496987200, 512708400, 528523200, 544244400, 560059200, 575866800, 591681600, 607402800, 625032000, 638938800, 654753600, 670474800, 686721600, 699418800, 718257600, 733546800, 749448000, 762318000, 780984000, 793767600, 812520000, 825649200, 844574400, 856666800, 876024000, 888721200, 907473600, 920775600, 938923200, 952225200, 970372800, 983674800, 1002427200, 1018148400, 1030852800, 1049598000, 1062907200, 1081047600, 1097985600, 1110682800, 1129435200 }
     :intvector { -14400, 0, -14400, 3600, -13840, 0, -10800, 0 }
     :bin { "0200030001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
     "Para"
     :intvector { -14400, 2006 }
-  } //Z#76
+  } //Z#77
 ,  /* America/Atikokan */ :array {
     :intvector { -2147483648, -1632067200, -1614790800, -923248800, -880214400, -769395600, -765392400 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0 }
     :bin { "00010001010102" }
-    :intvector { 77, 97 }
-  } //Z#77
-,  /* America/Atka */ :int { 58 } //Z#78
+    :intvector { 78, 98 }
+  } //Z#78
+,  /* America/Atka */ :int { 58 } //Z#79
 ,  /* America/Bahia */ :array {
     :intvector { -2147483648, -1767216356, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800 }
     :intvector { -10800, 0, -10800, 3600, -9244, 0 }
     :bin { "020001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
-  } //Z#79
+  } //Z#80
 ,  /* America/Barbados */ :array {
     :intvector { -2147483648, -1451678492, -1199217692, 234943200, 244616400, 261554400, 276066000, 293004000, 307515600, 325058400, 338706000 }
     :intvector { -14400, 0, -14400, 3600, -14308, 0 }
     :bin { "0202000100010001000100" }
-  } //Z#80
+  } //Z#81
 ,  /* America/Belem */ :array {
     :intvector { -2147483648, -1767213964, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600 }
     :intvector { -11636, 0, -10800, 0, -10800, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201" }
-  } //Z#81
+  } //Z#82
 ,  /* America/Belize */ :array {
     :intvector { -2147483648, -1822500432, -1616954400, -1606069800, -1585504800, -1574015400, -1554055200, -1542565800, -1522605600, -1511116200, -1490551200, -1479666600, -1459101600, -1448217000, -1427652000, -1416162600, -1396202400, -1384713000, -1364752800, -1353263400, -1333303200, -1321813800, -1301248800, -1290364200, -1269799200, -1258914600, -1238349600, -1226860200, -1206900000, -1195410600, -1175450400, -1163961000, -1143396000, -1132511400, -1111946400, -1101061800, -1080496800, -1069612200, -1049047200, -1037557800, -1017597600, -1006108200, -986148000, -974658600, -954093600, -943209000, -922644000, -911759400, -891194400, -879705000, -859744800, -848255400, 123919200, 129618000, 409039200, 413874000 }
     :intvector { -21600, 0, -21600, 1800, -21600, 3600, -21168, 0 }
     :bin { "0300010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010002000200" }
-  } //Z#82
+  } //Z#83
 ,  /* America/Blanc-Sablon */ :array {
     :intvector { -2147483648, -1632074400, -1614798000, -880221600, -769395600, -765399600 }
     :intvector { -14400, 0, -14400, 3600 }
     :bin { "000100010100" }
-  } //Z#83
+  } //Z#84
 ,  /* America/Boa_Vista */ :array {
     :intvector { -2147483648, -1767211040, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 938923200, 951620400, 970977600, 971578800 }
     :intvector { -14560, 0, -14400, 0, -14400, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201" }
-  } //Z#84
+  } //Z#85
 ,  /* America/Bogota */ :array {
     :intvector { -2147483648, -1739041420, 704869200, 733896000 }
     :intvector { -18000, 0, -18000, 3600, -17780, 0 }
     :bin { "02000100" }
-  } //Z#85
+  } //Z#86
 ,  /* America/Boise */ :array {
     :intvector { -2147483648, -1633269600, -1615129200, -1601820000, -1583679600, -1471788000, -880210800, -769395600, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 129114000, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
     :intvector { -28800, 0, -28800, 3600, -25200, 0, -25200, 3600 }
     :bin { "00010001000203030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "US"
     :intvector { -25200, 2008 }
-  } //Z#86
-,  /* America/Buenos_Aires */ :int { 63 } //Z#87
+  } //Z#87
+,  /* America/Buenos_Aires */ :int { 63 } //Z#88
 ,  /* America/Cambridge_Bay */ :array {
     :intvector { -2147483648, -1577923200, -880210800, -769395600, -765388800, -147891600, -131562000, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954662400, 972802800, 973400400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
     :intvector { -25200, 0, -25200, 3600, -25200, 7200, -21600, 0, -21600, 3600, -18000, 0, 0, 0 }
     :bin { "06000101000200010001000100010001000100010001000100010001000100010001000100010001000100010001030405030100010001000100010001000100" }
     "Canada"
     :intvector { -25200, 2008 }
-  } //Z#88
+  } //Z#89
 ,  /* America/Campo_Grande */ :array {
-    :intvector { -2147483648, -1767212492, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1066536000, 1076814000, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1223784000 }
+    :intvector { -2147483648, -1767212492, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1066536000, 1076814000, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1224388800, 1234666800, 1255838400, 1266721200, 1287288000, 1298170800, 1318737600, 1330225200, 1350792000, 1361070000, 1382241600, 1392519600, 1413691200, 1424574000, 1445140800, 1456023600, 1476590400, 1487473200, 1508040000, 1518922800, 1540094400, 1550372400, 1571544000, 1581822000, 1602993600, 1613876400, 1634443200, 1645326000, 1665892800, 1677380400, 1697342400, 1708225200, 1729396800, 1739674800, 1760846400, 1771729200, 1792296000, 1803178800, 1823745600, 1834628400, 1855195200, 1866078000, 1887249600, 1897527600, 1918699200, 1928977200, 1950148800, 1960426800, 1981598400, 1992481200, 2013048000, 2024535600, 2044497600, 2055380400, 2076552000, 2086830000, 2108001600, 2118884400, 2139451200 }
     :intvector { -14400, 0, -14400, 3600, -13108, 0 }
-    :bin { "0200010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
+    :bin { "020001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
     "Brazil"
-    :intvector { -14400, 2009 }
-  } //Z#89
+    :intvector { -14400, 2038 }
+  } //Z#90
 ,  /* America/Cancun */ :array {
     :intvector { -2147483648, -1514743200, 377935200, 828860400, 846396000, 860310000, 877845600, 891759600, 902037600, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200, 1018166400, 1035702000 }
     :intvector { -21600, 0, -21600, 3600, -20824, 0, -18000, 0, -18000, 3600 }
     :bin { "020003040304030401000100010001000100" }
     "Mexico"
     :intvector { -21600, 2003 }
-  } //Z#90
+  } //Z#91
 ,  /* America/Caracas */ :array {
     :intvector { -2147483648, -1826739140, -157750200, 1197183600 }
     :intvector { -16200, 0, -16060, 0, -14400, 0 }
     :bin { "01000200" }
-  } //Z#91
-,  /* America/Catamarca */ :int { 64 } //Z#92
+  } //Z#92
+,  /* America/Catamarca */ :int { 64 } //Z#93
 ,  /* America/Cayenne */ :array {
     :intvector { -2147483648, -1846269040, -71092800 }
     :intvector { -14400, 0, -12560, 0, -10800, 0 }
     :bin { "010002" }
-  } //Z#93
+  } //Z#94
 ,  /* America/Cayman */ :array {
     :intvector { -2147483648, -1827687168 }
     :intvector { -18432, 0, -18000, 0 }
     :bin { "0001" }
-  } //Z#94
+  } //Z#95
 ,  /* America/Chicago */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -1563724800, -1551632400, -1538928000, -1520182800, -1504454400, -1491757200, -1473004800, -1459702800, -1441555200, -1428253200, -1410105600, -1396803600, -1378656000, -1365354000, -1347206400, -1333904400, -1315152000, -1301850000, -1283702400, -1270400400, -1252252800, -1238950800, -1220803200, -1207501200, -1189353600, -1176051600, -1157299200, -1144602000, -1125849600, -1112547600, -1094400000, -1081098000, -1067788800, -1045414800, -1031500800, -1018198800, -1000051200, -986749200, -967996800, -955299600, -936547200, -923245200, -905097600, -891795600, -880214400, -769395600, -765392400, -747244800, -733942800, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620841600, -608144400, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -447267600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -226515600, -210787200, -195066000, -179337600, -163616400, -147888000, -131562000, -116438400, -100112400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010002000100010001000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -21600, 2008 }
-    :intvector { 95, 354, 571, 586 }
-  } //Z#95
+    :intvector { 96, 356, 573, 588 }
+  } //Z#96
 ,  /* America/Chihuahua */ :array {
     :intvector { -2147483648, -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, 828864000, 846399600, 860313600, 877849200, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800, 1018170000, 1035705600 }
     :intvector { -25460, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 }
     :bin { "000103010301030403040302010201020102010201" }
     "Mexico"
     :intvector { -25200, 2003 }
-  } //Z#96
-,  /* America/Coral_Harbour */ :int { 77 } //Z#97
-,  /* America/Cordoba */ :int { 66 } //Z#98
+  } //Z#97
+,  /* America/Coral_Harbour */ :int { 78 } //Z#98
+,  /* America/Cordoba */ :int { 66 } //Z#99
 ,  /* America/Costa_Rica */ :array {
     :intvector { -2147483648, -1545071020, 288770400, 297234000, 320220000, 328683600, 664264800, 678344400, 695714400, 700635600 }
     :intvector { -21600, 0, -21600, 3600, -20180, 0 }
     :bin { "02000100010001000100" }
-  } //Z#99
+  } //Z#100
 ,  /* America/Cuiaba */ :array {
-    :intvector { -2147483648, -1767212140, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1223784000 }
+    :intvector { -2147483648, -1767212140, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1224388800, 1234666800, 1255838400, 1266721200, 1287288000, 1298170800, 1318737600, 1330225200, 1350792000, 1361070000, 1382241600, 1392519600, 1413691200, 1424574000, 1445140800, 1456023600, 1476590400, 1487473200, 1508040000, 1518922800, 1540094400, 1550372400, 1571544000, 1581822000, 1602993600, 1613876400, 1634443200, 1645326000, 1665892800, 1677380400, 1697342400, 1708225200, 1729396800, 1739674800, 1760846400, 1771729200, 1792296000, 1803178800, 1823745600, 1834628400, 1855195200, 1866078000, 1887249600, 1897527600, 1918699200, 1928977200, 1950148800, 1960426800, 1981598400, 1992481200, 2013048000, 2024535600, 2044497600, 2055380400, 2076552000, 2086830000, 2108001600, 2118884400, 2139451200 }
     :intvector { -14400, 0, -14400, 3600, -13460, 0 }
-    :bin { "020001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
+    :bin { "02000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
     "Brazil"
-    :intvector { -14400, 2009 }
-  } //Z#100
+    :intvector { -14400, 2038 }
+  } //Z#101
 ,  /* America/Curacao */ :array {
     :intvector { -2147483648, -1826738656, -157750200 }
     :intvector { -16544, 0, -16200, 0, -14400, 0 }
     :bin { "000102" }
-  } //Z#101
+  } //Z#102
 ,  /* America/Danmarkshavn */ :array {
     :intvector { -2147483648, -1686091520, 323845200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 820465200 }
     :intvector { -10800, 0, -10800, 3600, -4480, 0, 0, 0 }
     :bin { "0200010001000100010001000100010001000100010001000100010001000100010003" }
-  } //Z#102
+  } //Z#103
 ,  /* America/Dawson */ :array {
     :intvector { -2147483648, -1632056400, -1615125600, -1596978000, -1583164800, -880203600, -769395600, -765381600, -147884400, -131554800, 120646800, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
     :intvector { -32400, 0, -32400, 3600, -32400, 7200, -28800, 0, -28800, 3600 }
     :bin { "00010001000101000200030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
     "Canada"
     :intvector { -28800, 2008 }
-  } //Z#103
+  } //Z#104
 ,  /* America/Dawson_Creek */ :array {
     :intvector { -2147483648, -1632060000, -1614783600, -880207200, -769395600, -765385200, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 84013200 }
     :intvector { -28800, 0, -28800, 3600, -25200, 0 }
     :bin { "00010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000102" }
-  } //Z#104
+  } //Z#105
 ,  /* America/Denver */ :array {
     :intvector { -2147483648, -1633273200, -1615132800, -1601823600, -1583683200, -1570374000, -1551628800, -1538924400, -1534089600, -880210800, -769395600, -765388800, -147884400, -131558400, -116434800, -100108800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
     :intvector { -25200, 0, -25200, 3600 }
     :bin { "0001000100010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -25200, 2008 }
-    :intvector { 105, 190, 515, 576, 592 }
-  } //Z#105
+    :intvector { 106, 192, 517, 578, 594 }
+  } //Z#106
 ,  /* America/Detroit */ :array {
     :intvector { -2147483648, -2051202469, -1724083200, -880218000, -769395600, -765396000, -684349200, -671047200, -80499600, -68666400, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -21600, 0, -19931, 0, -18000, 0, -18000, 3600 }
     :bin { "0100020303020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "US"
     :intvector { -18000, 2008 }
-    :intvector { 106, 591 }
-  } //Z#106
+    :intvector { 107, 593 }
+  } //Z#107
 ,  /* America/Dominica */ :array {
     :intvector { -2147483648, -1846266804 }
     :intvector { -14736, 0, -14400, 0 }
     :bin { "0001" }
-  } //Z#107
+  } //Z#108
 ,  /* America/Edmonton */ :array {
     :intvector { -2147483648, -1998663968, -1632063600, -1614787200, -1600614000, -1596816000, -1567954800, -1551628800, -1536505200, -1523203200, -1504450800, -1491753600, -1473001200, -1459699200, -880210800, -769395600, -765388800, -715791600, -702489600, -84380400, -68659200, -21481200, -5760000, 73472400, 89193600, 104922000, 120643200, 136371600, 152092800, 167821200, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
     :intvector { -27232, 0, -25200, 0, -25200, 3600 }
     :bin { "0001020102010201020102010201020201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     "Canada"
     :intvector { -25200, 2008 }
-    :intvector { 108, 361 }
-  } //Z#108
+    :intvector { 109, 363 }
+  } //Z#109
 ,  /* America/Eirunepe */ :array {
-    :intvector { -2147483648, -1767208832, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 750834000, 761716800 }
-    :intvector { -18000, 0, -18000, 3600, -16768, 0 }
-    :bin { "0200010001000100010001000100010001000100010001000100010001000100" }
-  } //Z#109
+    :intvector { -2147483648, -1767208832, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 750834000, 761716800, 1214283600 }
+    :intvector { -18000, 0, -18000, 3600, -16768, 0, -14400, 0 }
+    :bin { "020001000100010001000100010001000100010001000100010001000100010003" }
+  } //Z#110
 ,  /* America/El_Salvador */ :array {
     :intvector { -2147483648, -1546279392, 547020000, 559717200, 578469600, 591166800 }
     :intvector { -21600, 0, -21600, 3600, -21408, 0 }
     :bin { "020001000100" }
-  } //Z#110
-,  /* America/Ensenada */ :int { 201 } //Z#111
-,  /* America/Fort_Wayne */ :int { 126 } //Z#112
+  } //Z#111
+,  /* America/Ensenada */ :int { 203 } //Z#112
+,  /* America/Fort_Wayne */ :int { 127 } //Z#113
 ,  /* America/Fortaleza */ :array {
     :intvector { -2147483648, -1767216360, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 938919600, 951616800, 970974000, 972180000, 1003028400, 1013911200 }
     :intvector { -10800, 0, -10800, 3600, -9240, 0 }
     :bin { "02000100010001000100010001000100010001000100010001000100010001000100010001000100" }
-  } //Z#113
+  } //Z#114
 ,  /* America/Glace_Bay */ :array {
     :intvector { -2147483648, -2131646412, -1632074400, -1614798000, -880221600, -769395600, -765399600, -526500000, -513198000, 73461600, 89182800, 104911200, 120632400, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 }
     :intvector { -14400, 0, -14400, 3600, -14388, 0 }
     :bin { "020001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Canada"
     :intvector { -14400, 2008 }
-  } //Z#114
+  } //Z#115
 ,  /* America/Godthab */ :array {
     :intvector { -2147483648, -1686083584, 323845200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { -12416, 0, -10800, 0, -10800, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201020102010201" }
     "EU"
     :intvector { -10800, 1997 }
-  } //Z#115
+  } //Z#116
 ,  /* America/Goose_Bay */ :array {
     :intvector { -2147483648, -1632076148, -1614799748, -1096921748, -1061670600, -1048973400, -1030221000, -1017523800, -998771400, -986074200, -966717000, -954624600, -935267400, -922570200, -903817800, -891120600, -872368200, -769395600, -765401400, -746044200, -733347000, -714594600, -701897400, -683145000, -670447800, -651695400, -638998200, -619641000, -606943800, -589401000, -576099000, -557951400, -544649400, -526501800, -513199800, -495052200, -481750200, -463602600, -450300600, -431548200, -418246200, -400098600, -386796600, -368649000, -355347000, -337199400, -323897400, -305749800, -289423800, -273695400, -257974200, -242245800, -226524600, -210796200, -195075000, -179346600, -163625400, -147897000, -131571000, -119903400, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 104911200, 120632400, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544593660, 562129260, 576043260, 594180060, 607492860, 625633260, 638942460, 657082860, 670996860, 688532460, 702446460, 719982060, 733896060, 752036460, 765345660, 783486060, 796795260, 814935660, 828849660, 846385260, 860299260, 877834860, 891748860, 909284460, 923198460, 941338860, 954648060, 972788460, 986097660, 1004238060, 1018152060, 1035687660, 1049601660, 1067137260, 1081051260, 1099191660, 1112500860, 1130641260, 1143950460, 1162090860, 1173585660, 1194145260 }
     :intvector { -14400, 0, -14400, 3600, -14400, 7200, -12652, 0, -12652, 3600, -12600, 0, -12600, 3600 }
     :bin { "030403050605060506050605060506050606050605060506050605060506050605060506050605060506050605060506050605060506050605060500010001000100010001000100010001000100010001000100010001000100010001000100010001000100010002000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "StJohns"
     :intvector { -14400, 2008 }
-  } //Z#116
+  } //Z#117
 ,  /* America/Grand_Turk */ :array {
     :intvector { -2147483648, -1827687168, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -18432, 0, -18000, 0, -18000, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     "TC"
     :intvector { -18000, 2008 }
-  } //Z#117
+  } //Z#118
 ,  /* America/Grenada */ :array {
     :intvector { -2147483648, -1846266780 }
     :intvector { -14820, 0, -14400, 0 }
     :bin { "0001" }
-  } //Z#118
+  } //Z#119
 ,  /* America/Guadeloupe */ :array {
     :intvector { -2147483648, -1848254032 }
     :intvector { -14768, 0, -14400, 0 }
     :bin { "0001" }
-    :intvector { 119, 150, 191 }
-  } //Z#119
+    :intvector { 120, 151, 193 }
+  } //Z#120
 ,  /* America/Guatemala */ :array {
     :intvector { -2147483648, -1617040676, 123055200, 130914000, 422344800, 433054800, 669708000, 684219600, 1146376800, 1159678800 }
     :intvector { -21724, 0, -21600, 0, -21600, 3600 }
     :bin { "00010201020102010201" }
-  } //Z#120
+  } //Z#121
 ,  /* America/Guayaquil */ :array {
     :intvector { -2147483648, -1230749160 }
     :intvector { -18840, 0, -18000, 0 }
     :bin { "0001" }
-  } //Z#121
+  } //Z#122
 ,  /* America/Guyana */ :array {
     :intvector { -2147483648, -1730578040, -113688900, 176010300, 662698800 }
     :intvector { -14400, 0, -13960, 0, -13500, 0, -10800, 0 }
     :bin { "0102020300" }
-  } //Z#122
+  } //Z#123
 ,  /* America/Halifax */ :array {
     :intvector { -2147483648, -2131645536, -1696276800, -1680469200, -1632074400, -1614798000, -1566763200, -1557090000, -1535486400, -1524949200, -1504468800, -1493413200, -1472414400, -1461963600, -1440964800, -1429390800, -1409515200, -1396731600, -1376856000, -1366491600, -1346616000, -1333832400, -1313956800, -1303678800, -1282507200, -1272661200, -1251057600, -1240088400, -1219608000, -1207429200, -1188763200, -1175979600, -1157313600, -1143925200, -1124049600, -1113771600, -1091390400, -1081026000, -1059854400, -1050786000, -1030910400, -1018126800, -999460800, -986677200, -965592000, -955227600, -935956800, -923173200, -904507200, -891723600, -880221600, -769395600, -765399600, -747252000, -733950000, -715802400, -702500400, -684352800, -671050800, -652903200, -639601200, -589399200, -576097200, -557949600, -544647600, -526500000, -513198000, -495050400, -481748400, -431546400, -418244400, -400096800, -386794800, -368647200, -355345200, -337197600, -323895600, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 104911200, 120632400, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 }
     :intvector { -15264, 0, -14400, 0, -14400, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010202010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     "Canada"
     :intvector { -14400, 2008 }
-    :intvector { 123, 357, 569 }
-  } //Z#123
+    :intvector { 124, 359, 571 }
+  } //Z#124
 ,  /* America/Havana */ :array {
     :intvector { -2147483648, -1402813824, -1311534000, -1300996800, -933534000, -925675200, -902084400, -893620800, -870030000, -862171200, -775681200, -767822400, -744231600, -736372800, -144702000, -134251200, -113425200, -102542400, -86295600, -72907200, -54154800, -41457600, -21495600, -5774400, 9954000, 25675200, 41403600, 57729600, 73458000, 87364800, 104907600, 118900800, 136357200, 150436800, 167806800, 183528000, 199256400, 215582400, 230706000, 247032000, 263365200, 276667200, 290581200, 308721600, 322030800, 340171200, 358318800, 371620800, 389768400, 403070400, 421218000, 434520000, 452667600, 466574400, 484117200, 498024000, 511333200, 529473600, 542782800, 560923200, 574837200, 592372800, 606286800, 623822400, 638946000, 655876800, 671000400, 687330000, 702450000, 718779600, 733899600, 750229200, 765349200, 781678800, 796798800, 813128400, 828853200, 844578000, 860302800, 876632400, 891147600, 909291600, 922597200, 941346000, 954651600, 972795600, 986101200, 1004245200, 1018155600, 1035694800, 1049605200, 1067144400, 1081054800, 1162098000, 1173589200, 1193547600, 1205643600, 1224997200 }
     :intvector { -19776, 0, -18000, 0, -18000, 3600 }
     :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     "Cuba"
     :intvector { -18000, 2009 }
-    :intvector { 124, 368 }
-  } //Z#124
+    :intvector { 125, 370 }
+  } //Z#125
 ,  /* America/Hermosillo */ :array {
     :intvector { -2147483648, -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -873828000, -661539600, 28800, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400 }
     :intvector { -28800, 0, -26632, 0, -25200, 0, -25200, 3600, -21600, 0 }
     :bin { "01020402040204020002030203020302" }
-  } //Z#125
+  } //Z#126
 ,  /* America/Indiana/Indianapolis */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -900259200, -891795600, -880214400, -769395600, -765392400, -747244800, -733942800, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620841600, -608144400, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -386787600, -368640000, -21488400, -5767200, 9961200, 25682400, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 }
     :bin { "000100010001000101000100010001000100010001000100010001000200020302030203020302" }
     "US"
     :intvector { -18000, 2008 }
-    :intvector { 112, 126, 134, 480, 587 }
-  } //Z#126
+    :intvector { 113, 127, 135, 482, 589 }
+  } //Z#127
 ,  /* America/Indiana/Knox */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620841600, -608144400, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -447267600, -431539200, -415818000, -400089600, -386787600, -368640000, -355338000, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -195066000, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 1143961200, 1162105200, 1173600000, 1194159600 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0 }
     :bin { "00010001000101000100010001000100010001000100010001000100010001000100010001000200010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010201000100" }
     "US"
     :intvector { -21600, 2008 }
-    :intvector { 127, 142, 590 }
-  } //Z#127
+    :intvector { 128, 143, 592 }
+  } //Z#128
 ,  /* America/Indiana/Marengo */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -589392000, -576090000, -495043200, -481741200, -463593600, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -323888400, -305740800, -292438800, -273686400, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152089200, 162370800, 183535200, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 }
     :bin { "00010001000101000100010001000100010001000100010002030203020302030203020102030203020302" }
     "US"
     :intvector { -18000, 2008 }
-  } //Z#128
+  } //Z#129
 ,  /* America/Indiana/Petersburg */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -462996000, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -323888400, -305740800, -292438800, -273686400, -257965200, -242236800, -226515600, -210787200, -195066000, -179337600, -163616400, -147888000, -100112400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 1143961200, 1162105200, 1173600000, 1194159600, 1205046000, 1225605600 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 }
     :bin { "00010001000101000100010001000100010001000100010001000100020001000100010001000100010001000100010001000102010001020302" }
     "US"
     :intvector { -18000, 2009 }
-  } //Z#129
+  } //Z#130
 ,  /* America/Indiana/Tell_City */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -747244800, -733942800, -526492800, -513190800, -495043200, -481741200, -462996000, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -323888400, -305740800, -289414800, -273686400, -260989200, -242236800, -226515600, -210787200, -195066000, -179337600, -21488400, -5767200, 9961200, 25682400, 1143961200, 1162105200, 1173600000, 1194159600 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 }
     :bin { "0001000100010100010001000100010001000100010001000100010001000100020302030201000100" }
     "US"
     :intvector { -21600, 2008 }
-  } //Z#130
+  } //Z#131
 ,  /* America/Indiana/Vevay */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -495043200, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 }
     :bin { "000100010001010002030203020302030203020302" }
     "US"
     :intvector { -18000, 2008 }
-  } //Z#131
+  } //Z#132
 ,  /* America/Indiana/Vincennes */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -747244800, -733942800, -526492800, -513190800, -495043200, -481741200, -462996000, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -323888400, -305740800, -289414800, -273686400, -260989200, -242236800, -226515600, -210787200, -195066000, -179337600, -21488400, -5767200, 9961200, 25682400, 1143961200, 1162105200, 1173600000, 1194159600, 1205046000, 1225605600 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 }
     :bin { "00010001000101000100010001000100010001000100010001000100010001000203020302010001020302" }
     "US"
     :intvector { -18000, 2009 }
-  } //Z#132
+  } //Z#133
 ,  /* America/Indiana/Winamac */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -747244800, -733942800, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620841600, -608144400, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -447267600, -431539200, -415818000, -400089600, -386787600, -368640000, -355338000, -337190400, -323888400, -305740800, -292438800, -273686400, -21488400, -5767200, 9961200, 25682400, 1143961200, 1162105200, 1173600000, 1194156000, 1205046000, 1225605600 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 }
     :bin { "00010001000101000100010001000100010001000100010001000100010001000100010001000203020302010003020302" }
     "US"
     :intvector { -18000, 2009 }
-  } //Z#133
-,  /* America/Indianapolis */ :int { 126 } //Z#134
+  } //Z#134
+,  /* America/Indianapolis */ :int { 127 } //Z#135
 ,  /* America/Inuvik */ :array {
     :intvector { -2147483648, -536457600, -147888000, -131558400, 294228000, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
     :intvector { -28800, 0, -28800, 7200, -25200, 0, -25200, 3600, 0, 0 }
     :bin { "04000100020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "Canada"
     :intvector { -25200, 2008 }
-  } //Z#135
+  } //Z#136
 ,  /* America/Iqaluit */ :array {
     :intvector { -2147483648, -865296000, -769395600, -765396000, -147898800, -131569200, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954662400, 972802800, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600, -18000, 7200, 0, 0 }
     :bin { "0503030204020302030203020302030203020302030203020302030203020302030203020302030203020302030001020302030203020302030203020302" }
     "Canada"
     :intvector { -18000, 2008 }
-  } //Z#136
+  } //Z#137
 ,  /* America/Jamaica */ :array {
     :intvector { -2147483648, -1827687168, 136364400, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 }
     :intvector { -18432, 0, -18000, 0, -18000, 3600 }
     :bin { "00010201020102010201020102010201020102010201" }
-    :intvector { 137, 497 }
-  } //Z#137
-,  /* America/Jujuy */ :int { 67 } //Z#138
+    :intvector { 138, 499 }
+  } //Z#138
+,  /* America/Jujuy */ :int { 67 } //Z#139
 ,  /* America/Juneau */ :array {
     :intvector { -2147483648, -880207200, -769395600, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 439030800, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
     :intvector { -32400, 0, -32400, 3600, -28800, 0, -28800, 3600 }
     :bin { "0203030203020302030203020302030203020302030203020302030203020302030000010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -32400, 2008 }
-  } //Z#139
+  } //Z#140
 ,  /* America/Kentucky/Louisville */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -1535904000, -1525280400, -905097600, -891795600, -880214400, -769395600, -765392400, -757360800, -744224400, -715795200, -608144400, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -450291600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -266432400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152089200, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 }
     :bin { "00010001000100010001010001000100010001000100010001000100010001000100010001020302030203020302030203020102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "US"
     :intvector { -18000, 2008 }
-    :intvector { 140, 146 }
-  } //Z#140
+    :intvector { 141, 147 }
+  } //Z#141
 ,  /* America/Kentucky/Monticello */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 }
     :bin { "00010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001020302030203020302030203020302" }
     "US"
     :intvector { -18000, 2008 }
-  } //Z#141
-,  /* America/Knox_IN */ :int { 127 } //Z#142
+  } //Z#142
+,  /* America/Knox_IN */ :int { 128 } //Z#143
 ,  /* America/La_Paz */ :array {
     :intvector { -2147483648, -1205954844, -1192307244 }
     :intvector { -16356, 0, -16356, 3600, -14400, 0 }
     :bin { "000102" }
-  } //Z#143
+  } //Z#144
 ,  /* America/Lima */ :array {
     :intvector { -2147483648, -1938538284, -1009825200, -1002052800, -986756400, -971035200, -955306800, -939585600, 504939600, 512712000, 536475600, 544248000, 631170000, 638942400, 757400400, 765172800 }
     :intvector { -18516, 0, -18000, 0, -18000, 3600 }
     :bin { "00010201020102010201020102010201" }
-  } //Z#144
+  } //Z#145
 ,  /* America/Los_Angeles */ :array {
     :intvector { -2147483648, -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -769395600, -765385200, -687967200, -662655600, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
     :intvector { -28800, 0, -28800, 3600 }
     :bin { "000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -28800, 2008 }
-    :intvector { 145, 520, 578, 593, 594 }
-  } //Z#145
-,  /* America/Louisville */ :int { 140 } //Z#146
+    :intvector { 146, 522, 580, 595, 596 }
+  } //Z#146
+,  /* America/Louisville */ :int { 141 } //Z#147
 ,  /* America/Maceio */ :array {
     :intvector { -2147483648, -1767217028, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 813726000, 824004000, 938919600, 951616800, 970974000, 972180000, 1003028400, 1013911200 }
     :intvector { -10800, 0, -10800, 3600, -8572, 0 }
     :bin { "020001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
-  } //Z#147
+  } //Z#148
 ,  /* America/Managua */ :array {
     :intvector { -2147483648, -1121105688, 105084000, 161758800, 290584800, 299134800, 322034400, 330584400, 694260000, 717310800, 725868000, 852094800, 1113112800, 1128229200, 1146384000, 1159682400 }
     :intvector { -21600, 0, -21600, 3600, -20712, 0, -18000, 0 }
     :bin { "02000300010001000300030001000100" }
-  } //Z#148
+  } //Z#149
 ,  /* America/Manaus */ :array {
     :intvector { -2147483648, -1767211196, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 750830400, 761713200 }
     :intvector { -14404, 0, -14400, 0, -14400, 3600 }
     :bin { "0001020102010201020102010201020102010201020102010201020102010201" }
-    :intvector { 149, 350 }
-  } //Z#149
-,  /* America/Marigot */ :int { 119 } //Z#150
+    :intvector { 150, 352 }
+  } //Z#150
+,  /* America/Marigot */ :int { 120 } //Z#151
 ,  /* America/Martinique */ :array {
     :intvector { -2147483648, -1851537340, 323841600, 338958000 }
     :intvector { -14660, 0, -14400, 0, -14400, 3600 }
     :bin { "00010201" }
-  } //Z#151
+  } //Z#152
 ,  /* America/Mazatlan */ :array {
     :intvector { -2147483648, -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -873828000, -661539600, 28800, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800, 1018170000, 1035705600 }
     :intvector { -28800, 0, -25540, 0, -25200, 0, -25200, 3600, -21600, 0 }
     :bin { "010204020402040200020302030203020302030203020302" }
     "Mexico"
     :intvector { -25200, 2003 }
-    :intvector { 152, 506 }
-  } //Z#152
-,  /* America/Mendoza */ :int { 69 } //Z#153
+    :intvector { 153, 508 }
+  } //Z#153
+,  /* America/Mendoza */ :int { 69 } //Z#154
 ,  /* America/Menominee */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -747244800, -733942800, -116438400, -100112400, -21484800, 104914800, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0 }
     :bin { "0001000100010100010001000201000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -21600, 2008 }
-  } //Z#154
+  } //Z#155
 ,  /* America/Merida */ :array {
     :intvector { -2147483648, -1514743200, 377935200, 407653200, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200, 1018166400, 1035702000 }
     :intvector { -21600, 0, -21600, 3600, -21508, 0, -18000, 0 }
     :bin { "020003000100010001000100010001000100" }
     "Mexico"
     :intvector { -21600, 2003 }
-  } //Z#155
+  } //Z#156
 ,  /* America/Mexico_City */ :array {
     :intvector { -2147483648, -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -975261600, -963169200, -917114400, -907354800, -821901600, -810068400, -627501600, -612990000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200, 1018166400, 1035702000 }
     :intvector { -25200, 0, -23796, 0, -21600, 0, -21600, 3600 }
     :bin { "0100020002000203020302030203020302030203020302030203020302" }
     "Mexico"
     :intvector { -21600, 2003 }
-    :intvector { 156, 507 }
-  } //Z#156
+    :intvector { 157, 509 }
+  } //Z#157
 ,  /* America/Miquelon */ :array {
     :intvector { -2147483648, -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400, 1173589200, 1194148800 }
     :intvector { -14400, 0, -13480, 0, -10800, 0, -10800, 3600 }
     :bin { "010002030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "Canada"
     :intvector { -10800, 2008 }
-  } //Z#157
+  } //Z#158
 ,  /* America/Moncton */ :array {
     :intvector { -2147483648, -2131642800, -1632074400, -1614798000, -1153681200, -1145822400, -1122231600, -1114372800, -1090782000, -1082923200, -1059332400, -1051473600, -1027882800, -1020024000, -996433200, -988574400, -965674800, -955396800, -934743600, -923947200, -904503600, -891892800, -880221600, -769395600, -765399600, -747252000, -733950000, -715802400, -702500400, -684352800, -671050800, -652903200, -639601200, -620848800, -608151600, -589399200, -576097200, -557949600, -544647600, -526500000, -513198000, -495050400, -481748400, -463600800, -450298800, -431546400, -418244400, -400096800, -384375600, -368647200, -352926000, -337197600, -321476400, -305748000, -289422000, -273693600, -257972400, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733896060, 752036460, 765345660, 783486060, 796795260, 814935660, 828849660, 846385260, 860299260, 877834860, 891748860, 909284460, 923198460, 941338860, 954648060, 972788460, 986097660, 1004238060, 1018152060, 1035687660, 1049601660, 1067137260, 1081051260, 1099191660, 1112500860, 1130641260, 1143950460, 1162090860, 1173592800, 1194152400 }
     :intvector { -18000, 0, -14400, 0, -14400, 3600 }
     :bin { "000102010201020102010201020102010201020102010202010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     "Canada"
     :intvector { -14400, 2008 }
-  } //Z#158
+  } //Z#159
 ,  /* America/Monterrey */ :array {
     :intvector { -2147483648, -1514743200, 576057600, 594198000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200, 1018166400, 1035702000 }
     :intvector { -24076, 0, -21600, 0, -21600, 3600 }
     :bin { "000102010201020102010201020102010201" }
     "Mexico"
     :intvector { -21600, 2003 }
-  } //Z#159
+  } //Z#160
 ,  /* America/Montevideo */ :array {
     :intvector { -2147483648, -1567455316, -1459542600, -1443819600, -1428006600, -1412283600, -1396470600, -1380747600, -1141590600, -1128286800, -1110141000, -1096837200, -1078691400, -1065387600, -1046637000, -1033938000, -1015187400, -1002488400, -983737800, -971038800, -952288200, -938984400, -920838600, -907534800, -896819400, -883602000, -853619400, -845848800, -334789200, -319672800, -314226000, -309996000, -149720400, -134604000, -118270800, -100044000, -86821200, -68508000, -50446800, -34119000, -18910800, -2583000, 12625200, 28953000, 72932400, 82692000, 132116400, 156911400, 212983200, 250052400, 260244000, 307594800, 325994400, 566449200, 574308000, 597812400, 605671200, 625633200, 636516000, 656478000, 667965600, 688532400, 699415200, 719377200, 730864800, 1095562800, 1111896000, 1128834000, 1142136000, 1159678800, 1173585600, 1191733200 }
     :intvector { -13484, 0, -12600, 0, -12600, 1800, -10800, 0, -10800, 1800, -10800, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020105030503050305030503050304030403040305030405030503050305030503050305030503050305030503050305" }
     "Uruguay"
     :intvector { -10800, 2008 }
-  } //Z#160
+  } //Z#161
 ,  /* America/Montreal */ :array {
     :intvector { -2147483648, -1665334800, -1662753600, -1632070800, -1614794400, -1601742600, -1583775000, -1567355400, -1554053400, -1535907600, -1522603800, -1504458000, -1491154200, -1439830800, -1428255000, -1409504400, -1396805400, -1378054800, -1365355800, -1346612400, -1333915200, -1315162800, -1301860800, -1283713200, -1270411200, -1252263600, -1238961600, -1220814000, -1207512000, -1188759600, -1176062400, -1157310000, -1144008000, -1125860400, -1112558400, -1094410800, -1081108800, -1062961200, -1049659200, -1031511600, -1018209600, -1000062000, -986760000, -968007600, -955310400, -936558000, -880218000, -769395600, -765396000, -747248400, -733946400, -715798800, -702496800, -684349200, -671047200, -652899600, -636573600, -620845200, -605124000, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -18000, 0, -18000, 3600 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000101010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Canada"
     :intvector { -18000, 2008 }
-  } //Z#161
+  } //Z#162
 ,  /* America/Montserrat */ :array {
     :intvector { -2147483648, -1846266608 }
     :intvector { -14932, 0, -14400, 0 }
     :bin { "0001" }
-  } //Z#162
+  } //Z#163
 ,  /* America/Nassau */ :array {
     :intvector { -2147483648, -1825095036, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -18564, 0, -18000, 0, -18000, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     "US"
     :intvector { -18000, 2008 }
-  } //Z#163
+  } //Z#164
 ,  /* America/New_York */ :array {
     :intvector { -2147483648, -1633280400, -1615140000, -1601830800, -1583690400, -1570381200, -1551636000, -1536512400, -1523210400, -1504458000, -1491760800, -1473008400, -1459706400, -1441558800, -1428256800, -1410109200, -1396807200, -1378659600, -1365357600, -1347210000, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1189357200, -1176055200, -1157302800, -1144605600, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -923248800, -905101200, -891799200, -880218000, -769395600, -765396000, -747248400, -733946400, -715798800, -702496800, -684349200, -671047200, -652899600, -639597600, -620845200, -608148000, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -18000, 0, -18000, 3600 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -18000, 2008 }
-    :intvector { 164, 573, 588 }
-  } //Z#164
+    :intvector { 165, 575, 590 }
+  } //Z#165
 ,  /* America/Nipigon */ :array {
     :intvector { -2147483648, -1632070800, -1614794400, -923252400, -880218000, -769395600, -765396000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -18000, 0, -18000, 3600 }
     :bin { "000100010101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Canada"
     :intvector { -18000, 2008 }
-  } //Z#165
+  } //Z#166
 ,  /* America/Nome */ :array {
     :intvector { -2147483648, -880196400, -769395600, -765374400, -86878800, -21466800, -5745600, 9982800, 25704000, 41432400, 57758400, 73486800, 89208000, 104936400, 120657600, 126709200, 152107200, 162392400, 183556800, 199285200, 215611200, 230734800, 247060800, 262789200, 278510400, 294238800, 309960000, 325688400, 341409600, 357138000, 372859200, 388587600, 404913600, 420037200, 436363200, 439030800, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
     :intvector { -39600, 0, -39600, 3600, -32400, 0, -32400, 3600 }
     :bin { "000101000001000100010001000100010001000100010001000100010001000100010202030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "US"
     :intvector { -32400, 2008 }
-  } //Z#166
+  } //Z#167
 ,  /* America/Noronha */ :array {
     :intvector { -2147483648, -1767217820, -1206961200, -1191366000, -1175378400, -1159830000, -633823200, -622072800, -602287200, -591836400, -570751200, -560214000, -539128800, -531356400, -191368800, -184201200, -155167200, -150073200, -128901600, -121129200, -99957600, -89593200, -68421600, -57970800, 499744800, 511232400, 530589600, 540262800, 562125600, 571194000, 592970400, 602038800, 624420000, 634698000, 938916000, 951613200, 970970400, 971571600, 1003024800, 1013907600 }
     :intvector { -7780, 0, -7200, 0, -7200, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201" }
-    :intvector { 167, 348 }
-  } //Z#167
+    :intvector { 168, 350 }
+  } //Z#168
 ,  /* America/North_Dakota/Center */ :array {
     :intvector { -2147483648, -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -769395600, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
     :intvector { -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 }
     :bin { "000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000102030203020302030203020302030203020302030203020302030203020302" }
     "US"
     :intvector { -21600, 2008 }
-  } //Z#168
+  } //Z#169
 ,  /* America/North_Dakota/New_Salem */ :array {
     :intvector { -2147483648, -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -769395600, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
     :intvector { -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 }
     :bin { "000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001020302030203020302" }
     "US"
     :intvector { -21600, 2008 }
-  } //Z#169
+  } //Z#170
 ,  /* America/Panama */ :array {
     :intvector { -2147483648, -1946918424 }
     :intvector { -19176, 0, -18000, 0 }
     :bin { "0001" }
-  } //Z#170
+  } //Z#171
 ,  /* America/Pangnirtung */ :array {
     :intvector { -2147483648, -1546300800, -880221600, -769395600, -765399600, -147902400, -131572800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954662400, 972802800, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600, -14400, 7200, 0, 0 }
     :bin { "070405050406040504050405040504050405040504050405040504050405040504050405040302030203020302030001020302030203020302030203020302" }
     "Canada"
     :intvector { -18000, 2008 }
-  } //Z#171
+  } //Z#172
 ,  /* America/Paramaribo */ :array {
     :intvector { -2147483648, -1861906760, -1104524348, -765317964, 185686200, 465449400 }
     :intvector { -13252, 0, -13240, 0, -13236, 0, -12600, 0, -10800, 0 }
     :bin { "010002030304" }
-  } //Z#172
+  } //Z#173
 ,  /* America/Phoenix */ :array {
     :intvector { -2147483648, -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 }
     :intvector { -25200, 0, -25200, 3600 }
     :bin { "0001000100010001000100" }
-    :intvector { 173, 517, 585 }
-  } //Z#173
+    :intvector { 174, 519, 587 }
+  } //Z#174
 ,  /* America/Port-au-Prince */ :array {
     :intvector { -2147483648, -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400 }
     :intvector { -18000, 0, -18000, 3600, -17340, 0 }
     :bin { "020001000100010001000100010001000100010001000100010001000100010001000100" }
-  } //Z#174
+  } //Z#175
 ,  /* America/Port_of_Spain */ :array {
     :intvector { -2147483648, -1825098836 }
     :intvector { -14764, 0, -14400, 0 }
     :bin { "0001" }
-  } //Z#175
-,  /* America/Porto_Acre */ :int { 184 } //Z#176
+  } //Z#176
+,  /* America/Porto_Acre */ :int { 185 } //Z#177
 ,  /* America/Porto_Velho */ :array {
     :intvector { -2147483648, -1767210264, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200 }
     :intvector { -15336, 0, -14400, 0, -14400, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201" }
-  } //Z#177
+  } //Z#178
 ,  /* America/Puerto_Rico */ :array {
     :intvector { -2147483648, -873057600, -769395600, -765399600 }
     :intvector { -14400, 0, -14400, 3600 }
     :bin { "00010100" }
-    :intvector { 178, 519 }
-  } //Z#178
+    :intvector { 179, 521 }
+  } //Z#179
 ,  /* America/Rainy_River */ :array {
     :intvector { -2147483648, -1632067200, -1614790800, -923248800, -880214400, -769395600, -765392400, 136368000, 152089200, 167817600, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
     :intvector { -21600, 0, -21600, 3600 }
     :bin { "000100010101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Canada"
     :intvector { -21600, 2008 }
-  } //Z#179
+  } //Z#180
 ,  /* America/Rankin_Inlet */ :array {
     :intvector { -2147483648, -410227200, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
     :intvector { -21600, 0, -21600, 3600, -21600, 7200, -18000, 0, 0, 0 }
     :bin { "040002000100010001000100010001000100010001000100010001000100010001000100010001000100010001030100010001000100010001000100" }
     "Canada"
     :intvector { -21600, 2008 }
-  } //Z#180
+  } //Z#181
 ,  /* America/Recife */ :array {
     :intvector { -2147483648, -1767217224, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 938919600, 951616800, 970974000, 971575200, 1003028400, 1013911200 }
     :intvector { -10800, 0, -10800, 3600, -8376, 0 }
     :bin { "02000100010001000100010001000100010001000100010001000100010001000100010001000100" }
-  } //Z#181
+  } //Z#182
 ,  /* America/Regina */ :array {
     :intvector { -2147483648, -2030202084, -1632063600, -1614787200, -1251651600, -1238349600, -1220202000, -1206900000, -1188752400, -1175450400, -1156698000, -1144000800, -1125248400, -1111946400, -1032714000, -1016992800, -1001264400, -986148000, -969814800, -954093600, -937760400, -922039200, -906310800, -890589600, -880210800, -769395600, -765388800, -748450800, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -620838000, -608140800, -589388400, -576086400, -557938800, -544636800, -526489200, -513187200, -495039600, -481737600, -463590000, -450288000, -431535600, -418233600, -400086000, -386784000, -337186800, -321465600, -305737200 }
     :intvector { -25200, 0, -25200, 3600, -25116, 0, -21600, 0 }
     :bin { "020001000100010001000100010001000100010001000100010100010001000100010001000100010001000100010001000100010003" }
-    :intvector { 182, 359, 364 }
-  } //Z#182
+    :intvector { 183, 361, 366 }
+  } //Z#183
 ,  /* America/Resolute */ :array {
     :intvector { -2147483648, -704937600, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200 }
     :intvector { -21600, 0, -21600, 3600, -21600, 7200, -18000, 0, 0, 0 }
     :bin { "04000200010001000100010001000100010001000100010001000100010001000100010001000100010001000103010001000100010001000103" }
-  } //Z#183
+  } //Z#184
 ,  /* America/Rio_Branco */ :array {
-    :intvector { -2147483648, -1767209328, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800 }
-    :intvector { -18000, 0, -18000, 3600, -16272, 0 }
-    :bin { "020001000100010001000100010001000100010001000100010001000100" }
-    :intvector { 176, 184, 347 }
-  } //Z#184
-,  /* America/Rosario */ :int { 66 } //Z#185
+    :intvector { -2147483648, -1767209328, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 1214283600 }
+    :intvector { -18000, 0, -18000, 3600, -16272, 0, -14400, 0 }
+    :bin { "02000100010001000100010001000100010001000100010001000100010003" }
+    :intvector { 177, 185, 349 }
+  } //Z#185
+,  /* America/Rosario */ :int { 66 } //Z#186
+,  /* America/Santarem */ :array {
+    :intvector { -2147483648, -1767212472, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 1214280000 }
+    :intvector { -14400, 0, -14400, 3600, -13128, 0, -10800, 0 }
+    :bin { "02000100010001000100010001000100010001000100010001000100010003" }
+  } //Z#187
 ,  /* America/Santiago */ :array {
     :intvector { -2147483648, -1893439034, -1688410800, -1619983034, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -736376400, -713646000, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600 }
     :intvector { -18000, 0, -18000, 3600, -16966, 0, -14400, 0, -14400, 3600 }
     :bin { "02000203020100010001000100010001000100030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
     "Chile"
     :intvector { -14400, 2010 }
-    :intvector { 186, 366 }
-  } //Z#186
+    :intvector { 188, 368 }
+  } //Z#188
 ,  /* America/Santo_Domingo */ :array {
     :intvector { -2147483648, -1159773600, -100119600, -89668800, -5770800, 4422600, 25678800, 33193800, 57733200, 64816200, 89182800, 96438600, 120632400, 127974600, 152082000, 972799200, 975823200 }
     :intvector { -18000, 0, -18000, 1800, -18000, 3600, -16800, 0, -14400, 0 }
     :bin { "0300020001000100010001000100040004" }
-  } //Z#187
+  } //Z#189
 ,  /* America/Sao_Paulo */ :array {
-    :intvector { -2147483648, -1767214412, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -195426000, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1066532400, 1076810400, 1099364400, 1108864800, 1129431600, 1140314400, 1162695600, 1172368800, 1192330800, 1203213600, 1223780400 }
+    :intvector { -2147483648, -1767214412, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -195426000, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1066532400, 1076810400, 1099364400, 1108864800, 1129431600, 1140314400, 1162695600, 1172368800, 1192330800, 1203213600, 1224385200, 1234663200, 1255834800, 1266717600, 1287284400, 1298167200, 1318734000, 1330221600, 1350788400, 1361066400, 1382238000, 1392516000, 1413687600, 1424570400, 1445137200, 1456020000, 1476586800, 1487469600, 1508036400, 1518919200, 1540090800, 1550368800, 1571540400, 1581818400, 1602990000, 1613872800, 1634439600, 1645322400, 1665889200, 1677376800, 1697338800, 1708221600, 1729393200, 1739671200, 1760842800, 1771725600, 1792292400, 1803175200, 1823742000, 1834624800, 1855191600, 1866074400, 1887246000, 1897524000, 1918695600, 1928973600, 1950145200, 1960423200, 1981594800, 1992477600, 2013044400, 2024532000, 2044494000, 2055376800, 2076548400, 2086826400, 2107998000, 2118880800, 2139447600 }
     :intvector { -11188, 0, -10800, 0, -10800, 3600 }
-    :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
+    :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
     "Brazil"
-    :intvector { -10800, 2009 }
-    :intvector { 188, 345, 349 }
-  } //Z#188
+    :intvector { -10800, 2038 }
+    :intvector { 190, 347, 351 }
+  } //Z#190
 ,  /* America/Scoresbysund */ :array {
     :intvector { -2147483648, -1686090728, 323841600, 338961600, 354679200, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { -7200, 0, -7200, 3600, -5272, 0, -3600, 0, -3600, 3600 }
     :bin { "020001000403040304030403040304030403040304030403040304030403040304030403" }
     "EU"
     :intvector { -3600, 1997 }
-  } //Z#189
-,  /* America/Shiprock */ :int { 105 } //Z#190
-,  /* America/St_Barthelemy */ :int { 119 } //Z#191
+  } //Z#191
+,  /* America/Shiprock */ :int { 106 } //Z#192
+,  /* America/St_Barthelemy */ :int { 120 } //Z#193
 ,  /* America/St_Johns */ :array {
     :intvector { -2147483648, -1664130548, -1650137348, -1632076148, -1614799748, -1598650148, -1590100148, -1567286948, -1551565748, -1535837348, -1520116148, -1503782948, -1488666548, -1472333348, -1457216948, -1440883748, -1425767348, -1409434148, -1394317748, -1377984548, -1362263348, -1346534948, -1330813748, -1314480548, -1299364148, -1283030948, -1267914548, -1251581348, -1236464948, -1220131748, -1205015348, -1188682148, -1172960948, -1156627748, -1141511348, -1125178148, -1110061748, -1096921748, -1093728600, -1078612200, -1061670600, -1048973400, -1030221000, -1017523800, -998771400, -986074200, -966717000, -954624600, -935267400, -922570200, -903817800, -891120600, -872368200, -769395600, -765401400, -746044200, -733347000, -714594600, -701897400, -683145000, -670447800, -651695400, -638998200, -619641000, -606943800, -589401000, -576099000, -557951400, -544649400, -526501800, -513199800, -495052200, -481750200, -463602600, -450300600, -431548200, -418246200, -400098600, -386796600, -368649000, -355347000, -337199400, -323897400, -305749800, -289423800, -273695400, -257974200, -242245800, -226524600, -210796200, -195075000, -179346600, -163625400, -147897000, -131571000, -116447400, -100121400, -84393000, -68671800, -52943400, -37222200, -21493800, -5772600, 9955800, 25677000, 41405400, 57731400, 73459800, 89181000, 104909400, 120630600, 136359000, 152080200, 167808600, 183529800, 199258200, 215584200, 230707800, 247033800, 262762200, 278483400, 294211800, 309933000, 325661400, 341382600, 357111000, 372832200, 388560600, 404886600, 420010200, 436336200, 452064600, 467785800, 483514200, 499235400, 514963800, 530685000, 544591860, 562127460, 576041460, 594178260, 607491060, 625631460, 638940660, 657081060, 670995060, 688530660, 702444660, 719980260, 733894260, 752034660, 765343860, 783484260, 796793460, 814933860, 828847860, 846383460, 860297460, 877833060, 891747060, 909282660, 923196660, 941337060, 954646260, 972786660, 986095860, 1004236260, 1018150260, 1035685860, 1049599860, 1067135460, 1081049460, 1099189860, 1112499060, 1130639460, 1143948660, 1162089060, 1173583860, 1194143460 }
     :intvector { -12652, 0, -12652, 3600, -12600, 0, -12600, 3600, -12600, 7200 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010002030203020302030203020302030203030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030204020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "StJohns"
     :intvector { -12600, 2008 }
-    :intvector { 192, 353, 362 }
-  } //Z#192
+    :intvector { 194, 355, 364 }
+  } //Z#194
 ,  /* America/St_Kitts */ :array {
     :intvector { -2147483648, -1825098548 }
     :intvector { -15052, 0, -14400, 0 }
     :bin { "0001" }
-  } //Z#193
+  } //Z#195
 ,  /* America/St_Lucia */ :array {
     :intvector { -2147483648, -1830369360 }
     :intvector { -14640, 0, -14400, 0 }
     :bin { "0001" }
-  } //Z#194
+  } //Z#196
 ,  /* America/St_Thomas */ :array {
     :intvector { -2147483648, -1846266016 }
     :intvector { -15584, 0, -14400, 0 }
     :bin { "0001" }
-    :intvector { 195, 205 }
-  } //Z#195
+    :intvector { 197, 207 }
+  } //Z#197
 ,  /* America/St_Vincent */ :array {
     :intvector { -2147483648, -1830369304 }
     :intvector { -14696, 0, -14400, 0 }
     :bin { "0001" }
-  } //Z#196
+  } //Z#198
 ,  /* America/Swift_Current */ :array {
     :intvector { -2147483648, -2030201320, -1632063600, -1614787200, -880210800, -769395600, -765388800, -747241200, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -400086000, -384364800, -337186800, -321465600, -305737200, -292435200, -273682800, -260985600, 73472400 }
     :intvector { -25880, 0, -25200, 0, -25200, 3600, -21600, 0 }
     :bin { "000102010202010201020102010201020102010201020103" }
-  } //Z#197
+  } //Z#199
 ,  /* America/Tegucigalpa */ :array {
     :intvector { -2147483648, -1538503868, 547020000, 559717200, 578469600, 591166800, 1146981600, 1154926800 }
     :intvector { -21600, 0, -21600, 3600, -20932, 0 }
     :bin { "0200010001000100" }
-  } //Z#198
+  } //Z#200
 ,  /* America/Thule */ :array {
     :intvector { -2147483648, -1686079492, 670399200, 686120400, 701848800, 717570000, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 }
     :intvector { -16508, 0, -14400, 0, -14400, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201020102010201" }
     "Thule"
     :intvector { -14400, 2008 }
-  } //Z#199
+  } //Z#201
 ,  /* America/Thunder_Bay */ :array {
     :intvector { -2147483648, -1893434400, -880218000, -769395600, -765396000, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -21600, 0, -18000, 0, -18000, 3600 }
     :bin { "00010202010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     "Canada"
     :intvector { -18000, 2008 }
-  } //Z#200
+  } //Z#202
 ,  /* America/Tijuana */ :array {
     :intvector { -2147483648, -1514736000, -1451667600, -1343062800, -1234803600, -1222963200, -1207242000, -873820800, -769395600, -761677200, -686073600, -661539600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200 }
     :intvector { -28800, 0, -28800, 3600, -28084, 0, -25200, 0 }
     :bin { "0203000300010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Mexico"
     :intvector { -28800, 2003 }
-    :intvector { 111, 201, 505 }
-  } //Z#201
+    :intvector { 112, 203, 507 }
+  } //Z#203
 ,  /* America/Toronto */ :array {
     :intvector { -2147483648, -1632070800, -1614794400, -1601753400, -1583697600, -1567357200, -1554667200, -1534698000, -1524074400, -1503248400, -1492365600, -1471798800, -1460916000, -1440954000, -1428861600, -1409504400, -1397412000, -1378054800, -1365962400, -1346605200, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1188752400, -1176055200, -1157302800, -1144000800, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -880218000, -769395600, -765396000, -747248400, -733946400, -715806000, -702504000, -684356400, -671054400, -652906800, -634161600, -620845200, -602704800, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -18000, 0, -18000, 3600 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000101010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Canada"
     :intvector { -18000, 2008 }
-    :intvector { 202, 360 }
-  } //Z#202
+    :intvector { 204, 362 }
+  } //Z#204
 ,  /* America/Tortola */ :array {
     :intvector { -2147483648, -1846266092 }
     :intvector { -15508, 0, -14400, 0 }
     :bin { "0001" }
-  } //Z#203
+  } //Z#205
 ,  /* America/Vancouver */ :array {
     :intvector { -2147483648, -1632060000, -1614783600, -880207200, -769395600, -765385200, -747237600, -732726000, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
     :intvector { -28800, 0, -28800, 3600 }
     :bin { "00010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Canada"
     :intvector { -28800, 2008 }
-    :intvector { 204, 363 }
-  } //Z#204
-,  /* America/Virgin */ :int { 195 } //Z#205
+    :intvector { 206, 365 }
+  } //Z#206
+,  /* America/Virgin */ :int { 197 } //Z#207
 ,  /* America/Whitehorse */ :array {
     :intvector { -2147483648, -1632056400, -1615125600, -1596978000, -1583164800, -880203600, -769395600, -765381600, -147884400, -131554800, -110552400, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
     :intvector { -32400, 0, -32400, 3600, -32400, 7200, -28800, 0, -28800, 3600 }
     :bin { "00010001000101000200030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
     "Canada"
     :intvector { -28800, 2008 }
-    :intvector { 206, 365 }
-  } //Z#206
+    :intvector { 208, 367 }
+  } //Z#208
 ,  /* America/Winnipeg */ :array {
     :intvector { -2147483648, -1694368800, -1681671600, -1632067200, -1614790800, -1029686400, -1018198800, -880214400, -769395600, -765392400, -746035200, -732733200, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620755200, -607626000, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -321469200, -305740800, -292438800, -210787200, -198090000, -116438400, -100108800, -84384000, -68659200, -52934400, -37209600, -21484800, -5760000, 9964800, 25689600, 41414400, 57744000, 73468800, 89193600, 104918400, 120643200, 136368000, 152092800, 167817600, 183542400, 199267200, 215596800, 230716800, 247046400, 262771200, 278496000, 294220800, 309945600, 325670400, 341395200, 357120000, 372844800, 388569600, 404899200, 420019200, 436348800, 452073600, 467798400, 483523200, 499248000, 514972800, 530697600, 544608000, 562147200, 576057600, 594201600, 607507200, 625651200, 638956800, 657100800, 671011200, 688550400, 702460800, 720000000, 733910400, 752054400, 765360000, 783504000, 796809600, 814953600, 828864000, 846403200, 860313600, 877852800, 891763200, 909302400, 923212800, 941356800, 954662400, 972806400, 986112000, 1004256000, 1018166400, 1035705600, 1049616000, 1067155200, 1081065600, 1099209600, 1112515200, 1130659200, 1136095200, 1143964800, 1162105200, 1173600000, 1194159600 }
     :intvector { -21600, 0, -21600, 3600 }
     :bin { "00010001000100010100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000001000100" }
     "Canada"
     :intvector { -21600, 2008 }
-    :intvector { 207, 358 }
-  } //Z#207
+    :intvector { 209, 360 }
+  } //Z#209
 ,  /* America/Yakutat */ :array {
     :intvector { -2147483648, -880203600, -769395600, -765381600, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 152100000, 162385200, 183549600, 199278000, 215604000, 230727600, 247053600, 262782000, 278503200, 294231600, 309952800, 325681200, 341402400, 357130800, 372852000, 388580400, 404906400, 420030000, 436356000, 439030800, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
     :intvector { -32400, 0, -32400, 3600 }
     :bin { "0001010001000100010001000100010001000100010001000100010001000100010000010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -32400, 2008 }
-  } //Z#208
+  } //Z#210
 ,  /* America/Yellowknife */ :array {
     :intvector { -2147483648, -1104537600, -880210800, -769395600, -765388800, -147891600, -131562000, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
     :intvector { -25200, 0, -25200, 3600, -25200, 7200, 0, 0 }
     :bin { "030001010002000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Canada"
     :intvector { -25200, 2008 }
-  } //Z#209
+  } //Z#211
 ,  /* Antarctica/Casey */ :array {
     :intvector { -2147483648, -31536000 }
     :intvector { 0, 0, 28800, 0 }
     :bin { "0001" }
-  } //Z#210
+  } //Z#212
 ,  /* Antarctica/Davis */ :array {
     :intvector { -2147483648, -409190400, -163062000, -28857600 }
     :intvector { 0, 0, 25200, 0 }
     :bin { "00010001" }
-  } //Z#211
+  } //Z#213
 ,  /* Antarctica/DumontDUrville */ :array {
     :intvector { -2147483648, -725846400, -566992800, -415497600 }
     :intvector { 0, 0, 36000, 0 }
     :bin { "00010001" }
-  } //Z#212
+  } //Z#214
 ,  /* Antarctica/Mawson */ :array {
     :intvector { -2147483648, -501206400 }
     :intvector { 0, 0, 21600, 0 }
     :bin { "0001" }
-  } //Z#213
+  } //Z#215
 ,  /* Antarctica/McMurdo */ :array {
     :intvector { -2147483648, -441849600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
     :intvector { 0, 0, 43200, 0, 43200, 3600 }
     :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
     "NZAQ"
     :intvector { 43200, 2009 }
-    :intvector { 214, 217 }
-  } //Z#214
+    :intvector { 216, 219 }
+  } //Z#216
 ,  /* Antarctica/Palmer */ :array {
     :intvector { -2147483648, -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400 }
     :intvector { -14400, 0, -14400, 3600, -10800, 0, -10800, 3600, 0, 0 }
     :bin { "04010001000100010001000203020001000100010001000100010001000100010001000100010001000100010001000100010001" }
     "ChileAQ"
     :intvector { -14400, 2001 }
-  } //Z#215
+  } //Z#217
 ,  /* Antarctica/Rothera */ :array {
     :intvector { -2147483648, 218246400 }
     :intvector { -10800, 0, 0, 0 }
     :bin { "0100" }
-  } //Z#216
-,  /* Antarctica/South_Pole */ :int { 214 } //Z#217
+  } //Z#218
+,  /* Antarctica/South_Pole */ :int { 216 } //Z#219
 ,  /* Antarctica/Syowa */ :array {
     :intvector { -2147483648, -407808000 }
     :intvector { 0, 0, 10800, 0 }
     :bin { "0001" }
-  } //Z#218
+  } //Z#220
 ,  /* Antarctica/Vostok */ :array {
     :intvector { -2147483648, -380073600 }
     :intvector { 0, 0, 21600, 0 }
     :bin { "0001" }
-  } //Z#219
-,  /* Arctic/Longyearbyen */ :int { 444 } //Z#220
+  } //Z#221
+,  /* Arctic/Longyearbyen */ :int { 446 } //Z#222
 ,  /* Asia/Aden */ :array {
     :intvector { -2147483648, -631162848 }
     :intvector { 10800, 0, 10848, 0 }
     :bin { "0100" }
-  } //Z#221
+  } //Z#223
 ,  /* Asia/Almaty */ :array {
     :intvector { -2147483648, -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 662666400, 701802000, 717523200, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1110823200 }
     :intvector { 18000, 0, 18468, 0, 21600, 0, 21600, 3600 }
     :bin { "010002030203020302030203020302030203020302030202030203020302030203020302030203020302030203020302030202" }
-  } //Z#222
+  } //Z#224
 ,  /* Asia/Amman */ :array {
     :intvector { -2147483648, -1230776624, 108165600, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 215643600, 231285600, 244501200, 262735200, 275950800, 481154400, 496962000, 512949600, 528670800, 544399200, 560120400, 575848800, 592174800, 610581600, 623624400, 641167200, 655074000, 671839200, 685918800, 702856800, 717973200, 733701600, 749422800, 765151200, 779662800, 797205600, 811116000, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 930780000, 938642400, 954367200, 970092000, 985816800, 1001541600, 1017266400, 1032991200, 1048716000, 1066946400, 1080165600, 1097791200, 1112220000, 1128031200, 1143669600, 1161900000 }
     :intvector { 7200, 0, 7200, 3600, 8624, 0 }
     :bin { "02000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Jordan"
     :intvector { 7200, 2007 }
-  } //Z#223
+  } //Z#225
 ,  /* Asia/Anadyr */ :array {
     :intvector { -2147483648, -1441194596, -1247572800, 354884400, 370692000, 386420400, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701780400, 717501600, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400 }
     :intvector { 39600, 0, 39600, 3600, 42596, 0, 43200, 0, 43200, 3600, 46800, 0, 46800, 3600 }
     :bin { "020305060504030403040304030403040304030403040301000304030403040304030403" }
     "Russia"
     :intvector { 43200, 1997 }
-  } //Z#224
+  } //Z#226
 ,  /* Asia/Aqtau */ :array {
     :intvector { -2147483648, -1441164064, -1247544000, -220942800, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 662670000, 692823600, 701805600, 717526800, 733266000, 748990800, 764715600, 780440400, 796165200, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1110830400 }
     :intvector { 12064, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
     :bin { "00010303050403040304030403040304030403040304030303040304030403020102010201020102010201020102010201020103" }
-  } //Z#225
+  } //Z#227
 ,  /* Asia/Aqtobe */ :array {
     :intvector { -2147483648, -1441165720, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 662670000, 692823600, 701805600, 717526800, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1110826800 }
     :intvector { 13720, 0, 14400, 0, 18000, 0, 18000, 3600, 21600, 0 }
     :bin { "00010203040302030203020302030203020302030203020202030203020302030203020302030203020302030203020302030202" }
-  } //Z#226
+  } //Z#228
 ,  /* Asia/Ashgabat */ :array {
     :intvector { -2147483648, -1441166012, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 688507200, 695772000 }
     :intvector { 14012, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600 }
     :bin { "000103040304030403040304030403040304030403040302010103" }
-    :intvector { 227, 228 }
-  } //Z#227
-,  /* Asia/Ashkhabad */ :int { 227 } //Z#228
+    :intvector { 229, 230 }
+  } //Z#229
+,  /* Asia/Ashkhabad */ :int { 229 } //Z#230
 ,  /* Asia/Baghdad */ :array {
     :intvector { -2147483648, -1641005856, 389048400, 402264000, 417906000, 433800000, 449614800, 465422400, 481150800, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670464000, 686275200, 702086400, 717897600, 733622400, 749433600, 765158400, 780969600, 796694400, 812505600, 828316800, 844128000, 859852800, 875664000, 891388800, 907200000, 922924800, 938736000, 954547200, 970358400, 986083200, 1001894400, 1017619200, 1033430400, 1049155200, 1064966400, 1080777600, 1096588800, 1112313600, 1128124800, 1143849600, 1159660800, 1175385600, 1191196800 }
     :intvector { 10656, 0, 10800, 0, 10800, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
-  } //Z#229
+  } //Z#231
 ,  /* Asia/Bahrain */ :array {
     :intvector { -2147483648, -1577935340, 76190400 }
     :intvector { 10800, 0, 12140, 0, 14400, 0 }
     :bin { "010200" }
-  } //Z#230
+  } //Z#232
 ,  /* Asia/Baku */ :array {
     :intvector { -2147483648, -1441163964, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 683496000, 686098800, 701812800, 717534000, 828234000, 846378000, 852062400, 859680000, 877824000 }
     :intvector { 10800, 0, 10800, 3600, 11964, 0, 14400, 0, 14400, 3600 }
     :bin { "020003040304030403040304030403040304030403040301010001030403030403" }
     "Azer"
     :intvector { 14400, 1998 }
-  } //Z#231
+  } //Z#233
 ,  /* Asia/Bangkok */ :array {
     :intvector { -2147483648, -1570084924 }
     :intvector { 24124, 0, 25200, 0 }
     :bin { "0001" }
-  } //Z#232
+  } //Z#234
 ,  /* Asia/Beirut */ :array {
     :intvector { -2147483648, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1473645600, -1460948400, -399866400, -386650800, -368330400, -355114800, -336794400, -323578800, -305172000, -291956400, -273636000, -260420400, 78012000, 86734800, 105055200, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 212965200, 231285600, 244501200, 262735200, 275950800, 452210400, 466722000, 483746400, 498258000, 515282400, 529794000, 546818400, 561330000, 581119200, 592952400, 610754400, 624488400, 641512800, 656024400, 673048800, 687560400, 704671200, 718146000, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 906843600, 922572000, 941317200 }
     :intvector { 7200, 0, 7200, 3600 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Lebanon"
     :intvector { 7200, 2000 }
-  } //Z#233
+  } //Z#235
 ,  /* Asia/Bishkek */ :array {
     :intvector { -2147483648, -1441169904, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 683582400, 703018800, 717530400, 734468400, 748980000, 765918000, 780429600, 797367600, 811879200, 828817200, 843933600, 859671000, 877811400, 891120600, 909261000, 922570200, 941315400, 954019800, 972765000, 985469400, 1004214600, 1017523800, 1035664200, 1048973400, 1067113800, 1080423000, 1099168200, 1111872600, 1123783200 }
     :intvector { 17904, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
     :bin { "0001030403040304030403040304030403040304030403020102010201020102010201020102010201020102010201020102010203" }
-  } //Z#234
+  } //Z#236
 ,  /* Asia/Brunei */ :array {
     :intvector { -2147483648, -1383464380, -1167636600 }
     :intvector { 27000, 0, 27580, 0, 28800, 0 }
     :bin { "010002" }
-  } //Z#235
-,  /* Asia/Calcutta */ :int { 262 } //Z#236
+  } //Z#237
+,  /* Asia/Calcutta */ :int { 264 } //Z#238
 ,  /* Asia/Choibalsan */ :array {
     :intvector { -2147483648, -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600, 1206889200 }
     :intvector { 25200, 0, 27480, 0, 28800, 0, 32400, 0, 32400, 3600 }
     :bin { "010002040304030403040304030403040304030403040304030403040304030403040304030403040304030403040302" }
-  } //Z#237
+  } //Z#239
 ,  /* Asia/Chongqing */ :array {
     :intvector { -2147483648, -1325487980, 325962000, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 }
     :intvector { 25200, 0, 25580, 0, 28800, 0, 28800, 3600 }
     :bin { "010002030203020302030203020302" }
-    :intvector { 238, 239 }
-  } //Z#238
-,  /* Asia/Chungking */ :int { 238 } //Z#239
+    :intvector { 240, 241 }
+  } //Z#240
+,  /* Asia/Chungking */ :int { 240 } //Z#241
 ,  /* Asia/Colombo */ :array {
     :intvector { -2147483648, -2019705572, -883287000, -862639200, -764051400, 832962600, 846266400, 1145039400 }
     :intvector { 19172, 0, 19800, 0, 19800, 1800, 19800, 3600, 21600, 0, 23400, 0 }
     :bin { "0001020301050401" }
-  } //Z#240
-,  /* Asia/Dacca */ :int { 243 } //Z#241
+  } //Z#242
+,  /* Asia/Dacca */ :int { 245 } //Z#243
 ,  /* Asia/Damascus */ :array {
-    :intvector { -2147483648, -1577931912, -1568592000, -1554080400, -1537142400, -1522630800, -1505692800, -1491181200, -1474243200, -1459126800, -242265600, -228877200, -210556800, -197427600, -178934400, -165718800, -147398400, -134269200, -116467200, -102646800, -84326400, -71110800, -52704000, -39488400, -21168000, -7952400, 10368000, 23583600, 41904000, 55119600, 73526400, 86742000, 105062400, 118278000, 136598400, 149814000, 168134400, 181350000, 199756800, 212972400, 231292800, 241916400, 262828800, 273452400, 418694400, 433810800, 450316800, 465433200, 508896000, 529196400, 541555200, 562633200, 574387200, 594255600, 607305600, 623199600, 638928000, 654649200, 670456800, 686264400, 702684000, 717886800, 733096800, 748904400, 765151200, 780958800, 796687200, 812494800, 828309600, 844117200, 859759200, 875653200, 891208800, 907189200, 922917600, 938725200, 954540000, 970347600, 986076000, 1001883600, 1017612000, 1033419600, 1049148000, 1064955600, 1080770400, 1096578000, 1112306400, 1128114000, 1143842400, 1158872400, 1175205600, 1193950800, 1207260000, 1222808400 }
+    :intvector { -2147483648, -1577931912, -1568592000, -1554080400, -1537142400, -1522630800, -1505692800, -1491181200, -1474243200, -1459126800, -242265600, -228877200, -210556800, -197427600, -178934400, -165718800, -147398400, -134269200, -116467200, -102646800, -84326400, -71110800, -52704000, -39488400, -21168000, -7952400, 10368000, 23583600, 41904000, 55119600, 73526400, 86742000, 105062400, 118278000, 136598400, 149814000, 168134400, 181350000, 199756800, 212972400, 231292800, 241916400, 262828800, 273452400, 418694400, 433810800, 450316800, 465433200, 508896000, 529196400, 541555200, 562633200, 574387200, 594255600, 607305600, 623199600, 638928000, 654649200, 670456800, 686264400, 702684000, 717886800, 733096800, 748904400, 765151200, 780958800, 796687200, 812494800, 828309600, 844117200, 859759200, 875653200, 891208800, 907189200, 922917600, 938725200, 954540000, 970347600, 986076000, 1001883600, 1017612000, 1033419600, 1049148000, 1064955600, 1080770400, 1096578000, 1112306400, 1128114000, 1143842400, 1158872400, 1175205600, 1193950800, 1207260000, 1225486800 }
     :intvector { 7200, 0, 7200, 3600, 8712, 0 }
     :bin { "02000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "Syria"
     :intvector { 7200, 2009 }
-  } //Z#242
+  } //Z#244
 ,  /* Asia/Dhaka */ :array {
     :intvector { -2147483648, -891582800, -872058600, -862637400, -576138600, 38772000 }
     :intvector { 19800, 0, 21200, 0, 21600, 0, 23400, 0 }
     :bin { "010300030202" }
-    :intvector { 241, 243, 346 }
-  } //Z#243
+    :intvector { 243, 245, 348 }
+  } //Z#245
 ,  /* Asia/Dili */ :array {
     :intvector { -2147483648, -1830414140, -879152400, -766054800, 199897200, 969120000 }
     :intvector { 28800, 0, 30140, 0, 32400, 0 }
     :bin { "010002020002" }
-  } //Z#244
+  } //Z#246
 ,  /* Asia/Dubai */ :array {
     :intvector { -2147483648, -1577936472 }
     :intvector { 13272, 0, 14400, 0 }
     :bin { "0001" }
-  } //Z#245
+  } //Z#247
 ,  /* Asia/Dushanbe */ :array {
     :intvector { -2147483648, -1441168512, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 684363600 }
     :intvector { 16512, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
     :bin { "00010304030403040304030403040304030403040304030201" }
-  } //Z#246
+  } //Z#248
 ,  /* Asia/Gaza */ :array {
-    :intvector { -2147483648, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576540000, 589237200, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 820447200, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 915141600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000 }
+    :intvector { -2147483648, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576540000, 589237200, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 820447200, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 915141600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1207000800, 1219878000 }
     :intvector { 7200, 0, 7200, 3600 }
-    :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000001000100010000010001000100010001000100010001000100" }
+    :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010000010001000100000100010001000100010001000100010001000100" }
     "Palestine"
-    :intvector { 7200, 2008 }
-  } //Z#247
+    :intvector { 7200, 2009 }
+  } //Z#249
 ,  /* Asia/Harbin */ :array {
     :intvector { -2147483648, -1325492804, -1194078600, -946800000, -115894800, 325956600, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 }
     :intvector { 28800, 0, 28800, 3600, 30404, 0, 30600, 0, 32400, 0 }
     :bin { "020300040300010001000100010001000100" }
-  } //Z#248
+  } //Z#250
 ,  /* Asia/Ho_Chi_Minh */ :array {
     :intvector { -2147483648, -2005974400, -1855983920, -1819954800, -1220428800 }
     :intvector { 25200, 0, 25580, 0, 25600, 0, 28800, 0 }
     :bin { "0201000300" }
-    :intvector { 249, 287, 598 }
-  } //Z#249
+    :intvector { 251, 289, 600 }
+  } //Z#251
 ,  /* Asia/Hong_Kong */ :array {
     :intvector { -2147483648, -2056692996, -747981000, -728544600, -717049800, -694503000, -683785800, -668064600, -654755400, -636615000, -623305800, -605165400, -591856200, -573715800, -559801800, -542266200, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 135718200, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 295385400, 309292200, 326835000, 340741800 }
     :intvector { 27396, 0, 28800, 0, 28800, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
-    :intvector { 250, 479 }
-  } //Z#250
+    :intvector { 252, 481 }
+  } //Z#252
 ,  /* Asia/Hovd */ :array {
     :intvector { -2147483648, -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800 }
     :intvector { 21600, 0, 21996, 0, 25200, 0, 25200, 3600 }
     :bin { "0100020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
-  } //Z#251
+  } //Z#253
 ,  /* Asia/Irkutsk */ :array {
     :intvector { -2147483648, -1575874640, -1247554800, 354902400, 370710000, 386438400, 402246000, 417974400, 433782000, 449596800, 465328800, 481053600, 496778400, 512503200, 528228000, 543952800, 559677600, 575402400, 591127200, 606852000, 622576800, 638301600, 654631200, 670356000, 686084400, 695761200, 701794800, 717516000, 733255200, 748980000, 764704800, 780429600, 796154400, 811879200, 828208800, 846352800 }
     :intvector { 25040, 0, 25200, 0, 25200, 3600, 28800, 0, 28800, 3600 }
     :bin { "000103040304030403040304030403040304030403040302010304030403040304030403" }
     "Russia"
     :intvector { 28800, 1997 }
-  } //Z#252
-,  /* Asia/Istanbul */ :int { 429 } //Z#253
+  } //Z#254
+,  /* Asia/Istanbul */ :int { 431 } //Z#255
 ,  /* Asia/Jakarta */ :array {
     :intvector { -2147483648, -1451719200, -1172906400, -876641400, -766054800, -683883000, -620812800, -189415800 }
     :intvector { 25200, 0, 25632, 0, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
     :bin { "0102030503040300" }
-  } //Z#254
+  } //Z#256
 ,  /* Asia/Jayapura */ :array {
     :intvector { -2147483648, -1172913768, -799491600, -189423000 }
     :intvector { 32400, 0, 33768, 0, 34200, 0 }
     :bin { "01000200" }
-  } //Z#255
+  } //Z#257
 ,  /* Asia/Jerusalem */ :array {
     :intvector { -2147483648, -1641003640, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -681962400, -673243200, -667962000, -652327200, -636426000, -622087200, -608947200, -591847200, -572486400, -558576000, -542851200, -527731200, -514425600, -490845600, -482986800, -459475200, -451537200, -428551200, -418262400, -400032000, -387428400, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576540000, 589237200, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 826840800, 842821200, 858895200, 874184400, 890344800, 905029200, 923011200, 936313200, 955670400, 970783200, 986770800, 1001282400, 1017356400, 1033941600, 1048806000, 1065132000, 1081292400, 1095804000, 1112313600, 1128812400, 1143763200, 1159657200, 1175212800, 1189897200, 1206662400, 1223161200, 1238112000, 1254006000, 1269561600, 1284246000, 1301616000, 1317510000, 1333065600, 1348354800, 1364515200, 1378594800, 1395964800, 1411858800, 1427414400, 1442703600, 1459468800, 1475967600, 1490918400, 1506207600, 1522368000, 1537052400, 1553817600, 1570316400, 1585267200, 1601161200, 1616716800, 1631401200, 1648771200, 1664665200, 1680220800, 1695510000, 1711670400, 1728169200, 1743120000, 1759014000, 1774569600, 1789858800, 1806019200, 1823122800, 1838073600, 1853362800, 1869523200, 1884207600, 1900972800, 1917471600, 1932422400, 1947711600, 1963872000, 1978556400, 1995926400, 2011820400, 2027376000, 2042060400, 2058825600, 2075324400, 2090275200, 2106169200, 2121724800, 2136409200 }
     :intvector { 7200, 0, 7200, 3600, 7200, 7200, 8440, 0 }
     :bin { "0300010001000100010001000201000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
-    :intvector { 256, 297, 495 }
-  } //Z#256
+    :intvector { 258, 299, 497 }
+  } //Z#258
 ,  /* Asia/Kabul */ :array {
     :intvector { -2147483648, -788932800 }
     :intvector { 14400, 0, 16200, 0 }
     :bin { "0001" }
-  } //Z#257
+  } //Z#259
 ,  /* Asia/Kamchatka */ :array {
     :intvector { -2147483648, -1487759676, -1247569200, 354888000, 370695600, 386424000, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701780400, 717501600, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400 }
     :intvector { 38076, 0, 39600, 0, 39600, 3600, 43200, 0, 43200, 3600 }
     :bin { "000103040304030403040304030403040304030403040302010304030403040304030403" }
     "Russia"
     :intvector { 43200, 1997 }
-  } //Z#258
+  } //Z#260
 ,  /* Asia/Karachi */ :array {
-    :intvector { -2147483648, -1988166492, -862637400, -764145000, -576135000, 38775600, 1018119660, 1033840860, 1212260400, 1220205600 }
+    :intvector { -2147483648, -1988166492, -862637400, -764145000, -576135000, 38775600, 1018119660, 1033840860, 1212260400, 1225476000 }
     :intvector { 16092, 0, 18000, 0, 18000, 3600, 19800, 0, 19800, 3600 }
     :bin { "00030403010102010201" }
-    :intvector { 259, 516 }
-  } //Z#259
+    :intvector { 261, 518 }
+  } //Z#261
 ,  /* Asia/Kashgar */ :array {
     :intvector { -2147483648, -1325480636, -946791000, 325969200, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 }
     :intvector { 18000, 0, 18236, 0, 19800, 0, 28800, 0, 28800, 3600 }
     :bin { "01020003040304030403040304030403" }
-  } //Z#260
+  } //Z#262
 ,  /* Asia/Katmandu */ :array {
     :intvector { -2147483648, -1577943676, 504901800 }
     :intvector { 19800, 0, 20476, 0, 20700, 0 }
     :bin { "010002" }
-  } //Z#261
+  } //Z#263
 ,  /* Asia/Kolkata */ :array {
     :intvector { -2147483648, -891582800, -872058600, -862637400, -764145000 }
     :intvector { 19800, 0, 19800, 3600, 21200, 0, 23400, 0 }
     :bin { "0203000100" }
-    :intvector { 236, 262, 481 }
-  } //Z#262
+    :intvector { 238, 264, 483 }
+  } //Z#264
 ,  /* Asia/Krasnoyarsk */ :array {
     :intvector { -2147483648, -1577513480, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701798400, 717519600, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400 }
     :intvector { 21600, 0, 21600, 3600, 22280, 0, 25200, 0, 25200, 3600 }
     :bin { "020003040304030403040304030403040304030403040301000304030403040304030403" }
     "Russia"
     :intvector { 25200, 1997 }
-  } //Z#263
+  } //Z#265
 ,  /* Asia/Kuala_Lumpur */ :array {
     :intvector { -2147483648, -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 }
     :intvector { 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
     :bin { "0001020304060405" }
-  } //Z#264
+  } //Z#266
 ,  /* Asia/Kuching */ :array {
     :intvector { -2147483648, -1383463280, -1167636600, -1082448000, -1074586800, -1050825600, -1042964400, -1019289600, -1011428400, -987753600, -979892400, -956217600, -948356400, -924595200, -916734000, -893059200, -885198000, -879667200, -767005200, 378662400 }
     :intvector { 26480, 0, 27000, 0, 28800, 0, 28800, 1200, 32400, 0 }
     :bin { "0001020302030203020302030203020302040202" }
-  } //Z#265
+  } //Z#267
 ,  /* Asia/Kuwait */ :array {
     :intvector { -2147483648, -631163516 }
     :intvector { 10800, 0, 11516, 0 }
     :bin { "0100" }
-  } //Z#266
-,  /* Asia/Macao */ :int { 268 } //Z#267
+  } //Z#268
+,  /* Asia/Macao */ :int { 270 } //Z#269
 ,  /* Asia/Macau */ :array {
     :intvector { -2147483648, -1830411260, -277360200, -257405400, -245910600, -225955800, -214473600, -194506200, -182406600, -163056600, -150969600, -131619600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72201600, 87922800, 103651200, 119977200, 135705600, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 261504000, 277225200, 292953600, 309279600, 325008000, 340729200, 945619200 }
     :intvector { 27260, 0, 28800, 0, 28800, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020101" }
-    :intvector { 267, 268 }
-  } //Z#268
+    :intvector { 269, 270 }
+  } //Z#270
 ,  /* Asia/Magadan */ :array {
     :intvector { -2147483648, -1441188192, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701784000, 717505200, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000 }
     :intvector { 36000, 0, 36000, 3600, 36192, 0, 39600, 0, 39600, 3600 }
     :bin { "020003040304030403040304030403040304030403040301000304030403040304030403" }
     "Russia"
     :intvector { 39600, 1997 }
-  } //Z#269
+  } //Z#271
 ,  /* Asia/Makassar */ :array {
     :intvector { -2147483648, -1577951856, -1172908656, -880272000, -766054800 }
     :intvector { 28656, 0, 28800, 0, 32400, 0 }
     :bin { "0000010201" }
-    :intvector { 270, 301 }
-  } //Z#270
+    :intvector { 272, 303 }
+  } //Z#272
 ,  /* Asia/Manila */ :array {
     :intvector { -2147483648, -1046678400, -1038733200, -873273600, -794221200, -496224000, -489315600, 259344000, 275151600 }
     :intvector { 28800, 0, 28800, 3600, 32400, 0 }
     :bin { "000100020001000100" }
-  } //Z#271
+  } //Z#273
 ,  /* Asia/Muscat */ :array {
     :intvector { -2147483648, -1577937260 }
     :intvector { 14060, 0, 14400, 0 }
     :bin { "0001" }
-  } //Z#272
+  } //Z#274
 ,  /* Asia/Nicosia */ :array {
     :intvector { -2147483648, -1518920008, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600 }
     :intvector { 7200, 0, 7200, 3600, 8008, 0 }
     :bin { "02000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EUAsia"
     :intvector { 7200, 2000 }
-    :intvector { 273, 443 }
-  } //Z#273
+    :intvector { 275, 445 }
+  } //Z#275
 ,  /* Asia/Novosibirsk */ :array {
     :intvector { -2147483648, -1579476700, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701798400, 717519600, 733258800, 738086400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000 }
     :intvector { 19900, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
     :bin { "00010304030403040304030403040304030403040304030201030403040201020102010201" }
     "Russia"
     :intvector { 21600, 1997 }
-  } //Z#274
+  } //Z#276
 ,  /* Asia/Omsk */ :array {
     :intvector { -2147483648, -1582088016, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701802000, 717523200, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000 }
     :intvector { 17616, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
     :bin { "000103040304030403040304030403040304030403040302010304030403040304030403" }
     "Russia"
     :intvector { 21600, 1997 }
-  } //Z#275
+  } //Z#277
 ,  /* Asia/Oral */ :array {
     :intvector { -2147483648, -1441164324, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 662673600, 692827200, 701809200, 717530400, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1110830400 }
     :intvector { 12324, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
     :bin { "00010304050403040304030403040304030403020102010101020102010201020102010201020102010201020102010201020103" }
-  } //Z#276
+  } //Z#278
 ,  /* Asia/Phnom_Penh */ :array {
     :intvector { -2147483648, -2005973980, -1855983920, -1819954800, -1220428800 }
     :intvector { 25180, 0, 25200, 0, 25580, 0, 28800, 0 }
     :bin { "0002010301" }
-  } //Z#277
+  } //Z#279
 ,  /* Asia/Pontianak */ :array {
     :intvector { -2147483648, -1946186240, -1172906240, -881220600, -766054800, -683883000, -620812800, -189415800, 567964800 }
     :intvector { 25200, 0, 26240, 0, 27000, 0, 28800, 0, 32400, 0 }
     :bin { "010102040203020300" }
-  } //Z#278
+  } //Z#280
 ,  /* Asia/Pyongyang */ :array {
     :intvector { -2147483648, -2053931400, -1325494800, -1199262600, -498128400, -264931200 }
     :intvector { 28800, 0, 30600, 0, 32400, 0 }
     :bin { "010201020002" }
-  } //Z#279
+  } //Z#281
 ,  /* Asia/Qatar */ :array {
     :intvector { -2147483648, -1577935568, 76190400 }
     :intvector { 10800, 0, 12368, 0, 14400, 0 }
     :bin { "010200" }
-  } //Z#280
+  } //Z#282
 ,  /* Asia/Qyzylorda */ :array {
     :intvector { -2147483648, -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 662670000, 692823600, 695768400, 701802000, 717523200, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1110823200 }
     :intvector { 14400, 0, 15712, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
     :bin { "0100020304030203020302030203020302030203020302020204050405040504050405040504050405040504050405040504050404" }
-  } //Z#281
+  } //Z#283
 ,  /* Asia/Rangoon */ :array {
     :intvector { -2147483648, -1577946276, -873268200, -778410000 }
     :intvector { 23076, 0, 23400, 0, 32400, 0 }
     :bin { "00010201" }
-  } //Z#282
+  } //Z#284
 ,  /* Asia/Riyadh */ :array {
     :intvector { -2147483648, -631163212 }
     :intvector { 10800, 0, 11212, 0 }
     :bin { "0100" }
-  } //Z#283
+  } //Z#285
 ,  /* Asia/Riyadh87 */ :array {
     :intvector { -2147483648, 536489776, 536576206, 536662631, 536749061, 536835486, 536921916, 537008341, 537094766, 537181191, 537267616, 537354041, 537440466, 537526886, 537613311, 537699731, 537786151, 537872571, 537958991, 538045411, 538131831, 538218246, 538304666, 538391081, 538477496, 538563911, 538650326, 538736736, 538823151, 538909561, 538995971, 539082381, 539168791, 539255196, 539341606, 539428011, 539514416, 539600821, 539687226, 539860031, 540378426, 540551221, 540637616, 540724011, 540810406, 540896801, 540983191, 541069586, 541155976, 541242366, 541328756, 541415146, 541501536, 541587926, 541674316, 541760701, 541847091, 541933476, 542019861, 542106251, 542192636, 542279021, 542365406, 542451791, 542538171, 542624556, 542710941, 542797326, 542883706, 542970091, 543056471, 543142856, 543229236, 543315621, 543402001, 543488386, 543574766, 543661146, 543747531, 543833911, 543920291, 544006676, 544093056, 544179441, 544265821, 544352201, 544438586, 544524966, 544611351, 544697731, 544784116, 544870501, 544956881, 545043266, 545129651, 545216031, 545302416, 545388801, 545475186, 545561571, 545647961, 545734346, 545820731, 545907121, 545993506, 546079896, 546166281, 546252671, 546339061, 546425451, 546511841, 546598231, 546684621, 546771011, 546857406, 546943796, 547030191, 547116586, 547202981, 547289376, 547375771, 547462166, 547548561, 547721356, 548412561, 548585366, 548671771, 548758176, 548844581, 548930986, 549017391, 549103796, 549190206, 549276611, 549363021, 549449426, 549535836, 549622246, 549708656, 549795066, 549881476, 549967886, 550054296, 550140706, 550227121, 550313531, 550399946, 550486356, 550572766, 550659181, 550745591, 550832006, 550918421, 551004831, 551091246, 551177656, 551264071, 551350486, 551436896, 551523311, 551609721, 551696136, 551782546, 551868961, 551955371, 552041786, 552128196, 552214606, 552301021, 552387431, 552473841, 552560251, 552646661, 552733071, 552819481, 552905891, 552992296, 553078706, 553165116, 553251521, 553337926, 553424336, 553510741, 553597146, 553683551, 553856356, 553942761, 554201966, 554547561, 554806756, 554893151, 554979546, 555065941, 555152336, 555238731, 555325126, 555411516, 555497911, 555584301, 555670691, 555757081, 555843471, 555929861, 556016251, 556102641, 556189026, 556275416, 556361801, 556448186, 556534571, 556620956, 556707341, 556793726, 556880111, 556966496, 557052876, 557139261, 557225641, 557312026, 557398406, 557484786, 557571166, 557657551, 557743931, 557830311, 557916691, 558003071, 558089451, 558175826, 558262206, 558348586, 558434966, 558521346, 558607721, 558694101, 558780481, 558866861, 558953236, 559039616, 559125996, 559212371, 559298751, 559385131, 559471511, 559557891, 559644271, 559730646, 559817026, 559903406, 559989786, 560076166, 560162551, 560248931, 560335311, 560421691, 560508076, 560594456, 560680841, 560767221, 560853606, 560939991, 561026376, 561112761, 561199146, 561285531, 561371921, 561458306, 561544696, 561631081, 561717471, 561803861, 561890251, 561976641, 562063036, 562149426, 562235821, 562322211, 562408606, 562495001, 562667796, 562840591, 563186196, 563359001, 563445406, 563531811, 563618216, 563704621, 563791031, 563877436, 563963846, 564050256, 564136666, 564223081, 564309491, 564395906, 564482321, 564568736, 564655151, 564741566, 564827986, 564914406, 565000821, 565087241, 565173661, 565260086, 565346506, 565432926, 565519351, 565605776, 565692201, 565778626, 565865051, 565951476, 566037901, 566124326, 566210756, 566297181, 566383611, 566470041, 566556466, 566642896, 566729326, 566815756, 566902186, 566988616, 567075046, 567161476, 567247906, 567334336, 567420766, 567507196, 567593621, 567680051, 567766481, 567852911, 567939341, 567982541 }
     :intvector { 11224, -855, 11224, -850, 11224, -845, 11224, -840, 11224, -835, 11224, -830, 11224, -825, 11224, -820, 11224, -815, 11224, -810, 11224, -805, 11224, -800, 11224, -795, 11224, -790, 11224, -785, 11224, -780, 11224, -775, 11224, -770, 11224, -760, 11224, -750, 11224, -740, 11224, -735, 11224, -725, 11224, -720, 11224, -715, 11224, -705, 11224, -700, 11224, -690, 11224, -685, 11224, -675, 11224, -670, 11224, -660, 11224, -655, 11224, -645, 11224, -635, 11224, -630, 11224, -615, 11224, -595, 11224, -580, 11224, -575, 11224, -565, 11224, -555, 11224, -550, 11224, -535, 11224, -530, 11224, -515, 11224, -510, 11224, -495, 11224, -490, 11224, -480, 11224, -465, 11224, -460, 11224, -445, 11224, -440, 11224, -425, 11224, -415, 11224, -410, 11224, -390, 11224, -385, 11224, -380, 11224, -375, 11224, -370, 11224, -365, 11224, -360, 11224, -355, 11224, -350, 11224, -345, 11224, -340, 11224, -335, 11224, -330, 11224, -325, 11224, -320, 11224, -315, 11224, -310, 11224, -305, 11224, -300, 11224, -295, 11224, -285, 11224, -280, 11224, -275, 11224, -265, 11224, -255, 11224, -250, 11224, -245, 11224, -240, 11224, -230, 11224, -225, 11224, -220, 11224, -210, 11224, -200, 11224, -195, 11224, -190, 11224, -185, 11224, -180, 11224, -175, 11224, -170, 11224, -165, 11224, -160, 11224, -155, 11224, -150, 11224, -145, 11224, -140, 11224, -135, 11224, -125, 11224, -120, 11224, -110, 11224, -105, 11224, -100, 11224, -95, 11224, -90, 11224, -85, 11224, -80, 11224, -75, 11224, -70, 11224, -65, 11224, -55, 11224, -50, 11224, -45, 11224, -40, 11224, -30, 11224, -25, 11224, -20, 11224, -15, 11224, -10, 11224, -5, 11224, 0, 11224, 5, 11224, 10, 11224, 15, 11224, 20, 11224, 25, 11224, 30, 11224, 40, 11224, 45, 11224, 55, 11224, 65, 11224, 70, 11224, 80, 11224, 85, 11224, 90, 11224, 95, 11224, 100, 11224, 105, 11224, 110, 11224, 115, 11224, 120, 11224, 125, 11224, 130, 11224, 135, 11224, 140, 11224, 145, 11224, 150, 11224, 155, 11224, 160, 11224, 165, 11224, 170, 11224, 180, 11224, 185, 11224, 190, 11224, 195, 11224, 200, 11224, 205, 11224, 210, 11224, 215, 11224, 220, 11224, 230, 11224, 250, 11224, 255, 11224, 275, 11224, 280, 11224, 295, 11224, 310, 11224, 315, 11224, 335, 11224, 340, 11224, 360, 11224, 365, 11224, 380, 11224, 395, 11224, 405, 11224, 420, 11224, 425, 11224, 445, 11224, 450, 11224, 465, 11224, 475, 11224, 485, 11224, 500, 11224, 505, 11224, 525, 11224, 530, 11224, 550, 11224, 570, 11224, 575, 11224, 590, 11224, 600, 11224, 610, 11224, 625, 11224, 645, 11224, 650, 11224, 665, 11224, 670, 11224, 685, 11224, 690, 11224, 700, 11224, 715, 11224, 720, 11224, 735, 11224, 755, 11224, 770, 11224, 785, 11224, 790, 11224, 800, 11224, 810, 11224, 815, 11224, 825, 11224, 830, 11224, 840, 11224, 845, 11224, 855, 11224, 870, 11224, 880, 11224, 885, 11224, 895, 11224, 905, 11224, 910, 11224, 915, 11224, 920, 11224, 925, 11224, 930, 11224, 935, 11224, 940, 11224, 945, 11224, 950, 11224, 955, 11224, 960, 11224, 965, 11224, 970, 11224, 975, 11224, 980, 11224, 985 }
     :bin { "7d5955514d49433e39373532302e2b2927252422201e1b1917151312100e0c0a080705040302010001020304050608090b0d0f1112131416181a1c1d1f2123242526282a2c2d2f3133343638393d4044484b4e505356585b5e6265676a6d707376787b7e8083858688898c8e90929496989a9b9c9d9e9fa0a1a2a3a4a3a2a1a09f9e9d9c9b9a98979593918f8d8b8988868583817f7c7a777573716f6c69686664615f5c5a5857555351504f4d4c4a4847454342413f3e3d3c3b3a393a3b3c3d3e3f4041434446484a4c4d4f50525456585a5d606366686b6e7274777b7f8285878a8e92979b9ea2a5a7a8aaacaeafb1b3b5b6b8babcbebfc0c2c4c5c6c8cacccecfd0d1d2d4d6d8dadbdcdddfe0e2e4e6e7e9eaecedeeeff0efeeedecebeae8e7e5e3e1dfdedcdbd9d7d5d3d1d0cfcdcbc9c7c5c3c1bfbdbbb9b7b4b2b0adaba9a6a49e99938d88847f7975706a66607d" }
-    :intvector { 284, 508 }
-  } //Z#284
+    :intvector { 286, 510 }
+  } //Z#286
 ,  /* Asia/Riyadh88 */ :array {
     :intvector { -2147483648, 568025771, 568112196, 568198626, 568285056, 568371481, 568457906, 568544336, 568630761, 568717186, 568803611, 568890036, 568976461, 569062881, 569149306, 569235726, 569322146, 569408566, 569494986, 569581406, 569667826, 569754241, 569840661, 569927076, 570013491, 570099906, 570186321, 570272736, 570359146, 570445556, 570531966, 570618376, 570704786, 570791196, 570877601, 570964011, 571050416, 571136821, 571223226, 571396031, 571914426, 572087221, 572173616, 572260011, 572346406, 572432801, 572519196, 572605586, 572691976, 572778371, 572864761, 572951151, 573037541, 573123926, 573210316, 573296706, 573383091, 573469481, 573555866, 573642251, 573728636, 573815021, 573901406, 573987791, 574074176, 574160561, 574246946, 574333326, 574419711, 574506096, 574592476, 574678861, 574765241, 574851626, 574938006, 575024386, 575110771, 575197151, 575283536, 575369916, 575456296, 575542681, 575629061, 575715441, 575801826, 575888206, 575974591, 576060971, 576147356, 576233736, 576320121, 576406501, 576492886, 576579271, 576665651, 576752036, 576838421, 576924806, 577011191, 577097576, 577183961, 577270346, 577356736, 577443121, 577529511, 577615896, 577702286, 577788671, 577875061, 577961451, 578047841, 578134231, 578220626, 578307016, 578393406, 578479801, 578566191, 578652586, 578738981, 578825376, 578911771, 578998166, 579084561, 579257356, 579948561, 580121366, 580207771, 580294176, 580380581, 580466986, 580553391, 580639796, 580726201, 580812611, 580899016, 580985426, 581071836, 581158246, 581244651, 581331061, 581417471, 581503886, 581590296, 581676706, 581763116, 581849531, 581935941, 582022351, 582108766, 582195176, 582281591, 582368001, 582454416, 582540831, 582627241, 582713656, 582800066, 582886481, 582972896, 583059306, 583145721, 583232131, 583318546, 583404956, 583491371, 583577781, 583664196, 583750606, 583837016, 583923426, 584009841, 584096251, 584182661, 584269071, 584355481, 584441886, 584528296, 584614706, 584701111, 584787521, 584873926, 584960331, 585046736, 585133141, 585219546, 585305951, 585392356, 585478761, 585737966, 586169961, 586342756, 586429151, 586601946, 586688341, 586774731, 586861126, 586947521, 587033911, 587120301, 587206696, 587293086, 587379476, 587465866, 587552251, 587638641, 587725031, 587811416, 587897806, 587984191, 588070576, 588156961, 588243346, 588329731, 588416116, 588502496, 588588881, 588675266, 588761646, 588848026, 588934411, 589020791, 589107171, 589193551, 589279936, 589366316, 589452696, 589539076, 589625456, 589711831, 589798211, 589884591, 589970971, 590057351, 590143726, 590230106, 590316486, 590402866, 590489241, 590575621, 590662001, 590748381, 590834756, 590921136, 591007516, 591093896, 591180276, 591266651, 591353031, 591439411, 591525791, 591612171, 591698551, 591784936, 591871316, 591957696, 592044081, 592130461, 592216846, 592303226, 592389611, 592475996, 592562381, 592648766, 592735151, 592821536, 592907921, 592994311, 593080696, 593167086, 593253476, 593339861, 593426256, 593512646, 593599036, 593685426, 593771821, 593858216, 593944611, 594031006, 594117401, 594203796, 594376591, 594722196, 594895001, 595067806, 595154216, 595240621, 595327026, 595413436, 595499846, 595586256, 595672666, 595759076, 595845491, 595931901, 596018316, 596104731, 596191146, 596277566, 596363981, 596450401, 596536816, 596623236, 596709656, 596796081, 596882501, 596968921, 597055346, 597141771, 597228191, 597314616, 597401041, 597487471, 597573896, 597660321, 597746751, 597833176, 597919606, 598006031, 598092461, 598178891, 598265321, 598351751, 598438176, 598524606, 598611036, 598697466, 598783896, 598870326, 598956756, 599043186, 599129616, 599216046, 599302476, 599388906, 599475331, 599561761, 599604961 }
     :intvector { 11224, -855, 11224, -850, 11224, -845, 11224, -840, 11224, -835, 11224, -830, 11224, -825, 11224, -820, 11224, -810, 11224, -800, 11224, -795, 11224, -790, 11224, -785, 11224, -780, 11224, -775, 11224, -770, 11224, -765, 11224, -760, 11224, -750, 11224, -745, 11224, -740, 11224, -730, 11224, -715, 11224, -705, 11224, -700, 11224, -690, 11224, -685, 11224, -675, 11224, -665, 11224, -660, 11224, -650, 11224, -645, 11224, -630, 11224, -615, 11224, -610, 11224, -600, 11224, -590, 11224, -585, 11224, -570, 11224, -550, 11224, -535, 11224, -530, 11224, -520, 11224, -505, 11224, -500, 11224, -485, 11224, -465, 11224, -460, 11224, -450, 11224, -435, 11224, -430, 11224, -410, 11224, -395, 11224, -390, 11224, -385, 11224, -380, 11224, -375, 11224, -370, 11224, -365, 11224, -360, 11224, -355, 11224, -350, 11224, -345, 11224, -340, 11224, -335, 11224, -330, 11224, -325, 11224, -320, 11224, -310, 11224, -305, 11224, -300, 11224, -295, 11224, -290, 11224, -285, 11224, -280, 11224, -275, 11224, -265, 11224, -255, 11224, -250, 11224, -240, 11224, -230, 11224, -220, 11224, -215, 11224, -205, 11224, -200, 11224, -195, 11224, -185, 11224, -180, 11224, -170, 11224, -160, 11224, -155, 11224, -145, 11224, -140, 11224, -130, 11224, -125, 11224, -120, 11224, -110, 11224, -105, 11224, -100, 11224, -95, 11224, -90, 11224, -80, 11224, -75, 11224, -70, 11224, -65, 11224, -60, 11224, -55, 11224, -50, 11224, -45, 11224, -40, 11224, -35, 11224, -30, 11224, -25, 11224, -15, 11224, -10, 11224, 0, 11224, 5, 11224, 10, 11224, 15, 11224, 20, 11224, 25, 11224, 30, 11224, 35, 11224, 40, 11224, 45, 11224, 50, 11224, 55, 11224, 60, 11224, 65, 11224, 70, 11224, 80, 11224, 90, 11224, 100, 11224, 105, 11224, 110, 11224, 115, 11224, 120, 11224, 125, 11224, 130, 11224, 135, 11224, 140, 11224, 145, 11224, 150, 11224, 160, 11224, 165, 11224, 170, 11224, 175, 11224, 180, 11224, 185, 11224, 190, 11224, 195, 11224, 200, 11224, 205, 11224, 210, 11224, 215, 11224, 220, 11224, 225, 11224, 250, 11224, 255, 11224, 270, 11224, 285, 11224, 290, 11224, 310, 11224, 315, 11224, 335, 11224, 345, 11224, 355, 11224, 370, 11224, 375, 11224, 395, 11224, 400, 11224, 420, 11224, 425, 11224, 440, 11224, 455, 11224, 460, 11224, 480, 11224, 500, 11224, 505, 11224, 525, 11224, 535, 11224, 545, 11224, 560, 11224, 565, 11224, 585, 11224, 605, 11224, 625, 11224, 630, 11224, 640, 11224, 655, 11224, 660, 11224, 675, 11224, 680, 11224, 695, 11224, 715, 11224, 720, 11224, 730, 11224, 740, 11224, 750, 11224, 760, 11224, 765, 11224, 775, 11224, 780, 11224, 795, 11224, 810, 11224, 825, 11224, 830, 11224, 840, 11224, 845, 11224, 855, 11224, 860, 11224, 865, 11224, 875, 11224, 880, 11224, 885, 11224, 890, 11224, 900, 11224, 910, 11224, 915, 11224, 920, 11224, 930, 11224, 940, 11224, 950, 11224, 955, 11224, 960, 11224, 965, 11224, 970, 11224, 975, 11224, 980, 11224, 985 }
     :bin { "7355514e4a45413b3633312f2d2b2927262422201e1c1a18161513110f0d0b0908070604030201000102030405060708090a0c0e101214151617191b1d1f202123252627282a2c2d2e30323334383b3f4345494c4e50525557595b5e606366696c6f717376797b7e8082838587898b8d8e8f91929495969798999a9b9a9998979695949392908f8e8c8a8987858382817f7c7a78757371706d6a686564615f5d5b5a5857555351504f4e4c4b494745444341403e3d3c3b3a3938373635363738393a3c3d3e4042434446484b4c4d4f50525456585a5c5f6164676b6e7174787b7f8284888d9094989c9d9fa1a2a4a6a8a9abadafb0b1b3b5b7b8b9babcbec0c1c2c4c6c8cacbcccdcfd1d3d5d7d8dadbdcdddedfe0e1e2e3e4e5e4e3e2e0dfdedddcdbd9d8d6d4d2d0cecccbc9c7c5c3c1bfbdbbb9b8b6b4b2b0aeacaaa7a5a3a09e9c97918c86827d77726d67625d5a5673" }
-    :intvector { 285, 509 }
-  } //Z#285
+    :intvector { 287, 511 }
+  } //Z#287
 ,  /* Asia/Riyadh89 */ :array {
     :intvector { -2147483648, 599648191, 599734621, 599821046, 599907476, 599993901, 600080326, 600166751, 600253181, 600339606, 600426031, 600512451, 600598876, 600685301, 600771721, 600858141, 600944561, 601030981, 601117401, 601203821, 601290241, 601376656, 601463071, 601549491, 601635906, 601722316, 601808731, 601895146, 601981556, 602067966, 602154376, 602240786, 602327196, 602413601, 602500011, 602586416, 602672821, 602759226, 602932031, 603104836, 603364031, 603536826, 603709621, 603796016, 603882411, 603968806, 604055196, 604141591, 604227981, 604314371, 604400761, 604487151, 604573541, 604659931, 604746321, 604832706, 604919096, 605005481, 605091871, 605178256, 605264641, 605351026, 605437411, 605523796, 605610181, 605696566, 605782946, 605869331, 605955716, 606042096, 606128481, 606214861, 606301246, 606387626, 606474011, 606560391, 606646771, 606733156, 606819536, 606905916, 606992301, 607078681, 607165066, 607251446, 607337826, 607424211, 607510591, 607596976, 607683356, 607769741, 607856121, 607942506, 608028886, 608115271, 608201656, 608288041, 608374426, 608460811, 608547196, 608633581, 608719966, 608806351, 608892736, 608979126, 609065511, 609151901, 609238286, 609324676, 609411066, 609497456, 609583846, 609670236, 609756626, 609843016, 609929411, 610015801, 610102196, 610188586, 610274981, 610361376, 610447771, 610534166, 610706961, 610879756, 611484561, 611657366, 611743771, 611916576, 612002981, 612089391, 612175796, 612262201, 612348611, 612435016, 612521426, 612607831, 612694241, 612780651, 612867061, 612953471, 613039881, 613126291, 613212701, 613299116, 613385526, 613471936, 613558351, 613644761, 613731176, 613817586, 613904001, 613990411, 614076826, 614163241, 614249651, 614336066, 614422476, 614508891, 614595306, 614681716, 614768131, 614854541, 614940956, 615027366, 615113781, 615200191, 615286601, 615373016, 615459426, 615545836, 615632246, 615718656, 615805066, 615891476, 615977886, 616064296, 616150701, 616237111, 616323516, 616409926, 616496331, 616582736, 616669141, 616755546, 616841951, 616928356, 617101161, 617273966, 617705961, 617878756, 618051551, 618137946, 618224341, 618310736, 618397126, 618483521, 618569911, 618656306, 618742696, 618829086, 618915476, 619001866, 619088256, 619174646, 619261031, 619347421, 619433806, 619520191, 619606581, 619692966, 619779351, 619865736, 619952116, 620038501, 620124886, 620211266, 620297651, 620384031, 620470416, 620556796, 620643176, 620729561, 620815941, 620902321, 620988701, 621075081, 621161461, 621247841, 621334216, 621420596, 621506976, 621593356, 621679736, 621766111, 621852491, 621938871, 622025251, 622111626, 622198006, 622284386, 622370766, 622457141, 622543521, 622629901, 622716281, 622802661, 622889041, 622975416, 623061796, 623148176, 623234561, 623320941, 623407321, 623493701, 623580086, 623666466, 623752846, 623839231, 623925616, 624011996, 624098381, 624184766, 624271151, 624357536, 624443926, 624530311, 624616696, 624703086, 624789476, 624875866, 624962256, 625048646, 625135036, 625221426, 625307821, 625394216, 625480606, 625567001, 625653396, 625826191, 626085386, 626171791, 626430996, 626517401, 626603806, 626690211, 626776616, 626863021, 626949431, 627035841, 627122251, 627208661, 627295071, 627381486, 627467896, 627554311, 627640726, 627727141, 627813561, 627899976, 627986396, 628072816, 628159231, 628245651, 628332076, 628418496, 628504916, 628591341, 628677766, 628764191, 628850611, 628937036, 629023466, 629109891, 629196316, 629282746, 629369171, 629455601, 629542026, 629628456, 629714886, 629801316, 629887741, 629974171, 630060601, 630147031, 630233461, 630319891, 630406321, 630492751, 630579181, 630665611, 630752041, 630838471, 630924896, 631011326, 631097756, 631140956 }
     :intvector { 11224, -860, 11224, -855, 11224, -850, 11224, -845, 11224, -840, 11224, -835, 11224, -830, 11224, -825, 11224, -820, 11224, -815, 11224, -810, 11224, -805, 11224, -800, 11224, -795, 11224, -790, 11224, -785, 11224, -780, 11224, -775, 11224, -770, 11224, -765, 11224, -755, 11224, -745, 11224, -740, 11224, -730, 11224, -720, 11224, -715, 11224, -705, 11224, -695, 11224, -680, 11224, -665, 11224, -650, 11224, -645, 11224, -635, 11224, -625, 11224, -620, 11224, -605, 11224, -590, 11224, -585, 11224, -570, 11224, -565, 11224, -555, 11224, -545, 11224, -540, 11224, -525, 11224, -520, 11224, -505, 11224, -500, 11224, -485, 11224, -475, 11224, -470, 11224, -455, 11224, -450, 11224, -435, 11224, -430, 11224, -415, 11224, -405, 11224, -395, 11224, -390, 11224, -385, 11224, -380, 11224, -375, 11224, -370, 11224, -365, 11224, -360, 11224, -355, 11224, -350, 11224, -345, 11224, -340, 11224, -335, 11224, -330, 11224, -325, 11224, -320, 11224, -310, 11224, -305, 11224, -300, 11224, -290, 11224, -280, 11224, -270, 11224, -260, 11224, -255, 11224, -250, 11224, -245, 11224, -240, 11224, -235, 11224, -230, 11224, -225, 11224, -215, 11224, -205, 11224, -200, 11224, -190, 11224, -180, 11224, -175, 11224, -165, 11224, -160, 11224, -155, 11224, -150, 11224, -145, 11224, -140, 11224, -130, 11224, -125, 11224, -120, 11224, -115, 11224, -110, 11224, -100, 11224, -95, 11224, -90, 11224, -80, 11224, -75, 11224, -65, 11224, -55, 11224, -50, 11224, -40, 11224, -35, 11224, -25, 11224, -20, 11224, -10, 11224, -5, 11224, 0, 11224, 10, 11224, 15, 11224, 25, 11224, 35, 11224, 40, 11224, 50, 11224, 55, 11224, 60, 11224, 65, 11224, 75, 11224, 85, 11224, 90, 11224, 95, 11224, 100, 11224, 105, 11224, 110, 11224, 115, 11224, 120, 11224, 125, 11224, 130, 11224, 135, 11224, 140, 11224, 145, 11224, 150, 11224, 160, 11224, 165, 11224, 175, 11224, 180, 11224, 185, 11224, 190, 11224, 195, 11224, 200, 11224, 205, 11224, 210, 11224, 215, 11224, 220, 11224, 235, 11224, 240, 11224, 260, 11224, 265, 11224, 285, 11224, 290, 11224, 305, 11224, 320, 11224, 325, 11224, 350, 11224, 370, 11224, 375, 11224, 390, 11224, 405, 11224, 410, 11224, 430, 11224, 435, 11224, 455, 11224, 460, 11224, 475, 11224, 485, 11224, 495, 11224, 510, 11224, 515, 11224, 535, 11224, 540, 11224, 560, 11224, 565, 11224, 580, 11224, 585, 11224, 600, 11224, 610, 11224, 615, 11224, 635, 11224, 655, 11224, 660, 11224, 675, 11224, 680, 11224, 690, 11224, 700, 11224, 710, 11224, 725, 11224, 730, 11224, 745, 11224, 760, 11224, 780, 11224, 795, 11224, 800, 11224, 810, 11224, 815, 11224, 825, 11224, 835, 11224, 840, 11224, 850, 11224, 865, 11224, 880, 11224, 890, 11224, 900, 11224, 905, 11224, 910, 11224, 915, 11224, 920, 11224, 925, 11224, 930, 11224, 935, 11224, 940, 11224, 945, 11224, 950, 11224, 955, 11224, 960, 11224, 965, 11224, 970, 11224, 975, 11224, 980, 11224, 985, 11224, 990 }
     :bin { "7556514d4a46413c373532302e2b29272523211f1d1c1b1917161412100e0c0a080705040302010001020304050608090b0d0f1113141517181a1b1c1d1e2022232426282a2c2d2f31333436383b3f4346494b4d505356585a5c606266686a6c6e70727476787a7b7e7f81838587898b8d8e8f90919394959697989998979695949291908f8e8d8c8a88868482807f7d7b7a7877757371706e6c6b69676562615e5c5a5957565552504e4d4c4b4a484746444341403f3e3d3c3b3a393a3b3c3d3e3f4142444547484a4b4c4d4f51545657595b5d616366696b6d6f727577797c7f82868a8e9195999b9d9ea0a2a3a4a6a8aaabadafb1b2b4b6b8babbbcbec0c2c4c5c6c7c8cacccecfd0d1d2d3d5d7d9dbdddedfe1e2e3e4e5e4e3e2e1e0dfdedcdad8d6d4d2d1d0cfcdcbc9c7c6c5c3c1bfbdbbb9b7b5b3b0aeaca9a7a5a3a19f9c9a96908c86807c7874706c68645f5a75" }
-    :intvector { 286, 510 }
-  } //Z#286
-,  /* Asia/Saigon */ :int { 249 } //Z#287
+    :intvector { 288, 512 }
+  } //Z#288
+,  /* Asia/Saigon */ :int { 251 } //Z#289
 ,  /* Asia/Sakhalin */ :array {
     :intvector { -2147483648, -2031039048, -1009875600, -768560400, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701784000, 717505200, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877795200 }
     :intvector { 32400, 0, 34248, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600 }
     :bin { "010000040504050405040504050405040504050405040504030204050405040504050405040302" }
     "Russia"
     :intvector { 36000, 1998 }
-  } //Z#288
+  } //Z#290
 ,  /* Asia/Samarkand */ :array {
     :intvector { -2147483648, -1441168032, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 683661600, 686091600, 694206000 }
     :intvector { 14400, 0, 16032, 0, 18000, 0, 18000, 3600, 21600, 0 }
     :bin { "010002030403020302030203020302030203020302030203030202" }
-  } //Z#289
+  } //Z#291
 ,  /* Asia/Seoul */ :array {
     :intvector { -2147483648, -2053931400, -1325494800, -1199262600, -498128400, -303984000, -293533200, -264931200, -39515400, 547570800, 560872800, 579020400, 592322400 }
     :intvector { 28800, 0, 28800, 3600, 30600, 0, 32400, 0, 32400, 3600 }
     :bin { "02030203000100020304030403" }
-    :intvector { 290, 565 }
-  } //Z#290
+    :intvector { 292, 567 }
+  } //Z#292
 ,  /* Asia/Shanghai */ :array {
     :intvector { -2147483648, -1325491552, -933494400, -923130000, -908784000, -891594000, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 }
     :intvector { 28800, 0, 28800, 3600, 29152, 0 }
     :bin { "020001000100010001000100010001000100" }
-    :intvector { 291, 356, 518 }
-  } //Z#291
+    :intvector { 293, 358, 520 }
+  } //Z#293
 ,  /* Asia/Singapore */ :array {
     :intvector { -2147483648, -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, -138785400, 378664200 }
     :intvector { 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
     :bin { "000102030406040405" }
-    :intvector { 292, 567 }
-  } //Z#292
+    :intvector { 294, 569 }
+  } //Z#294
 ,  /* Asia/Taipei */ :array {
     :intvector { -2147483648, -778579200, -765363600, -747043200, -733827600, -715507200, -702291600, -683884800, -670669200, -652348800, -639133200, -620812800, -607597200, -589276800, -576061200, -562924800, -541760400, -528710400, -510224400, -497174400, -478688400, -465638400, -449830800, -434016000, -418208400, -402480000, -386672400, -370944000, -355136400, -339408000, -323600400, -302515200, -291978000, -270979200, -260442000, 133977600, 149785200, 165513600, 181321200, 331142400, 339087600 }
     :intvector { 28800, 0, 28800, 3600 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
-    :intvector { 293, 564 }
-  } //Z#293
+    :intvector { 295, 566 }
+  } //Z#295
 ,  /* Asia/Tashkent */ :array {
     :intvector { -2147483648, -1441168632, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 683661600, 686091600, 694206000 }
     :intvector { 16632, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
     :bin { "000103040304030403040304030403040304030403040302020101" }
-  } //Z#294
+  } //Z#296
 ,  /* Asia/Tbilisi */ :array {
     :intvector { -2147483648, -1441162756, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 671140800, 686098800, 694213200, 701816400, 717537600, 733266000, 748987200, 764715600, 780436800, 796161600, 811882800, 828216000, 859662000, 877806000, 891115200, 909255600, 922564800, 941310000, 954014400, 972759600, 985464000, 1004209200, 1017518400, 1035658800, 1048968000, 1067108400, 1080417600, 1088276400, 1099177200, 1111878000 }
     :intvector { 10756, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
     :bin { "000103040304030403040304030403040304030403040302020101020102010203040304040304030403040304030403040304020103" }
-  } //Z#295
+  } //Z#297
 ,  /* Asia/Tehran */ :array {
     :intvector { -2147483648, -1704165944, -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800, 2121193800, 2137087800 }
     :intvector { 12344, 0, 12600, 0, 12600, 3600, 14400, 0, 14400, 3600 }
     :bin { "0000010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
-    :intvector { 296, 494 }
-  } //Z#296
-,  /* Asia/Tel_Aviv */ :int { 256 } //Z#297
-,  /* Asia/Thimbu */ :int { 299 } //Z#298
+    :intvector { 298, 496 }
+  } //Z#298
+,  /* Asia/Tel_Aviv */ :int { 258 } //Z#299
+,  /* Asia/Thimbu */ :int { 301 } //Z#300
 ,  /* Asia/Thimphu */ :array {
     :intvector { -2147483648, -706341516, 560025000 }
     :intvector { 19800, 0, 21516, 0, 21600, 0 }
     :bin { "010002" }
-    :intvector { 298, 299 }
-  } //Z#299
+    :intvector { 300, 301 }
+  } //Z#301
 ,  /* Asia/Tokyo */ :array {
     :intvector { -2147483648, -1009875600, -683794800, -672393600, -654764400, -640944000, -620290800, -609494400, -588841200, -578044800 }
     :intvector { 32400, 0, 32400, 3600 }
     :bin { "00000100010001000100" }
-    :intvector { 300, 496, 498 }
-  } //Z#300
-,  /* Asia/Ujung_Pandang */ :int { 270 } //Z#301
+    :intvector { 302, 498, 500 }
+  } //Z#302
+,  /* Asia/Ujung_Pandang */ :int { 272 } //Z#303
 ,  /* Asia/Ulaanbaatar */ :array {
     :intvector { -2147483648, -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200 }
     :intvector { 25200, 0, 25652, 0, 28800, 0, 28800, 3600 }
     :bin { "0100020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
-    :intvector { 302, 303 }
-  } //Z#302
-,  /* Asia/Ulan_Bator */ :int { 302 } //Z#303
+    :intvector { 304, 305 }
+  } //Z#304
+,  /* Asia/Ulan_Bator */ :int { 304 } //Z#305
 ,  /* Asia/Urumqi */ :array {
     :intvector { -2147483648, -1325483420, 325965600, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 }
     :intvector { 21020, 0, 21600, 0, 28800, 0, 28800, 3600 }
     :bin { "000102030203020302030203020302" }
-  } //Z#304
+  } //Z#306
 ,  /* Asia/Vientiane */ :array {
     :intvector { -2147483648, -2005973424, -1855983920, -1819954800, -1220428800 }
     :intvector { 24624, 0, 25200, 0, 25580, 0, 28800, 0 }
     :bin { "0002010301" }
-  } //Z#305
+  } //Z#307
 ,  /* Asia/Vladivostok */ :array {
     :intvector { -2147483648, -1487321264, -1247562000, 354895200, 370702800, 386431200, 402238800, 417967200, 433774800, 449589600, 465321600, 481046400, 496771200, 512496000, 528220800, 543945600, 559670400, 575395200, 591120000, 606844800, 622569600, 638294400, 654624000, 670348800, 686077200, 695754000, 701787600, 717508800, 733248000, 748972800, 764697600, 780422400, 796147200, 811872000, 828201600, 846345600 }
     :intvector { 31664, 0, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600 }
     :bin { "000103040304030403040304030403040304030403040302010304030403040304030403" }
     "Russia"
     :intvector { 36000, 1997 }
-  } //Z#306
+  } //Z#308
 ,  /* Asia/Yakutsk */ :array {
     :intvector { -2147483648, -1579423120, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701791200, 717512400, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200 }
     :intvector { 28800, 0, 28800, 3600, 31120, 0, 32400, 0, 32400, 3600 }
     :bin { "020003040304030403040304030403040304030403040301000304030403040304030403" }
     "Russia"
     :intvector { 32400, 1997 }
-  } //Z#307
+  } //Z#309
 ,  /* Asia/Yekaterinburg */ :array {
     :intvector { -2147483648, -1592611344, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701805600, 717526800, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600 }
     :intvector { 14400, 0, 14400, 3600, 14544, 0, 18000, 0, 18000, 3600 }
     :bin { "020003040304030403040304030403040304030403040301000304030403040304030403" }
     "Russia"
     :intvector { 18000, 1997 }
-  } //Z#308
+  } //Z#310
 ,  /* Asia/Yerevan */ :array {
     :intvector { -2147483648, -1441162680, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 685569600, 686098800, 701812800, 717534000, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 852062400, 859672800, 877816800 }
     :intvector { 10680, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
     :bin { "00010304030403040304030403040304030403040304030202010201020102010203030403" }
     "RussiaAsia"
     :intvector { 14400, 1998 }
-    :intvector { 309, 511 }
-  } //Z#309
+    :intvector { 311, 513 }
+  } //Z#311
 ,  /* Atlantic/Azores */ :array {
     :intvector { -2147483648, -1849557928, -1689548400, -1677794400, -1667430000, -1647730800, -1635807600, -1616194800, -1604358000, -1584658800, -1572735600, -1553036400, -1541199600, -1521500400, -1442444400, -1426806000, -1379286000, -1364770800, -1348441200, -1333321200, -1316386800, -1301266800, -1284332400, -1269817200, -1221433200, -1206918000, -1191193200, -1175468400, -1127689200, -1111964400, -1096844400, -1080514800, -1063580400, -1049065200, -1033340400, -1017615600, -1002495600, -986166000, -969231600, -950482800, -942015600, -922662000, -906937200, -891126000, -877302000, -873676800, -864000000, -857948400, -845852400, -842832000, -831340800, -825894000, -814402800, -810777600, -799891200, -794444400, -782953200, -779328000, -768441600, -762994800, -749084400, -733359600, -717624000, -701899200, -686174400, -670449600, -654724800, -639000000, -591825600, -575496000, -559771200, -544046400, -528321600, -512596800, -496872000, -481147200, -465422400, -449697600, -433972800, -417643200, -401918400, -386193600, -370468800, -354744000, -339019200, -323294400, -307569600, -291844800, -276120000, -260395200, -244670400, -228340800, -212616000, -196891200, -181166400, -165441600, -149716800, -133992000, -118267200, 228272400, 243997200, 260326800, 276051600, 291776400, 307504800, 323226000, 338954400, 354679200, 370404000, 386128800, 401853600, 417582000, 433303200, 449028000, 465357600, 481082400, 496807200, 512532000, 528256800, 543981600, 559706400, 575431200, 591156000, 606880800, 622605600, 638330400, 654660000, 670384800, 686109600, 701834400, 717559200, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { -7200, 0, -7200, 3600, -7200, 7200, -6872, 0, -3600, 0, -3600, 3600, 0, 0 }
     :bin { "03000100010001000100010001000100010001000100010001000100010001000100010001000100010001000102010001020100010201000102010001000100010001000100010001000100010001000100010001000100010001000100010001000405040504050405040504050405040504050405040504050405040504050405060504050405040504" }
     "EU"
     :intvector { -3600, 1997 }
-  } //Z#310
+  } //Z#312
 ,  /* Atlantic/Bermuda */ :array {
     :intvector { -2147483648, -1262281256, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 }
     :intvector { -15544, 0, -14400, 0, -14400, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
     "US"
     :intvector { -14400, 2008 }
-  } //Z#311
+  } //Z#313
 ,  /* Atlantic/Canary */ :array {
     :intvector { -2147483648, -1509663504, -733874400, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { -3696, 0, -3600, 0, 0, 0, 0, 3600 }
     :bin { "00010203020302030203020302030203020302030203020302030203020302030203020302" }
     "EU"
     :intvector { 0, 1997 }
-  } //Z#312
+  } //Z#314
 ,  /* Atlantic/Cape_Verde */ :array {
     :intvector { -2147483648, -1988144756, -862610400, -764118000, 186120000 }
     :intvector { -7200, 0, -7200, 3600, -5644, 0, -3600, 0 }
     :bin { "0200010003" }
-  } //Z#313
-,  /* Atlantic/Faeroe */ :int { 315 } //Z#314
+  } //Z#315
+,  /* Atlantic/Faeroe */ :int { 317 } //Z#316
 ,  /* Atlantic/Faroe */ :array {
     :intvector { -2147483648, -1955748776, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { -1624, 0, 0, 0, 0, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201" }
     "EU"
     :intvector { 0, 1997 }
-    :intvector { 314, 315 }
-  } //Z#315
-,  /* Atlantic/Jan_Mayen */ :int { 444 } //Z#316
+    :intvector { 316, 317 }
+  } //Z#317
+,  /* Atlantic/Jan_Mayen */ :int { 446 } //Z#318
 ,  /* Atlantic/Madeira */ :array {
     :intvector { -2147483648, -1849560744, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -986169600, -969235200, -950486400, -942019200, -922665600, -906940800, -891129600, -877305600, -873680400, -864003600, -857952000, -845856000, -842835600, -831344400, -825897600, -814406400, -810781200, -799894800, -794448000, -782956800, -779331600, -768445200, -762998400, -749088000, -733363200, -717627600, -701902800, -686178000, -670453200, -654728400, -639003600, -591829200, -575499600, -559774800, -544050000, -528325200, -512600400, -496875600, -481150800, -465426000, -449701200, -433976400, -417646800, -401922000, -386197200, -370472400, -354747600, -339022800, -323298000, -307573200, -291848400, -276123600, -260398800, -244674000, -228344400, -212619600, -196894800, -181170000, -165445200, -149720400, -133995600, -118270800, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { -4056, 0, -3600, 0, -3600, 3600, -3600, 7200, 0, 0, 0, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203020102030201020302010203020102010201020102010201020102010201020102010201020102010201020102010201020102010405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
     "EU"
     :intvector { 0, 1997 }
-  } //Z#317
+  } //Z#319
 ,  /* Atlantic/Reykjavik */ :array {
     :intvector { -2147483648, -1956609132, -1668211200, -1647212400, -1636675200, -1613430000, -968025600, -949615200, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 }
     :intvector { -5268, 0, -3600, 0, -3600, 3600, 0, 0 }
     :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
-    :intvector { 318, 482 }
-  } //Z#318
+    :intvector { 320, 484 }
+  } //Z#320
 ,  /* Atlantic/South_Georgia */ :array {
     :intvector { -2147483648 }
     :intvector { -7200, 0 }
     :bin { "00" }
-  } //Z#319
+  } //Z#321
 ,  /* Atlantic/St_Helena */ :array {
     :intvector { -2147483648, -599614632 }
     :intvector { -1368, 0, 0, 0 }
     :bin { "0001" }
-  } //Z#320
+  } //Z#322
 ,  /* Atlantic/Stanley */ :array {
     :intvector { -2147483648, -1824235716, -1018209600, -1003093200, -986760000, -971643600, -954705600, -939589200, -923256000, -908139600, -891806400, -876690000, -860356800, -852066000, 420609600, 433306800, 452052000, 464151600, 483501600, 495601200, 514350000, 527054400, 545799600, 558504000, 577249200, 589953600, 608698800, 621403200, 640753200, 652852800, 672202800, 684907200, 703652400, 716356800, 735102000, 747806400, 766551600, 779256000, 798001200, 810705600, 830055600, 842760000, 861505200, 874209600, 892954800, 905659200, 924404400, 937108800, 955854000, 968558400, 987310800, 999410400 }
     :intvector { -14400, 0, -14400, 3600, -13884, 0, -10800, 0, -10800, 3600 }
     :bin { "02000100010001000100010001000304030403010001000100010001000100010001000100010001000100010001000100010001" }
     "Falk"
     :intvector { -14400, 2002 }
-  } //Z#321
-,  /* Australia/ACT */ :int { 340 } //Z#322
+  } //Z#323
+,  /* Australia/ACT */ :int { 342 } //Z#324
 ,  /* Australia/Adelaide */ :array {
     :intvector { -2147483648, -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 384280200, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 637691400, 657045000, 667931400, 688494600, 701195400, 719944200, 731435400, 751998600, 764094600, 783448200, 796149000, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 }
     :intvector { 34200, 0, 34200, 3600 }
     :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
     "AS"
     :intvector { 34200, 2009 }
-    :intvector { 323, 339 }
-  } //Z#323
+    :intvector { 325, 341 }
+  } //Z#325
 ,  /* Australia/Brisbane */ :array {
     :intvector { -2147483648, -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200 }
     :intvector { 36000, 0, 36000, 3600 }
     :bin { "0001000100010001000100010001000100" }
-    :intvector { 324, 338 }
-  } //Z#324
+    :intvector { 326, 340 }
+  } //Z#326
 ,  /* Australia/Broken_Hill */ :array {
     :intvector { -2147483648, -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 386699400, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 636481800, 657045000, 667931400, 688494600, 699381000, 719944200, 731435400, 751998600, 762885000, 783448200, 794334600, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 946647000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 }
     :intvector { 34200, 0, 34200, 3600 }
     :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000101000100010001000100010001000100010001" }
     "AS"
     :intvector { 34200, 2009 }
-    :intvector { 325, 344 }
-  } //Z#325
-,  /* Australia/Canberra */ :int { 340 } //Z#326
+    :intvector { 327, 346 }
+  } //Z#327
+,  /* Australia/Canberra */ :int { 342 } //Z#328
 ,  /* Australia/Currie */ :array {
     :intvector { -2147483648, -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 }
     :intvector { 36000, 0, 36000, 3600 }
     :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
     "AT"
     :intvector { 36000, 2009 }
-  } //Z#327
+  } //Z#329
 ,  /* Australia/Darwin */ :array {
     :intvector { -2147483648, -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400 }
     :intvector { 34200, 0, 34200, 3600 }
     :bin { "000100010001000100" }
-    :intvector { 0, 328, 336 }
-  } //Z#328
+    :intvector { 0, 330, 338 }
+  } //Z#330
 ,  /* Australia/Eucla */ :array {
     :intvector { -2147483648, -1672562640, -1665387900, -883637100, -876123900, -860395500, -844674300, 152039700, 162926100, 436295700, 447182100, 690311700, 699383700, 1165079700, 1174756500, 1193505300, 1206810900, 1224954900, 1238260500 }
     :intvector { 31500, 0, 31500, 3600 }
     :bin { "00010001000100010001000100010001000100" }
-  } //Z#329
+  } //Z#331
 ,  /* Australia/Hobart */ :array {
     :intvector { -2147483648, -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 }
     :intvector { 36000, 0, 36000, 3600 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
     "AT"
     :intvector { 36000, 2009 }
-    :intvector { 330, 341 }
-  } //Z#330
-,  /* Australia/LHI */ :int { 333 } //Z#331
+    :intvector { 332, 343 }
+  } //Z#332
+,  /* Australia/LHI */ :int { 335 } //Z#333
 ,  /* Australia/Lindeman */ :array {
     :intvector { -2147483648, -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 709912800, 719942400, 731433600, 751996800, 762883200 }
     :intvector { 36000, 0, 36000, 3600 }
     :bin { "00010001000100010001000100010001000001000100" }
-  } //Z#332
+  } //Z#334
 ,  /* Australia/Lord_Howe */ :array {
     :intvector { -2147483648, 352216800, 372785400, 384273000, 404839800, 415722600, 436289400, 447172200, 467739000, 478621800, 499188600, 511282800, 530033400, 542732400, 562087800, 574786800, 594142200, 606236400, 625591800, 636476400, 657041400, 667926000, 688491000, 699375600, 719940600, 731430000, 751995000, 762879600, 783444600, 794329200, 814894200, 828198000, 846343800, 859647600, 877793400, 891097200, 909243000, 922546800, 941297400, 953996400, 967303800, 985446000, 1004196600, 1017500400, 1035646200, 1048950000, 1067095800, 1080399600, 1099150200, 1111849200, 1130599800, 1143903600, 1162049400, 1174748400, 1193499000, 1207407600, 1223134200 }
     :intvector { 36000, 0, 37800, 0, 37800, 1800, 37800, 3600 }
     :bin { "000103010301030103010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
     "LH"
     :intvector { 37800, 2009 }
-    :intvector { 331, 333 }
-  } //Z#333
+    :intvector { 333, 335 }
+  } //Z#335
 ,  /* Australia/Melbourne */ :array {
     :intvector { -2147483648, -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 384278400, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 561484800, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 796147200, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 }
     :intvector { 36000, 0, 36000, 3600 }
     :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
     "AV"
     :intvector { 36000, 2009 }
-    :intvector { 334, 342 }
-  } //Z#334
-,  /* Australia/NSW */ :int { 340 } //Z#335
-,  /* Australia/North */ :int { 328 } //Z#336
+    :intvector { 336, 344 }
+  } //Z#336
+,  /* Australia/NSW */ :int { 342 } //Z#337
+,  /* Australia/North */ :int { 330 } //Z#338
 ,  /* Australia/Perth */ :array {
     :intvector { -2147483648, -1672559940, -1665385200, -883634400, -876121200, -860392800, -844671600, 152042400, 162928800, 436298400, 447184800, 690314400, 699386400, 1165082400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200 }
     :intvector { 28800, 0, 28800, 3600 }
     :bin { "00010001000100010001000100010001000100" }
-    :intvector { 337, 343 }
-  } //Z#337
-,  /* Australia/Queensland */ :int { 324 } //Z#338
-,  /* Australia/South */ :int { 323 } //Z#339
+    :intvector { 339, 345 }
+  } //Z#339
+,  /* Australia/Queensland */ :int { 326 } //Z#340
+,  /* Australia/South */ :int { 325 } //Z#341
 ,  /* Australia/Sydney */ :array {
     :intvector { -2147483648, -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386697600, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 794332800, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 }
     :intvector { 36000, 0, 36000, 3600 }
     :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" }
     "AN"
     :intvector { 36000, 2009 }
-    :intvector { 1, 322, 326, 335, 340 }
-  } //Z#340
-,  /* Australia/Tasmania */ :int { 330 } //Z#341
-,  /* Australia/Victoria */ :int { 334 } //Z#342
-,  /* Australia/West */ :int { 337 } //Z#343
-,  /* Australia/Yancowinna */ :int { 325 } //Z#344
-,  /* BET */ :int { 188 } //Z#345
-,  /* BST */ :int { 243 } //Z#346
-,  /* Brazil/Acre */ :int { 184 } //Z#347
-,  /* Brazil/DeNoronha */ :int { 167 } //Z#348
-,  /* Brazil/East */ :int { 188 } //Z#349
-,  /* Brazil/West */ :int { 149 } //Z#350
-,  /* CAT */ :int { 29 } //Z#351
+    :intvector { 1, 324, 328, 337, 342 }
+  } //Z#342
+,  /* Australia/Tasmania */ :int { 332 } //Z#343
+,  /* Australia/Victoria */ :int { 336 } //Z#344
+,  /* Australia/West */ :int { 339 } //Z#345
+,  /* Australia/Yancowinna */ :int { 327 } //Z#346
+,  /* BET */ :int { 190 } //Z#347
+,  /* BST */ :int { 245 } //Z#348
+,  /* Brazil/Acre */ :int { 185 } //Z#349
+,  /* Brazil/DeNoronha */ :int { 168 } //Z#350
+,  /* Brazil/East */ :int { 190 } //Z#351
+,  /* Brazil/West */ :int { 150 } //Z#352
+,  /* CAT */ :int { 29 } //Z#353
 ,  /* CET */ :array {
-    :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+    :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
-    :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
+    :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "C-Eur"
     :intvector { 3600, 1997 }
-  } //Z#352
-,  /* CNT */ :int { 192 } //Z#353
-,  /* CST */ :int { 95 } //Z#354
+  } //Z#354
+,  /* CNT */ :int { 194 } //Z#355
+,  /* CST */ :int { 96 } //Z#356
 ,  /* CST6CDT */ :array {
     :intvector { -2147483648, -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
     :intvector { -21600, 0, -21600, 3600 }
     :bin { "000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -21600, 2008 }
-  } //Z#355
-,  /* CTT */ :int { 291 } //Z#356
-,  /* Canada/Atlantic */ :int { 123 } //Z#357
-,  /* Canada/Central */ :int { 207 } //Z#358
-,  /* Canada/East-Saskatchewan */ :int { 182 } //Z#359
-,  /* Canada/Eastern */ :int { 202 } //Z#360
-,  /* Canada/Mountain */ :int { 108 } //Z#361
-,  /* Canada/Newfoundland */ :int { 192 } //Z#362
-,  /* Canada/Pacific */ :int { 204 } //Z#363
-,  /* Canada/Saskatchewan */ :int { 182 } //Z#364
-,  /* Canada/Yukon */ :int { 206 } //Z#365
-,  /* Chile/Continental */ :int { 186 } //Z#366
-,  /* Chile/EasterIsland */ :int { 525 } //Z#367
-,  /* Cuba */ :int { 124 } //Z#368
-,  /* EAT */ :int { 7 } //Z#369
-,  /* ECT */ :int { 445 } //Z#370
+  } //Z#357
+,  /* CTT */ :int { 293 } //Z#358
+,  /* Canada/Atlantic */ :int { 124 } //Z#359
+,  /* Canada/Central */ :int { 209 } //Z#360
+,  /* Canada/East-Saskatchewan */ :int { 183 } //Z#361
+,  /* Canada/Eastern */ :int { 204 } //Z#362
+,  /* Canada/Mountain */ :int { 109 } //Z#363
+,  /* Canada/Newfoundland */ :int { 194 } //Z#364
+,  /* Canada/Pacific */ :int { 206 } //Z#365
+,  /* Canada/Saskatchewan */ :int { 183 } //Z#366
+,  /* Canada/Yukon */ :int { 208 } //Z#367
+,  /* Chile/Continental */ :int { 188 } //Z#368
+,  /* Chile/EasterIsland */ :int { 527 } //Z#369
+,  /* Cuba */ :int { 125 } //Z#370
+,  /* EAT */ :int { 7 } //Z#371
+,  /* ECT */ :int { 447 } //Z#372
 ,  /* EET */ :array {
     :intvector { -2147483648, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 7200, 0, 7200, 3600 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 7200, 1997 }
-  } //Z#371
+  } //Z#373
 ,  /* EST */ :array {
     :intvector {  }
     :intvector { -18000, 0 }
     :bin { "" }
-  } //Z#372
+  } //Z#374
 ,  /* EST5EDT */ :array {
     :intvector { -2147483648, -1633280400, -1615140000, -1601830800, -1583690400, -880218000, -769395600, -765396000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
     :intvector { -18000, 0, -18000, 3600 }
     :bin { "000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -18000, 2008 }
-  } //Z#373
-,  /* Egypt */ :int { 18 } //Z#374
-,  /* Eire */ :int { 424 } //Z#375
+  } //Z#375
+,  /* Egypt */ :int { 18 } //Z#376
+,  /* Eire */ :int { 426 } //Z#377
 ,  /* Etc/GMT */ :array {
     :intvector {  }
     :intvector { 0, 0 }
     :bin { "" }
-    :intvector { 376, 377, 390, 405, 406, 473, 474, 475, 476, 477 }
-  } //Z#376
-,  /* Etc/GMT+0 */ :int { 376 } //Z#377
+    :intvector { 378, 379, 392, 407, 408, 475, 476, 477, 478, 479 }
+  } //Z#378
+,  /* Etc/GMT+0 */ :int { 378 } //Z#379
 ,  /* Etc/GMT+1 */ :array {
     :intvector {  }
     :intvector { -3600, 0 }
     :bin { "" }
-  } //Z#378
+  } //Z#380
 ,  /* Etc/GMT+10 */ :array {
     :intvector {  }
     :intvector { -36000, 0 }
     :bin { "" }
-    :intvector { 379, 574 }
-  } //Z#379
+    :intvector { 381, 576 }
+  } //Z#381
 ,  /* Etc/GMT+11 */ :array {
     :intvector {  }
     :intvector { -39600, 0 }
     :bin { "" }
-  } //Z#380
+  } //Z#382
 ,  /* Etc/GMT+12 */ :array {
     :intvector {  }
     :intvector { -43200, 0 }
     :bin { "" }
-  } //Z#381
+  } //Z#383
 ,  /* Etc/GMT+2 */ :array {
     :intvector {  }
     :intvector { -7200, 0 }
     :bin { "" }
-  } //Z#382
+  } //Z#384
 ,  /* Etc/GMT+3 */ :array {
     :intvector {  }
     :intvector { -10800, 0 }
     :bin { "" }
-  } //Z#383
+  } //Z#385
 ,  /* Etc/GMT+4 */ :array {
     :intvector {  }
     :intvector { -14400, 0 }
     :bin { "" }
-    :intvector { 384, 568 }
-  } //Z#384
+    :intvector { 386, 570 }
+  } //Z#386
 ,  /* Etc/GMT+5 */ :array {
     :intvector {  }
     :intvector { -18000, 0 }
     :bin { "" }
-    :intvector { 385, 572 }
-  } //Z#385
+    :intvector { 387, 574 }
+  } //Z#387
 ,  /* Etc/GMT+6 */ :array {
     :intvector {  }
     :intvector { -21600, 0 }
     :bin { "" }
-    :intvector { 386, 570 }
-  } //Z#386
+    :intvector { 388, 572 }
+  } //Z#388
 ,  /* Etc/GMT+7 */ :array {
     :intvector {  }
     :intvector { -25200, 0 }
     :bin { "" }
-    :intvector { 387, 575 }
-  } //Z#387
+    :intvector { 389, 577 }
+  } //Z#389
 ,  /* Etc/GMT+8 */ :array {
     :intvector {  }
     :intvector { -28800, 0 }
     :bin { "" }
-    :intvector { 388, 577 }
-  } //Z#388
+    :intvector { 390, 579 }
+  } //Z#390
 ,  /* Etc/GMT+9 */ :array {
     :intvector {  }
     :intvector { -32400, 0 }
     :bin { "" }
-    :intvector { 389, 579 }
-  } //Z#389
-,  /* Etc/GMT-0 */ :int { 376 } //Z#390
+    :intvector { 391, 581 }
+  } //Z#391
+,  /* Etc/GMT-0 */ :int { 378 } //Z#392
 ,  /* Etc/GMT-1 */ :array {
     :intvector {  }
     :intvector { 3600, 0 }
     :bin { "" }
-  } //Z#391
+  } //Z#393
 ,  /* Etc/GMT-10 */ :array {
     :intvector {  }
     :intvector { 36000, 0 }
     :bin { "" }
-  } //Z#392
+  } //Z#394
 ,  /* Etc/GMT-11 */ :array {
     :intvector {  }
     :intvector { 39600, 0 }
     :bin { "" }
-  } //Z#393
+  } //Z#395
 ,  /* Etc/GMT-12 */ :array {
     :intvector {  }
     :intvector { 43200, 0 }
     :bin { "" }
-  } //Z#394
+  } //Z#396
 ,  /* Etc/GMT-13 */ :array {
     :intvector {  }
     :intvector { 46800, 0 }
     :bin { "" }
-  } //Z#395
+  } //Z#397
 ,  /* Etc/GMT-14 */ :array {
     :intvector {  }
     :intvector { 50400, 0 }
     :bin { "" }
-  } //Z#396
+  } //Z#398
 ,  /* Etc/GMT-2 */ :array {
     :intvector {  }
     :intvector { 7200, 0 }
     :bin { "" }
-  } //Z#397
+  } //Z#399
 ,  /* Etc/GMT-3 */ :array {
     :intvector {  }
     :intvector { 10800, 0 }
     :bin { "" }
-  } //Z#398
+  } //Z#400
 ,  /* Etc/GMT-4 */ :array {
     :intvector {  }
     :intvector { 14400, 0 }
     :bin { "" }
-  } //Z#399
+  } //Z#401
 ,  /* Etc/GMT-5 */ :array {
     :intvector {  }
     :intvector { 18000, 0 }
     :bin { "" }
-  } //Z#400
+  } //Z#402
 ,  /* Etc/GMT-6 */ :array {
     :intvector {  }
     :intvector { 21600, 0 }
     :bin { "" }
-  } //Z#401
+  } //Z#403
 ,  /* Etc/GMT-7 */ :array {
     :intvector {  }
     :intvector { 25200, 0 }
     :bin { "" }
-  } //Z#402
+  } //Z#404
 ,  /* Etc/GMT-8 */ :array {
     :intvector {  }
     :intvector { 28800, 0 }
     :bin { "" }
-  } //Z#403
+  } //Z#405
 ,  /* Etc/GMT-9 */ :array {
     :intvector {  }
     :intvector { 32400, 0 }
     :bin { "" }
-  } //Z#404
-,  /* Etc/GMT0 */ :int { 376 } //Z#405
-,  /* Etc/Greenwich */ :int { 376 } //Z#406
+  } //Z#406
+,  /* Etc/GMT0 */ :int { 378 } //Z#407
+,  /* Etc/Greenwich */ :int { 378 } //Z#408
 ,  /* Etc/UCT */ :array {
     :intvector {  }
     :intvector { 0, 0 }
     :bin { "" }
-    :intvector { 407, 582 }
-  } //Z#407
+    :intvector { 409, 584 }
+  } //Z#409
 ,  /* Etc/UTC */ :array {
     :intvector {  }
     :intvector { 0, 0 }
     :bin { "" }
-    :intvector { 408, 409, 411, 596, 597, 601 }
-  } //Z#408
-,  /* Etc/Universal */ :int { 408 } //Z#409
+    :intvector { 410, 411, 413, 598, 599, 603 }
+  } //Z#410
+,  /* Etc/Universal */ :int { 410 } //Z#411
 ,  /* Etc/Unknown */ :array {
     :intvector {  }
     :intvector { 0, 0 }
     :bin { "" }
-  } //Z#410
-,  /* Etc/Zulu */ :int { 408 } //Z#411
+  } //Z#412
+,  /* Etc/Zulu */ :int { 410 } //Z#413
 ,  /* Europe/Amsterdam */ :array {
     :intvector { -2147483648, -1693700372, -1680484772, -1663453172, -1650147572, -1633213172, -1617488372, -1601158772, -1586038772, -1569709172, -1554589172, -1538259572, -1523139572, -1507501172, -1490566772, -1470176372, -1459117172, -1443997172, -1427667572, -1406672372, -1396217972, -1376950772, -1364768372, -1345414772, -1333318772, -1313792372, -1301264372, -1282256372, -1269814772, -1250720372, -1238365172, -1219184372, -1206915572, -1186957172, -1175465972, -1156025972, -1143411572, -1124489972, -1111961972, -1092953972, -1080512372, -1061331572, -1049062772, -1029190772, -1025745572, -1017613200, -998259600, -986163600, -966723600, -954109200, -935022000, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 220921200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 1172, 0, 1172, 3600, 1200, 0, 1200, 3600, 3600, 0, 3600, 3600 }
     :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000103020302030205040504050405040405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#412
+  } //Z#414
 ,  /* Europe/Andorra */ :array {
     :intvector { -2147483648, -733881600, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 0, 0, 3600, 0, 3600, 3600 }
     :bin { "0001020102010201020102010201020102010201020102010201" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#413
+  } //Z#415
 ,  /* Europe/Athens */ :array {
     :intvector { -2147483648, -1686101632, -1182996000, -1178161200, -906861600, -904878000, -857257200, -844477200, -828237600, -812422800, -552362400, -541652400, 166485600, 186184800, 198028800, 213753600, 228873600, 244080000, 260323200, 275446800, 291798000, 307407600, 323388000, 338936400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600, 5692, 0, 7200, 0, 7200, 3600 }
     :bin { "0203040304010001000304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
     "EU"
     :intvector { 7200, 1997 }
-  } //Z#414
-,  /* Europe/Belfast */ :int { 435 } //Z#415
+  } //Z#416
+,  /* Europe/Belfast */ :int { 437 } //Z#417
 ,  /* Europe/Belgrade */ :array {
-    :intvector { -2147483648, -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -777942000, -766623600, 407199600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+    :intvector { -2147483648, -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -777942000, -766623600, 407199600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
-    :bin { "0001000100010001000001000100010001000100010001000100010001000100010001000100" }
+    :bin { "000100010001000001000001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-    :intvector { 416, 434, 446, 452, 454, 467 }
-  } //Z#416
+    :intvector { 418, 436, 448, 454, 456, 469 }
+  } //Z#418
 ,  /* Europe/Berlin */ :array {
-    :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -776563200, -765936000, -761180400, -748479600, -733273200, -717634800, -714610800, -710380800, -701910000, -684975600, -670460400, -654130800, -639010800, 315529200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+    :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -776563200, -765936000, -761180400, -757386000, -748479600, -733273200, -717631200, -714610800, -710380800, -701910000, -684975600, -670460400, -654130800, -639010800, 315529200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600, 3600, 7200 }
-    :bin { "0001000100010001000100010001020100010001020100010001000001000100010001000100010001000100010001000100010001000100010001000100" }
+    :bin { "000100010001000100010001000102010000010001020100010001000001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#417
-,  /* Europe/Bratislava */ :int { 447 } //Z#418
+  } //Z#419
+,  /* Europe/Bratislava */ :int { 449 } //Z#420
 ,  /* Europe/Brussels */ :array {
     :intvector { -2147483648, -1740355200, -1693702800, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1613826000, -1604278800, -1585530000, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1473642000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -934668000, -857257200, -844556400, -828226800, -812502000, -799293600, -798073200, -781052400, -766623600, -745455600, -733273200, 220921200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 0, 0, 0, 3600, 3600, 0, 3600, 3600 }
     :bin { "0002030203020302000100010001000100010001000100010001000100010001000100010001000100010001000100010001000103020302030302030203020203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#419
+  } //Z#421
 ,  /* Europe/Bucharest */ :array {
     :intvector { -2147483648, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, 296604000, 307486800, 323816400, 338940000, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 662680800, 670370400, 686095200, 701820000, 717544800, 733269600, 748994400, 757375200, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
     :intvector { 6264, 0, 7200, 0, 7200, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020101020102010201010201020102010201" }
     "EU"
     :intvector { 7200, 1998 }
-  } //Z#420
+  } //Z#422
 ,  /* Europe/Budapest */ :array {
-    :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1640998800, -1633212000, -1617577200, -1600466400, -1587250800, -1569708000, -1554332400, -906937200, -857257200, -844556400, -828226800, -812502000, -796777200, -778471200, -762487200, -749689200, -733359600, -717634800, -701910000, -686185200, -670460400, -654130800, -639010800, -621990000, -605660400, -492656400, -481168800, -461120400, -449632800, -428547600, -418269600, -397094400, -386809200, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+    :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1640998800, -1633212000, -1617577200, -1600466400, -1587250800, -1569708000, -1554332400, -906937200, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -778471200, -762487200, -749689200, -733359600, -717634800, -701910000, -686185200, -670460400, -654130800, -639010800, -621990000, -605660400, -492656400, -481168800, -461120400, -449632800, -428547600, -418269600, -397094400, -386809200, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
-    :bin { "000100010000010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
+    :bin { "00010001000001000100010001000100010000010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#421
+  } //Z#423
 ,  /* Europe/Chisinau */ :array {
     :intvector { -2147483648, -1637114100, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, -927165600, -898138800, -857257200, -844556400, -828226800, -812502000, -800157600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 641941200, 670377600, 686102400, 694216800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
     :intvector { 3600, 0, 3600, 3600, 6264, 0, 6900, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
     :bin { "03020405040504050405040504050405040504050100010001060706070607060706070607060706070607060604050404050405040504050405040504" }
     "EU"
     :intvector { 7200, 1998 }
-    :intvector { 422, 459 }
-  } //Z#422
+    :intvector { 424, 461 }
+  } //Z#424
 ,  /* Europe/Copenhagen */ :array {
     :intvector { -2147483648, -1692496800, -1680490800, -935110800, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -769388400, -747010800, -736383600, -715215600, -706748400, -683161200, -675298800, 315529200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
     :bin { "00010001000100010001000100010001000001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#423
+  } //Z#425
 ,  /* Europe/Dublin */ :array {
     :intvector { -2147483648, -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1517011200, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733359600, -719445600, -699490800, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 820454400, 828234000, 846378000 }
     :intvector { -1521, 0, -1521, 3600, 0, 0, 0, 3600, 3600, 0 }
     :bin { "00010203020302030203020302020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030402030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302020302" }
     "EU"
     :intvector { 0, 1997 }
-    :intvector { 375, 424 }
-  } //Z#424
+    :intvector { 377, 426 }
+  } //Z#426
 ,  /* Europe/Gibraltar */ :array {
     :intvector { -2147483648, -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001020102010201020102010001000102010001000100010001000100010001000100010003040304030403040304030403040304030403040304030403040304030403" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#425
-,  /* Europe/Guernsey */ :int { 435 } //Z#426
+  } //Z#427
+,  /* Europe/Guernsey */ :int { 437 } //Z#428
 ,  /* Europe/Helsinki */ :array {
     :intvector { -2147483648, -1535938792, -875671200, -859863600, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 5992, 0, 7200, 0, 7200, 3600 }
     :bin { "000102010201020102010201020102010201020102010201020102010201020102010201" }
     "EU"
     :intvector { 7200, 1997 }
-    :intvector { 427, 439 }
-  } //Z#427
-,  /* Europe/Isle_of_Man */ :int { 435 } //Z#428
+    :intvector { 429, 441 }
+  } //Z#429
+,  /* Europe/Isle_of_Man */ :int { 437 } //Z#430
 ,  /* Europe/Istanbul */ :array {
     :intvector { -2147483648, -1869875816, -1693706400, -1680490800, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1440208800, -1428030000, -1409709600, -1396494000, -931140000, -922762800, -917834400, -892436400, -875844000, -857358000, -781063200, -764737200, -744343200, -733806000, -716436000, -701924400, -684986400, -670474800, -654141600, -639025200, -621828000, -606970800, -590032800, -575434800, -235620000, -228279600, -177732000, -165726000, 10533600, 23835600, 41983200, 55285200, 74037600, 87339600, 107910000, 121219200, 133920000, 152676000, 165362400, 183502800, 202428000, 215557200, 228866400, 245797200, 260316000, 277246800, 308779200, 323827200, 340228800, 354672000, 371678400, 386121600, 403128000, 428446800, 433886400, 482792400, 496702800, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670374000, 686098800, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1167602400, 1174784400, 1193533200 }
     :intvector { 7016, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
     :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102040304030403040304030201020102010201020102010201020102010201020102010201020102010201020102010201020102010201010201" }
     "EU"
     :intvector { 7200, 2008 }
-    :intvector { 253, 429, 581 }
-  } //Z#429
-,  /* Europe/Jersey */ :int { 435 } //Z#430
+    :intvector { 255, 431, 583 }
+  } //Z#431
+,  /* Europe/Jersey */ :int { 437 } //Z#432
 ,  /* Europe/Kaliningrad */ :array {
     :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -778730400, -762663600, -757389600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 701816400, 717537600, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400 }
     :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
     :bin { "00010001000100010001000100020302040504050405040504050405040504050405040504030203020302030203020302" }
     "Russia"
     :intvector { 7200, 1997 }
-  } //Z#431
+  } //Z#433
 ,  /* Europe/Kiev */ :array {
     :intvector { -2147483648, -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 7324, 0, 10800, 0, 10800, 3600 }
     :bin { "0402050100010005060506050605060506050605060506050605050203020302030203020302" }
     "EU"
     :intvector { 7200, 1997 }
-  } //Z#432
+  } //Z#434
 ,  /* Europe/Lisbon */ :array {
     :intvector { -2147483648, -1830381808, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942022800, -922669200, -906944400, -891133200, -877309200, -873684000, -864007200, -857955600, -845859600, -842839200, -831348000, -825901200, -814410000, -810784800, -799898400, -794451600, -782960400, -779335200, -768448800, -763002000, -749091600, -733366800, -717631200, -701906400, -686181600, -670456800, -654732000, -639007200, -591832800, -575503200, -559778400, -544053600, -528328800, -512604000, -496879200, -481154400, -465429600, -449704800, -433980000, -417650400, -401925600, -386200800, -370476000, -354751200, -339026400, -323301600, -307576800, -291852000, -276127200, -260402400, -244677600, -228348000, -212623200, -196898400, -181173600, -165448800, -149724000, -133999200, -118274400, 212544000, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { -2192, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
     :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010201020302010203020102030201020302010201020102010201020102010201020102010201020102010201020102010201020102010201040102010201020102010201020102010201020102010201020102010201020102040504050405040201" }
     "EU"
     :intvector { 0, 1997 }
-    :intvector { 433, 563 }
-  } //Z#433
-,  /* Europe/Ljubljana */ :int { 416 } //Z#434
+    :intvector { 435, 565 }
+  } //Z#435
+,  /* Europe/Ljubljana */ :int { 418 } //Z#436
 ,  /* Europe/London */ :array {
     :intvector { -2147483648, -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 820454400, 828234000, 846378000 }
     :intvector { 0, 0, 0, 3600, 0, 7200, 3600, 0 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001020102010201020102010001000102010001000100010001000100010001000100010001000100010001000100010001000100010001000100010300010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100000100" }
     "EU"
     :intvector { 0, 1997 }
-    :intvector { 415, 426, 428, 430, 435, 471, 472 }
-  } //Z#435
+    :intvector { 417, 428, 430, 432, 437, 473, 474 }
+  } //Z#437
 ,  /* Europe/Luxembourg */ :array {
     :intvector { -2147483648, -2069713476, -1692496800, -1680483600, -1662343200, -1650157200, -1632006000, -1618700400, -1612659600, -1604278800, -1585519200, -1574038800, -1552258800, -1539997200, -1520550000, -1507510800, -1490572800, -1473642000, -1459119600, -1444006800, -1427673600, -1411866000, -1396224000, -1379293200, -1364774400, -1348448400, -1333324800, -1316394000, -1301270400, -1284339600, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -935186400, -857257200, -844556400, -828226800, -812502000, -797986800, -781052400, -766623600, -745455600, -733273200, 220921200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 0, 0, 0, 3600, 1476, 0, 3600, 0, 3600, 3600 }
     :bin { "02030403040304030001000100010001000100010001000100010001000100010001000100010001000100010001000100010001040304030403040304030304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#436
+  } //Z#438
 ,  /* Europe/Madrid */ :array {
     :intvector { -2147483648, -1661734800, -1648429200, -1631926800, -1616893200, -1601254800, -1585357200, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1029114000, -1017622800, -1002848400, -986173200, -969238800, -954118800, -940208400, -873079200, -862538400, -842839200, -828237600, -811389600, -796010400, -779940000, -765421200, -748490400, -733888800, -652327200, -639190800, 135122400, 150246000, 167176800, 181695600, 196812000, 212540400, 228866400, 243990000, 260402400, 276044400, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
     :bin { "00010001000100010001000100010001000100010001000102010201020102010203040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#437
+  } //Z#439
 ,  /* Europe/Malta */ :array {
     :intvector { -2147483648, -1690851600, -1680483600, -1664758800, -1649034000, -1635123600, -1616979600, -1604278800, -1585530000, -1571014800, -1555290000, -932432400, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71719200, -50547600, -40269600, -18493200, -8215200, 12956400, 23234400, 43801200, 54687600, 75855600, 86738400, 102380400, 118105200, 135730800, 148518000, 167187600, 180489600, 198637200, 211939200, 230086800, 243388800, 261536400, 274838400, 292986000, 306288000, 323312400, 338342400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
     :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#438
-,  /* Europe/Mariehamn */ :int { 427 } //Z#439
+  } //Z#440
+,  /* Europe/Mariehamn */ :int { 429 } //Z#441
 ,  /* Europe/Minsk */ :array {
     :intvector { -2147483648, -1441158600, -1247536800, -899780400, -857257200, -844556400, -828226800, -812502000, -804650400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 670374000, 686102400, 701820000, 717544800, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400 }
     :intvector { 3600, 0, 3600, 3600, 6600, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
     :bin { "02030501000100010506050605060506050605060506050605060505040304030403040304030403" }
     "Russia"
     :intvector { 7200, 1997 }
-  } //Z#440
+  } //Z#442
 ,  /* Europe/Monaco */ :array {
     :intvector { -2147483648, -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -904438800, -891136800, -877827600, -857257200, -844556400, -828226800, -812502000, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 0, 0, 0, 3600, 0, 7200, 561, 0, 3600, 0, 3600, 3600 }
     :bin { "03000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000102010201020102010204050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#441
+  } //Z#443
 ,  /* Europe/Moscow */ :array {
     :intvector { -2147483648, -1688265000, -1656819048, -1641353448, -1627965048, -1618716648, -1596429048, -1593829848, -1589860800, -1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701812800, 717534000, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800 }
     :intvector { 7200, 0, 7200, 3600, 9000, 0, 9048, 0, 9048, 3600, 9048, 7200, 10800, 0, 10800, 3600, 10800, 7200 }
     :bin { "020304030504050706070807060006070607060706070607060706070607060706070601000607060706070607060706" }
     "Russia"
     :intvector { 10800, 1997 }
-    :intvector { 442, 599 }
-  } //Z#442
-,  /* Europe/Nicosia */ :int { 273 } //Z#443
+    :intvector { 444, 601 }
+  } //Z#444
+,  /* Europe/Nicosia */ :int { 275 } //Z#445
 ,  /* Europe/Oslo */ :array {
     :intvector { -2147483648, -1691884800, -1680573600, -927511200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -340844400, -324514800, -308790000, -293065200, -277340400, -261615600, -245890800, -230166000, -214441200, -198716400, -182991600, -166662000, -147913200, -135212400, 315529200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
     :bin { "000100010001000100010001000100010001000100010001000001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-    :intvector { 220, 316, 444 }
-  } //Z#444
+    :intvector { 222, 318, 446 }
+  } //Z#446
 ,  /* Europe/Paris */ :array {
     :intvector { -2147483648, -1855958901, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -932436000, -857257200, -844556400, -828226800, -812502000, -800071200, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 0, 0, 0, 3600, 0, 7200, 561, 0, 3600, 0, 3600, 3600 }
     :bin { "030001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001050405040502010204050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
     "EU"
     :intvector { 3600, 1997 }
-    :intvector { 370, 445 }
-  } //Z#445
-,  /* Europe/Podgorica */ :int { 416 } //Z#446
+    :intvector { 372, 447 }
+  } //Z#447
+,  /* Europe/Podgorica */ :int { 418 } //Z#448
 ,  /* Europe/Prague */ :array {
     :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -798073200, -780534000, -761180400, -746578800, -733359600, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 283993200, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
     :bin { "000100010001000100010001000100010001000100010000010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-    :intvector { 418, 447 }
-  } //Z#447
+    :intvector { 420, 449 }
+  } //Z#449
 ,  /* Europe/Riga */ :array {
     :intvector { -2147483648, -1632008184, -1618702584, -1601681784, -1597275384, -1377308184, -928029600, -899521200, -857257200, -844556400, -828226800, -812502000, -796777200, -795834000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 843955200, 853797600, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 951775200, 985482000, 1004230800 }
     :intvector { 3600, 0, 3600, 3600, 5784, 0, 5784, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
     :bin { "0203020302040601000100010006070607060706070607060706070607060504050405040504050405040504050404050405040504040504" }
     "EU"
     :intvector { 7200, 2002 }
-  } //Z#448
+  } //Z#450
 ,  /* Europe/Rome */ :array {
     :intvector { -2147483648, -1690851600, -1680483600, -1664758800, -1649034000, -1635123600, -1616979600, -1604278800, -1585530000, -1571014800, -1555290000, -932432400, -857257200, -844556400, -828226800, -812502000, -804823200, -798080400, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71719200, -50547600, -40269600, -18493200, -8215200, 12956400, 23234400, 43801200, 54687600, 75855600, 86738400, 107910000, 118188000, 138754800, 149637600, 170809200, 181090800, 202258800, 212540400, 233103600, 243990000, 265158000, 276044400, 296607600, 307494000, 315529200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
     :bin { "0001000100010001000100010001000101000100010001000100010001000100010001000100010001000100010001000100010001000001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-    :intvector { 449, 451, 462 }
-  } //Z#449
+    :intvector { 451, 453, 464 }
+  } //Z#451
 ,  /* Europe/Samara */ :array {
     :intvector { -2147483648, -1593825636, -1247540400, -1102305600, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 687916800, 701809200, 717530400, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200 }
     :intvector { 7200, 3600, 10800, 0, 10800, 3600, 12036, 0, 14400, 0, 14400, 3600 }
     :bin { "03010404050405040504050405040504050405040201020100010405040504050405040504" }
     "Russia"
     :intvector { 14400, 1997 }
-  } //Z#450
-,  /* Europe/San_Marino */ :int { 449 } //Z#451
-,  /* Europe/Sarajevo */ :int { 416 } //Z#452
+  } //Z#452
+,  /* Europe/San_Marino */ :int { 451 } //Z#453
+,  /* Europe/Sarajevo */ :int { 418 } //Z#454
 ,  /* Europe/Simferopol */ :array {
     :intvector { -2147483648, -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 767739600, 780436800, 796165200, 811886400, 828219600, 828230400, 846374400, 852066000, 859683600, 877827600 }
     :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8160, 0, 10800, 0, 10800, 3600 }
     :bin { "0402050100010001050605060506050605060506050605060506050502030203020306050605060605050302" }
     "EU"
     :intvector { 7200, 1998 }
-  } //Z#453
-,  /* Europe/Skopje */ :int { 416 } //Z#454
+  } //Z#455
+,  /* Europe/Skopje */ :int { 418 } //Z#456
 ,  /* Europe/Sofia */ :array {
-    :intvector { -2147483648, -857257200, -844556400, -828226800, -812502000, -796777200, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 662680800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
+    :intvector { -2147483648, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 662680800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
     :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 }
-    :bin { "02000100010002030203020302030203020302030203020302030203020302020302030203020302030203020302" }
+    :bin { "0200010001000002030203020302030203020302030203020302030203020302020302030203020302030203020302" }
     "EU"
     :intvector { 7200, 1998 }
-  } //Z#455
+  } //Z#457
 ,  /* Europe/Stockholm */ :array {
     :intvector { -2147483648, -1692496800, -1680483600, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
     :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#456
+  } //Z#458
 ,  /* Europe/Tallinn */ :array {
     :intvector { -2147483648, -1638322740, -1632006000, -1618700400, -1593824400, -1535938740, -927943200, -892954800, -857257200, -844556400, -828226800, -812502000, -797652000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 906411600, 909277200, 922582800, 941331600, 941407200, 1017536400, 1035680400 }
     :intvector { 3600, 0, 3600, 3600, 5940, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
     :bin { "02000100020305010001000105060506050605060506050605060506050403040304030403040304030403040304030404030403030403" }
     "EU"
     :intvector { 7200, 2003 }
-  } //Z#457
+  } //Z#459
 ,  /* Europe/Tirane */ :array {
     :intvector { -2147483648, -1767230360, -932346000, -857257200, -844556400, -843519600, 136854000, 149896800, 168130800, 181432800, 199839600, 213141600, 231894000, 244591200, 263257200, 276040800, 294706800, 307490400, 326156400, 339458400, 357087600, 370389600, 389142000, 402444000, 419468400, 433807200, 449622000, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600, 4760, 0 }
     :bin { "02000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#458
-,  /* Europe/Tiraspol */ :int { 422 } //Z#459
+  } //Z#460
+,  /* Europe/Tiraspol */ :int { 424 } //Z#461
 ,  /* Europe/Uzhgorod */ :array {
     :intvector { -2147483648, -938905200, -857257200, -844556400, -828226800, -812502000, -796874400, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 646786800, 670384800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
     :bin { "00010001000101000405040504050405040504050405040504050404000203020302030203020302" }
     "EU"
     :intvector { 7200, 1997 }
-  } //Z#460
+  } //Z#462
 ,  /* Europe/Vaduz */ :array {
     :intvector { -2147483648, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
     :bin { "000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#461
-,  /* Europe/Vatican */ :int { 449 } //Z#462
+  } //Z#463
+,  /* Europe/Vatican */ :int { 451 } //Z#464
 ,  /* Europe/Vienna */ :array {
     :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1577926800, -1569711600, -1555801200, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780188400, -757386000, -748479600, -733359600, -717634800, -701910000, -684975600, -670460400, 323823600, 338940000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
     :bin { "0001000100010000010001000100010001000001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#463
+  } //Z#465
 ,  /* Europe/Vilnius */ :array {
     :intvector { -2147483648, -1672536240, -1585100136, -1561251600, -1553565600, -928198800, -900126000, -857257200, -844556400, -828226800, -812502000, -802144800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 883605600, 891133200, 909277200, 922582800, 941331600, 1041372000, 1048986000, 1067130000 }
     :intvector { 3600, 0, 3600, 3600, 5040, 0, 5736, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
     :bin { "020300040006010001000106070607060706070607060706070607060706070605040504050405040504050405040401000104040504" }
     "EU"
     :intvector { 7200, 2004 }
-  } //Z#464
+  } //Z#466
 ,  /* Europe/Volgograd */ :array {
     :intvector { -2147483648, -1577761060, -1411873200, -1247540400, -256881600, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717534000, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800 }
     :intvector { 10660, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
     :bin { "000101030304030403040304030403040304030403020102010302010201020102010201" }
     "Russia"
     :intvector { 10800, 1997 }
-  } //Z#465
+  } //Z#467
 ,  /* Europe/Warsaw */ :array {
     :intvector { -2147483648, -1717032240, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1600473600, -1587168000, -1501725600, -931734000, -857257200, -844556400, -828226800, -812502000, -796874400, -796608000, -778726800, -762660000, -748486800, -733273200, -715215600, -701910000, -684975600, -670460400, -654130800, -639010800, -397094400, -386812800, -371088000, -355363200, -334195200, -323308800, -307584000, -291859200, -271296000, -260409600, -239846400, -228960000, -208396800, -197510400, -176342400, -166060800, 220921200, 228873600, 243993600, 260323200, 276048000, 291772800, 307497600, 323827200, 338947200, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 567990000, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600, 5040, 0, 7200, 0, 7200, 3600 }
     :bin { "0200010001000103040300010001000101000100010001000100010001000100010001000100010001000100000100010001000100010001000100010001000100010000010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-    :intvector { 466, 562 }
-  } //Z#466
-,  /* Europe/Zagreb */ :int { 416 } //Z#467
+    :intvector { 468, 564 }
+  } //Z#468
+,  /* Europe/Zagreb */ :int { 418 } //Z#469
 ,  /* Europe/Zaporozhye */ :array {
     :intvector { -2147483648, -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8400, 0, 10800, 0, 10800, 3600 }
     :bin { "04020501000100050605060506050605060506050605060506050605030203020302030203020302" }
     "EU"
     :intvector { 7200, 1997 }
-  } //Z#468
+  } //Z#470
 ,  /* Europe/Zurich */ :array {
     :intvector { -2147483648, -920336400, -915242400, -904518000, -891223200, -873068400, -859773600, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
     :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 3600, 1997 }
-  } //Z#469
+  } //Z#471
 ,  /* Factory */ :array {
     :intvector {  }
     :intvector { 0, 0 }
     :bin { "" }
-  } //Z#470
-,  /* GB */ :int { 435 } //Z#471
-,  /* GB-Eire */ :int { 435 } //Z#472
-,  /* GMT */ :int { 376 } //Z#473
-,  /* GMT+0 */ :int { 376 } //Z#474
-,  /* GMT-0 */ :int { 376 } //Z#475
-,  /* GMT0 */ :int { 376 } //Z#476
-,  /* Greenwich */ :int { 376 } //Z#477
+  } //Z#472
+,  /* GB */ :int { 437 } //Z#473
+,  /* GB-Eire */ :int { 437 } //Z#474
+,  /* GMT */ :int { 378 } //Z#475
+,  /* GMT+0 */ :int { 378 } //Z#476
+,  /* GMT-0 */ :int { 378 } //Z#477
+,  /* GMT0 */ :int { 378 } //Z#478
+,  /* Greenwich */ :int { 378 } //Z#479
 ,  /* HST */ :array {
     :intvector {  }
     :intvector { -36000, 0 }
     :bin { "" }
-  } //Z#478
-,  /* Hongkong */ :int { 250 } //Z#479
-,  /* IET */ :int { 126 } //Z#480
-,  /* IST */ :int { 262 } //Z#481
-,  /* Iceland */ :int { 318 } //Z#482
+  } //Z#480
+,  /* Hongkong */ :int { 252 } //Z#481
+,  /* IET */ :int { 127 } //Z#482
+,  /* IST */ :int { 264 } //Z#483
+,  /* Iceland */ :int { 320 } //Z#484
 ,  /* Indian/Antananarivo */ :array {
     :intvector { -2147483648, -1846293004, -499924800, -492062400 }
     :intvector { 10800, 0, 10800, 3600, 11404, 0 }
     :bin { "02000100" }
-  } //Z#483
+  } //Z#485
 ,  /* Indian/Chagos */ :array {
     :intvector { -2147483648, -1988167780, 820436400 }
     :intvector { 17380, 0, 18000, 0, 21600, 0 }
     :bin { "000102" }
-  } //Z#484
+  } //Z#486
 ,  /* Indian/Christmas */ :array {
     :intvector { -2147483648 }
     :intvector { 25200, 0 }
     :bin { "00" }
-  } //Z#485
+  } //Z#487
 ,  /* Indian/Cocos */ :array {
     :intvector { -2147483648 }
     :intvector { 23400, 0 }
     :bin { "00" }
-  } //Z#486
+  } //Z#488
 ,  /* Indian/Comoro */ :array {
     :intvector { -2147483648, -1846291984 }
     :intvector { 10384, 0, 10800, 0 }
     :bin { "0001" }
-  } //Z#487
+  } //Z#489
 ,  /* Indian/Kerguelen */ :array {
     :intvector { -2147483648, -631152000 }
     :intvector { 0, 0, 18000, 0 }
     :bin { "0001" }
-  } //Z#488
+  } //Z#490
 ,  /* Indian/Mahe */ :array {
     :intvector { -2147483648, -2006653308 }
     :intvector { 13308, 0, 14400, 0 }
     :bin { "0001" }
-  } //Z#489
+  } //Z#491
 ,  /* Indian/Maldives */ :array {
     :intvector { -2147483648, -315636840 }
     :intvector { 17640, 0, 18000, 0 }
     :bin { "0001" }
-  } //Z#490
+  } //Z#492
 ,  /* Indian/Mauritius */ :array {
-    :intvector { -2147483648, -1988164200 }
-    :intvector { 13800, 0, 14400, 0 }
-    :bin { "0001" }
-  } //Z#491
+    :intvector { -2147483648, -1988164200, 403041600, 417034800, 1224972000, 1238277600, 1256421600 }
+    :intvector { 13800, 0, 14400, 0, 14400, 3600 }
+    :bin { "00010201020102" }
+    "Mauritius"
+    :intvector { 14400, 2010 }
+  } //Z#493
 ,  /* Indian/Mayotte */ :array {
     :intvector { -2147483648, -1846292456 }
     :intvector { 10800, 0, 10856, 0 }
     :bin { "0100" }
-  } //Z#492
+  } //Z#494
 ,  /* Indian/Reunion */ :array {
     :intvector { -2147483648, -1848886912 }
     :intvector { 13312, 0, 14400, 0 }
     :bin { "0001" }
-  } //Z#493
-,  /* Iran */ :int { 296 } //Z#494
-,  /* Israel */ :int { 256 } //Z#495
-,  /* JST */ :int { 300 } //Z#496
-,  /* Jamaica */ :int { 137 } //Z#497
-,  /* Japan */ :int { 300 } //Z#498
-,  /* Kwajalein */ :int { 539 } //Z#499
-,  /* Libya */ :int { 55 } //Z#500
+  } //Z#495
+,  /* Iran */ :int { 298 } //Z#496
+,  /* Israel */ :int { 258 } //Z#497
+,  /* JST */ :int { 302 } //Z#498
+,  /* Jamaica */ :int { 138 } //Z#499
+,  /* Japan */ :int { 302 } //Z#500
+,  /* Kwajalein */ :int { 541 } //Z#501
+,  /* Libya */ :int { 55 } //Z#502
 ,  /* MET */ :array {
-    :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+    :intvector { -2147483648, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 3600, 0, 3600, 3600 }
-    :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
+    :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "C-Eur"
     :intvector { 3600, 1997 }
-  } //Z#501
-,  /* MIT */ :int { 522 } //Z#502
+  } //Z#503
+,  /* MIT */ :int { 524 } //Z#504
 ,  /* MST */ :array {
     :intvector {  }
     :intvector { -25200, 0 }
     :bin { "" }
-  } //Z#503
+  } //Z#505
 ,  /* MST7MDT */ :array {
     :intvector { -2147483648, -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -769395600, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
     :intvector { -25200, 0, -25200, 3600 }
     :bin { "000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -25200, 2008 }
-  } //Z#504
-,  /* Mexico/BajaNorte */ :int { 201 } //Z#505
-,  /* Mexico/BajaSur */ :int { 152 } //Z#506
-,  /* Mexico/General */ :int { 156 } //Z#507
-,  /* Mideast/Riyadh87 */ :int { 284 } //Z#508
-,  /* Mideast/Riyadh88 */ :int { 285 } //Z#509
-,  /* Mideast/Riyadh89 */ :int { 286 } //Z#510
-,  /* NET */ :int { 309 } //Z#511
-,  /* NST */ :int { 523 } //Z#512
-,  /* NZ */ :int { 523 } //Z#513
-,  /* NZ-CHAT */ :int { 524 } //Z#514
-,  /* Navajo */ :int { 105 } //Z#515
-,  /* PLT */ :int { 259 } //Z#516
-,  /* PNT */ :int { 173 } //Z#517
-,  /* PRC */ :int { 291 } //Z#518
-,  /* PRT */ :int { 178 } //Z#519
-,  /* PST */ :int { 145 } //Z#520
+  } //Z#506
+,  /* Mexico/BajaNorte */ :int { 203 } //Z#507
+,  /* Mexico/BajaSur */ :int { 153 } //Z#508
+,  /* Mexico/General */ :int { 157 } //Z#509
+,  /* Mideast/Riyadh87 */ :int { 286 } //Z#510
+,  /* Mideast/Riyadh88 */ :int { 287 } //Z#511
+,  /* Mideast/Riyadh89 */ :int { 288 } //Z#512
+,  /* NET */ :int { 311 } //Z#513
+,  /* NST */ :int { 525 } //Z#514
+,  /* NZ */ :int { 525 } //Z#515
+,  /* NZ-CHAT */ :int { 526 } //Z#516
+,  /* Navajo */ :int { 106 } //Z#517
+,  /* PLT */ :int { 261 } //Z#518
+,  /* PNT */ :int { 174 } //Z#519
+,  /* PRC */ :int { 293 } //Z#520
+,  /* PRT */ :int { 179 } //Z#521
+,  /* PST */ :int { 146 } //Z#522
 ,  /* PST8PDT */ :array {
     :intvector { -2147483648, -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -769395600, -765385200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
     :intvector { -28800, 0, -28800, 3600 }
     :bin { "000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "US"
     :intvector { -28800, 2008 }
-  } //Z#521
+  } //Z#523
 ,  /* Pacific/Apia */ :array {
     :intvector { -2147483648, -1861878784, -631110600 }
     :intvector { -41400, 0, -41216, 0, -39600, 0 }
     :bin { "010002" }
-    :intvector { 502, 522 }
-  } //Z#522
+    :intvector { 504, 524 }
+  } //Z#524
 ,  /* Pacific/Auckland */ :array {
     :intvector { -2147483648, -1330335000, -1320057000, -1300699800, -1287396000, -1269250200, -1255946400, -1237800600, -1224496800, -1206351000, -1192442400, -1174901400, -1160992800, -1143451800, -1125914400, -1112607000, -1094464800, -1081157400, -1063015200, -1049707800, -1031565600, -1018258200, -1000116000, -986808600, -968061600, -955359000, -936612000, -923304600, -757425600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
     :intvector { 41400, 0, 41400, 1800, 41400, 3600, 43200, 0, 43200, 3600 }
     :bin { "0002000100010001000100010001000100010001000100010001000103040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
     "NZ"
     :intvector { 43200, 2009 }
-    :intvector { 512, 513, 523 }
-  } //Z#523
+    :intvector { 514, 515, 525 }
+  } //Z#525
 ,  /* Pacific/Chatham */ :array {
     :intvector { -2147483648, -410271228, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
     :intvector { 44028, 0, 45900, 0, 45900, 3600 }
     :bin { "0001020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
     "Chatham"
     :intvector { 45900, 2009 }
-    :intvector { 514, 524 }
-  } //Z#524
+    :intvector { 516, 526 }
+  } //Z#526
 ,  /* Pacific/Easter */ :array {
     :intvector { -2147483648, -1178124152, -870552000, -865278000, -736376400, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600 }
     :intvector { -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 }
     :bin { "00020102010201020102010201020102010201020102010201020102010201020304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
     "Chile"
     :intvector { -21600, 2010 }
-    :intvector { 367, 525 }
-  } //Z#525
+    :intvector { 369, 527 }
+  } //Z#527
 ,  /* Pacific/Efate */ :array {
     :intvector { -2147483648, -1829387596, 433256400, 448977600, 467298000, 480427200, 496760400, 511876800, 528210000, 543931200, 559659600, 575380800, 591109200, 606830400, 622558800, 638280000, 654008400, 669729600, 686062800, 696340800, 719931600, 727790400 }
     :intvector { 39600, 0, 39600, 3600, 40396, 0 }
     :bin { "02000100010001000100010001000100010001000100" }
-  } //Z#526
+  } //Z#528
 ,  /* Pacific/Enderbury */ :array {
     :intvector { -2147483648, 307627200, 788958000 }
     :intvector { -43200, 0, -39600, 0, 46800, 0 }
     :bin { "000102" }
-  } //Z#527
+  } //Z#529
 ,  /* Pacific/Fakaofo */ :array {
     :intvector { -2147483648 }
     :intvector { -36000, 0 }
     :bin { "00" }
-  } //Z#528
+  } //Z#530
 ,  /* Pacific/Fiji */ :array {
     :intvector { -2147483648, -1709985220, 909842400, 920124000, 941896800, 951573600 }
     :intvector { 42820, 0, 43200, 0, 43200, 3600 }
     :bin { "000102010201" }
-  } //Z#529
+  } //Z#531
 ,  /* Pacific/Funafuti */ :array {
     :intvector { -2147483648 }
     :intvector { 43200, 0 }
     :bin { "00" }
-  } //Z#530
+  } //Z#532
 ,  /* Pacific/Galapagos */ :array {
     :intvector { -2147483648, -1230746496, 504939600 }
     :intvector { -21600, 0, -21504, 0, -18000, 0 }
     :bin { "010200" }
-  } //Z#531
+  } //Z#533
 ,  /* Pacific/Gambier */ :array {
     :intvector { -2147483648, -1806678012 }
     :intvector { -32400, 0, -32388, 0 }
     :bin { "0100" }
-  } //Z#532
+  } //Z#534
 ,  /* Pacific/Guadalcanal */ :array {
     :intvector { -2147483648, -1806748788 }
     :intvector { 38388, 0, 39600, 0 }
     :bin { "0001" }
-    :intvector { 533, 566 }
-  } //Z#533
+    :intvector { 535, 568 }
+  } //Z#535
 ,  /* Pacific/Guam */ :array {
     :intvector { -2147483648, 977493600 }
     :intvector { 36000, 0 }
     :bin { "0000" }
-  } //Z#534
+  } //Z#536
 ,  /* Pacific/Honolulu */ :array {
     :intvector { -2147483648, -1157283000, -1155472200, -880198200, -769395600, -765376200, -712150200 }
     :intvector { -37800, 0, -37800, 3600, -36000, 0 }
     :bin { "00010001010002" }
-    :intvector { 535, 589 }
-  } //Z#535
+    :intvector { 537, 591 }
+  } //Z#537
 ,  /* Pacific/Johnston */ :array {
     :intvector {  }
     :intvector { -36000, 0 }
     :bin { "" }
-  } //Z#536
+  } //Z#538
 ,  /* Pacific/Kiritimati */ :array {
     :intvector { -2147483648, 307622400, 788954400 }
     :intvector { -38400, 0, -36000, 0, 50400, 0 }
     :bin { "000102" }
-  } //Z#537
+  } //Z#539
 ,  /* Pacific/Kosrae */ :array {
     :intvector { -2147483648, -7988400, 915105600 }
     :intvector { 39600, 0, 43200, 0 }
     :bin { "000100" }
-  } //Z#538
+  } //Z#540
 ,  /* Pacific/Kwajalein */ :array {
     :intvector { -2147483648, -7988400, 745848000 }
     :intvector { -43200, 0, 39600, 0, 43200, 0 }
     :bin { "010002" }
-    :intvector { 499, 539 }
-  } //Z#539
+    :intvector { 501, 541 }
+  } //Z#541
 ,  /* Pacific/Majuro */ :array {
     :intvector { -2147483648, -7988400 }
     :intvector { 39600, 0, 43200, 0 }
     :bin { "0001" }
-  } //Z#540
+  } //Z#542
 ,  /* Pacific/Marquesas */ :array {
     :intvector { -2147483648, -1806676920 }
     :intvector { -34200, 0, -33480, 0 }
     :bin { "0100" }
-  } //Z#541
+  } //Z#543
 ,  /* Pacific/Midway */ :array {
     :intvector { -2147483648, -428504400, -420645600, -86878800, 439038000 }
     :intvector { -39600, 0, -39600, 3600 }
     :bin { "0001000000" }
-  } //Z#542
+  } //Z#544
 ,  /* Pacific/Nauru */ :array {
     :intvector { -2147483648, -1545131260, -877347000, -800960400, 294323400 }
     :intvector { 32400, 0, 40060, 0, 41400, 0, 43200, 0 }
     :bin { "0102000203" }
-  } //Z#543
+  } //Z#545
 ,  /* Pacific/Niue */ :array {
     :intvector { -2147483648, -599575200, 276089400 }
     :intvector { -41400, 0, -40800, 0, -39600, 0 }
     :bin { "010002" }
-  } //Z#544
+  } //Z#546
 ,  /* Pacific/Norfolk */ :array {
     :intvector { -2147483648, -599656320 }
     :intvector { 40320, 0, 41400, 0 }
     :bin { "0001" }
-  } //Z#545
+  } //Z#547
 ,  /* Pacific/Noumea */ :array {
     :intvector { -2147483648, -1829387148, 250002000, 257342400, 281451600, 288878400, 849366000, 857228400 }
     :intvector { 39600, 0, 39600, 3600, 39948, 0 }
     :bin { "0200010001000100" }
-  } //Z#546
+  } //Z#548
 ,  /* Pacific/Pago_Pago */ :array {
     :intvector { -2147483648, -1861879032, -631110600, -86878800, 439038000 }
     :intvector { -41400, 0, -40968, 0, -39600, 0 }
     :bin { "0100020202" }
-    :intvector { 547, 554, 595 }
-  } //Z#547
+    :intvector { 549, 556, 597 }
+  } //Z#549
 ,  /* Pacific/Palau */ :array {
     :intvector { -2147483648 }
     :intvector { 32400, 0 }
     :bin { "00" }
-  } //Z#548
+  } //Z#550
 ,  /* Pacific/Pitcairn */ :array {
     :intvector { -2147483648, 893665800 }
     :intvector { -30600, 0, -28800, 0 }
     :bin { "0001" }
-  } //Z#549
+  } //Z#551
 ,  /* Pacific/Ponape */ :array {
     :intvector { -2147483648 }
     :intvector { 39600, 0 }
     :bin { "00" }
-  } //Z#550
+  } //Z#552
 ,  /* Pacific/Port_Moresby */ :array {
     :intvector { -2147483648 }
     :intvector { 36000, 0 }
     :bin { "00" }
-  } //Z#551
+  } //Z#553
 ,  /* Pacific/Rarotonga */ :array {
     :intvector { -2147483648, 279714600, 289387800, 309952800, 320837400, 341402400, 352287000, 372852000, 384341400, 404906400, 415791000, 436356000, 447240600, 467805600, 478690200, 499255200, 510139800, 530704800, 541589400, 562154400, 573643800, 594208800, 605093400, 625658400, 636543000, 657108000, 667992600 }
     :intvector { -37800, 0, -36000, 0, -36000, 1800 }
     :bin { "000201020102010201020102010201020102010201020102010201" }
-  } //Z#552
+  } //Z#554
 ,  /* Pacific/Saipan */ :array {
     :intvector { -2147483648, -7981200, 977493600 }
     :intvector { 32400, 0, 36000, 0 }
     :bin { "000101" }
-  } //Z#553
-,  /* Pacific/Samoa */ :int { 547 } //Z#554
+  } //Z#555
+,  /* Pacific/Samoa */ :int { 549 } //Z#556
 ,  /* Pacific/Tahiti */ :array {
     :intvector { -2147483648, -1806674504 }
     :intvector { -36000, 0, -35896, 0 }
     :bin { "0100" }
-  } //Z#555
+  } //Z#557
 ,  /* Pacific/Tarawa */ :array {
     :intvector { -2147483648 }
     :intvector { 43200, 0 }
     :bin { "00" }
-  } //Z#556
+  } //Z#558
 ,  /* Pacific/Tongatapu */ :array {
     :intvector { -2147483648, -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400 }
     :intvector { 44400, 0, 46800, 0, 46800, 3600 }
     :bin { "0001020102010201" }
-  } //Z#557
+  } //Z#559
 ,  /* Pacific/Truk */ :array {
     :intvector { -2147483648 }
     :intvector { 36000, 0 }
     :bin { "00" }
-    :intvector { 558, 561 }
-  } //Z#558
+    :intvector { 560, 563 }
+  } //Z#560
 ,  /* Pacific/Wake */ :array {
     :intvector { -2147483648 }
     :intvector { 43200, 0 }
     :bin { "00" }
-  } //Z#559
+  } //Z#561
 ,  /* Pacific/Wallis */ :array {
     :intvector { -2147483648 }
     :intvector { 43200, 0 }
     :bin { "00" }
-  } //Z#560
-,  /* Pacific/Yap */ :int { 558 } //Z#561
-,  /* Poland */ :int { 466 } //Z#562
-,  /* Portugal */ :int { 433 } //Z#563
-,  /* ROC */ :int { 293 } //Z#564
-,  /* ROK */ :int { 290 } //Z#565
-,  /* SST */ :int { 533 } //Z#566
-,  /* Singapore */ :int { 292 } //Z#567
-,  /* SystemV/AST4 */ :int { 384 } //Z#568
-,  /* SystemV/AST4ADT */ :int { 123 } //Z#569
-,  /* SystemV/CST6 */ :int { 386 } //Z#570
-,  /* SystemV/CST6CDT */ :int { 95 } //Z#571
-,  /* SystemV/EST5 */ :int { 385 } //Z#572
-,  /* SystemV/EST5EDT */ :int { 164 } //Z#573
-,  /* SystemV/HST10 */ :int { 379 } //Z#574
-,  /* SystemV/MST7 */ :int { 387 } //Z#575
-,  /* SystemV/MST7MDT */ :int { 105 } //Z#576
-,  /* SystemV/PST8 */ :int { 388 } //Z#577
-,  /* SystemV/PST8PDT */ :int { 145 } //Z#578
-,  /* SystemV/YST9 */ :int { 389 } //Z#579
-,  /* SystemV/YST9YDT */ :int { 59 } //Z#580
-,  /* Turkey */ :int { 429 } //Z#581
-,  /* UCT */ :int { 407 } //Z#582
-,  /* US/Alaska */ :int { 59 } //Z#583
-,  /* US/Aleutian */ :int { 58 } //Z#584
-,  /* US/Arizona */ :int { 173 } //Z#585
-,  /* US/Central */ :int { 95 } //Z#586
-,  /* US/East-Indiana */ :int { 126 } //Z#587
-,  /* US/Eastern */ :int { 164 } //Z#588
-,  /* US/Hawaii */ :int { 535 } //Z#589
-,  /* US/Indiana-Starke */ :int { 127 } //Z#590
-,  /* US/Michigan */ :int { 106 } //Z#591
-,  /* US/Mountain */ :int { 105 } //Z#592
-,  /* US/Pacific */ :int { 145 } //Z#593
-,  /* US/Pacific-New */ :int { 145 } //Z#594
-,  /* US/Samoa */ :int { 547 } //Z#595
-,  /* UTC */ :int { 408 } //Z#596
-,  /* Universal */ :int { 408 } //Z#597
-,  /* VST */ :int { 249 } //Z#598
-,  /* W-SU */ :int { 442 } //Z#599
+  } //Z#562
+,  /* Pacific/Yap */ :int { 560 } //Z#563
+,  /* Poland */ :int { 468 } //Z#564
+,  /* Portugal */ :int { 435 } //Z#565
+,  /* ROC */ :int { 295 } //Z#566
+,  /* ROK */ :int { 292 } //Z#567
+,  /* SST */ :int { 535 } //Z#568
+,  /* Singapore */ :int { 294 } //Z#569
+,  /* SystemV/AST4 */ :int { 386 } //Z#570
+,  /* SystemV/AST4ADT */ :int { 124 } //Z#571
+,  /* SystemV/CST6 */ :int { 388 } //Z#572
+,  /* SystemV/CST6CDT */ :int { 96 } //Z#573
+,  /* SystemV/EST5 */ :int { 387 } //Z#574
+,  /* SystemV/EST5EDT */ :int { 165 } //Z#575
+,  /* SystemV/HST10 */ :int { 381 } //Z#576
+,  /* SystemV/MST7 */ :int { 389 } //Z#577
+,  /* SystemV/MST7MDT */ :int { 106 } //Z#578
+,  /* SystemV/PST8 */ :int { 390 } //Z#579
+,  /* SystemV/PST8PDT */ :int { 146 } //Z#580
+,  /* SystemV/YST9 */ :int { 391 } //Z#581
+,  /* SystemV/YST9YDT */ :int { 59 } //Z#582
+,  /* Turkey */ :int { 431 } //Z#583
+,  /* UCT */ :int { 409 } //Z#584
+,  /* US/Alaska */ :int { 59 } //Z#585
+,  /* US/Aleutian */ :int { 58 } //Z#586
+,  /* US/Arizona */ :int { 174 } //Z#587
+,  /* US/Central */ :int { 96 } //Z#588
+,  /* US/East-Indiana */ :int { 127 } //Z#589
+,  /* US/Eastern */ :int { 165 } //Z#590
+,  /* US/Hawaii */ :int { 537 } //Z#591
+,  /* US/Indiana-Starke */ :int { 128 } //Z#592
+,  /* US/Michigan */ :int { 107 } //Z#593
+,  /* US/Mountain */ :int { 106 } //Z#594
+,  /* US/Pacific */ :int { 146 } //Z#595
+,  /* US/Pacific-New */ :int { 146 } //Z#596
+,  /* US/Samoa */ :int { 549 } //Z#597
+,  /* UTC */ :int { 410 } //Z#598
+,  /* Universal */ :int { 410 } //Z#599
+,  /* VST */ :int { 251 } //Z#600
+,  /* W-SU */ :int { 444 } //Z#601
 ,  /* WET */ :array {
     :intvector { -2147483648, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
     :intvector { 0, 0, 0, 3600 }
     :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100" }
     "EU"
     :intvector { 0, 1997 }
-  } //Z#600
-,  /* Zulu */ :int { 408 } //Z#601
+  } //Z#602
+,  /* Zulu */ :int { 410 } //Z#603
  }
  Names {
     "ACT","AET","AGT","ART","AST","Africa/Abidjan","Africa/Accra" // 6
@@ -2792,159 +2790,159 @@
     ,"America/Argentina/ComodRivadavia","America/Argentina/Cordoba" // 66
     ,"America/Argentina/Jujuy","America/Argentina/La_Rioja" // 68
     ,"America/Argentina/Mendoza","America/Argentina/Rio_Gallegos" // 70
-    ,"America/Argentina/San_Juan","America/Argentina/San_Luis" // 72
-    ,"America/Argentina/Tucuman","America/Argentina/Ushuaia" // 74
-    ,"America/Aruba","America/Asuncion","America/Atikokan" // 77
-    ,"America/Atka","America/Bahia","America/Barbados" // 80
-    ,"America/Belem","America/Belize","America/Blanc-Sablon" // 83
-    ,"America/Boa_Vista","America/Bogota","America/Boise" // 86
-    ,"America/Buenos_Aires","America/Cambridge_Bay","America/Campo_Grande" // 89
-    ,"America/Cancun","America/Caracas","America/Catamarca" // 92
-    ,"America/Cayenne","America/Cayman","America/Chicago" // 95
-    ,"America/Chihuahua","America/Coral_Harbour","America/Cordoba" // 98
-    ,"America/Costa_Rica","America/Cuiaba","America/Curacao" // 101
-    ,"America/Danmarkshavn","America/Dawson","America/Dawson_Creek" // 104
-    ,"America/Denver","America/Detroit","America/Dominica" // 107
-    ,"America/Edmonton","America/Eirunepe","America/El_Salvador" // 110
-    ,"America/Ensenada","America/Fort_Wayne","America/Fortaleza" // 113
-    ,"America/Glace_Bay","America/Godthab","America/Goose_Bay" // 116
-    ,"America/Grand_Turk","America/Grenada","America/Guadeloupe" // 119
-    ,"America/Guatemala","America/Guayaquil","America/Guyana" // 122
-    ,"America/Halifax","America/Havana","America/Hermosillo" // 125
-    ,"America/Indiana/Indianapolis","America/Indiana/Knox" // 127
-    ,"America/Indiana/Marengo","America/Indiana/Petersburg" // 129
-    ,"America/Indiana/Tell_City","America/Indiana/Vevay" // 131
-    ,"America/Indiana/Vincennes","America/Indiana/Winamac" // 133
-    ,"America/Indianapolis","America/Inuvik","America/Iqaluit" // 136
-    ,"America/Jamaica","America/Jujuy","America/Juneau" // 139
-    ,"America/Kentucky/Louisville","America/Kentucky/Monticello" // 141
-    ,"America/Knox_IN","America/La_Paz","America/Lima" // 144
-    ,"America/Los_Angeles","America/Louisville","America/Maceio" // 147
-    ,"America/Managua","America/Manaus","America/Marigot" // 150
-    ,"America/Martinique","America/Mazatlan","America/Mendoza" // 153
-    ,"America/Menominee","America/Merida","America/Mexico_City" // 156
-    ,"America/Miquelon","America/Moncton","America/Monterrey" // 159
-    ,"America/Montevideo","America/Montreal","America/Montserrat" // 162
-    ,"America/Nassau","America/New_York","America/Nipigon" // 165
-    ,"America/Nome","America/Noronha","America/North_Dakota/Center" // 168
-    ,"America/North_Dakota/New_Salem","America/Panama" // 170
-    ,"America/Pangnirtung","America/Paramaribo","America/Phoenix" // 173
-    ,"America/Port-au-Prince","America/Port_of_Spain","America/Porto_Acre" // 176
-    ,"America/Porto_Velho","America/Puerto_Rico","America/Rainy_River" // 179
-    ,"America/Rankin_Inlet","America/Recife","America/Regina" // 182
-    ,"America/Resolute","America/Rio_Branco","America/Rosario" // 185
-    ,"America/Santiago","America/Santo_Domingo","America/Sao_Paulo" // 188
-    ,"America/Scoresbysund","America/Shiprock","America/St_Barthelemy" // 191
-    ,"America/St_Johns","America/St_Kitts","America/St_Lucia" // 194
-    ,"America/St_Thomas","America/St_Vincent","America/Swift_Current" // 197
-    ,"America/Tegucigalpa","America/Thule","America/Thunder_Bay" // 200
-    ,"America/Tijuana","America/Toronto","America/Tortola" // 203
-    ,"America/Vancouver","America/Virgin","America/Whitehorse" // 206
-    ,"America/Winnipeg","America/Yakutat","America/Yellowknife" // 209
-    ,"Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville" // 212
-    ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 215
-    ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 218
-    ,"Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden" // 221
-    ,"Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau" // 225
-    ,"Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad","Asia/Baghdad" // 229
-    ,"Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Beirut" // 233
-    ,"Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Choibalsan" // 237
-    ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 241
-    ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 245
-    ,"Asia/Dushanbe","Asia/Gaza","Asia/Harbin","Asia/Ho_Chi_Minh" // 249
-    ,"Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Istanbul" // 253
-    ,"Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul" // 257
-    ,"Asia/Kamchatka","Asia/Karachi","Asia/Kashgar","Asia/Katmandu" // 261
-    ,"Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur" // 264
-    ,"Asia/Kuching","Asia/Kuwait","Asia/Macao","Asia/Macau" // 268
-    ,"Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat" // 272
-    ,"Asia/Nicosia","Asia/Novosibirsk","Asia/Omsk","Asia/Oral" // 276
-    ,"Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang" // 279
-    ,"Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh" // 283
-    ,"Asia/Riyadh87","Asia/Riyadh88","Asia/Riyadh89","Asia/Saigon" // 287
-    ,"Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai" // 291
-    ,"Asia/Singapore","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi" // 295
-    ,"Asia/Tehran","Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu" // 299
-    ,"Asia/Tokyo","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 302
-    ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Vientiane","Asia/Vladivostok" // 306
-    ,"Asia/Yakutsk","Asia/Yekaterinburg","Asia/Yerevan" // 309
-    ,"Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary" // 312
-    ,"Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Faroe" // 315
-    ,"Atlantic/Jan_Mayen","Atlantic/Madeira","Atlantic/Reykjavik" // 318
-    ,"Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley" // 321
-    ,"Australia/ACT","Australia/Adelaide","Australia/Brisbane" // 324
-    ,"Australia/Broken_Hill","Australia/Canberra","Australia/Currie" // 327
-    ,"Australia/Darwin","Australia/Eucla","Australia/Hobart" // 330
-    ,"Australia/LHI","Australia/Lindeman","Australia/Lord_Howe" // 333
-    ,"Australia/Melbourne","Australia/NSW","Australia/North" // 336
-    ,"Australia/Perth","Australia/Queensland","Australia/South" // 339
-    ,"Australia/Sydney","Australia/Tasmania","Australia/Victoria" // 342
-    ,"Australia/West","Australia/Yancowinna","BET","BST" // 346
-    ,"Brazil/Acre","Brazil/DeNoronha","Brazil/East","Brazil/West" // 350
-    ,"CAT","CET","CNT","CST","CST6CDT","CTT","Canada/Atlantic" // 357
-    ,"Canada/Central","Canada/East-Saskatchewan","Canada/Eastern" // 360
-    ,"Canada/Mountain","Canada/Newfoundland","Canada/Pacific" // 363
-    ,"Canada/Saskatchewan","Canada/Yukon","Chile/Continental" // 366
-    ,"Chile/EasterIsland","Cuba","EAT","ECT","EET","EST" // 372
-    ,"EST5EDT","Egypt","Eire","Etc/GMT","Etc/GMT+0","Etc/GMT+1" // 378
-    ,"Etc/GMT+10","Etc/GMT+11","Etc/GMT+12","Etc/GMT+2" // 382
-    ,"Etc/GMT+3","Etc/GMT+4","Etc/GMT+5","Etc/GMT+6","Etc/GMT+7" // 387
-    ,"Etc/GMT+8","Etc/GMT+9","Etc/GMT-0","Etc/GMT-1","Etc/GMT-10" // 392
-    ,"Etc/GMT-11","Etc/GMT-12","Etc/GMT-13","Etc/GMT-14" // 396
-    ,"Etc/GMT-2","Etc/GMT-3","Etc/GMT-4","Etc/GMT-5","Etc/GMT-6" // 401
-    ,"Etc/GMT-7","Etc/GMT-8","Etc/GMT-9","Etc/GMT0","Etc/Greenwich" // 406
-    ,"Etc/UCT","Etc/UTC","Etc/Universal","Etc/Unknown" // 410
-    ,"Etc/Zulu","Europe/Amsterdam","Europe/Andorra","Europe/Athens" // 414
-    ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 417
-    ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 420
-    ,"Europe/Budapest","Europe/Chisinau","Europe/Copenhagen" // 423
-    ,"Europe/Dublin","Europe/Gibraltar","Europe/Guernsey" // 426
-    ,"Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul" // 429
-    ,"Europe/Jersey","Europe/Kaliningrad","Europe/Kiev" // 432
-    ,"Europe/Lisbon","Europe/Ljubljana","Europe/London" // 435
-    ,"Europe/Luxembourg","Europe/Madrid","Europe/Malta" // 438
-    ,"Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 441
-    ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 445
-    ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 449
-    ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 452
-    ,"Europe/Simferopol","Europe/Skopje","Europe/Sofia" // 455
-    ,"Europe/Stockholm","Europe/Tallinn","Europe/Tirane" // 458
-    ,"Europe/Tiraspol","Europe/Uzhgorod","Europe/Vaduz" // 461
-    ,"Europe/Vatican","Europe/Vienna","Europe/Vilnius" // 464
-    ,"Europe/Volgograd","Europe/Warsaw","Europe/Zagreb" // 467
-    ,"Europe/Zaporozhye","Europe/Zurich","Factory","GB" // 471
-    ,"GB-Eire","GMT","GMT+0","GMT-0","GMT0","Greenwich" // 477
-    ,"HST","Hongkong","IET","IST","Iceland","Indian/Antananarivo" // 483
-    ,"Indian/Chagos","Indian/Christmas","Indian/Cocos" // 486
-    ,"Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 490
-    ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 493
-    ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 499
-    ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 505
-    ,"Mexico/BajaSur","Mexico/General","Mideast/Riyadh87" // 508
-    ,"Mideast/Riyadh88","Mideast/Riyadh89","NET","NST" // 512
-    ,"NZ","NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST" // 520
-    ,"PST8PDT","Pacific/Apia","Pacific/Auckland","Pacific/Chatham" // 524
-    ,"Pacific/Easter","Pacific/Efate","Pacific/Enderbury" // 527
-    ,"Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti" // 530
-    ,"Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal" // 533
-    ,"Pacific/Guam","Pacific/Honolulu","Pacific/Johnston" // 536
-    ,"Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein" // 539
-    ,"Pacific/Majuro","Pacific/Marquesas","Pacific/Midway" // 542
-    ,"Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 546
-    ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 549
-    ,"Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga" // 552
-    ,"Pacific/Saipan","Pacific/Samoa","Pacific/Tahiti" // 555
-    ,"Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk" // 558
-    ,"Pacific/Wake","Pacific/Wallis","Pacific/Yap","Poland" // 562
-    ,"Portugal","ROC","ROK","SST","Singapore","SystemV/AST4" // 568
-    ,"SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 571
-    ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 575
-    ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 578
-    ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 583
-    ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 587
-    ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 591
-    ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 595
-    ,"UTC","Universal","VST","W-SU","WET","Zulu" // 601
+    ,"America/Argentina/Salta","America/Argentina/San_Juan" // 72
+    ,"America/Argentina/San_Luis","America/Argentina/Tucuman" // 74
+    ,"America/Argentina/Ushuaia","America/Aruba","America/Asuncion" // 77
+    ,"America/Atikokan","America/Atka","America/Bahia" // 80
+    ,"America/Barbados","America/Belem","America/Belize" // 83
+    ,"America/Blanc-Sablon","America/Boa_Vista","America/Bogota" // 86
+    ,"America/Boise","America/Buenos_Aires","America/Cambridge_Bay" // 89
+    ,"America/Campo_Grande","America/Cancun","America/Caracas" // 92
+    ,"America/Catamarca","America/Cayenne","America/Cayman" // 95
+    ,"America/Chicago","America/Chihuahua","America/Coral_Harbour" // 98
+    ,"America/Cordoba","America/Costa_Rica","America/Cuiaba" // 101
+    ,"America/Curacao","America/Danmarkshavn","America/Dawson" // 104
+    ,"America/Dawson_Creek","America/Denver","America/Detroit" // 107
+    ,"America/Dominica","America/Edmonton","America/Eirunepe" // 110
+    ,"America/El_Salvador","America/Ensenada","America/Fort_Wayne" // 113
+    ,"America/Fortaleza","America/Glace_Bay","America/Godthab" // 116
+    ,"America/Goose_Bay","America/Grand_Turk","America/Grenada" // 119
+    ,"America/Guadeloupe","America/Guatemala","America/Guayaquil" // 122
+    ,"America/Guyana","America/Halifax","America/Havana" // 125
+    ,"America/Hermosillo","America/Indiana/Indianapolis" // 127
+    ,"America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg" // 130
+    ,"America/Indiana/Tell_City","America/Indiana/Vevay" // 132
+    ,"America/Indiana/Vincennes","America/Indiana/Winamac" // 134
+    ,"America/Indianapolis","America/Inuvik","America/Iqaluit" // 137
+    ,"America/Jamaica","America/Jujuy","America/Juneau" // 140
+    ,"America/Kentucky/Louisville","America/Kentucky/Monticello" // 142
+    ,"America/Knox_IN","America/La_Paz","America/Lima" // 145
+    ,"America/Los_Angeles","America/Louisville","America/Maceio" // 148
+    ,"America/Managua","America/Manaus","America/Marigot" // 151
+    ,"America/Martinique","America/Mazatlan","America/Mendoza" // 154
+    ,"America/Menominee","America/Merida","America/Mexico_City" // 157
+    ,"America/Miquelon","America/Moncton","America/Monterrey" // 160
+    ,"America/Montevideo","America/Montreal","America/Montserrat" // 163
+    ,"America/Nassau","America/New_York","America/Nipigon" // 166
+    ,"America/Nome","America/Noronha","America/North_Dakota/Center" // 169
+    ,"America/North_Dakota/New_Salem","America/Panama" // 171
+    ,"America/Pangnirtung","America/Paramaribo","America/Phoenix" // 174
+    ,"America/Port-au-Prince","America/Port_of_Spain","America/Porto_Acre" // 177
+    ,"America/Porto_Velho","America/Puerto_Rico","America/Rainy_River" // 180
+    ,"America/Rankin_Inlet","America/Recife","America/Regina" // 183
+    ,"America/Resolute","America/Rio_Branco","America/Rosario" // 186
+    ,"America/Santarem","America/Santiago","America/Santo_Domingo" // 189
+    ,"America/Sao_Paulo","America/Scoresbysund","America/Shiprock" // 192
+    ,"America/St_Barthelemy","America/St_Johns","America/St_Kitts" // 195
+    ,"America/St_Lucia","America/St_Thomas","America/St_Vincent" // 198
+    ,"America/Swift_Current","America/Tegucigalpa","America/Thule" // 201
+    ,"America/Thunder_Bay","America/Tijuana","America/Toronto" // 204
+    ,"America/Tortola","America/Vancouver","America/Virgin" // 207
+    ,"America/Whitehorse","America/Winnipeg","America/Yakutat" // 210
+    ,"America/Yellowknife","Antarctica/Casey","Antarctica/Davis" // 213
+    ,"Antarctica/DumontDUrville","Antarctica/Mawson","Antarctica/McMurdo" // 216
+    ,"Antarctica/Palmer","Antarctica/Rothera","Antarctica/South_Pole" // 219
+    ,"Antarctica/Syowa","Antarctica/Vostok","Arctic/Longyearbyen" // 222
+    ,"Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr" // 226
+    ,"Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad" // 230
+    ,"Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok" // 234
+    ,"Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Calcutta" // 238
+    ,"Asia/Choibalsan","Asia/Chongqing","Asia/Chungking" // 241
+    ,"Asia/Colombo","Asia/Dacca","Asia/Damascus","Asia/Dhaka" // 245
+    ,"Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Gaza" // 249
+    ,"Asia/Harbin","Asia/Ho_Chi_Minh","Asia/Hong_Kong" // 252
+    ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 256
+    ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 260
+    ,"Asia/Karachi","Asia/Kashgar","Asia/Katmandu","Asia/Kolkata" // 264
+    ,"Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching" // 267
+    ,"Asia/Kuwait","Asia/Macao","Asia/Macau","Asia/Magadan" // 271
+    ,"Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia" // 275
+    ,"Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh" // 279
+    ,"Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda" // 283
+    ,"Asia/Rangoon","Asia/Riyadh","Asia/Riyadh87","Asia/Riyadh88" // 287
+    ,"Asia/Riyadh89","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand" // 291
+    ,"Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Taipei" // 295
+    ,"Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Tel_Aviv" // 299
+    ,"Asia/Thimbu","Asia/Thimphu","Asia/Tokyo","Asia/Ujung_Pandang" // 303
+    ,"Asia/Ulaanbaatar","Asia/Ulan_Bator","Asia/Urumqi" // 306
+    ,"Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk" // 309
+    ,"Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores" // 312
+    ,"Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde" // 315
+    ,"Atlantic/Faeroe","Atlantic/Faroe","Atlantic/Jan_Mayen" // 318
+    ,"Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia" // 321
+    ,"Atlantic/St_Helena","Atlantic/Stanley","Australia/ACT" // 324
+    ,"Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill" // 327
+    ,"Australia/Canberra","Australia/Currie","Australia/Darwin" // 330
+    ,"Australia/Eucla","Australia/Hobart","Australia/LHI" // 333
+    ,"Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne" // 336
+    ,"Australia/NSW","Australia/North","Australia/Perth" // 339
+    ,"Australia/Queensland","Australia/South","Australia/Sydney" // 342
+    ,"Australia/Tasmania","Australia/Victoria","Australia/West" // 345
+    ,"Australia/Yancowinna","BET","BST","Brazil/Acre","Brazil/DeNoronha" // 350
+    ,"Brazil/East","Brazil/West","CAT","CET","CNT","CST" // 356
+    ,"CST6CDT","CTT","Canada/Atlantic","Canada/Central" // 360
+    ,"Canada/East-Saskatchewan","Canada/Eastern","Canada/Mountain" // 363
+    ,"Canada/Newfoundland","Canada/Pacific","Canada/Saskatchewan" // 366
+    ,"Canada/Yukon","Chile/Continental","Chile/EasterIsland" // 369
+    ,"Cuba","EAT","ECT","EET","EST","EST5EDT","Egypt","Eire" // 377
+    ,"Etc/GMT","Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 382
+    ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 387
+    ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 392
+    ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 396
+    ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 400
+    ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 405
+    ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 410
+    ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 414
+    ,"Europe/Andorra","Europe/Athens","Europe/Belfast" // 417
+    ,"Europe/Belgrade","Europe/Berlin","Europe/Bratislava" // 420
+    ,"Europe/Brussels","Europe/Bucharest","Europe/Budapest" // 423
+    ,"Europe/Chisinau","Europe/Copenhagen","Europe/Dublin" // 426
+    ,"Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki" // 429
+    ,"Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey" // 432
+    ,"Europe/Kaliningrad","Europe/Kiev","Europe/Lisbon" // 435
+    ,"Europe/Ljubljana","Europe/London","Europe/Luxembourg" // 438
+    ,"Europe/Madrid","Europe/Malta","Europe/Mariehamn" // 441
+    ,"Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Nicosia" // 445
+    ,"Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague" // 449
+    ,"Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino" // 453
+    ,"Europe/Sarajevo","Europe/Simferopol","Europe/Skopje" // 456
+    ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 459
+    ,"Europe/Tirane","Europe/Tiraspol","Europe/Uzhgorod" // 462
+    ,"Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius" // 466
+    ,"Europe/Volgograd","Europe/Warsaw","Europe/Zagreb" // 469
+    ,"Europe/Zaporozhye","Europe/Zurich","Factory","GB" // 473
+    ,"GB-Eire","GMT","GMT+0","GMT-0","GMT0","Greenwich" // 479
+    ,"HST","Hongkong","IET","IST","Iceland","Indian/Antananarivo" // 485
+    ,"Indian/Chagos","Indian/Christmas","Indian/Cocos" // 488
+    ,"Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 492
+    ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 495
+    ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 501
+    ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 507
+    ,"Mexico/BajaSur","Mexico/General","Mideast/Riyadh87" // 510
+    ,"Mideast/Riyadh88","Mideast/Riyadh89","NET","NST" // 514
+    ,"NZ","NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST" // 522
+    ,"PST8PDT","Pacific/Apia","Pacific/Auckland","Pacific/Chatham" // 526
+    ,"Pacific/Easter","Pacific/Efate","Pacific/Enderbury" // 529
+    ,"Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti" // 532
+    ,"Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal" // 535
+    ,"Pacific/Guam","Pacific/Honolulu","Pacific/Johnston" // 538
+    ,"Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein" // 541
+    ,"Pacific/Majuro","Pacific/Marquesas","Pacific/Midway" // 544
+    ,"Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 548
+    ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 551
+    ,"Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga" // 554
+    ,"Pacific/Saipan","Pacific/Samoa","Pacific/Tahiti" // 557
+    ,"Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk" // 560
+    ,"Pacific/Wake","Pacific/Wallis","Pacific/Yap","Poland" // 564
+    ,"Portugal","ROC","ROK","SST","Singapore","SystemV/AST4" // 570
+    ,"SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 573
+    ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 577
+    ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 580
+    ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 585
+    ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 589
+    ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 593
+    ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 597
+    ,"UTC","Universal","VST","W-SU","WET","Zulu" // 603
  }
  Rules { 
   AN:intvector {
@@ -2960,13 +2958,13 @@
     9, 1, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600
   } //_#3
   Arg:intvector {
-    9, 1, -1, 0, 0, 2, 15, -1, 0, 0, 3600
+    9, 15, -1, 0, 0, 2, 15, -1, 0, 0, 3600
   } //_#4
   Azer:intvector {
     2, -31, -1, 14400, 0, 9, -31, -1, 18000, 0, 3600
   } //_#5
   Brazil:intvector {
-    9, 8, -1, 0, 0, 1, 15, -1, 0, 0, 3600
+    9, 15, -1, 0, 0, 1, 15, -1, 0, 0, 3600
   } //_#6
   C-Eur:intvector {
     2, -31, -1, 7200, 1, 9, -31, -1, 7200, 1, 3600
@@ -3007,297 +3005,300 @@
   Lebanon:intvector {
     2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600
   } //_#19
+  Mauritius:intvector {
+    9, -31, -1, 7200, 1, 2, -31, -1, 7200, 1, 3600
+  } //_#20
   Mexico:intvector {
     3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
-  } //_#20
+  } //_#21
   NZ:intvector {
     8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600
-  } //_#21
+  } //_#22
   NZAQ:intvector {
     8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600
-  } //_#22
+  } //_#23
   Namibia:intvector {
     8, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 3600
-  } //_#23
+  } //_#24
   Palestine:intvector {
-    3, 1, 0, 0, 0, 8, 8, -5, 7200, 0, 3600
-  } //_#24
+    3, 1, 0, 0, 0, 7, -31, -5, 7200, 0, 3600
+  } //_#25
   Para:intvector {
     9, 15, -1, 0, 0, 2, 8, -1, 0, 0, 3600
-  } //_#25
+  } //_#26
   Russia:intvector {
     2, -31, -1, 7200, 1, 9, -31, -1, 7200, 1, 3600
-  } //_#26
+  } //_#27
   RussiaAsia:intvector {
     2, -31, -1, 7200, 1, 9, -31, -1, 7200, 1, 3600
-  } //_#27
+  } //_#28
   StJohns:intvector {
     2, 8, -1, 60, 0, 10, 1, -1, 60, 0, 3600
-  } //_#28
+  } //_#29
   Syria:intvector {
-    3, 1, -6, 0, 0, 9, 1, 0, 0, 0, 3600
-  } //_#29
+    3, 1, -6, 0, 0, 10, 1, 0, 0, 0, 3600
+  } //_#30
   TC:intvector {
     2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
-  } //_#30
+  } //_#31
   Thule:intvector {
     2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
-  } //_#31
+  } //_#32
   Tunisia:intvector {
     2, -31, -1, 7200, 1, 9, -31, -1, 7200, 1, 3600
-  } //_#32
+  } //_#33
   US:intvector {
     2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
-  } //_#33
+  } //_#34
   Uruguay:intvector {
     9, 1, -1, 7200, 0, 2, 8, -1, 7200, 0, 3600
-  } //_#34
+  } //_#35
  }
  Regions { 
-  Default:intvector { 284, 285, 286, 352, 355, 371, 372, 373, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 470, 473, 474, 475, 476, 477, 478, 501, 503, 504, 508, 509, 510, 521, 568, 570, 572, 574, 575, 577, 579, 582, 596, 597, 600, 601 } //R#0
-  AD:intvector { 413 } //R#1
-  AE:intvector { 245 } //R#2
-  AF:intvector { 257 } //R#3
+  Default:intvector { 286, 287, 288, 354, 357, 373, 374, 375, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 472, 475, 476, 477, 478, 479, 480, 503, 505, 506, 510, 511, 512, 523, 570, 572, 574, 576, 577, 579, 581, 584, 598, 599, 602, 603 } //R#0
+  AD:intvector { 415 } //R#1
+  AE:intvector { 247 } //R#2
+  AF:intvector { 259 } //R#3
   AG:intvector { 61 } //R#4
   AI:intvector { 60 } //R#5
-  AL:intvector { 458 } //R#6
-  AM:intvector { 309, 511 } //R#7
-  AN:intvector { 101 } //R#8
+  AL:intvector { 460 } //R#6
+  AM:intvector { 311, 513 } //R#7
+  AN:intvector { 102 } //R#8
   AO:intvector { 38 } //R#9
-  AQ:intvector { 210, 211, 212, 213, 214, 215, 216, 217, 218, 219 } //R#10
-  AR:intvector { 2, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 87, 92, 98, 138, 153, 185 } //R#11
-  AS:intvector { 547, 554, 595 } //R#12
-  AT:intvector { 463 } //R#13
-  AU:intvector { 0, 1, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344 } //R#14
-  AW:intvector { 75 } //R#15
-  AX:intvector { 439 } //R#16
-  AZ:intvector { 231 } //R#17
-  BA:intvector { 452 } //R#18
-  BB:intvector { 80 } //R#19
-  BD:intvector { 241, 243, 346 } //R#20
-  BE:intvector { 419 } //R#21
+  AQ:intvector { 212, 213, 214, 215, 216, 217, 218, 219, 220, 221 } //R#10
+  AR:intvector { 2, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 88, 93, 99, 139, 154, 186 } //R#11
+  AS:intvector { 549, 556, 597 } //R#12
+  AT:intvector { 465 } //R#13
+  AU:intvector { 0, 1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346 } //R#14
+  AW:intvector { 76 } //R#15
+  AX:intvector { 441 } //R#16
+  AZ:intvector { 233 } //R#17
+  BA:intvector { 454 } //R#18
+  BB:intvector { 81 } //R#19
+  BD:intvector { 243, 245, 348 } //R#20
+  BE:intvector { 421 } //R#21
   BF:intvector { 51 } //R#22
-  BG:intvector { 455 } //R#23
-  BH:intvector { 230 } //R#24
+  BG:intvector { 457 } //R#23
+  BH:intvector { 232 } //R#24
   BI:intvector { 17 } //R#25
   BJ:intvector { 52 } //R#26
-  BL:intvector { 191 } //R#27
-  BM:intvector { 311 } //R#28
-  BN:intvector { 235 } //R#29
-  BO:intvector { 143 } //R#30
-  BR:intvector { 62, 79, 81, 84, 89, 100, 109, 113, 147, 149, 167, 176, 177, 181, 184, 188, 345, 347, 348, 349, 350 } //R#31
-  BS:intvector { 163 } //R#32
-  BT:intvector { 298, 299 } //R#33
+  BL:intvector { 193 } //R#27
+  BM:intvector { 313 } //R#28
+  BN:intvector { 237 } //R#29
+  BO:intvector { 144 } //R#30
+  BR:intvector { 62, 80, 82, 85, 90, 101, 110, 114, 148, 150, 168, 177, 178, 182, 185, 187, 190, 347, 349, 350, 351, 352 } //R#31
+  BS:intvector { 164 } //R#32
+  BT:intvector { 300, 301 } //R#33
   BW:intvector { 28 } //R#34
-  BY:intvector { 440 } //R#35
-  BZ:intvector { 82 } //R#36
-  CA:intvector { 77, 83, 88, 97, 103, 104, 108, 114, 116, 123, 135, 136, 158, 161, 165, 171, 179, 180, 182, 183, 192, 197, 200, 202, 204, 206, 207, 209, 353, 357, 358, 359, 360, 361, 362, 363, 364, 365, 569 } //R#37
-  CC:intvector { 486 } //R#38
+  BY:intvector { 442 } //R#35
+  BZ:intvector { 83 } //R#36
+  CA:intvector { 78, 84, 89, 98, 104, 105, 109, 115, 117, 124, 136, 137, 159, 162, 166, 172, 180, 181, 183, 184, 194, 199, 202, 204, 206, 208, 209, 211, 355, 359, 360, 361, 362, 363, 364, 365, 366, 367, 571 } //R#37
+  CC:intvector { 488 } //R#38
   CD:intvector { 34, 39 } //R#39
   CF:intvector { 12 } //R#40
   CG:intvector { 16 } //R#41
-  CH:intvector { 469 } //R#42
+  CH:intvector { 471 } //R#42
   CI:intvector { 5 } //R#43
-  CK:intvector { 552 } //R#44
-  CL:intvector { 186, 366, 367, 525 } //R#45
+  CK:intvector { 554 } //R#44
+  CL:intvector { 188, 368, 369, 527 } //R#45
   CM:intvector { 25 } //R#46
-  CN:intvector { 238, 239, 248, 260, 291, 304, 356, 518 } //R#47
-  CO:intvector { 85 } //R#48
-  CR:intvector { 99 } //R#49
-  CU:intvector { 124, 368 } //R#50
-  CV:intvector { 313 } //R#51
-  CX:intvector { 485 } //R#52
-  CY:intvector { 273, 443 } //R#53
-  CZ:intvector { 447 } //R#54
-  DE:intvector { 417 } //R#55
+  CN:intvector { 240, 241, 250, 262, 293, 306, 358, 520 } //R#47
+  CO:intvector { 86 } //R#48
+  CR:intvector { 100 } //R#49
+  CU:intvector { 125, 370 } //R#50
+  CV:intvector { 315 } //R#51
+  CX:intvector { 487 } //R#52
+  CY:intvector { 275, 445 } //R#53
+  CZ:intvector { 449 } //R#54
+  DE:intvector { 419 } //R#55
   DJ:intvector { 24 } //R#56
-  DK:intvector { 423 } //R#57
-  DM:intvector { 107 } //R#58
-  DO:intvector { 187 } //R#59
+  DK:intvector { 425 } //R#57
+  DM:intvector { 108 } //R#58
+  DO:intvector { 189 } //R#59
   DZ:intvector { 8 } //R#60
-  EC:intvector { 121, 531 } //R#61
-  EE:intvector { 457 } //R#62
-  EG:intvector { 3, 18, 374 } //R#63
+  EC:intvector { 122, 533 } //R#61
+  EE:intvector { 459 } //R#62
+  EG:intvector { 3, 18, 376 } //R#63
   EH:intvector { 26 } //R#64
   ER:intvector { 9, 10 } //R#65
-  ES:intvector { 20, 312, 437 } //R#66
-  ET:intvector { 7, 369 } //R#67
-  FI:intvector { 427 } //R#68
-  FJ:intvector { 529 } //R#69
-  FK:intvector { 321 } //R#70
-  FM:intvector { 538, 550, 558, 561 } //R#71
-  FO:intvector { 314, 315 } //R#72
-  FR:intvector { 370, 445 } //R#73
+  ES:intvector { 20, 314, 439 } //R#66
+  ET:intvector { 7, 371 } //R#67
+  FI:intvector { 429 } //R#68
+  FJ:intvector { 531 } //R#69
+  FK:intvector { 323 } //R#70
+  FM:intvector { 540, 552, 560, 563 } //R#71
+  FO:intvector { 316, 317 } //R#72
+  FR:intvector { 372, 447 } //R#73
   GA:intvector { 36 } //R#74
-  GB:intvector { 415, 435, 471, 472 } //R#75
-  GD:intvector { 118 } //R#76
-  GE:intvector { 295 } //R#77
-  GF:intvector { 93 } //R#78
-  GG:intvector { 426 } //R#79
+  GB:intvector { 417, 437, 473, 474 } //R#75
+  GD:intvector { 119 } //R#76
+  GE:intvector { 297 } //R#77
+  GF:intvector { 94 } //R#78
+  GG:intvector { 428 } //R#79
   GH:intvector { 6 } //R#80
-  GI:intvector { 425 } //R#81
-  GL:intvector { 102, 115, 189, 199 } //R#82
+  GI:intvector { 427 } //R#81
+  GL:intvector { 103, 116, 191, 201 } //R#82
   GM:intvector { 13 } //R#83
   GN:intvector { 21 } //R#84
-  GP:intvector { 119 } //R#85
+  GP:intvector { 120 } //R#85
   GQ:intvector { 41 } //R#86
-  GR:intvector { 414 } //R#87
-  GS:intvector { 319 } //R#88
-  GT:intvector { 120 } //R#89
-  GU:intvector { 534 } //R#90
+  GR:intvector { 416 } //R#87
+  GS:intvector { 321 } //R#88
+  GT:intvector { 121 } //R#89
+  GU:intvector { 536 } //R#90
   GW:intvector { 14 } //R#91
-  GY:intvector { 122 } //R#92
-  HK:intvector { 250, 479 } //R#93
-  HN:intvector { 198 } //R#94
-  HR:intvector { 467 } //R#95
-  HT:intvector { 174 } //R#96
-  HU:intvector { 421 } //R#97
-  ID:intvector { 254, 255, 270, 278, 301 } //R#98
-  IE:intvector { 375, 424 } //R#99
-  IL:intvector { 256, 297, 495 } //R#100
-  IM:intvector { 428 } //R#101
-  IN:intvector { 236, 262, 481 } //R#102
-  IO:intvector { 484 } //R#103
-  IQ:intvector { 229 } //R#104
-  IR:intvector { 296, 494 } //R#105
-  IS:intvector { 318, 482 } //R#106
-  IT:intvector { 449 } //R#107
-  JE:intvector { 430 } //R#108
-  JM:intvector { 137, 497 } //R#109
-  JO:intvector { 223 } //R#110
-  JP:intvector { 300, 496, 498 } //R#111
+  GY:intvector { 123 } //R#92
+  HK:intvector { 252, 481 } //R#93
+  HN:intvector { 200 } //R#94
+  HR:intvector { 469 } //R#95
+  HT:intvector { 175 } //R#96
+  HU:intvector { 423 } //R#97
+  ID:intvector { 256, 257, 272, 280, 303 } //R#98
+  IE:intvector { 377, 426 } //R#99
+  IL:intvector { 258, 299, 497 } //R#100
+  IM:intvector { 430 } //R#101
+  IN:intvector { 238, 264, 483 } //R#102
+  IO:intvector { 486 } //R#103
+  IQ:intvector { 231 } //R#104
+  IR:intvector { 298, 496 } //R#105
+  IS:intvector { 320, 484 } //R#106
+  IT:intvector { 451 } //R#107
+  JE:intvector { 432 } //R#108
+  JM:intvector { 138, 499 } //R#109
+  JO:intvector { 225 } //R#110
+  JP:intvector { 302, 498, 500 } //R#111
   KE:intvector { 47 } //R#112
-  KG:intvector { 234 } //R#113
-  KH:intvector { 277 } //R#114
-  KI:intvector { 527, 537, 556 } //R#115
-  KM:intvector { 487 } //R#116
-  KN:intvector { 193 } //R#117
-  KP:intvector { 279 } //R#118
-  KR:intvector { 290, 565 } //R#119
-  KW:intvector { 266 } //R#120
-  KY:intvector { 94 } //R#121
-  KZ:intvector { 222, 225, 226, 276, 281 } //R#122
-  LA:intvector { 305 } //R#123
-  LB:intvector { 233 } //R#124
-  LC:intvector { 194 } //R#125
-  LI:intvector { 461 } //R#126
-  LK:intvector { 240 } //R#127
+  KG:intvector { 236 } //R#113
+  KH:intvector { 279 } //R#114
+  KI:intvector { 529, 539, 558 } //R#115
+  KM:intvector { 489 } //R#116
+  KN:intvector { 195 } //R#117
+  KP:intvector { 281 } //R#118
+  KR:intvector { 292, 567 } //R#119
+  KW:intvector { 268 } //R#120
+  KY:intvector { 95 } //R#121
+  KZ:intvector { 224, 227, 228, 278, 283 } //R#122
+  LA:intvector { 307 } //R#123
+  LB:intvector { 235 } //R#124
+  LC:intvector { 196 } //R#125
+  LI:intvector { 463 } //R#126
+  LK:intvector { 242 } //R#127
   LR:intvector { 46 } //R#128
   LS:intvector { 43 } //R#129
-  LT:intvector { 464 } //R#130
-  LU:intvector { 436 } //R#131
-  LV:intvector { 448 } //R#132
-  LY:intvector { 55, 500 } //R#133
+  LT:intvector { 466 } //R#130
+  LU:intvector { 438 } //R#131
+  LV:intvector { 450 } //R#132
+  LY:intvector { 55, 502 } //R#133
   MA:intvector { 19 } //R#134
-  MC:intvector { 441 } //R#135
-  MD:intvector { 422, 459 } //R#136
-  ME:intvector { 446 } //R#137
-  MF:intvector { 150 } //R#138
-  MG:intvector { 483 } //R#139
-  MH:intvector { 499, 539, 540 } //R#140
-  MK:intvector { 454 } //R#141
+  MC:intvector { 443 } //R#135
+  MD:intvector { 424, 461 } //R#136
+  ME:intvector { 448 } //R#137
+  MF:intvector { 151 } //R#138
+  MG:intvector { 485 } //R#139
+  MH:intvector { 501, 541, 542 } //R#140
+  MK:intvector { 456 } //R#141
   ML:intvector { 11, 54 } //R#142
-  MM:intvector { 282 } //R#143
-  MN:intvector { 237, 251, 302, 303 } //R#144
-  MO:intvector { 267, 268 } //R#145
-  MP:intvector { 553 } //R#146
-  MQ:intvector { 151 } //R#147
+  MM:intvector { 284 } //R#143
+  MN:intvector { 239, 253, 304, 305 } //R#144
+  MO:intvector { 269, 270 } //R#145
+  MP:intvector { 555 } //R#146
+  MQ:intvector { 152 } //R#147
   MR:intvector { 50 } //R#148
-  MS:intvector { 162 } //R#149
-  MT:intvector { 438 } //R#150
-  MU:intvector { 491 } //R#151
-  MV:intvector { 490 } //R#152
+  MS:intvector { 163 } //R#149
+  MT:intvector { 440 } //R#150
+  MU:intvector { 493 } //R#151
+  MV:intvector { 492 } //R#152
   MW:intvector { 15 } //R#153
-  MX:intvector { 90, 96, 111, 125, 152, 155, 156, 159, 201, 505, 506, 507 } //R#154
-  MY:intvector { 264, 265 } //R#155
+  MX:intvector { 91, 97, 112, 126, 153, 156, 157, 160, 203, 507, 508, 509 } //R#154
+  MY:intvector { 266, 267 } //R#155
   MZ:intvector { 42 } //R#156
   NA:intvector { 57 } //R#157
-  NC:intvector { 546 } //R#158
+  NC:intvector { 548 } //R#158
   NE:intvector { 49 } //R#159
-  NF:intvector { 545 } //R#160
+  NF:intvector { 547 } //R#160
   NG:intvector { 35 } //R#161
-  NI:intvector { 148 } //R#162
-  NL:intvector { 412 } //R#163
-  NO:intvector { 316, 444 } //R#164
-  NP:intvector { 261 } //R#165
-  NR:intvector { 543 } //R#166
-  NU:intvector { 544 } //R#167
-  NZ:intvector { 512, 513, 514, 523, 524 } //R#168
-  OM:intvector { 272 } //R#169
-  PA:intvector { 170 } //R#170
-  PE:intvector { 144 } //R#171
-  PF:intvector { 532, 541, 555 } //R#172
-  PG:intvector { 551 } //R#173
-  PH:intvector { 271 } //R#174
-  PK:intvector { 259, 516 } //R#175
-  PL:intvector { 466, 562 } //R#176
-  PM:intvector { 157 } //R#177
-  PN:intvector { 549 } //R#178
-  PR:intvector { 178, 519 } //R#179
-  PS:intvector { 247 } //R#180
-  PT:intvector { 310, 317, 433, 563 } //R#181
-  PW:intvector { 548 } //R#182
-  PY:intvector { 76 } //R#183
-  QA:intvector { 280 } //R#184
-  RE:intvector { 493 } //R#185
-  RO:intvector { 420 } //R#186
-  RS:intvector { 416 } //R#187
-  RU:intvector { 224, 252, 258, 263, 269, 274, 275, 288, 306, 307, 308, 431, 442, 450, 465, 599 } //R#188
+  NI:intvector { 149 } //R#162
+  NL:intvector { 414 } //R#163
+  NO:intvector { 318, 446 } //R#164
+  NP:intvector { 263 } //R#165
+  NR:intvector { 545 } //R#166
+  NU:intvector { 546 } //R#167
+  NZ:intvector { 514, 515, 516, 525, 526 } //R#168
+  OM:intvector { 274 } //R#169
+  PA:intvector { 171 } //R#170
+  PE:intvector { 145 } //R#171
+  PF:intvector { 534, 543, 557 } //R#172
+  PG:intvector { 553 } //R#173
+  PH:intvector { 273 } //R#174
+  PK:intvector { 261, 518 } //R#175
+  PL:intvector { 468, 564 } //R#176
+  PM:intvector { 158 } //R#177
+  PN:intvector { 551 } //R#178
+  PR:intvector { 179, 521 } //R#179
+  PS:intvector { 249 } //R#180
+  PT:intvector { 312, 319, 435, 565 } //R#181
+  PW:intvector { 550 } //R#182
+  PY:intvector { 77 } //R#183
+  QA:intvector { 282 } //R#184
+  RE:intvector { 495 } //R#185
+  RO:intvector { 422 } //R#186
+  RS:intvector { 418 } //R#187
+  RU:intvector { 226, 254, 260, 265, 271, 276, 277, 290, 308, 309, 310, 433, 444, 452, 467, 601 } //R#188
   RW:intvector { 33 } //R#189
-  SA:intvector { 283 } //R#190
-  SB:intvector { 533, 566 } //R#191
-  SC:intvector { 489 } //R#192
+  SA:intvector { 285 } //R#190
+  SB:intvector { 535, 568 } //R#191
+  SC:intvector { 491 } //R#192
   SD:intvector { 32 } //R#193
-  SE:intvector { 456 } //R#194
-  SG:intvector { 292, 567 } //R#195
-  SH:intvector { 320 } //R#196
-  SI:intvector { 434 } //R#197
-  SJ:intvector { 220 } //R#198
-  SK:intvector { 418 } //R#199
+  SE:intvector { 458 } //R#194
+  SG:intvector { 294, 569 } //R#195
+  SH:intvector { 322 } //R#196
+  SI:intvector { 436 } //R#197
+  SJ:intvector { 222 } //R#198
+  SK:intvector { 420 } //R#199
   SL:intvector { 27 } //R#200
-  SM:intvector { 451 } //R#201
+  SM:intvector { 453 } //R#201
   SN:intvector { 22 } //R#202
   SO:intvector { 45 } //R#203
-  SR:intvector { 172 } //R#204
+  SR:intvector { 173 } //R#204
   ST:intvector { 53 } //R#205
-  SV:intvector { 110 } //R#206
-  SY:intvector { 242 } //R#207
+  SV:intvector { 111 } //R#206
+  SY:intvector { 244 } //R#207
   SZ:intvector { 44 } //R#208
-  TC:intvector { 117 } //R#209
+  TC:intvector { 118 } //R#209
   TD:intvector { 48 } //R#210
-  TF:intvector { 488 } //R#211
+  TF:intvector { 490 } //R#211
   TG:intvector { 37 } //R#212
-  TH:intvector { 232 } //R#213
-  TJ:intvector { 246 } //R#214
-  TK:intvector { 528 } //R#215
-  TL:intvector { 244 } //R#216
-  TM:intvector { 227, 228 } //R#217
+  TH:intvector { 234 } //R#213
+  TJ:intvector { 248 } //R#214
+  TK:intvector { 530 } //R#215
+  TL:intvector { 246 } //R#216
+  TM:intvector { 229, 230 } //R#217
   TN:intvector { 56 } //R#218
-  TO:intvector { 557 } //R#219
-  TR:intvector { 253, 429, 581 } //R#220
-  TT:intvector { 175 } //R#221
-  TV:intvector { 530 } //R#222
-  TW:intvector { 293, 564 } //R#223
+  TO:intvector { 559 } //R#219
+  TR:intvector { 255, 431, 583 } //R#220
+  TT:intvector { 176 } //R#221
+  TV:intvector { 532 } //R#222
+  TW:intvector { 295, 566 } //R#223
   TZ:intvector { 23 } //R#224
-  UA:intvector { 432, 453, 460, 468 } //R#225
+  UA:intvector { 434, 455, 462, 470 } //R#225
   UG:intvector { 31 } //R#226
-  UM:intvector { 536, 542, 559 } //R#227
-  US:intvector { 4, 58, 59, 78, 86, 95, 105, 106, 112, 126, 127, 128, 129, 130, 131, 132, 133, 134, 139, 140, 141, 142, 145, 146, 154, 164, 166, 168, 169, 173, 190, 208, 354, 480, 515, 517, 520, 535, 571, 573, 576, 578, 580, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594 } //R#228
-  UY:intvector { 160 } //R#229
-  UZ:intvector { 289, 294 } //R#230
-  VA:intvector { 462 } //R#231
-  VC:intvector { 196 } //R#232
-  VE:intvector { 91 } //R#233
-  VG:intvector { 203 } //R#234
-  VI:intvector { 195, 205 } //R#235
-  VN:intvector { 249, 287, 598 } //R#236
-  VU:intvector { 526 } //R#237
-  WF:intvector { 560 } //R#238
-  WS:intvector { 502, 522 } //R#239
-  YE:intvector { 221 } //R#240
-  YT:intvector { 492 } //R#241
+  UM:intvector { 538, 544, 561 } //R#227
+  US:intvector { 4, 58, 59, 79, 87, 96, 106, 107, 113, 127, 128, 129, 130, 131, 132, 133, 134, 135, 140, 141, 142, 143, 146, 147, 155, 165, 167, 169, 170, 174, 192, 210, 356, 482, 517, 519, 522, 537, 573, 575, 578, 580, 582, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596 } //R#228
+  UY:intvector { 161 } //R#229
+  UZ:intvector { 291, 296 } //R#230
+  VA:intvector { 464 } //R#231
+  VC:intvector { 198 } //R#232
+  VE:intvector { 92 } //R#233
+  VG:intvector { 205 } //R#234
+  VI:intvector { 197, 207 } //R#235
+  VN:intvector { 251, 289, 600 } //R#236
+  VU:intvector { 528 } //R#237
+  WF:intvector { 562 } //R#238
+  WS:intvector { 504, 524 } //R#239
+  YE:intvector { 223 } //R#240
+  YT:intvector { 494 } //R#241
   ZA:intvector { 30 } //R#242
   ZM:intvector { 40 } //R#243
-  ZW:intvector { 29, 351 } //R#244
+  ZW:intvector { 29, 353 } //R#244
  }
 }

Modified: trunk/source/data/translit/root.txt
===================================================================
--- trunk/source/data/translit/root.txt	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/data/translit/root.txt	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 // ***************************************************************************
 // *
-// *  Copyright (C) 2004-2007, International Business Machines
+// *  Copyright (C) 2004-2008, International Business Machines
 // *  Corporation; Unicode, Inc.; and others.  All Rights Reserved.
 // *
 // ***************************************************************************

Modified: trunk/source/i18n/Makefile.in
===================================================================
--- trunk/source/i18n/Makefile.in	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/Makefile.in	2009-02-07 10:08:34 UTC (rev 162)
@@ -80,7 +80,7 @@
 ulocdata.o measfmt.o currfmt.o curramt.o currunit.o measure.o utmscale.o \
 csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o \
 windtfmt.o winnmfmt.o basictz.o dtrule.o rbtz.o tzrule.o tztrans.o vtzone.o \
-zonemeta.o zstrfmt.o plurrule.o plurfmt.o dtitvfmt.o dtitvinf.o
+zonemeta.o zstrfmt.o plurrule.o plurfmt.o dtitvfmt.o dtitvinf.o colldata.o bmsearch.o bms.o
 
 ## Header files to install
 HEADERS = $(srcdir)/unicode/*.h

Added: trunk/source/i18n/bms.cpp
===================================================================
--- trunk/source/i18n/bms.cpp	                        (rev 0)
+++ trunk/source/i18n/bms.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2008-2009, International Business Machines Corporation and Others.
+ * All rights reserved.
+ */
+
+#include "unicode/utypes.h"
+#include "cmemory.h"
+#include "unicode/bms.h"
+#include "unicode/unistr.h"
+#include "unicode/colldata.h"
+#include "unicode/bmsearch.h"
+
+//#define USE_SAFE_CASTS
+#ifdef USE_SAFE_CASTS
+#define STATIC_CAST(type,value) static_cast<type>(value)
+#define CONST_CAST(type,value) const_cast<type>(value)
+#else
+#define STATIC_CAST(type,value) (type) (value)
+#define CONST_CAST(type,value) (type) (value)
+#endif
+
+U_CAPI UCD * U_EXPORT2
+ucd_open(UCollator *coll, UErrorCode *status)
+{
+    return STATIC_CAST(UCD *, CollData::open(coll, *status));
+}
+
+U_CAPI void U_EXPORT2
+ucd_close(UCD *ucd)
+{
+    CollData *data = STATIC_CAST(CollData *, ucd);
+
+    CollData::close(data);
+}
+
+U_CAPI UCollator * U_EXPORT2
+ucd_getCollator(UCD *ucd)
+{
+    CollData *data = STATIC_CAST(CollData *, ucd);
+
+    return data->getCollator();
+}
+
+U_CAPI void U_EXPORT2
+ucd_freeCache()
+{
+    CollData::freeCollDataCache();
+}
+
+U_CAPI void U_EXPORT2
+ucd_flushCache()
+{
+    CollData::flushCollDataCache();
+}
+
+struct BMS
+{
+    BoyerMooreSearch *bms;
+    const UnicodeString *targetString;
+};
+
+U_CAPI BMS * U_EXPORT2
+bms_open(UCD *ucd,
+         const UChar *pattern, int32_t patternLength,
+         const UChar *target,  int32_t targetLength,
+         UErrorCode  *status)
+{
+    BMS *bms = STATIC_CAST(BMS *, uprv_malloc(sizeof(BMS)));
+
+    if (bms == NULL) {
+        *status = U_MEMORY_ALLOCATION_ERROR;
+        return NULL;
+    }
+
+    CollData *data = (CollData *) ucd;
+    UnicodeString patternString(pattern, patternLength);
+
+    if (target != NULL) {
+        bms->targetString = new UnicodeString(target, targetLength);
+        
+        if (bms->targetString == NULL) {
+            bms->bms = NULL;
+            *status = U_MEMORY_ALLOCATION_ERROR;
+            return bms;
+        }
+    } else {
+        bms->targetString = NULL;
+    }
+
+    bms->bms = new BoyerMooreSearch(data, patternString, bms->targetString, *status);
+
+    if (bms->bms == NULL) {
+        *status = U_MEMORY_ALLOCATION_ERROR;
+    }
+
+    return bms;
+}
+
+U_CAPI void U_EXPORT2
+bms_close(BMS *bms)
+{
+    delete bms->bms;
+
+    delete bms->targetString;
+
+    uprv_free(bms);
+}
+
+U_CAPI UBool U_EXPORT2
+bms_empty(BMS *bms)
+{
+    return bms->bms->empty();
+}
+
+U_CAPI UCD * U_EXPORT2
+bms_getData(BMS *bms)
+{
+    return STATIC_CAST(UCD *, bms->bms->getData());
+}
+
+U_CAPI UBool U_EXPORT2
+bms_search(BMS *bms, int32_t offset, int32_t *start, int32_t *end)
+{
+    return bms->bms->search(offset, *start, *end);
+}
+
+U_CAPI void U_EXPORT2
+bms_setTargetString(BMS *bms, const UChar *target, int32_t targetLength, UErrorCode *status)
+{
+    if (U_FAILURE(*status)) {
+        return;
+    }
+
+    if (bms->targetString != NULL) {
+        delete bms->targetString;
+    }
+
+    if (target != NULL) {
+        bms->targetString = new UnicodeString(target, targetLength);
+    } else {
+        bms->targetString = NULL;
+    }
+
+    bms->bms->setTargetString(bms->targetString, *status);
+}

Added: trunk/source/i18n/bmsearch.cpp
===================================================================
--- trunk/source/i18n/bmsearch.cpp	                        (rev 0)
+++ trunk/source/i18n/bmsearch.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -0,0 +1,864 @@
+/*
+ ******************************************************************************
+ *   Copyright (C) 1996-2009, International Business Machines                 *
+ *   Corporation and others.  All Rights Reserved.                            *
+ ******************************************************************************
+ */
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_COLLATION
+
+#include "unicode/unistr.h"
+#include "unicode/putil.h"
+#include "unicode/usearch.h"
+
+#include "cmemory.h"
+#include "unicode/coll.h"
+#include "unicode/tblcoll.h"
+#include "unicode/coleitr.h"
+#include "unicode/ucoleitr.h"
+
+#include "unicode/regex.h"        // TODO: make conditional on regexp being built.
+
+#include "unicode/uniset.h"
+#include "unicode/uset.h"
+#include "unicode/ustring.h"
+#include "hash.h"
+#include "uhash.h"
+#include "ucol_imp.h"
+#include "unormimp.h"
+
+#include "unicode/colldata.h"
+#include "unicode/bmsearch.h"
+
+U_NAMESPACE_BEGIN
+
+#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))
+#define NEW_ARRAY(type, count) (type *) uprv_malloc((count) * sizeof(type))
+#define DELETE_ARRAY(array) uprv_free((void *) (array))
+
+
+struct CEI
+{
+    uint32_t order;
+    int32_t  lowOffset;
+    int32_t  highOffset;
+};
+
+class Target : public UMemory
+{
+public:
+    Target(UCollator *theCollator, const UnicodeString *target, int32_t patternLength, UErrorCode &status);
+    ~Target();
+
+    void setTargetString(const UnicodeString *target);
+
+    const CEI *nextCE(int32_t offset);
+    const CEI *prevCE(int32_t offset);
+
+    int32_t stringLength();
+    UChar charAt(int32_t offset);
+
+    UBool isBreakBoundary(int32_t offset);
+    int32_t nextBreakBoundary(int32_t offset);
+    int32_t nextSafeBoundary(int32_t offset);
+
+    UBool isIdentical(UnicodeString &pattern, int32_t start, int32_t end);
+
+    void setOffset(int32_t offset);
+    void setLast(int32_t last);
+    int32_t getOffset();
+
+private:
+    CEI *ceb;
+    int32_t bufferSize;
+    int32_t bufferMin;
+    int32_t bufferMax;
+
+    uint32_t strengthMask;
+    UCollationStrength strength;
+    uint32_t variableTop;
+    UBool toShift;
+    UCollator *coll;
+
+    const UnicodeString *targetString;
+    const UChar *targetBuffer;
+    int32_t targetLength;
+
+    UCollationElements *elements;
+    UBreakIterator *charBreakIterator;
+};
+
+Target::Target(UCollator *theCollator, const UnicodeString *target, int32_t patternLength, UErrorCode &status)
+    : bufferSize(0), bufferMin(0), bufferMax(0),
+      strengthMask(0), strength(UCOL_PRIMARY), variableTop(0), toShift(FALSE), coll(theCollator),
+      targetString(NULL), targetBuffer(NULL), targetLength(0), elements(NULL), charBreakIterator(NULL)
+{
+    strength = ucol_getStrength(coll);
+    toShift = ucol_getAttribute(coll, UCOL_ALTERNATE_HANDLING, &status) ==  UCOL_SHIFTED;
+    variableTop = ucol_getVariableTop(coll, &status);
+
+    // find the largest expansion
+    uint8_t maxExpansion = 0;
+    for (const uint8_t *expansion = coll->expansionCESize; *expansion != 0; expansion += 1) {
+        if (*expansion > maxExpansion) {
+            maxExpansion = *expansion;
+        }
+    }
+
+    // room for an extra character on each end, plus 4 for safety
+    bufferSize = patternLength + (2 * maxExpansion) + 4;
+
+    ceb = NEW_ARRAY(CEI, bufferSize);
+
+    if (ceb == NULL) {
+        status = U_MEMORY_ALLOCATION_ERROR;
+        return;
+    }
+
+    if (target != NULL) {
+        setTargetString(target);
+    }
+
+    switch (strength) 
+    {
+    default:
+        strengthMask |= UCOL_TERTIARYORDERMASK;
+        /* fall through */
+
+    case UCOL_SECONDARY:
+        strengthMask |= UCOL_SECONDARYORDERMASK;
+        /* fall through */
+
+    case UCOL_PRIMARY:
+        strengthMask |= UCOL_PRIMARYORDERMASK;
+    }
+}
+
+Target::~Target()
+{
+    ubrk_close(charBreakIterator);
+    ucol_closeElements(elements);
+
+    DELETE_ARRAY(ceb);
+}
+
+void Target::setTargetString(const UnicodeString *target)
+{
+    if (charBreakIterator != NULL) {
+        ubrk_close(charBreakIterator);
+        ucol_closeElements(elements);
+    }
+
+    targetString = target;
+
+    if (targetString != NULL) {
+        UErrorCode status = U_ZERO_ERROR;
+
+        targetBuffer = targetString->getBuffer();
+        targetLength = targetString->length();
+
+        elements = ucol_openElements(coll, target->getBuffer(), target->length(), &status);
+        ucol_forceHanImplicit(elements, &status);
+
+        charBreakIterator = ubrk_open(UBRK_CHARACTER, ucol_getLocale(coll, ULOC_VALID_LOCALE, &status),
+                                      targetBuffer, targetLength, &status);
+    } else {
+        targetBuffer = NULL;
+        targetLength = 0;
+    }
+}
+
+const CEI *Target::nextCE(int32_t offset)
+{
+    UErrorCode status = U_ZERO_ERROR;
+    int32_t low = -1, high = -1;
+    uint32_t order;
+    UBool cont = FALSE;
+
+    if (offset >= bufferMin && offset < bufferMax) {
+        return &ceb[offset];
+    }
+
+    if (bufferMax >= bufferSize || offset != bufferMax) {
+        return NULL;
+    }
+
+    do {
+        low   = ucol_getOffset(elements);
+        order = ucol_next(elements, &status);
+        high  = ucol_getOffset(elements);
+
+        if (order == UCOL_NULLORDER) {
+          //high = low = -1;
+            break;
+        }
+
+        cont = isContinuation(order);
+        order &= strengthMask;
+
+        if (toShift && variableTop > order && (order & UCOL_PRIMARYORDERMASK) != 0) {
+            if (strength >= UCOL_QUATERNARY) {
+                order &= UCOL_PRIMARYORDERMASK;
+            } else {
+                order = UCOL_IGNORABLE;
+            }
+        }
+    } while (order == UCOL_IGNORABLE);
+
+    if (cont) {
+        order |= UCOL_CONTINUATION_MARKER;
+    }
+
+    ceb[offset].order = order;
+    ceb[offset].lowOffset = low;
+    ceb[offset].highOffset = high;
+
+    bufferMax += 1;
+
+    return &ceb[offset];
+}
+
+const CEI *Target::prevCE(int32_t offset)
+{
+    UErrorCode status = U_ZERO_ERROR;
+    int32_t low = -1, high = -1;
+    uint32_t order;
+    UBool cont = FALSE;
+
+    if (offset >= bufferMin && offset < bufferMax) {
+        return &ceb[offset];
+    }
+
+    if (bufferMax >= bufferSize || offset != bufferMax) {
+        return NULL;
+    }
+
+    do {
+        high  = ucol_getOffset(elements);
+        order = ucol_previous(elements, &status);
+        low   = ucol_getOffset(elements);
+
+        if (order == UCOL_NULLORDER) {
+            break;
+        }
+
+        cont = isContinuation(order);
+        order &= strengthMask;
+
+        if (toShift && variableTop > order && (order & UCOL_PRIMARYORDERMASK) != 0) {
+            if (strength >= UCOL_QUATERNARY) {
+                order &= UCOL_PRIMARYORDERMASK;
+            } else {
+                order = UCOL_IGNORABLE;
+            }
+        }
+    } while (order == UCOL_IGNORABLE);
+
+    bufferMax += 1;
+
+    if (cont) {
+        order |= UCOL_CONTINUATION_MARKER;
+    }
+
+    ceb[offset].order       = order;
+    ceb[offset].lowOffset   = low;
+    ceb[offset].highOffset = high;
+
+    return &ceb[offset];
+}
+
+int32_t Target::stringLength()
+{
+    if (targetString != NULL) {
+        return targetLength;
+    }
+
+    return 0;
+}
+
+UChar Target::charAt(int32_t offset)
+{
+    if (targetString != NULL) {
+        return targetBuffer[offset];
+    }
+
+    return 0x0000;
+}
+
+void Target::setOffset(int32_t offset)
+{
+    UErrorCode status = U_ZERO_ERROR;
+
+    bufferMin = 0;
+    bufferMax = 0;
+
+    ucol_setOffset(elements, offset, &status);
+}
+
+void Target::setLast(int32_t last)
+{
+    UErrorCode status = U_ZERO_ERROR;
+
+    bufferMin = 0;
+    bufferMax = 1;
+
+    ceb[0].order      = UCOL_NULLORDER;
+    ceb[0].lowOffset  = last;
+    ceb[0].highOffset = last;
+
+    ucol_setOffset(elements, last, &status);
+}
+
+int32_t Target::getOffset()
+{
+    return ucol_getOffset(elements);
+}
+
+UBool Target::isBreakBoundary(int32_t offset)
+{
+    return ubrk_isBoundary(charBreakIterator, offset);
+}
+
+int32_t Target::nextBreakBoundary(int32_t offset)
+{
+    return ubrk_following(charBreakIterator, offset);
+}
+
+int32_t Target::nextSafeBoundary(int32_t offset)
+{
+    while (offset < targetLength) {
+      //UChar ch = charAt(offset);
+        UChar ch = targetBuffer[offset];
+
+        if (U_IS_LEAD(ch) || ! ucol_unsafeCP(ch, coll)) {
+            return offset;
+        }
+
+        offset += 1;
+    }
+
+    return targetLength;
+}
+
+UBool Target::isIdentical(UnicodeString &pattern, int32_t start, int32_t end)
+{
+    if (strength < UCOL_IDENTICAL) {
+        return TRUE;
+    }
+
+    UChar t2[32], p2[32];
+    const UChar *pBuffer = pattern.getBuffer();
+    int32_t pLength = pattern.length();
+    int32_t length = end - start;
+
+    UErrorCode status = U_ZERO_ERROR, status2 = U_ZERO_ERROR;
+
+    int32_t decomplength = unorm_decompose(t2, ARRAY_SIZE(t2), 
+                                       targetBuffer + start, length, 
+                                       FALSE, 0, &status);
+
+    // use separate status2 in case of buffer overflow
+    if (decomplength != unorm_decompose(p2, ARRAY_SIZE(p2),
+                                        pBuffer, pLength,
+                                        FALSE, 0, &status2)) {
+        return FALSE; // lengths are different
+    }
+
+    // compare contents
+    UChar *text, *pat;
+
+    if(U_SUCCESS(status)) {
+        text = t2;
+        pat = p2;
+    } else if(status == U_BUFFER_OVERFLOW_ERROR) {
+        status = U_ZERO_ERROR;
+
+        // allocate one buffer for both decompositions
+        text = NEW_ARRAY(UChar, decomplength * 2);
+
+        // Check for allocation failure.
+        if (text == NULL) {
+        	return FALSE;
+        }
+
+        pat = text + decomplength;
+
+        unorm_decompose(text, decomplength, targetBuffer + start, 
+                        length, FALSE, 0, &status);
+
+        unorm_decompose(pat, decomplength, pBuffer, 
+                        pLength, FALSE, 0, &status);
+    } else {
+        // NFD failed, make sure that u_memcmp() does not overrun t2 & p2
+        // and that we don't uprv_free() an undefined text pointer
+        text = pat = t2;
+        decomplength = 0;
+    }
+
+    UBool result = (UBool)(u_memcmp(pat, text, decomplength) == 0);
+
+    if(text != t2) {
+        DELETE_ARRAY(text);
+    }
+
+    // return FALSE if NFD failed
+    return U_SUCCESS(status) && result;
+}
+
+#define HASH_TABLE_SIZE 257
+
+class BadCharacterTable : public UMemory
+{
+public:
+    BadCharacterTable(CEList &patternCEs, CollData *data, UErrorCode &status);
+    ~BadCharacterTable();
+
+    int32_t operator[](uint32_t ce) const;
+    int32_t getMaxSkip() const;
+    int32_t minLengthInChars(int32_t index);
+
+private:
+    static int32_t hash(uint32_t ce);
+
+    int32_t maxSkip;
+    int32_t badCharacterTable[HASH_TABLE_SIZE];
+
+    int32_t *minLengthCache;
+};
+
+BadCharacterTable::BadCharacterTable(CEList &patternCEs, CollData *data, UErrorCode &status)
+    : minLengthCache(NULL)
+{
+    int32_t plen = patternCEs.size();
+
+    // **** need a better way to deal with this ****
+    if (U_FAILURE(status) || plen == 0) {
+        return;
+    }
+
+    int32_t *history = NEW_ARRAY(int32_t, plen);
+
+    if (history == NULL) {
+        status = U_MEMORY_ALLOCATION_ERROR;
+        return;
+    }
+
+    for (int32_t i = 0; i < plen; i += 1) {
+        history[i] = -1;
+    }
+
+    minLengthCache = NEW_ARRAY(int32_t, plen + 1);
+
+    if (minLengthCache == NULL) {
+        DELETE_ARRAY(history);
+        status = U_MEMORY_ALLOCATION_ERROR;
+        return;
+    }
+
+    maxSkip = minLengthCache[0] = data->minLengthInChars(&patternCEs, 0, history);
+
+    for(int32_t j = 0; j < HASH_TABLE_SIZE; j += 1) {
+        badCharacterTable[j] = maxSkip;
+    }
+
+    for(int32_t p = 1; p < plen; p += 1) {
+        minLengthCache[p] = data->minLengthInChars(&patternCEs, p, history);
+
+        // Make sure this entry is not bigger than the previous one.
+        // Otherwise, we might skip too far in some cases.
+        if (minLengthCache[p] < 0 || minLengthCache[p] > minLengthCache[p - 1]) {
+            minLengthCache[p] = minLengthCache[p - 1];
+        }
+    }
+
+    minLengthCache[plen] = 0;
+
+    for(int32_t p = 0; p < plen - 1; p += 1) {
+        badCharacterTable[hash(patternCEs[p])] = minLengthCache[p + 1];
+    }
+
+    DELETE_ARRAY(history);
+}
+
+BadCharacterTable::~BadCharacterTable()
+{
+    DELETE_ARRAY(minLengthCache);
+}
+
+int32_t BadCharacterTable::operator[](uint32_t ce) const
+{
+    return badCharacterTable[hash(ce)];
+}
+
+int32_t BadCharacterTable::getMaxSkip() const
+{
+    return maxSkip;
+}
+
+int32_t BadCharacterTable::minLengthInChars(int32_t index)
+{
+    return minLengthCache[index];
+}
+
+int32_t BadCharacterTable::hash(uint32_t ce)
+{
+    return UCOL_PRIMARYORDER(ce) % HASH_TABLE_SIZE;
+}
+
+class GoodSuffixTable : public UMemory
+{
+public:
+    GoodSuffixTable(CEList &patternCEs, BadCharacterTable &badCharacterTable, UErrorCode &status);
+    ~GoodSuffixTable();
+
+    int32_t operator[](int32_t offset) const;
+
+private:
+    int32_t *goodSuffixTable;
+};
+
+GoodSuffixTable::GoodSuffixTable(CEList &patternCEs, BadCharacterTable &badCharacterTable, UErrorCode &status)
+    : goodSuffixTable(NULL)
+{
+    int32_t patlen = patternCEs.size();
+
+    // **** need a better way to deal with this ****
+    if (U_FAILURE(status) || patlen <= 0) {
+        return;
+    }
+
+    int32_t *suff  = NEW_ARRAY(int32_t, patlen);
+    int32_t start = patlen - 1, end = - 1;
+    int32_t maxSkip = badCharacterTable.getMaxSkip();
+
+    if (suff == NULL) {
+        status = U_MEMORY_ALLOCATION_ERROR;
+        return;
+    }
+
+    // initialze suff
+    suff[patlen - 1] = patlen;
+
+    for (int32_t i = patlen - 2; i >= 0; i -= 1) {
+        // (i > start) means we're inside the last suffix match we found
+        // ((patlen - 1) - end) is how far the end of that match is from end of pattern
+        // (i - start) is how far we are from start of that match
+        // (i + (patlen - 1) - end) is index of same character at end of pattern
+        // so if any suffix match at that character doesn't extend beyond the last match,
+        // it's the suffix for this character as well
+        if (i > start && suff[i + patlen - 1 - end] < i - start) {
+            suff[i] = suff[i + patlen - 1 - end];
+        } else {
+            start = end = i;
+
+            int32_t s = patlen;
+
+            while (start >= 0 && patternCEs[start] == patternCEs[--s]) {
+                start -= 1;
+            }
+
+            suff[i] = end - start;
+        }
+    }
+
+    // now build goodSuffixTable
+    goodSuffixTable  = NEW_ARRAY(int32_t, patlen);
+
+    if (goodSuffixTable == NULL) {
+        DELETE_ARRAY(suff);
+        status = U_MEMORY_ALLOCATION_ERROR;
+        return;
+    }
+
+
+    // initialize entries to minLengthInChars of the pattern
+    for (int32_t i = 0; i < patlen; i += 1) {
+        goodSuffixTable[i] = maxSkip;
+    }
+
+    int32_t prefix = 0;
+
+    for (int32_t i = patlen - /*1*/ 2; i >= 0; i -= 1) {
+        if (suff[i] == i + 1) {
+            // this matching suffix is a prefix of the pattern
+            int32_t prefixSkip = badCharacterTable.minLengthInChars(i + 1);
+
+            // for any mis-match before this suffix, we should skip
+            // so that the front of the pattern (i.e. the prefix)
+            // lines up with the front of the suffix.
+            // (patlen - 1 - i) is the start of the suffix
+            while (prefix < patlen - 1 - i) {
+                // value of maxSkip means never set...
+                if (goodSuffixTable[prefix] == maxSkip) {
+                    goodSuffixTable[prefix] = prefixSkip;
+                }
+
+                prefix += 1;
+            }
+        }
+    }
+
+    for (int32_t i = 0; i < patlen - 1; i += 1) {
+        goodSuffixTable[patlen - 1 - suff[i]] = badCharacterTable.minLengthInChars(i + 1);
+    }
+
+    DELETE_ARRAY(suff);
+}
+
+GoodSuffixTable::~GoodSuffixTable()
+{
+    DELETE_ARRAY(goodSuffixTable);
+}
+
+int32_t GoodSuffixTable::operator[](int32_t offset) const
+{
+    return goodSuffixTable[offset];
+}
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(BoyerMooreSearch)
+
+
+UBool BoyerMooreSearch::empty()
+{
+    return patCEs->size() <= 0;
+}
+
+CollData *BoyerMooreSearch::getData()
+{
+    return data;
+}
+
+CEList *BoyerMooreSearch::getPatternCEs()
+{
+    return patCEs;
+}
+
+BadCharacterTable *BoyerMooreSearch::getBadCharacterTable()
+{
+    return badCharacterTable;
+}
+
+GoodSuffixTable *BoyerMooreSearch::getGoodSuffixTable()
+{
+    return goodSuffixTable;
+}
+
+BoyerMooreSearch::BoyerMooreSearch(CollData *theData, const UnicodeString &patternString, const UnicodeString *targetString,
+                                   UErrorCode &status)
+    : data(theData), patCEs(NULL), badCharacterTable(NULL), goodSuffixTable(NULL), pattern(patternString), target(NULL)
+{
+
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    UCollator *collator = data->getCollator();
+
+    patCEs = new CEList(collator, patternString, status);
+
+    if (patCEs == NULL || U_FAILURE(status)) {
+        return;
+    }
+
+    badCharacterTable = new BadCharacterTable(*patCEs, data, status);
+
+    if (badCharacterTable == NULL || U_FAILURE(status)) {
+        return;
+    }
+
+    goodSuffixTable = new GoodSuffixTable(*patCEs, *badCharacterTable, status);
+
+    if (targetString != NULL) {
+        target = new Target(collator, targetString, patCEs->size(), status);
+    }
+}
+
+BoyerMooreSearch::~BoyerMooreSearch()
+{
+    delete target;
+    delete goodSuffixTable;
+    delete badCharacterTable;
+    delete patCEs;
+}
+
+void BoyerMooreSearch::setTargetString(const UnicodeString *targetString, UErrorCode &status)
+{
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    if (target == NULL) {
+        target = new Target(data->getCollator(), targetString, patCEs->size(), status);
+    } else {
+        target->setTargetString(targetString);
+    }
+}
+
+// **** main flow of this code from Laura Werner's "Unicode Text Searching in Java" paper. ****
+/*
+ * TODO:
+ *  * deal with trailing (and leading?) ignorables.
+ *  * Adding BoyerMooreSearch object slowed it down. How can we speed it up?
+ */
+UBool BoyerMooreSearch::search(int32_t offset, int32_t &start, int32_t &end)
+{
+    UCollator *coll = data->getCollator();
+    int32_t plen = patCEs->size();
+    int32_t tlen = target->stringLength();
+    int32_t maxSkip = badCharacterTable->getMaxSkip();
+    int32_t tOffset = offset + maxSkip;
+
+    if (plen <= 0) {
+        // Searching for a zero length pattern always fails.
+        start = end = -1;
+        return FALSE;
+    }
+
+    while (tOffset <= tlen) {
+        int32_t pIndex = plen - 1;
+        int32_t tIndex = 0;
+        int32_t lIndex = 0;
+
+        if (tOffset < tlen) {
+            // **** we really want to skip ahead enough to  ****
+            // **** be sure we get at least 1 non-ignorable ****
+            // **** CE after the end of the pattern.        ****
+            int32_t next = target->nextSafeBoundary(tOffset + 1);
+
+            target->setOffset(next);
+
+            for (lIndex = 0; ; lIndex += 1) {
+                const CEI *cei = target->prevCE(lIndex);
+                int32_t low = cei->lowOffset;
+                int32_t high = cei->highOffset;
+
+                if (high == 0 || (low < high && low <= tOffset)) {
+                    if (low < tOffset) {
+                        while (lIndex >= 0 && target->prevCE(lIndex)->highOffset == high) {
+                            lIndex -= 1;
+                        }
+
+                        if (high > tOffset) {
+                            tOffset = high;
+                        }
+                    }
+
+                    break;
+                }
+            }
+        } else {
+            target->setLast(tOffset);
+            lIndex = 0;
+        }
+
+        tIndex = ++lIndex;
+
+        // Iterate backward until we hit the beginning of the pattern
+        while (pIndex >= 0) {
+            uint32_t pce = (*patCEs)[pIndex];
+            const CEI *tcei = target->prevCE(tIndex++);
+
+
+            if (tcei->order != pce) {
+                // There is a mismatch at this position.  Decide how far
+                // over to shift the pattern, then try again.
+ 
+                int32_t gsOffset = tOffset + (*goodSuffixTable)[pIndex];
+#ifdef EXTRA_CAUTIOUS
+                int32_t old = tOffset;
+#endif
+
+                tOffset += (*badCharacterTable)[tcei->order] - badCharacterTable->minLengthInChars(pIndex + 1);
+
+                if (gsOffset > tOffset) {
+                    tOffset = gsOffset;
+                }
+
+#ifdef EXTRA_CAUTIOUS
+                // Make sure we don't skip backwards...
+                if (tOffset <= old) {
+                    tOffset = old + 1;
+                }
+#endif
+
+                break;
+            }
+
+            pIndex -= 1;
+        }
+
+        if (pIndex < 0) {
+            // We made it back to the beginning of the pattern,
+            // which means we matched it all.  Return the location.
+            const CEI firstCEI = *target->prevCE(tIndex - 1);
+            const CEI lastCEI  = *target->prevCE(lIndex);
+            int32_t mStart   = firstCEI.lowOffset;
+            int32_t minLimit = lastCEI.lowOffset;
+            int32_t maxLimit = lastCEI.highOffset;
+            int32_t mLimit; 
+            UBool found = TRUE;
+
+            target->setOffset(/*tOffset*/maxLimit);
+
+            const CEI nextCEI = *target->nextCE(0);
+
+            if (nextCEI.lowOffset > maxLimit) {
+                maxLimit = nextCEI.lowOffset;
+            }
+
+            if (nextCEI.lowOffset == nextCEI.highOffset && nextCEI.order != UCOL_NULLORDER) {
+                found = FALSE;
+            }
+
+            if (! target->isBreakBoundary(mStart)) {
+                found = FALSE;
+            }
+
+            if (firstCEI.lowOffset == firstCEI.highOffset) {
+                found = FALSE;
+            }
+
+            mLimit = maxLimit;
+            if (minLimit < maxLimit) {
+                int32_t nbb = target->nextBreakBoundary(minLimit);
+
+                if (nbb >= lastCEI.highOffset) {
+                    mLimit = nbb;
+                }
+            }
+
+            if (mLimit > maxLimit) {
+                found = FALSE;
+            }
+
+            if (! target->isBreakBoundary(mLimit)) {
+                found = FALSE;
+            }
+
+            if (! target->isIdentical(pattern, mStart, mLimit)) {
+                found = FALSE;
+            }
+
+            if (found) {
+                start = mStart;
+                end   = mLimit;
+
+                return TRUE;
+            }
+
+            tOffset += (*goodSuffixTable)[0]; // really? Maybe += 1 or += maxSkip?
+        }
+        // Otherwise, we're here because of a mismatch, so keep going....
+    }
+    
+    // no match
+   start = -1;
+   end = -1;
+   return FALSE;
+}
+
+U_NAMESPACE_END
+
+#endif // #if !UCONFIG_NO_COLLATION

Added: trunk/source/i18n/colldata.cpp
===================================================================
--- trunk/source/i18n/colldata.cpp	                        (rev 0)
+++ trunk/source/i18n/colldata.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -0,0 +1,1104 @@
+/*
+ ******************************************************************************
+ *   Copyright (C) 1996-2009, International Business Machines                 *
+ *   Corporation and others.  All Rights Reserved.                            *
+ ******************************************************************************
+ */
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_COLLATION
+
+#include "unicode/unistr.h"
+#include "unicode/putil.h"
+#include "unicode/usearch.h"
+
+#include "cmemory.h"
+#include "unicode/coll.h"
+#include "unicode/tblcoll.h"
+#include "unicode/coleitr.h"
+#include "unicode/ucoleitr.h"
+
+#include "unicode/regex.h"        // TODO: make conditional on regexp being built.
+
+#include "unicode/uniset.h"
+#include "unicode/uset.h"
+#include "unicode/ustring.h"
+#include "hash.h"
+#include "uhash.h"
+#include "ucln_in.h"
+#include "ucol_imp.h"
+#include "umutex.h"
+
+#include "unicode/colldata.h"
+
+U_NAMESPACE_BEGIN
+
+#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))
+#define NEW_ARRAY(type, count) (type *) uprv_malloc((count) * sizeof(type))
+#define DELETE_ARRAY(array) uprv_free((void *) (array))
+#define ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
+
+static inline USet *uset_openEmpty()
+{
+    return uset_open(1, 0);
+}
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CEList)
+
+#ifdef INSTRUMENT_CELIST
+int32_t CEList::_active = 0;
+int32_t CEList::_histogram[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+#endif
+
+CEList::CEList(UCollator *coll, const UnicodeString &string, UErrorCode &status)
+    : ces(NULL), listMax(CELIST_BUFFER_SIZE), listSize(0)
+{
+    UCollationElements *elems = ucol_openElements(coll, string.getBuffer(), string.length(), &status);
+    UCollationStrength strength = ucol_getStrength(coll);
+    UBool toShift = ucol_getAttribute(coll, UCOL_ALTERNATE_HANDLING, &status) ==  UCOL_SHIFTED;
+    uint32_t variableTop = ucol_getVariableTop(coll, &status);
+    uint32_t strengthMask = 0;
+    int32_t order;
+
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    // **** only set flag if string has Han(gul) ****
+    ucol_forceHanImplicit(elems, &status);
+
+    switch (strength) 
+    {
+    default:
+        strengthMask |= UCOL_TERTIARYORDERMASK;
+        /* fall through */
+
+    case UCOL_SECONDARY:
+        strengthMask |= UCOL_SECONDARYORDERMASK;
+        /* fall through */
+
+    case UCOL_PRIMARY:
+        strengthMask |= UCOL_PRIMARYORDERMASK;
+    }
+
+#ifdef INSTRUMENT_CELIST
+    _active += 1;
+    _histogram[0] += 1;
+#endif
+
+    ces = ceBuffer;
+
+    while ((order = ucol_next(elems, &status)) != UCOL_NULLORDER) {
+        UBool cont = isContinuation(order);
+
+        order &= strengthMask;
+
+        if (toShift && variableTop > order && (order & UCOL_PRIMARYORDERMASK) != 0) {
+            if (strength >= UCOL_QUATERNARY) {
+                order &= UCOL_PRIMARYORDERMASK;
+            } else {
+                order = UCOL_IGNORABLE;
+            }
+        }
+
+        if (order == UCOL_IGNORABLE) {
+            continue;
+        }
+
+        if (cont) {
+            order |= UCOL_CONTINUATION_MARKER;
+        }
+
+        add(order, status);
+    }
+
+    ucol_closeElements(elems);
+}
+
+CEList::~CEList()
+{
+#ifdef INSTRUMENT_CELIST
+    _active -= 1;
+#endif
+
+    if (ces != ceBuffer) {
+        DELETE_ARRAY(ces);
+    }
+}
+
+void CEList::add(uint32_t ce, UErrorCode &status)
+{
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    if (listSize >= listMax) {
+        int32_t newMax = listMax + CELIST_BUFFER_SIZE;
+
+#ifdef INSTRUMENT_CELIST
+        _histogram[listSize / CELIST_BUFFER_SIZE] += 1;
+#endif
+
+        uint32_t *newCEs = NEW_ARRAY(uint32_t, newMax);
+
+        if (newCEs == NULL) {
+            status = U_MEMORY_ALLOCATION_ERROR;
+            return;
+        }
+
+        uprv_memcpy(newCEs, ces, listSize * sizeof(uint32_t));
+
+        if (ces != ceBuffer) {
+            DELETE_ARRAY(ces);
+        }
+
+        ces = newCEs;
+        listMax = newMax;
+    }
+
+    ces[listSize++] = ce;
+}
+
+uint32_t CEList::get(int32_t index) const
+{
+    if (index >= 0 && index < listSize) {
+        return ces[index];
+    }
+
+    return UCOL_NULLORDER;
+}
+
+uint32_t &CEList::operator[](int32_t index) const
+{
+    return ces[index];
+}
+
+UBool CEList::matchesAt(int32_t offset, const CEList *other) const
+{
+    if (other == NULL || listSize - offset < other->size()) {
+        return FALSE;
+    }
+
+    for (int32_t i = offset, j = 0; j < other->size(); i += 1, j += 1) {
+        if (ces[i] != (*other)[j]) {
+            return FALSE;
+        }
+    }
+
+    return TRUE;
+}
+
+int32_t CEList::size() const
+{
+    return listSize;
+}
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(StringList)
+
+#ifdef INSTRUMENT_STRING_LIST
+int32_t StringList::_lists = 0;
+int32_t StringList::_strings = 0;
+int32_t StringList::_histogram[101] = {0};
+#endif
+
+StringList::StringList(UErrorCode &status)
+    : strings(NULL), listMax(STRING_LIST_BUFFER_SIZE), listSize(0)
+{
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    strings = new UnicodeString [listMax];
+
+    if (strings == NULL) {
+        status = U_MEMORY_ALLOCATION_ERROR;
+        return;
+    }
+
+#ifdef INSTRUMENT_STRING_LIST
+    _lists += 1;
+    _histogram[0] += 1;
+#endif
+}
+
+StringList::~StringList()
+{
+    delete[] strings;
+}
+
+void StringList::add(const UnicodeString *string, UErrorCode &status)
+{
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+#ifdef INSTRUMENT_STRING_LIST
+    _strings += 1;
+#endif
+
+    if (listSize >= listMax) {
+        int32_t newMax = listMax + STRING_LIST_BUFFER_SIZE;
+
+        UnicodeString *newStrings = new UnicodeString[newMax];
+
+        uprv_memcpy(newStrings, strings, listSize * sizeof(UnicodeString));
+
+#ifdef INSTRUMENT_STRING_LIST
+        int32_t _h = listSize / STRING_LIST_BUFFER_SIZE;
+
+        if (_h > 100) {
+            _h = 100;
+        }
+
+        _histogram[_h] += 1;
+#endif
+
+        delete[] strings;
+        strings = newStrings;
+        listMax = newMax;
+    }
+
+    // The ctor initialized all the strings in
+    // the array to empty strings, so this
+    // is the same as copying the source string.
+    strings[listSize++].append(*string);
+}
+
+void StringList::add(const UChar *chars, int32_t count, UErrorCode &status)
+{
+    const UnicodeString string(chars, count);
+
+    add(&string, status);
+}
+
+const UnicodeString *StringList::get(int32_t index) const
+{
+    if (index >= 0 && index < listSize) {
+        return &strings[index];
+    }
+
+    return NULL;
+}
+
+int32_t StringList::size() const
+{
+    return listSize;
+}
+
+
+U_CFUNC void deleteStringList(void *obj);
+
+class CEToStringsMap : public UMemory
+{
+public:
+
+    CEToStringsMap(UErrorCode &status);
+    ~CEToStringsMap();
+
+    void put(uint32_t ce, UnicodeString *string, UErrorCode &status);
+    StringList *getStringList(uint32_t ce) const;
+
+private:
+ 
+    void putStringList(uint32_t ce, StringList *stringList, UErrorCode &status);
+    UHashtable *map;
+};
+
+CEToStringsMap::CEToStringsMap(UErrorCode &status)
+    : map(NULL)
+{
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    map = uhash_open(uhash_hashLong, uhash_compareLong,
+                     uhash_compareCaselessUnicodeString,
+                     &status);
+
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    uhash_setValueDeleter(map, deleteStringList);
+}
+
+CEToStringsMap::~CEToStringsMap()
+{
+    uhash_close(map);
+}
+
+void CEToStringsMap::put(uint32_t ce, UnicodeString *string, UErrorCode &status)
+{
+    StringList *strings = getStringList(ce);
+
+    if (strings == NULL) {
+        strings = new StringList(status);
+
+        if (strings == NULL || U_FAILURE(status)) {
+            status = U_MEMORY_ALLOCATION_ERROR;
+            return;
+        }
+
+        putStringList(ce, strings, status);
+    }
+
+    strings->add(string, status);
+}
+
+StringList *CEToStringsMap::getStringList(uint32_t ce) const
+{
+    return (StringList *) uhash_iget(map, ce);
+}
+
+void CEToStringsMap::putStringList(uint32_t ce, StringList *stringList, UErrorCode &status)
+{
+    uhash_iput(map, ce, (void *) stringList, &status);
+}
+
+U_CFUNC void deleteStringList(void *obj)
+{
+    StringList *strings = (StringList *) obj;
+
+    delete strings;
+}
+
+U_CFUNC void deleteCEList(void *obj);
+U_CFUNC void deleteUnicodeStringKey(void *obj);
+
+class StringToCEsMap : public UMemory
+{
+public:
+    StringToCEsMap(UErrorCode &status);
+    ~StringToCEsMap();
+
+    void put(const UnicodeString *string, const CEList *ces, UErrorCode &status);
+    const CEList *get(const UnicodeString *string);
+    void free(const CEList *list);
+
+private:
+
+
+    UHashtable *map;
+};
+
+StringToCEsMap::StringToCEsMap(UErrorCode &status)
+    : map(NULL)
+{
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    map = uhash_open(uhash_hashUnicodeString,
+                     uhash_compareUnicodeString,
+                     uhash_compareLong,
+                     &status);
+
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    uhash_setValueDeleter(map, deleteCEList);
+    uhash_setKeyDeleter(map, deleteUnicodeStringKey);
+}
+
+StringToCEsMap::~StringToCEsMap()
+{
+    uhash_close(map);
+}
+
+void StringToCEsMap::put(const UnicodeString *string, const CEList *ces, UErrorCode &status)
+{
+    uhash_put(map, (void *) string, (void *) ces, &status);
+}
+
+const CEList *StringToCEsMap::get(const UnicodeString *string)
+{
+    return (const CEList *) uhash_get(map, string);
+}
+
+U_CFUNC void deleteCEList(void *obj)
+{
+    CEList *list = (CEList *) obj;
+
+    delete list;
+}
+
+U_CFUNC void deleteUnicodeStringKey(void *obj)
+{
+    UnicodeString *key = (UnicodeString *) obj;
+
+    delete key;
+}
+
+class CollDataCacheEntry : public UMemory
+{
+public:
+    CollDataCacheEntry(CollData *theData);
+    ~CollDataCacheEntry();
+
+    CollData *data;
+    int32_t   refCount;
+};
+
+CollDataCacheEntry::CollDataCacheEntry(CollData *theData)
+    : data(theData), refCount(1)
+{
+    // nothing else to do
+}
+
+CollDataCacheEntry::~CollDataCacheEntry()
+{
+    // check refCount?
+    delete data;
+}
+
+class CollDataCache : public UMemory
+{
+public:
+    CollDataCache(UErrorCode &status);
+    ~CollDataCache();
+
+    CollData *get(UCollator *collator, UErrorCode &status);
+    void unref(CollData *collData);
+
+    void flush();
+
+private:
+    static char *getKey(UCollator *collator, char *keyBuffer, int32_t *charBufferLength);
+    static void deleteKey(char *key);
+
+    UMTX lock;
+    UHashtable *cache;
+};
+
+U_CFUNC void deleteChars(void *obj)
+{
+    char *chars = (char *) obj;
+
+    // All the key strings are owned by the 
+    // CollData objects and don't need to
+    // be freed here.
+  //DELETE_ARRAY(chars);
+}
+
+U_CFUNC void deleteCollDataCacheEntry(void *obj)
+{
+    CollDataCacheEntry *entry = (CollDataCacheEntry *) obj;
+
+    delete entry;
+}
+
+CollDataCache::CollDataCache(UErrorCode &status)
+    : lock(0), cache(NULL)
+{
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    umtx_init(&lock);
+
+    cache = uhash_open(uhash_hashChars, uhash_compareChars, uhash_compareLong, &status);
+
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    uhash_setValueDeleter(cache, deleteCollDataCacheEntry);
+    uhash_setKeyDeleter(cache, deleteChars);
+}
+
+CollDataCache::~CollDataCache()
+{
+    umtx_lock(&lock);
+    uhash_close(cache);
+    cache = NULL;
+    umtx_unlock(&lock);
+
+    umtx_destroy(&lock);
+}
+
+CollData *CollDataCache::get(UCollator *collator, UErrorCode &status)
+{
+    char keyBuffer[KEY_BUFFER_SIZE];
+    int32_t keyLength = KEY_BUFFER_SIZE;
+    char *key = getKey(collator, keyBuffer, &keyLength);
+    CollData *result = NULL, *newData = NULL;
+    CollDataCacheEntry *entry = NULL, *newEntry = NULL;
+
+    umtx_lock(&lock);
+    entry = (CollDataCacheEntry *) uhash_get(cache, key);
+
+    if (entry == NULL) {
+        umtx_unlock(&lock);
+
+        newData = new CollData(collator, key, keyLength, status);
+        newEntry = new CollDataCacheEntry(newData);
+
+        if (U_FAILURE(status) || newData == NULL || newEntry == NULL) {
+            status = U_MEMORY_ALLOCATION_ERROR;
+            return NULL;
+        }
+
+        umtx_lock(&lock);
+        entry = (CollDataCacheEntry *) uhash_get(cache, key);
+
+        if (entry == NULL) {
+            uhash_put(cache, newData->key, newEntry, &status);
+            umtx_unlock(&lock);
+
+            if (U_FAILURE(status)) {
+                delete newEntry;
+                delete newData;
+
+                return NULL;
+            }
+
+            return newData;
+        }
+    }
+
+    result = entry->data;
+    entry->refCount += 1;
+    umtx_unlock(&lock);
+
+    if (key != keyBuffer) {
+        deleteKey(key);
+    }
+
+    if (newEntry != NULL) {
+        delete newEntry;
+        delete newData;
+    }
+
+    return result;
+}
+
+void CollDataCache::unref(CollData *collData)
+{
+    CollDataCacheEntry *entry = NULL;
+    
+    umtx_lock(&lock);
+    entry = (CollDataCacheEntry *) uhash_get(cache, collData->key);
+
+    if (entry != NULL) {
+        entry->refCount -= 1;
+    }
+    umtx_unlock(&lock);
+}
+
+char *CollDataCache::getKey(UCollator *collator, char *keyBuffer, int32_t *keyBufferLength)
+{
+    UErrorCode status = U_ZERO_ERROR;
+    int32_t len = ucol_getShortDefinitionString(collator, NULL, keyBuffer, *keyBufferLength, &status);
+
+    if (len >= *keyBufferLength) {
+        *keyBufferLength = (len + 2) & ~1;  // round to even length, leaving room for terminating null
+        keyBuffer = NEW_ARRAY(char, *keyBufferLength);
+        status = U_ZERO_ERROR;
+
+        len = ucol_getShortDefinitionString(collator, NULL, keyBuffer, *keyBufferLength, &status);
+    }
+
+    keyBuffer[len] = '\0';
+
+    return keyBuffer;
+}
+
+void CollDataCache::flush()
+{
+    const UHashElement *element;
+    int32_t pos = -1;
+
+    umtx_lock(&lock);
+    while ((element = uhash_nextElement(cache, &pos)) != NULL) {
+        CollDataCacheEntry *entry = (CollDataCacheEntry *) element->value.pointer;
+
+        if (entry->refCount <= 0) {
+            uhash_removeElement(cache, element);
+        }
+    }
+    umtx_unlock(&lock);
+}
+
+void CollDataCache::deleteKey(char *key)
+{
+    DELETE_ARRAY(key);
+}
+
+U_CDECL_BEGIN
+static UBool coll_data_cleanup(void) {
+    CollData::freeCollDataCache();
+  return TRUE;
+}
+U_CDECL_END
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CollData)
+
+CollData::CollData()
+{
+    // nothing
+}
+
+#define CLONE_COLLATOR
+
+//#define CACHE_CELISTS
+CollData::CollData(UCollator *collator, char *cacheKey, int32_t cacheKeyLength, UErrorCode &status)
+    : coll(NULL), charsToCEList(NULL), ceToCharsStartingWith(NULL), key(NULL)
+{
+    // [:c:] == [[:cn:][:cc:][:co:][:cf:][:cs:]]
+    // i.e. other, control, private use, format, surrogate
+    U_STRING_DECL(test_pattern, "[[:assigned:]-[:c:]]", 20);
+    U_STRING_INIT(test_pattern, "[[:assigned:]-[:c:]]", 20);
+    USet *charsToTest = uset_openPattern(test_pattern, 20, &status);
+
+    // Han ext. A, Han, Jamo, Hangul, Han Ext. B
+    // i.e. all the characers we handle implicitly
+    U_STRING_DECL(remove_pattern, "[[\\u3400-\\u9FFF][\\u1100-\\u11F9][\\uAC00-\\uD7AF][\\U00020000-\\U0002A6DF]]", 70);
+    U_STRING_INIT(remove_pattern, "[[\\u3400-\\u9FFF][\\u1100-\\u11F9][\\uAC00-\\uD7AF][\\U00020000-\\U0002A6DF]]", 70);
+    USet *charsToRemove = uset_openPattern(remove_pattern, 70, &status);
+
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    USet *expansions   = uset_openEmpty();
+    USet *contractions = uset_openEmpty();
+    int32_t itemCount;
+
+#ifdef CACHE_CELISTS
+    charsToCEList = new StringToCEsMap(status);
+
+    if (U_FAILURE(status)) {
+        goto bail;
+    }
+#else
+    charsToCEList = NULL;
+#endif
+
+    ceToCharsStartingWith = new CEToStringsMap(status);
+
+    if (U_FAILURE(status)) {
+        goto bail;
+    }
+    
+    if (cacheKeyLength > KEY_BUFFER_SIZE) {
+        key = NEW_ARRAY(char, cacheKeyLength);
+
+        if (key == NULL) {
+            status = U_MEMORY_ALLOCATION_ERROR;
+            goto bail;
+        }
+    } else {
+        key = keyBuffer;
+    }
+
+    ARRAY_COPY(key, cacheKey, cacheKeyLength);
+
+#ifdef CLONE_COLLATOR
+    coll = ucol_safeClone(collator, NULL, NULL, &status);
+
+    if (U_FAILURE(status)) {
+        goto bail;
+    }
+#else
+    coll = collator;
+#endif
+
+    ucol_getContractionsAndExpansions(coll, contractions, expansions, FALSE, &status);
+
+    uset_addAll(charsToTest, contractions);
+    uset_addAll(charsToTest, expansions);
+    uset_removeAll(charsToTest, charsToRemove);
+
+    itemCount = uset_getItemCount(charsToTest);
+    for(int32_t item = 0; item < itemCount; item += 1) {
+        UChar32 start = 0, end = 0;
+        UChar buffer[16];
+        int32_t len = uset_getItem(charsToTest, item, &start, &end,
+                                   buffer, 16, &status);
+
+        if (len == 0) {
+            for (UChar32 ch = start; ch <= end; ch += 1) {
+                UnicodeString *st = new UnicodeString(ch);
+
+                if (st == NULL) {
+                    status = U_MEMORY_ALLOCATION_ERROR;
+                    break;
+                }
+
+                CEList *ceList = new CEList(coll, *st, status);
+
+                ceToCharsStartingWith->put(ceList->get(0), st, status);
+
+#ifdef CACHE_CELISTS
+                charsToCEList->put(st, ceList, status);
+#else
+                delete ceList;
+                delete st;
+#endif
+            }
+        } else if (len > 0) {
+            UnicodeString *st = new UnicodeString(buffer, len);
+
+            if (st == NULL) {
+                status = U_MEMORY_ALLOCATION_ERROR;
+                break;
+            }
+
+            CEList *ceList = new CEList(coll, *st, status);
+
+            ceToCharsStartingWith->put(ceList->get(0), st, status);
+
+#ifdef CACHE_CELISTS
+            charsToCEList->put(st, ceList, status);
+#else
+            delete ceList;
+            delete st;
+#endif
+        } else {
+            // shouldn't happen...
+        }
+
+        if (U_FAILURE(status)) {
+             break;
+        }
+    }
+
+bail:
+    uset_close(contractions);
+    uset_close(expansions);
+    uset_close(charsToRemove);
+    uset_close(charsToTest);
+
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+     UChar   hanRanges[] = {UCOL_FIRST_HAN, UCOL_LAST_HAN, UCOL_FIRST_HAN_COMPAT, UCOL_LAST_HAN_COMPAT, UCOL_FIRST_HAN_A, UCOL_LAST_HAN_A,
+                            UCOL_FIRST_HAN_B_LEAD, UCOL_FIRST_HAN_B_TRAIL, UCOL_LAST_HAN_B_LEAD, UCOL_LAST_HAN_B_TRAIL};
+     UChar  jamoRanges[] = {UCOL_FIRST_L_JAMO, UCOL_FIRST_V_JAMO, UCOL_FIRST_T_JAMO, UCOL_LAST_T_JAMO};
+     UnicodeString hanString(hanRanges, ARRAY_SIZE(hanRanges));
+     UnicodeString jamoString(jamoRanges, ARRAY_SIZE(jamoRanges));
+     CEList hanList(coll, hanString, status);
+     CEList jamoList(coll, jamoString, status);
+     int32_t j = 0;
+
+     if (U_FAILURE(status)) {
+         return;
+     }
+
+     for (int32_t c = 0; c < jamoList.size(); c += 1) {
+         uint32_t jce = jamoList[c];
+
+         if (! isContinuation(jce)) {
+             jamoLimits[j++] = jce;
+         }
+     }
+
+     jamoLimits[3] += (1 << UCOL_PRIMARYORDERSHIFT);
+
+     minHan = 0xFFFFFFFF;
+     maxHan = 0;
+     
+     for(int32_t h = 0; h < hanList.size(); h += 2) {
+         uint32_t han = (uint32_t) hanList[h];
+
+         if (han < minHan) {
+             minHan = han;
+         }
+
+         if (han > maxHan) {
+             maxHan = han;
+         }
+     }
+
+     maxHan += (1 << UCOL_PRIMARYORDERSHIFT);
+}
+
+CollData::~CollData()
+{
+#ifdef CLONE_COLLATOR
+   ucol_close(coll);
+#endif
+
+   if (key != keyBuffer) {
+       DELETE_ARRAY(key);
+   }
+
+   delete ceToCharsStartingWith;
+
+#ifdef CACHE_CELISTS
+   delete charsToCEList;
+#endif
+}
+
+UCollator *CollData::getCollator() const
+{
+    return coll;
+}
+
+const StringList *CollData::getStringList(int32_t ce) const
+{
+    return ceToCharsStartingWith->getStringList(ce);
+}
+
+const CEList *CollData::getCEList(const UnicodeString *string) const
+{
+#ifdef CACHE_CELISTS
+    return charsToCEList->get(string);
+#else
+    UErrorCode status = U_ZERO_ERROR;
+    const CEList *list = new CEList(coll, *string, status);
+    
+    if (U_FAILURE(status)) {
+        delete list;
+        list = NULL;
+    }
+
+    return list;
+#endif
+}
+
+void CollData::freeCEList(const CEList *list)
+{
+#ifndef CACHE_CELISTS
+    delete list;
+#endif
+}
+
+int32_t CollData::minLengthInChars(const CEList *ceList, int32_t offset, int32_t *history) const
+{
+    // find out shortest string for the longest sequence of ces.
+    // this can probably be folded with the minLengthCache...
+
+    if (history[offset] >= 0) {
+        return history[offset];
+    }
+
+    uint32_t ce = ceList->get(offset);
+    int32_t maxOffset = ceList->size();
+    int32_t shortestLength = INT32_MAX;
+    const StringList *strings = ceToCharsStartingWith->getStringList(ce);
+
+    if (strings != NULL) {
+        int32_t stringCount = strings->size();
+      
+        for (int32_t s = 0; s < stringCount; s += 1) {
+            const UnicodeString *string = strings->get(s);
+#ifdef CACHE_CELISTS
+            const CEList *ceList2 = charsToCEList->get(string);
+#else
+            UErrorCode status = U_ZERO_ERROR;
+            const CEList *ceList2 = new CEList(coll, *string, status);
+
+            if (U_FAILURE(status)) {
+                delete ceList2;
+                ceList2 = NULL;
+            }
+#endif
+
+            if (ceList->matchesAt(offset, ceList2)) {
+                int32_t clength = ceList2->size();
+                int32_t slength = string->length();
+                int32_t roffset = offset + clength;
+                int32_t rlength = 0;
+                
+                if (roffset < maxOffset) {
+                    rlength = minLengthInChars(ceList, roffset, history);
+
+                    if (rlength <= 0) {
+                        // ignore any dead ends
+                        continue;
+                    }
+                }
+
+                if (shortestLength > slength + rlength) {
+                    shortestLength = slength + rlength;
+                }
+            }
+
+#ifndef CACHE_CELISTS
+            delete ceList2;
+#endif
+        }
+    }
+
+    if (shortestLength == INT32_MAX) {
+        // No matching strings at this offset. See if 
+        // the CE is in a range we can handle manually.
+        if (ce >= minHan && ce < maxHan) {
+            // all han have implicit orders which
+            // generate two CEs.
+            int32_t roffset = offset + 2;
+            int32_t rlength = 0;
+
+          //history[roffset++] = -1;
+          //history[roffset++] = 1;
+
+            if (roffset < maxOffset) {
+                rlength = minLengthInChars(ceList, roffset, history);
+            }
+
+            if (rlength < 0) {
+                return -1;
+            }
+
+            shortestLength = 1 + rlength;
+            goto have_shortest;
+        } else if (ce >= jamoLimits[0] && ce < jamoLimits[3]) {
+            int32_t roffset = offset;
+            int32_t rlength = 0;
+
+            // **** this loop may not handle archaic Hangul correctly ****
+            for (int32_t j = 0; roffset < maxOffset && j < 4; j += 1, roffset += 1) {
+                uint32_t jce = ceList->get(roffset);
+
+                // Some Jamo have 24-bit primary order; skip the
+                // 2nd CE. This should always be OK because if
+                // we're still in the loop all we've seen are
+                // a series of Jamo in LVT order.
+                if (isContinuation(jce)) {
+                    continue;
+                }
+
+                if (j >= 3 || jce < jamoLimits[j] || jce >= jamoLimits[j + 1]) {
+                    break;
+                }
+            }
+
+            if (roffset == offset) {
+                // we started with a non-L Jamo...
+                // just say it comes from a single character
+                roffset += 1;
+
+                // See if the single Jamo has a 24-bit order.
+                if (roffset < maxOffset && isContinuation(ceList->get(roffset))) {
+                    roffset += 1;
+                }
+            }
+
+            if (roffset < maxOffset) {
+                rlength = minLengthInChars(ceList, roffset, history);
+            }
+
+            if (rlength < 0) {
+                return -1;
+            }
+
+            shortestLength = 1 + rlength;
+            goto have_shortest;
+        }
+
+        // Can't handle it manually either. Just move on.
+        return -1;
+    }
+
+have_shortest:
+    history[offset] = shortestLength;
+
+    return shortestLength;
+}
+
+int32_t CollData::minLengthInChars(const CEList *ceList, int32_t offset) const
+{
+    int32_t clength = ceList->size();
+    int32_t *history = NEW_ARRAY(int32_t, clength);
+
+    for (int32_t i = 0; i < clength; i += 1) {
+        history[i] = -1;
+    }
+
+    int32_t minLength = minLengthInChars(ceList, offset, history);
+
+    DELETE_ARRAY(history);
+
+    return minLength;
+}
+
+CollData *CollData::open(UCollator *collator, UErrorCode &status)
+{
+    if (U_FAILURE(status)) {
+        return NULL;
+    }
+
+    CollDataCache *cache = getCollDataCache();
+        
+    return cache->get(collator, status);
+}
+
+void CollData::close(CollData *collData)
+{
+    CollDataCache *cache = getCollDataCache();
+
+    cache->unref(collData);
+}
+
+CollDataCache *CollData::collDataCache = NULL;
+
+CollDataCache *CollData::getCollDataCache()
+{
+    UErrorCode status = U_ZERO_ERROR;
+    CollDataCache *cache = NULL;
+
+    UMTX_CHECK(NULL, collDataCache, cache);
+
+    if (cache == NULL) {
+        cache = new CollDataCache(status);
+
+        if (U_FAILURE(status)) {
+            delete cache;
+            return NULL;
+        }
+
+        umtx_lock(NULL);
+        if (collDataCache == NULL) {
+            collDataCache = cache;
+
+            ucln_i18n_registerCleanup(UCLN_I18N_COLL_DATA, coll_data_cleanup);
+        }
+        umtx_unlock(NULL);
+
+        if (collDataCache != cache) {
+            delete cache;
+        }
+    }
+
+    return collDataCache;
+}
+
+void CollData::freeCollDataCache()
+{
+    CollDataCache *cache = NULL;
+
+    UMTX_CHECK(NULL, collDataCache, cache);
+
+    if (cache != NULL) {
+        umtx_lock(NULL);
+        if (collDataCache != NULL) {
+            collDataCache = NULL;
+        } else {
+            cache = NULL;
+        }
+        umtx_unlock(NULL);
+
+        delete cache;
+    }
+}
+
+void CollData::flushCollDataCache()
+{
+    CollDataCache *cache = NULL;
+
+    UMTX_CHECK(NULL, collDataCache, cache);
+
+    // **** this will fail if the another ****
+    // **** thread deletes the cache here ****
+    if (cache != NULL) {
+        cache->flush();
+    }
+}
+
+U_NAMESPACE_END
+
+#endif // #if !UCONFIG_NO_COLLATION

Modified: trunk/source/i18n/i18n.vcproj
===================================================================
--- trunk/source/i18n/i18n.vcproj	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/i18n.vcproj	2009-02-07 10:08:34 UTC (rev 162)
@@ -213,6 +213,58 @@
 			Name="collation"
 			>
 			<File
+				RelativePath=".\bms.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\unicode\bms.h"
+				>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="copy &quot;$(InputPath)&quot; ..\..\include\unicode"
+						Outputs="..\..\include\unicode\$(InputFileName)"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="copy &quot;$(InputPath)&quot; ..\..\include\unicode"
+						Outputs="..\..\include\unicode\$(InputFileName)"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath=".\bmsearch.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\unicode\bmsearch.h"
+				>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="copy &quot;$(InputPath)&quot; ..\..\include\unicode&#x0D;&#x0A;"
+						Outputs="..\..\include\unicode\$(InputFileName)"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="copy &quot;$(InputPath)&quot; ..\..\include\unicode&#x0D;&#x0A;"
+						Outputs="..\..\include\unicode\$(InputFileName)"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
 				RelativePath=".\bocsu.c"
 				>
 			</File>
@@ -273,6 +325,32 @@
 				</FileConfiguration>
 			</File>
 			<File
+				RelativePath=".\colldata.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\unicode\colldata.h"
+				>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="copy &quot;$(InputPath)&quot; ..\..\include\unicode&#x0D;&#x0A;"
+						Outputs="..\..\include\unicode\$(InputFileName)"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						CommandLine="copy &quot;$(InputPath)&quot; ..\..\include\unicode&#x0D;&#x0A;"
+						Outputs="..\..\include\unicode\$(InputFileName)"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
 				RelativePath=".\search.cpp"
 				>
 			</File>

Modified: trunk/source/i18n/timezone.cpp
===================================================================
--- trunk/source/i18n/timezone.cpp	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/timezone.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -1235,6 +1235,8 @@
                 return result.remove();
             }
             format.adoptTimeZone(tz);
+        } else {
+            format.setTimeZone(*this);
         }
     } else {
         // The display name for standard time was requested, but currently in DST

Modified: trunk/source/i18n/ucln_in.h
===================================================================
--- trunk/source/i18n/ucln_in.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/ucln_in.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -45,6 +45,7 @@
     UCLN_I18N_UCOL_RES,
     UCLN_I18N_UCOL_BLD,
     UCLN_I18N_CSDET,
+    UCLN_I18N_COLL_DATA,
     UCLN_I18N_COUNT /* This must be last */
 } ECleanupI18NType;
 

Modified: trunk/source/i18n/ucol.cpp
===================================================================
--- trunk/source/i18n/ucol.cpp	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/ucol.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 /*
 *******************************************************************************
-*   Copyright (C) 1996-2008, International Business Machines
+*   Copyright (C) 1996-2009, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  ucol.cpp
@@ -126,7 +126,6 @@
     IInit_collIterate(collator, sourceString, sourceLen, s);
 }
 
-
 /**
 * Backup the state of the collIterate struct data
 * @param data collIterate to backup
@@ -1518,10 +1517,30 @@
     }
     else
     {
-        order = UTRIE_GET32_FROM_LEAD(&coll->mapping, ch);
+        // Always use UCA for Han, Hangul
+        // (Han extension A is before main Han block)
+        // **** Han compatibility chars ?? ****
+        if ((collationSource->flags & UCOL_FORCE_HAN_IMPLICIT) != 0 &&
+            (ch >= UCOL_FIRST_HAN_A && ch <= UCOL_LAST_HANGUL)) {
+            if (ch > UCOL_LAST_HAN && ch < UCOL_FIRST_HANGUL) {
+                // between the two target ranges; do normal lookup
+                // **** this range is YI, Modifier tone letters, ****
+                // **** Latin-D, Syloti Nagari, Phagas-pa.       ****
+                // **** Latin-D might be tailored, so we need to ****
+                // **** do the normal lookup for these guys.     ****
+                order = UTRIE_GET32_FROM_LEAD(&coll->mapping, ch);
+            } else {
+                // in one of the target ranges; use UCA
+                order = UCOL_NOT_FOUND;
+            }
+        } else {
+            order = UTRIE_GET32_FROM_LEAD(&coll->mapping, ch);
+        }
+
         if(order > UCOL_NOT_FOUND) {                                       /* if a CE is special                */
             order = ucol_prv_getSpecialCE(coll, ch, order, collationSource, status);    /* and try to get the special CE     */
         }
+
         if(order == UCOL_NOT_FOUND && coll->UCA) {   /* We couldn't find a good CE in the tailoring */
             /* if we got here, the codepoint MUST be over 0xFF - so we look directly in the trie */
             order = UTRIE_GET32_FROM_LEAD(&coll->UCA->mapping, ch);
@@ -1981,7 +2000,27 @@
                 result = coll->latinOneMapping[ch];
             }
             else {
-                result = UTRIE_GET32_FROM_LEAD(&coll->mapping, ch);
+                // Always use UCA for [3400..9FFF], [AC00..D7AF]
+                // **** [FA0E..FA2F] ?? ****
+                if ((data->flags & UCOL_FORCE_HAN_IMPLICIT) != 0 &&
+                    (ch >= 0x3400 && ch <= 0xD7AF)) {
+#if 1
+                    if (ch > 0x9FFF && ch < 0xAC00) {
+                        // between the two target ranges; do normal lookup
+                        // **** this range is YI, Modifier tone letters, ****
+                        // **** Latin-D, Syloti Nagari, Phagas-pa. It's  ****
+                        // **** unlikely that these are tailored so it's ****
+                        // **** probably OK to use UCA for them too.     ****
+                         result = UTRIE_GET32_FROM_LEAD(&coll->mapping, ch);
+                    } else {
+                        result = UCOL_NOT_FOUND;
+                    }
+#else
+                    result = UCOL_NOT_FOUND;
+#endif
+                } else {
+                    result = UTRIE_GET32_FROM_LEAD(&coll->mapping, ch);
+                }
             }
             if (result > UCOL_NOT_FOUND) {
                 result = ucol_prv_getSpecialPrevCE(coll, ch, result, data, status);
@@ -3587,38 +3626,12 @@
 
             int32_t offsetBias;
 
-#if 0
-            if (source->offsetReturn != NULL) {
-                source->offsetStore = source->offsetReturn - noChars;
-            }
-
             // **** doesn't work if using iterator ****
             if (source->flags & UCOL_ITER_INNORMBUF) {
-                if (source->fcdPosition == NULL) {
-                    offsetBias = 0;
-                } else {
-                    offsetBias = (int32_t)(source->fcdPosition - source->string);
-                }
-            } else {
-                offsetBias = (int32_t)(source->pos - source->string);
-            }
-
-#else
-            // **** doesn't work if using iterator ****
-            if (source->flags & UCOL_ITER_INNORMBUF) {
-#if 1
                 offsetBias = -1;
-#else
-              if (source->fcdPosition == NULL) {
-                  offsetBias = 0;
-              } else {
-                  offsetBias = (int32_t)(source->fcdPosition - source->string);
-              }
-#endif
             } else {
                 offsetBias = (int32_t)(source->pos - source->string);
             }
-#endif
 
             /* a new collIterate is used to simplify things, since using the current
             collIterate will mean that the forward and backwards iteration will
@@ -3626,9 +3639,9 @@
             collIterate temp;
             int32_t rawOffset;
 
-            //IInit_collIterate(coll, UCharOffset, -1, &temp);
             IInit_collIterate(coll, UCharOffset, noChars, &temp);
             temp.flags &= ~UCOL_ITER_NORM;
+            temp.flags |= source->flags & UCOL_FORCE_HAN_IMPLICIT;
 
             rawOffset = temp.pos - temp.string; // should always be zero?
             CE = ucol_IGetNextCE(coll, &temp, status);
@@ -3721,7 +3734,12 @@
                     }
                 }
 
-                rawOffset = temp.pos - temp.string;
+                if ((temp.flags & UCOL_ITER_INNORMBUF) != 0) {
+                    rawOffset = temp.fcdPosition - temp.string;
+                } else {
+                    rawOffset = temp.pos - temp.string;
+                }
+
                 CE = ucol_IGetNextCE(coll, &temp, status);
             }
 
@@ -4178,29 +4196,6 @@
             }
 
         case IMPLICIT_TAG:        /* everything that is not defined otherwise */
-#if 0
-			if (source->offsetBuffer == NULL) {
-				source->offsetBufferSize = UCOL_EXPAND_CE_BUFFER_SIZE;
-				source->offsetBuffer = (int32_t *) uprv_malloc(sizeof(int32_t) * UCOL_EXPAND_CE_BUFFER_SIZE);
-				source->offsetStore = source->offsetBuffer;
-			}
-
-			// **** doesn't work if using iterator ****
-			if (source->flags & UCOL_ITER_INNORMBUF) {
-			  source->offsetRepeatCount = 1;
-			} else {
-			  int32_t firstOffset = (int32_t)(source->pos - source->string);
-
-			  *(source->offsetStore++) = firstOffset;
-			  *(source->offsetStore++) = firstOffset + 1;
-
-				source->offsetReturn = source->offsetStore - 1;
-				if (source->offsetReturn == source->offsetBuffer) {
-					source->offsetStore = source->offsetBuffer;
-				}
-			}
-#endif
-
             return getPrevImplicit(ch, source);
 
             // TODO: Remove CJK implicits as they are handled by the getImplicitPrimary function

Modified: trunk/source/i18n/ucol_imp.h
===================================================================
--- trunk/source/i18n/ucol_imp.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/ucol_imp.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 1998-2008, International Business Machines
+*   Copyright (C) 1998-2009, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
@@ -260,6 +260,8 @@
                               /* by index */
 #define UCOL_USE_ITERATOR   64
 
+#define UCOL_FORCE_HAN_IMPLICIT 128
+
 #define NFC_ZERO_CC_BLOCK_LIMIT_  0x300
 
 typedef struct collIterate {
@@ -390,8 +392,31 @@
                          (((uint32_t)(ch) - 0x1161) <= (0x1175 - 0x1161)) || \
                          (((uint32_t)(ch) - 0x11A8) <= (0x11C2 - 0x11A8)))
 
+/* Han character ranges */
+#define UCOL_FIRST_HAN 0x4E00
+#define UCOL_LAST_HAN  0x9FFF
+#define UCOL_FIRST_HAN_A 0x3400
+#define UCOL_LAST_HAN_A  0x4DBF
+#define UCOL_FIRST_HAN_COMPAT 0xFAE0
+#define UCOL_LAST_HAN_COMPAT  0xFA2F
 
+/* Han extension B is in plane 2 */
+#define UCOL_FIRST_HAN_B_LEAD  0xD840
+#define UCOL_FIRST_HAN_B_TRAIL 0xDC00
+#define UCOL_LAST_HAN_B_LEAD   0xD869
+#define UCOL_LAST_HAN_B_TRAIL  0xDEDF
 
+/* Hangul range */
+#define UCOL_FIRST_HANGUL 0xAC00
+#define UCOL_LAST_HANGUL  0xD7AF
+
+/* Jamo ranges */
+#define UCOL_FIRST_L_JAMO 0x1100
+#define UCOL_FIRST_V_JAMO 0x1161
+#define UCOL_FIRST_T_JAMO 0x11A8
+#define UCOL_LAST_T_JAMO  0x11F9
+
+
 #if 0
 /* initializes collIterate structure */
 /* made as macro to speed up things */

Modified: trunk/source/i18n/ucol_sit.cpp
===================================================================
--- trunk/source/i18n/ucol_sit.cpp	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/ucol_sit.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -578,15 +578,15 @@
     if(elementSize) {
         // we should probably canonicalize here...
         elementSize = uloc_getLanguage(locBuff, tempbuff, internalBufferSize, status);
-        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, capacity, languageArg);
+        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, /*capacity*/internalBufferSize, languageArg);
         elementSize = uloc_getCountry(locBuff, tempbuff, internalBufferSize, status);
-        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, capacity, regionArg);
+        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, /*capacity*/internalBufferSize, regionArg);
         elementSize = uloc_getScript(locBuff, tempbuff, internalBufferSize, status);
-        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, capacity, scriptArg);
+        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, /*capacity*/internalBufferSize, scriptArg);
         elementSize = uloc_getVariant(locBuff, tempbuff, internalBufferSize, status);
-        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, capacity, variantArg);
+        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, /*capacity*/internalBufferSize, variantArg);
         elementSize = uloc_getKeywordValue(locBuff, "collation", tempbuff, internalBufferSize, status);
-        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, capacity, keywordArg);
+        appendShortStringElement(tempbuff, elementSize, buffer, &resultSize, /*capacity*/internalBufferSize, keywordArg);
     } 
 
     int32_t i = 0;
@@ -597,7 +597,7 @@
             if(attribute != UCOL_DEFAULT) {
                 char letter = ucol_sit_attributeValueToLetter(attribute, status);
                 appendShortStringElement(&letter, 1, 
-                    buffer, &resultSize, capacity, options[i].optionStart);
+                    buffer, &resultSize, /*capacity*/internalBufferSize, options[i].optionStart);
             }
         }
     }

Modified: trunk/source/i18n/ucoleitr.cpp
===================================================================
--- trunk/source/i18n/ucoleitr.cpp	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/ucoleitr.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 /*
 ******************************************************************************
-*   Copyright (C) 2001-2008, International Business Machines
+*   Copyright (C) 2001-2009, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 ******************************************************************************
 *
@@ -263,7 +263,14 @@
         primary = ucol_primaryOrder(ce);
     }
 
-    // Continuation?
+    // **** This should probably handle continuations too.  ****
+    // **** That means that we need 24 bits for the primary ****
+    // **** instead of the 16 that we're currently using.   ****
+    // **** So we can lay out the 64 bits as: 24.12.12.16.  ****
+    // **** Another complication with continuations is that ****
+    // **** the *second* CE is marked as a continuation, so ****
+    // **** we always have to peek ahead to know how long   ****
+    // **** the primary is...                               ****
     if (elems->pce->toShift && (elems->pce->variableTop > ce && primary != 0)
                 || (elems->pce->isShifted && primary == 0)) {
 
@@ -285,7 +292,6 @@
         elems->pce->isShifted = FALSE;
     }
 
-
     return primary << 48 | secondary << 32 | tertiary << 16 | quaternary;
 }
 
@@ -332,6 +338,7 @@
     return result;
 }
 
+
 U_CAPI void U_EXPORT2
 ucol_closeElements(UCollationElements *elems)
 {
@@ -375,7 +382,7 @@
         ci->endp      = ci->string + u_strlen(ci->string);
     }
     ci->CEpos       = ci->toReturn = ci->CEs;
-    ci->flags       = UCOL_ITER_HASLEN;
+    ci->flags       = (ci->flags & UCOL_FORCE_HAN_IMPLICIT) | UCOL_ITER_HASLEN;
     if (ci->coll->normalizationMode == UCOL_ON) {
         ci->flags |= UCOL_ITER_NORM;
     }
@@ -391,6 +398,21 @@
 	ci->offsetRepeatCount = ci->offsetRepeatValue = 0;
 }
 
+U_CAPI void U_EXPORT2
+ucol_forceHanImplicit(UCollationElements *elems, UErrorCode *status)
+{
+    if (U_FAILURE(*status)) {
+        return;
+    }
+
+    if (elems == NULL) {
+        *status = U_ILLEGAL_ARGUMENT_ERROR;
+        return;
+    }
+
+    elems->iteratordata_.flags |= UCOL_FORCE_HAN_IMPLICIT;
+}
+
 U_CAPI int32_t U_EXPORT2
 ucol_next(UCollationElements *elems, 
           UErrorCode         *status)

Modified: trunk/source/i18n/unicode/basictz.h
===================================================================
--- trunk/source/i18n/unicode/basictz.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/basictz.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -29,13 +29,13 @@
  * <code>BasicTimeZone</code> is an abstract class extending <code>TimeZone</code>.
  * This class provides some additional methods to access time zone transitions and rules.
  * All ICU <code>TimeZone</code> concrete subclasses extend this class.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 class U_I18N_API BasicTimeZone: public TimeZone {
 public:
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual ~BasicTimeZone();
 
@@ -45,7 +45,7 @@
      * @param inclusive Whether the base time is inclusive or not.
      * @param result    Receives the first transition after the base time.
      * @return  TRUE if the transition is found.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ = 0;
 
@@ -55,7 +55,7 @@
      * @param inclusive Whether the base time is inclusive or not.
      * @param result    Receives the most recent transition before the base time.
      * @return  TRUE if the transition is found.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/ = 0;
 
@@ -77,7 +77,7 @@
      * @param ec    Output param to filled in with a success or an error.
      * @return      true if the other time zone has the equivalent transitions in the
      *              time range.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool hasEquivalentTransitions(/*const*/ BasicTimeZone& tz, UDate start, UDate end,
         UBool ignoreDstAmount, UErrorCode& ec) /*const*/;
@@ -88,7 +88,7 @@
      * <code>InitialTimeZoneRule</code>.  The return value range is 0 or any positive value.
      * @param status    Receives error status code.
      * @return The number of <code>TimeZoneRule</code>s representing time transitions.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t countTransitionRules(UErrorCode& status) /*const*/ = 0;
 
@@ -106,7 +106,7 @@
      *                      the timezone transition rules.  On output, actual number of
      *                      rules filled in the array will be set.
      * @param status        Receives error status code.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
         const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/ = 0;
@@ -135,7 +135,7 @@
      *                  transitions.  When this time zone does not observer daylight saving times
      *                  around the specified date, NULL is set.
      * @param status    Receives error status code.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual void getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial,
         AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) /*const*/;
@@ -172,21 +172,21 @@
 
     /**
      * Default constructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     BasicTimeZone();
 
     /**
      * Construct a timezone with a given ID.
      * @param id a system time zone ID
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     BasicTimeZone(const UnicodeString &id);
 
     /**
      * Copy constructor.
      * @param source the object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     BasicTimeZone(const BasicTimeZone& source);
 

Added: trunk/source/i18n/unicode/bms.h
===================================================================
--- trunk/source/i18n/unicode/bms.h	                        (rev 0)
+++ trunk/source/i18n/unicode/bms.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -0,0 +1,265 @@
+/*
+ * Copyright (C) 1996-2009, International Business Machines Corporation and Others.
+ * All rights reserved.
+ */
+
+/**
+ * \file 
+ * \brief C API: Boyer-Moore StringSearch prototype.
+ * \internal
+ */
+
+#ifndef _BMS_H
+#define _BMS_H
+
+#include "unicode/utypes.h"
+#include "unicode/ucol.h"
+
+/**
+ * A <code>UCD</code> object holds the Collator-specific data needed to
+ * compute the length of the shortest string that can
+ * generate a partcular list of CEs.
+ *
+ * <code>UCD</code> objects are quite expensive to compute. Because
+ * of this, they are cached. When you call <code>ucd_open</code> it
+ * returns a reference counted cached object. When you call <code>ucd_close</code>
+ * the reference count on the object is decremented but the object is not deleted.
+ *
+ * If you do not need to reuse any unreferenced objects in the cache, you can call
+ * <code>ucd_flushCCache</code>. If you no longer need any <code>UCD</code>
+ * objects, you can call <code>ucd_freeCache</code>
+ */
+typedef void UCD;
+
+/**
+ * Open a <code>UCD</code> object.
+ *
+ * @param collator - the collator
+ * @param status - will be set if any errors occur. 
+ *
+ * @return the <code>UCD</code> object. You must call
+ *         <code>ucd_close</code> when you are done using the object.
+ *
+ * Note: if on return status is set to an error, the only safe
+ * thing to do with the returned object is to call <code>ucd_close</code>.
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+U_CAPI UCD * U_EXPORT2
+ucd_open(UCollator *coll, UErrorCode *status);
+
+/**
+ * Release a <code>UCD</code> object.
+ *
+ * @param ucd - the object
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+U_CAPI void U_EXPORT2
+ucd_close(UCD *ucd);
+
+/**
+ * Get the <code>UCollator</code> object used to create a <code>UCD</code> object.
+ * The <code>UCollator</code> object returned may not be the exact
+ * object that was used to create this object, but it will have the
+ * same behavior.
+ *
+ * @param ucd - the <code>UCD</code> object
+ *
+ * @return the <code>UCollator</code> used to create the given
+ *         <code>UCD</code> object.
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+U_CAPI UCollator * U_EXPORT2
+ucd_getCollator(UCD *ucd);
+
+/**
+ * <code>UCD</code> objects are expensive to compute, and so
+ * may be cached. This routine will free the cached objects and delete
+ * the cache.
+ *
+ * WARNING: Don't call this until you are have called <code>close</code>
+ * for each <code>UCD</code> object that you have used. also,
+ * DO NOT call this if another thread may be calling <code>ucd_flushCache</code>
+ * at the same time.
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+U_CAPI void U_EXPORT2
+ucd_freeCache();
+
+/**
+ * <code>UCD</code> objects are expensive to compute, and so
+ * may be cached. This routine will remove any unused <code>UCD</code>
+ * objects from the cache.
+ *
+ * @internal 4.0.1 technology preview
+ */
+U_CAPI void U_EXPORT2
+ucd_flushCache();
+
+/**
+ * BMS
+ *
+ * This object holds the information needed to do a Collation sensitive Boyer-Moore search. It encapulates
+ * the pattern, the "bad character" and "good suffix" tables, the Collator-based data needed to compute them,
+ * and a reference to the text being searched.
+ *
+ * To do a search, you fist need to get a <code>UCD</code> object by calling <code>ucd_open</code>.
+ * Then you construct a <code>BMS</code> object from the <code>UCD</code> object, the pattern
+ * string and the target string. Then you call the <code>search</code> method. Here's a code sample:
+ *
+ * <pre>
+ * void boyerMooreExample(UCollator *collator, UChar *pattern, int32_t patternLen, UChar *target, int32_t targetLength)
+ * {
+ *     UErrorCode status = U_ZERO_ERROR;
+ *     int32_t offset = 0, start = -1, end = -1;
+ *     UCD *ucd = NULL);
+ *     BMS *bms = NULL;
+ *
+ *     ucd = ucd_open(collator, &status);
+ *     if (U_FAILURE(status)) {
+ *         // could not create a UCD object
+ *         return;
+ *     }
+ *
+ *     BMS *bms = bms_open(ucd, pattern, patternLength, target, targetlength, &status);
+ *     if (U_FAILURE(status)) {
+ *         // could not create a BMS object
+ *         ucd_close(ucd);
+ *         return;
+ *     }
+ *
+ *
+ *     // Find all matches
+ *     while (bms_search(bms, offset, &start, &end)) {
+ *         // process the match between start and end
+ *         ...
+ *
+ *         // advance past the match
+ *         offset = end; 
+ *     }
+ *
+ *     // at this point, if offset == 0, there were no matches
+ *     if (offset == 0) {
+ *         // handle the case of no matches
+ *     }
+ *
+ *     bms_close(bms);
+ *     ucd_close(ucd);
+ *
+ *     // UCD objects are cached, so the call to
+ *     // ucd_close doesn't delete the object.
+ *     // Call this if you don't need the object any more.
+ *     ucd_flushCache();
+ * }
+ * </pre>
+ *
+ * NOTE: This is a technology preview. The final version of this API may not bear any resenblence to this API.
+ *
+ * Knows linitations:
+ *   1) Backwards searching has not been implemented.
+ *
+ *   2) For Han and Hangul characters, this code ignores any Collation tailorings. In general,
+ *      this isn't a problem, but in Korean locals, at strength 1, Hangul characters are tailored
+ *      to be equal to Han characters with the same pronounciation. Because this code ignroes
+ *      tailorings, searching for a Hangul character will not find a Han character and visa-versa.
+ *
+ *   3) In some cases, searching for a pattern that needs to be normalized and ends
+ *      in a discontiguous contraction may fail. The only known cases of this are with
+ *      the Tibetan script. For example searching for the pattern
+ *      "\u0F7F\u0F80\u0F81\u0F82\u0F83\u0F84\u0F85" will fail. (This case is artificial. We've
+ *      been unable to find a pratical, real-world example of this failure.)  
+ *
+ * NOTE: This is a technology preview. The final version of this API may not bear any resenblence to this API.
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+struct BMS;
+typedef struct BMS BMS;
+
+/**
+ * Construct a <code>MBS</code> object.
+ *
+ * @param ucd - A <code>UCD</code> object holding the Collator-sensitive data
+ * @param pattern - the string for which to search
+ * @param latternLength - the length of the string for which to search
+ * @param target - the string in which to search
+ * @param targetLength - the length of the string in which to search
+ * @param status - will be set if any errors occur. 
+ *
+ * @return the <code>BMS</code> object.
+ *
+ * Note: if on return status is set to an error, the only safe
+ * thing to do with the returned object is to call
+ * <code>bms_close</code>.
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+U_CAPI BMS * U_EXPORT2
+bms_open(UCD *ucd,
+         const UChar *pattern, int32_t patternLength,
+         const UChar *target,  int32_t targetLength,
+         UErrorCode  *status);
+
+/**
+ * Close a <code>BMS</code> object and release all the
+ * storage associated with it.
+ *
+ * @param bms - the <code>BMS</code> object to close.
+ */
+U_CAPI void U_EXPORT2
+bms_close(BMS *bms);
+
+/**
+ * Test the pattern to see if it generates any CEs.
+ *
+ * @return <code>TRUE</code> if the pattern string did not generate any CEs
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+U_CAPI UBool U_EXPORT2
+bms_empty(BMS *bms);
+
+/**
+ * Get the <code>UCD</code> object used to create
+ * a given <code>BMS</code> object.
+ *
+ * @param bms - the <code>BMS</code> object
+ *
+ * @return - the <code>UCD</code> object used to create
+ *           the given <code>BMS</code> object.
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+U_CAPI UCD * U_EXPORT2
+bms_getData(BMS *bms);
+
+/**
+ * Search for the pattern string in the target string.
+ *
+ * @param offset - the offset in the target string at which to begin the search
+ * @param start - will be set to the starting offset of the match, or -1 if there's no match
+ * @param end - will be set to the ending offset of the match, or -1 if there's no match
+ *
+ * @return <code>TRUE</code> if the match succeeds, <code>FALSE</code> otherwise.
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+U_CAPI UBool U_EXPORT2
+bms_search(BMS *bms, int32_t offset, int32_t *start, int32_t *end);
+
+/**
+ * Set the target string for the match.
+ *
+ * @param target - the new target string
+ * @param targetLength - the length of the new target string
+ * @param status - will be set if any errors occur. 
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+U_CAPI void U_EXPORT2
+bms_setTargetString(BMS *bms, const UChar *target, int32_t targetLength, UErrorCode *status);
+
+#endif /* _BMS_H */

Added: trunk/source/i18n/unicode/bmsearch.h
===================================================================
--- trunk/source/i18n/unicode/bmsearch.h	                        (rev 0)
+++ trunk/source/i18n/unicode/bmsearch.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -0,0 +1,221 @@
+/*
+ ******************************************************************************
+ *   Copyright (C) 1996-2009, International Business Machines                 *
+ *   Corporation and others.  All Rights Reserved.                            *
+ ******************************************************************************
+ */
+
+/**
+ * \file 
+ * \brief C++ API: Boyer-Moore StringSearch technology preview
+ * \internal ICU 4.0.1 technology preview
+ */
+ 
+#ifndef B_M_SEARCH_H
+#define B_M_SEARCH_H
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_COLLATION
+
+#include "unicode/uobject.h"
+#include "unicode/ucol.h"
+
+#include "unicode/colldata.h"
+
+U_NAMESPACE_BEGIN
+
+class BadCharacterTable;
+class GoodSuffixTable;
+class Target;
+
+/**
+ * BoyerMooreSearch
+ *
+ * This object holds the information needed to do a Collation sensitive Boyer-Moore search. It encapulates
+ * the pattern, the "bad character" and "good suffix" tables, the Collator-based data needed to compute them,
+ * and a reference to the text being searched.
+ *
+ * To do a search, you fist need to get a <code>CollData</code> object by calling <code>CollData::open</code>.
+ * Then you construct a <code>BoyerMooreSearch</code> object from the <code>CollData</code> object, the pattern
+ * string and the target string. Then you call the <code>search</code> method. Here's a code sample:
+ *
+ * <pre>
+ * void boyerMooreExample(UCollator *collator, UnicodeString *pattern, UnicodeString *target)
+ * {
+ *     UErrorCode status = U_ZERO_ERROR;
+ *     CollData *collData = CollData::open(collator, status);
+ *
+ *     if (U_FAILURE(status)) {
+ *         // could not create a CollData object
+ *         return;
+ *     }
+ *
+ *     BoyerMooreSearch *search = new BoyerMooreSearch(collData, *patternString, target, status);
+ *
+ *     if (U_FAILURE(status)) {
+ *         // could not create a BoyerMooreSearch object
+ *         CollData::close(collData);
+ *         return;
+ *     }
+ *
+ *     int32_t offset = 0, start = -1, end = -1;
+ *
+ *     // Find all matches
+ *     while (search->search(offset, start, end)) {
+ *         // process the match between start and end
+ *         ...
+ *         // advance past the match
+ *         offset = end; 
+ *     }
+ *
+ *     // at this point, if offset == 0, there were no matches
+ *     if (offset == 0) {
+ *         // handle the case of no matches
+ *     }
+ *
+ *     delete search;
+ *     CollData::close(collData);
+ *
+ *     // CollData objects are cached, so the call to
+ *     // CollData::close doesn't delete the object.
+ *     // Call this if you don't need the object any more.
+ *     CollData::flushCollDataCache();
+ * }
+ * </pre>
+ *
+ * NOTE: This is a technology preview. The final version of this API may not bear any resenblence to this API.
+ *
+ * Knows linitations:
+ *   1) Backwards searching has not been implemented.
+ *
+ *   2) For Han and Hangul characters, this code ignores any Collation tailorings. In general,
+ *      this isn't a problem, but in Korean locals, at strength 1, Hangul characters are tailored
+ *      to be equal to Han characters with the same pronounciation. Because this code ignroes
+ *      tailorings, searching for a Hangul character will not find a Han character and visa-versa.
+ *
+ *   3) In some cases, searching for a pattern that needs to be normalized and ends
+ *      in a discontiguous contraction may fail. The only known cases of this are with
+ *      the Tibetan script. For example searching for the pattern
+ *      "\u0F7F\u0F80\u0F81\u0F82\u0F83\u0F84\u0F85" will fail. (This case is artificial. We've
+ *      been unable to find a pratical, real-world example of this failure.)  
+ *
+ * @internal ICU 4.0.1 technology preview
+ *
+ * @see CollData
+ */
+class U_I18N_API BoyerMooreSearch : public UObject
+{
+public:
+    /**
+     * Construct a <code>BoyerMooreSearch</code> object.
+     *
+     * @param theData - A <code>CollData</code> object holding the Collator-sensitive data
+     * @param patternString - the string for which to search
+     * @param targetString - the string in which to search or <code>NULL</code> if youu will
+     *                       set it later by calling <code>setTargetString</code>.
+     * @param status - will be set if any errors occur. 
+     *
+     * Note: if on return, status is set to an error code,
+     * the only safe thing to do with this object is to call
+     * the destructor.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    BoyerMooreSearch(CollData *theData, const UnicodeString &patternString, const UnicodeString *targetString, UErrorCode &status);
+
+    /**
+     * The desstructor
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    ~BoyerMooreSearch();
+
+    /**
+     * Test the pattern to see if it generates any CEs.
+     *
+     * @return <code>TRUE</code> if the pattern string did not generate any CEs
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    UBool empty();
+
+    /**
+     * Search for the pattern string in the target string.
+     *
+     * @param offset - the offset in the target string at which to begin the search
+     * @param start - will be set to the starting offset of the match, or -1 if there's no match
+     * @param end - will be set to the ending offset of the match, or -1 if there's no match
+     *
+     * @return <code>TRUE</code> if the match succeeds, <code>FALSE</code> otherwise.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    UBool search(int32_t offset, int32_t &start, int32_t &end);
+
+    /**
+     * Set the target string for the match.
+     *
+     * @param targetString - the new target string
+     * @param status - will be set if any errors occur. 
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    void setTargetString(const UnicodeString *targetString, UErrorCode &status);
+
+    // **** no longer need these? ****
+    /**
+     * Return the <code>CollData</code> object used for searching
+     *
+     * @return the <code>CollData</code> object used for searching
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    CollData *getData();
+
+    /**
+     * Return the CEs generated by the pattern string.
+     *
+     * @return a <code>CEList</code> object holding the CEs generated by the pattern string.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    CEList   *getPatternCEs();
+
+    /**
+     * Return the <code>BadCharacterTable</code> object computed for the pattern string.
+     *
+     * @return the <code>BadCharacterTable</code> object.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    BadCharacterTable *getBadCharacterTable();
+
+    /**
+     * Return the <code>GoodSuffixTable</code> object computed for the pattern string.
+     *
+     * @return the <code>GoodSuffixTable</code> object computed for the pattern string.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    GoodSuffixTable   *getGoodSuffixTable();
+
+    /*
+     * UObject glue...
+     */
+    virtual UClassID getDynamicClassID() const;
+    static UClassID getStaticClassID();
+    
+private:
+    CollData *data;
+    CEList *patCEs;
+    BadCharacterTable *badCharacterTable;
+    GoodSuffixTable   *goodSuffixTable;
+    UnicodeString pattern;
+    Target *target;
+};
+
+U_NAMESPACE_END
+
+#endif // #if !UCONFIG_NO_COLLATION
+#endif // #ifndef B_M_SEARCH_H

Added: trunk/source/i18n/unicode/colldata.h
===================================================================
--- trunk/source/i18n/unicode/colldata.h	                        (rev 0)
+++ trunk/source/i18n/unicode/colldata.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -0,0 +1,430 @@
+/*
+ ******************************************************************************
+ *   Copyright (C) 1996-2009, International Business Machines                 *
+ *   Corporation and others.  All Rights Reserved.                            *
+ ******************************************************************************
+ */
+
+/**
+ * \file 
+ * \brief C++ API: Collation data used to compute minLengthInChars.
+ * \internal
+ */
+ 
+#ifndef COLL_DATA_H
+#define COLL_DATA_H
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_COLLATION
+
+#include "unicode/uobject.h"
+#include "unicode/ucol.h"
+
+U_NAMESPACE_BEGIN
+
+/*
+ * The size of the internal buffer for the Collator's short description string.
+ */
+#define KEY_BUFFER_SIZE 64
+
+ /*
+  * The size of the internal CE buffer in a <code>CEList</code> object
+  */
+#define CELIST_BUFFER_SIZE 4
+
+/*
+ * Define this to enable the <code>CEList</code> objects to collect
+ * statistics.
+ */
+//#define INSTRUMENT_CELIST
+
+ /*
+  * The size of the initial list in a <code>StringList</code> object.
+  */
+#define STRING_LIST_BUFFER_SIZE 16
+
+/*
+ * Define this to enable the <code>StringList</code> objects to
+ * collect statistics.
+ */
+//#define INSTRUMENT_STRING_LIST
+
+ /**
+  * CEList
+  *
+  * This object holds a list of CEs generated from a particular
+  * <code>UnicodeString</code>
+  *
+  * @internal ICU 4.0.1 technology preview
+  */
+class U_I18N_API CEList : public UObject
+{
+public:
+    /**
+     * Construct a <code>CEList</code> object.
+     *
+     * @param coll - the Collator used to collect the CEs.
+     * @param string - the string for which to collect the CEs.
+     * @param status - will be set if any errors occur. 
+     *
+     * Note: if on return, status is set to an error code,
+     * the only safe thing to do with this object is to call
+     * the destructor.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    CEList(UCollator *coll, const UnicodeString &string, UErrorCode &status);
+
+    /**
+     * The destructor.
+     */
+    ~CEList();
+
+    /**
+     * Return the number of CEs in the list.
+     *
+     * @return the number of CEs in the list.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    int32_t size() const;
+
+    /**
+     * Get a particular CE from the list.
+     *
+     * @param index - the index of the CE to return
+     *
+     * @return the CE, or <code>0</code> if <code>index</code> is out of range
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    uint32_t get(int32_t index) const;
+
+    /**
+     * Check if the CEs in another <code>CEList</code> match the
+     * suffix of this list starting at a give offset.
+     *
+     * @param offsset - the offset of the suffix
+     * @param other - the other <code>CEList</code>
+     *
+     * @return <code>TRUE</code> if the CEs match, <code>FALSE</code> otherwise.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    UBool matchesAt(int32_t offset, const CEList *other) const; 
+
+    /**
+     * The index operator.
+     *
+     * @param index - the index
+     *
+     * @return a reference to the given CE in the list
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    uint32_t &operator[](int32_t index) const;
+
+    /*
+     * UObject glue...
+     */
+    virtual UClassID getDynamicClassID() const;
+    static UClassID getStaticClassID();
+
+private:
+    void add(uint32_t ce, UErrorCode &status);
+
+    uint32_t ceBuffer[CELIST_BUFFER_SIZE];
+    uint32_t *ces;
+    int32_t listMax;
+    int32_t listSize;
+
+#ifdef INSTRUMENT_CELIST
+    static int32_t _active;
+    static int32_t _histogram[10];
+#endif
+};
+
+/**
+ * StringList
+ *
+ * This object holds a list of <code>UnicodeString</code> objects.
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+class U_I18N_API StringList : public UObject
+{
+public:
+    /**
+     * Construct an empty <code>StringList</code>
+     *
+     * @param status - will be set if any errors occur. 
+     *
+     * Note: if on return, status is set to an error code,
+     * the only safe thing to do with this object is to call
+     * the destructor.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    StringList(UErrorCode &status);
+
+    /**
+     * The destructor.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    ~StringList();
+
+    /**
+     * Add a string to the list.
+     *
+     * @param string - the string to add
+     * @param status - will be set if any errors occur. 
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    void add(const UnicodeString *string, UErrorCode &status);
+
+    /**
+     * Add an array of Unicode code points to the list.
+     *
+     * @param chars - the address of the array of code points
+     * @param count - the number of code points in the array
+     * @param status - will be set if any errors occur. 
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    void add(const UChar *chars, int32_t count, UErrorCode &status);
+
+    /**
+     * Get a particular string from the list.
+     *
+     * @param index - the index of the string
+     *
+     * @return a pointer to the <code>UnicodeString</code> or <code>NULL</code> 
+     *         if <code>index</code> is out of bounds.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    const UnicodeString *get(int32_t index) const;
+
+    /**
+     * Get the number of stings in the list.
+     *
+     * @return the number of strings in the list.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    int32_t size() const;
+
+    /*
+     * the UObject glue...
+     */
+    virtual UClassID getDynamicClassID() const;
+    static UClassID getStaticClassID();
+
+private:
+    UnicodeString *strings;
+    int32_t listMax;
+    int32_t listSize;
+
+#ifdef INSTRUMENT_STRING_LIST
+    static int32_t _lists;
+    static int32_t _strings;
+    static int32_t _histogram[101];
+#endif
+};
+
+/*
+ * Forward references to internal classes.
+ */
+class StringToCEsMap;
+class CEToStringsMap;
+class CollDataCache;
+
+/**
+ * CollData
+ *
+ * This class holds the Collator-specific data needed to
+ * compute the length of the shortest string that can
+ * generate a partcular list of CEs.
+ *
+ * <code>CollData</code> objects are quite expensive to compute. Because
+ * of this, they are cached. When you call <code>CollData::open</code> it
+ * returns a reference counted cached object. When you call <code>CollData::close</code>
+ * the reference count on the object is decremented but the object is not deleted.
+ *
+ * If you do not need to reuse any unreferenced objects in the cache, you can call
+ * <code>CollData::flushCollDataCache</code>. If you no longer need any <code>CollData</code>
+ * objects, you can call <code>CollData::freeCollDataCache</code>
+ *
+ * @internal ICU 4.0.1 technology preview
+ */
+class U_I18N_API CollData : public UObject
+{
+public:
+    /**
+     * Construct a <code>CollData</code> object.
+     *
+     * @param collator - the collator
+     * @param status - will be set if any errors occur. 
+     *
+     * @return the <code>CollData</code> object. You must call
+     *         <code>close</code> when you are done using the object.
+     *
+     * Note: if on return, status is set to an error code,
+     * the only safe thing to do with this object is to call
+     * <code>CollData::close</code>.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    static CollData *open(UCollator *collator, UErrorCode &status);
+
+    /**
+     * Release a <code>CollData</code> object.
+     *
+     * @param collData - the object
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    static void close(CollData *collData);
+
+    /**
+     * Get the <code>UCollator</code> object used to create this object.
+     * The object returned may not be the exact object that was used to
+     * create this object, but it will have the same behavior.
+     */
+    UCollator *getCollator() const;
+
+    /**
+     * Get a list of all the strings which generate a list
+     * of CEs starting with a given CE.
+     *
+     * @param ce - the CE
+     *
+     * return a <code>StringList</code> object containing all
+     *        the stirngs, or <code>NULL</code> if there are
+     *        no such strings.
+     *
+     * @internal ICU 4.0.1 technology preview.
+     */
+    const StringList *getStringList(int32_t ce) const;
+
+    /**
+     * Get a list of the CEs generated by a partcular stirng.
+     *
+     * @param string - the string
+     *
+     * @return a <code>CEList</code> object containt the CEs. You
+     *         must call <code>freeCEList</code> when you are finished
+     *         using the <code>CEList</code>/
+     *
+     * @internal ICU 4.0.1 technology preview.
+     */
+    const CEList *getCEList(const UnicodeString *string) const;
+
+    /**
+     * Release a <code>CEList</code> returned by <code>getCEList</code>.
+     *
+     * @param list - the <CEList> to free.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    void freeCEList(const CEList *list);
+
+    /**
+     * Return the length of the shortest string that will generate
+     * the given list of CEs.
+     *
+     * @param ces - the CEs
+     * @param offset - the offset of the first CE in the list to use.
+     *
+     * @return the length of the shortest string.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+    int32_t minLengthInChars(const CEList *ces, int32_t offset) const;
+
+ 
+    /**
+     * Return the length of the shortest string that will generate
+     * the given list of CEs.
+     *
+     * Note: the algorithm used to do this computation is recursive. To
+     * limit the amount of recursion, a "history" list is used to record
+     * the best answer starting at a particular offset in the list of CEs.
+     * If the same offset is visited again during the recursion, the answer
+     * in the history list is used.
+     *
+     * @param ces - the CEs
+     * @param offset - the offset of the first CE in the list to use.
+     * param history - the history list. Must be at least as long as
+     *                 the number of cEs in the <code>CEList</code>
+     *
+     * @return the length of the shortest string.
+     *
+     * @internal ICU 4.0.1 technology preview
+     */
+   int32_t minLengthInChars(const CEList *ces, int32_t offset, int32_t *history) const;
+
+   /*
+    * UObject glue...
+    */
+    virtual UClassID getDynamicClassID() const;
+    static UClassID getStaticClassID();
+
+    /**
+     * <code>CollData</code> objects are expensive to compute, and so
+     * may be cached. This routine will free the cached objects and delete
+     * the cache.
+     *
+     * WARNING: Don't call this until you are have called <code>close</code>
+     * for each <code>CollData</code> object that you have used. also,
+     * DO NOT call this if another thread may be calling <code>flushCollDataCache</code>
+     * at the same time.
+     *
+     * @internal 4.0.1 technology preview
+     */
+    static void freeCollDataCache();
+
+    /**
+     * <code>CollData</code> objects are expensive to compute, and so
+     * may be cached. This routine will remove any unused <code>CollData</code>
+     * objects from the cache.
+     *
+     * @internal 4.0.1 technology preview
+     */
+    static void flushCollDataCache();
+
+private:
+    friend class CollDataCache;
+    friend class CollDataCacheEntry;
+
+    CollData(UCollator *collator, char *cacheKey, int32_t cachekeyLength, UErrorCode &status);
+    ~CollData();
+
+    CollData();
+
+    static char *getCollatorKey(UCollator *collator, char *buffer, int32_t bufferLength);
+
+    static CollDataCache *getCollDataCache();
+
+    UCollator      *coll;
+    StringToCEsMap *charsToCEList;
+    CEToStringsMap *ceToCharsStartingWith;
+
+    char keyBuffer[KEY_BUFFER_SIZE];
+    char *key;
+
+    static CollDataCache *collDataCache;
+
+    uint32_t minHan;
+    uint32_t maxHan;
+
+    uint32_t jamoLimits[4];
+};
+
+U_NAMESPACE_END
+
+#endif // #if !UCONFIG_NO_COLLATION
+#endif // #ifndef COLL_DATA_H

Modified: trunk/source/i18n/unicode/dtitvinf.h
===================================================================
--- trunk/source/i18n/unicode/dtitvinf.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/dtitvinf.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -209,7 +209,7 @@
      * Clone this object polymorphically.
      * The caller owns the result and should delete it when done.
      * @return   a copy of the object
-     * @draft    ICU4.0
+     * @draft    ICU 4.0
      */
     virtual DateIntervalInfo* clone(void) const;
 

Modified: trunk/source/i18n/unicode/dtptngen.h
===================================================================
--- trunk/source/i18n/unicode/dtptngen.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/dtptngen.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -43,7 +43,7 @@
  * <p><i>Issue: may be useful to also have a function that returns the list of 
  * fields in a pattern, in order, since we have that internally.
  * That would be useful for getting the UI order of field elements.</i>
- * @stable ICU 4.0
+ * @stable ICU 3.8
 **/
 class U_I18N_API DateTimePatternGenerator : public UObject {
 public:
@@ -51,7 +51,7 @@
      * Construct a flexible generator according to default locale.
      * @param status  Output param set to success/failure code on exit,
      *               which must not indicate a failure before the function call.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static DateTimePatternGenerator* U_EXPORT2 createInstance(UErrorCode& status);
 
@@ -60,7 +60,7 @@
      * @param uLocale
      * @param status  Output param set to success/failure code on exit,
      *               which must not indicate a failure before the function call.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static DateTimePatternGenerator* U_EXPORT2 createInstance(const Locale& uLocale, UErrorCode& status);
 
@@ -68,20 +68,20 @@
      * Create an empty generator, to be constructed with addPattern(...) etc.
      * @param status  Output param set to success/failure code on exit,
      *               which must not indicate a failure before the function call.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
      static DateTimePatternGenerator* U_EXPORT2 createEmptyInstance(UErrorCode& status);
      
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual ~DateTimePatternGenerator();
 
     /**
      * Clone DateTimePatternGenerator object. Clients are responsible for 
      * deleting the DateTimePatternGenerator object cloned.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimePatternGenerator* clone() const;
 
@@ -90,7 +90,7 @@
       *
       * @param other    the DateTimePatternGenerator object to be compared with.
       * @return         true if other is semantically equal to this.
-      * @stable ICU 4.0
+      * @stable ICU 3.8
       */
     UBool operator==(const DateTimePatternGenerator& other) const;
     
@@ -99,7 +99,7 @@
      *
      * @param other    the DateTimePatternGenerator object to be compared with.
      * @return         true if other is semantically unequal to this.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool operator!=(const DateTimePatternGenerator& other) const;
 
@@ -111,7 +111,7 @@
      * @param status  Output param set to success/failure code on exit,
      *                  which must not indicate a failure before the function call.
      * @return skeleton such as "MMMdd"
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status);
 
@@ -126,7 +126,7 @@
      * @param status  Output param set to success/failure code on exit,
      *               which must not indicate a failure before the function call.
      * @return base skeleton, such as "Md"
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status);
 
@@ -148,7 +148,7 @@
      *               which must not indicate a failure before the function call.
      * @return conflicting status.  The value could be UDATPG_NO_CONFLICT, 
      *                             UDATPG_BASE_CONFLICT or UDATPG_CONFLICT.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UDateTimePatternConflict addPattern(const UnicodeString& pattern, 
                                         UBool override, 
@@ -171,7 +171,7 @@
      *
      * @param field  such as UDATPG_ERA_FIELD.
      * @param value  pattern, such as "{0}, {1}"
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value);
 
@@ -181,7 +181,7 @@
      *
      * @param  field  such as UDATPG_ERA_FIELD.
      * @return append pattern for field
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     const UnicodeString& getAppendItemFormat(UDateTimePatternField field) const;
 
@@ -194,7 +194,7 @@
      *
      * @param field   such as UDATPG_ERA_FIELD.
      * @param value   name of the field
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void setAppendItemName(UDateTimePatternField field, const UnicodeString& value);
 
@@ -204,7 +204,7 @@
      *
      * @param field  such as UDATPG_ERA_FIELD.
      * @return name for field
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     const UnicodeString& getAppendItemName(UDateTimePatternField field) const;
 
@@ -225,14 +225,14 @@
      * @param dateTimeFormat
      *            message format pattern, here {0} will be replaced by the date
      *            pattern and {1} will be replaced by the time pattern.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void setDateTimeFormat(const UnicodeString& dateTimeFormat);
 
     /**
      * Getter corresponding to setDateTimeFormat.
      * @return DateTimeFormat.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     const UnicodeString& getDateTimeFormat() const;
 
@@ -247,7 +247,7 @@
      *               which must not indicate a failure before the function call.
      * @return bestPattern
      *            The best pattern found from the given skeleton.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
      UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status);
 
@@ -266,7 +266,7 @@
      * @param status  Output param set to success/failure code on exit,
      *               which must not indicate a failure before the function call.
      * @return pattern adjusted to match the skeleton fields widths and subtypes.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
      UnicodeString replaceFieldTypes(const UnicodeString& pattern, 
                                      const UnicodeString& skeleton, 
@@ -281,7 +281,7 @@
      *               which must not indicate a failure before the function call.
      * @return StringEnumeration with the skeletons.
      *         The caller must delete the object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
      StringEnumeration* getSkeletons(UErrorCode& status) const;
 
@@ -289,7 +289,7 @@
       * Get the pattern corresponding to a given skeleton.
       * @param skeleton 
       * @return pattern corresponding to a given skeleton.
-      * @stable ICU 4.0
+      * @stable ICU 3.8
       */
      const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const;
      
@@ -300,7 +300,7 @@
      *               which must not indicate a failure before the function call.
      * @return a StringEnumeration with the base skeletons.
      *         The caller must delete the object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
      StringEnumeration* getBaseSkeletons(UErrorCode& status) const;
      
@@ -327,55 +327,55 @@
      * "H:mm:ss,SSSS"
      *
      * @param decimal 
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void setDecimal(const UnicodeString& decimal);
 
     /**
      * Getter corresponding to setDecimal.
      * @return UnicodeString corresponding to the decimal point
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     const UnicodeString& getDecimal() const;
 
     /**
      * ICU "poor man's RTTI", returns a UClassID for the actual class.
      *
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UClassID getDynamicClassID() const;
 
     /**
      * ICU "poor man's RTTI", returns a UClassID for this class.
      *
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static UClassID U_EXPORT2 getStaticClassID(void);
 
 private:
     /**
      * Constructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimePatternGenerator(UErrorCode & status);
 
     /**
      * Constructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
 
     /**
      * Copy constructor.
      * @param other DateTimePatternGenerator to copy
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimePatternGenerator(const DateTimePatternGenerator& other);
 
     /**
      * Default assignment operator.
      * @param other DateTimePatternGenerator to copy
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
 

Modified: trunk/source/i18n/unicode/dtrule.h
===================================================================
--- trunk/source/i18n/unicode/dtrule.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/dtrule.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -24,14 +24,14 @@
  * a rule specified by month, day of month, day of week and
  * time in the day.
  * 
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 class U_I18N_API DateTimeRule : public UObject {
 public:
 
     /**
      * Date rule type constants.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     enum DateRuleType {
         DOM = 0,        /**< The exact day of month,
@@ -46,7 +46,7 @@
 
     /**
      * Time rule type constants.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     enum TimeRuleType {
         WALL_TIME = 0,  /**< The local wall clock time */
@@ -64,7 +64,7 @@
      * @param millisInDay   The milliseconds in the rule date.
      * @param timeType      The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code>
      *                      or <code>UTC_TIME</code>.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimeRule(int32_t month, int32_t dayOfMonth,
         int32_t millisInDay, TimeRuleType timeType);
@@ -82,7 +82,7 @@
      * @param millisInDay   The milliseconds in the rule date.
      * @param timeType      The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code>
      *                      or <code>UTC_TIME</code>.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimeRule(int32_t month, int32_t weekInMonth, int32_t dayOfWeek,
         int32_t millisInDay, TimeRuleType timeType);
@@ -100,7 +100,7 @@
      * @param millisInDay   The milliseconds in the rule date.
      * @param timeType      The time type, <code>WALL_TIME</code> or <code>STANDARD_TIME</code>
      *                      or <code>UTC_TIME</code>.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, UBool after,
         int32_t millisInDay, TimeRuleType timeType);
@@ -108,13 +108,13 @@
     /**
      * Copy constructor.
      * @param source    The DateTimeRule object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimeRule(const DateTimeRule& source);
 
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     ~DateTimeRule();
 
@@ -122,14 +122,14 @@
      * Clone this DateTimeRule object polymorphically. The caller owns the result and
      * should delete it when done.
      * @return    A copy of the object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimeRule* clone(void) const;
 
     /**
      * Assignment operator.
      * @param right The object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimeRule& operator=(const DateTimeRule& right);
 
@@ -138,7 +138,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given DateTimeRule objects are semantically equal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool operator==(const DateTimeRule& that) const;
 
@@ -147,14 +147,14 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given DateTimeRule objects are semantically unequal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool operator!=(const DateTimeRule& that) const;
 
     /**
      * Gets the date rule type, such as <code>DOM</code>
      * @return The date rule type.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateRuleType getDateRuleType(void) const;
 
@@ -162,14 +162,14 @@
      * Gets the time rule type
      * @return The time rule type, either <code>WALL_TIME</code> or <code>STANDARD_TIME</code>
      *         or <code>UTC_TIME</code>.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeRuleType getTimeRuleType(void) const;
 
     /**
      * Gets the rule month.
      * @return The rule month.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t getRuleMonth(void) const;
 
@@ -177,7 +177,7 @@
      * Gets the rule day of month.  When the date rule type
      * is <code>DOW</code>, the value is always 0.
      * @return The rule day of month
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t getRuleDayOfMonth(void) const;
 
@@ -185,7 +185,7 @@
      * Gets the rule day of week.  When the date rule type
      * is <code>DOM</code>, the value is always 0.
      * @return The rule day of week.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t getRuleDayOfWeek(void) const;
 
@@ -194,14 +194,14 @@
      * in the month.  When the date rule type is not <code>DOW</code>,
      * the value is always 0.
      * @return The rule day of week ordinal number in the month.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t getRuleWeekInMonth(void) const;
 
     /**
      * Gets the rule time in the rule day.
      * @return The time in the rule day in milliseconds.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t getRuleMillisInDay(void) const;
 
@@ -224,7 +224,7 @@
      * .       erived::getStaticClassID()) ...
      * </pre>
      * @return          The class ID for all objects of this class.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static UClassID U_EXPORT2 getStaticClassID(void);
 
@@ -237,7 +237,7 @@
      * @return          The class ID for this object. All objects of a
      *                  given class have the same class ID.  Objects of
      *                  other classes have different class IDs.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UClassID getDynamicClassID(void) const;
 };

Modified: trunk/source/i18n/unicode/rbtz.h
===================================================================
--- trunk/source/i18n/unicode/rbtz.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/rbtz.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -40,27 +40,27 @@
      * delete it.
      * @param id                The time zone ID.
      * @param initialRule       The initial time zone rule.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     RuleBasedTimeZone(const UnicodeString& id, InitialTimeZoneRule* initialRule);
 
     /**
      * Copy constructor.
      * @param source    The RuleBasedTimeZone object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     RuleBasedTimeZone(const RuleBasedTimeZone& source);
 
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual ~RuleBasedTimeZone();
 
     /**
      * Assignment operator.
      * @param right The object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     RuleBasedTimeZone& operator=(const RuleBasedTimeZone& right);
 
@@ -70,7 +70,7 @@
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZone</code> objects are
       *semantically equal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator==(const TimeZone& that) const;
 
@@ -80,7 +80,7 @@
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZone</code> objects are
      * semantically unequal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator!=(const TimeZone& that) const;
 
@@ -97,7 +97,7 @@
      * zone functions.
      * @param rule The <code>TimeZoneRule</code>.
      * @param status Output param to filled in with a success or an error.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void addTransitionRule(TimeZoneRule* rule, UErrorCode& status);
 
@@ -108,7 +108,7 @@
      * builds internal structure for making the object ready to support
      * time zone APIs such as getOffset(), getNextTransition() and others.
      * @param status Output param to filled in with a success or an error.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void complete(UErrorCode& status);
 
@@ -117,7 +117,7 @@
      * the TimeZone object cloned.
      *
      * @return   A new copy of this TimeZone object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual TimeZone* clone(void) const;
 
@@ -143,7 +143,7 @@
      * @param millis     The reference date's milliseconds in day, local standard time
      * @param status     Output param to filled in with a success or an error.
      * @return           The offset in milliseconds to add to GMT to get local time.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
                               uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
@@ -165,7 +165,7 @@
      * @param monthLength The length of the given month in days.
      * @param status     Output param to filled in with a success or an error.
      * @return           The offset in milliseconds to add to GMT to get local time.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
                            uint8_t dayOfWeek, int32_t millis,
@@ -191,7 +191,7 @@
      * effect, this value is zero; otherwise it is a positive value,
      * typically one hour.
      * @param ec input-output error code
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
                            int32_t& dstOffset, UErrorCode& ec) const;
@@ -201,7 +201,7 @@
      * to GMT to get local time, before taking daylight savings time into account).
      *
      * @param offsetMillis  The new raw GMT offset for this time zone.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual void setRawOffset(int32_t offsetMillis);
 
@@ -210,7 +210,7 @@
      * to GMT to get local time, before taking daylight savings time into account).
      *
      * @return   The TimeZone's raw GMT offset.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t getRawOffset(void) const;
 
@@ -218,7 +218,7 @@
      * Queries if this time zone uses daylight savings time.
      * @return true if this time zone uses daylight savings time,
      * false, otherwise.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool useDaylightTime(void) const;
 
@@ -243,7 +243,7 @@
      * @param other the <code>TimeZone</code> object to be compared with
      * @return true if the given zone is the same as this one,
      * with the possible exception of the ID
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool hasSameRules(const TimeZone& other) const;
 
@@ -253,7 +253,7 @@
      * @param inclusive Whether the base time is inclusive or not.
      * @param result    Receives the first transition after the base time.
      * @return  TRUE if the transition is found.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
 
@@ -263,7 +263,7 @@
      * @param inclusive Whether the base time is inclusive or not.
      * @param result    Receives the most recent transition before the base time.
      * @return  TRUE if the transition is found.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
 
@@ -273,7 +273,7 @@
      * <code>InitialTimeZoneRule</code>.  The return value range is 0 or any positive value.
      * @param status    Receives error status code.
      * @return The number of <code>TimeZoneRule</code>s representing time transitions.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t countTransitionRules(UErrorCode& status) /*const*/;
 
@@ -291,7 +291,7 @@
      *                      the timezone transition rules.  On output, actual number of
      *                      rules filled in the array will be set.
      * @param status        Receives error status code.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
         const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/;
@@ -334,7 +334,7 @@
      * .       erived::getStaticClassID()) ...
      * </pre>
      * @return          The class ID for all objects of this class.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static UClassID U_EXPORT2 getStaticClassID(void);
 
@@ -347,7 +347,7 @@
      * @return          The class ID for this object. All objects of a
      *                  given class have the same class ID.  Objects of
      *                  other classes have different class IDs.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UClassID getDynamicClassID(void) const;
 };

Modified: trunk/source/i18n/unicode/simpletz.h
===================================================================
--- trunk/source/i18n/unicode/simpletz.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/simpletz.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -707,7 +707,7 @@
      * @param inclusive Whether the base time is inclusive or not.
      * @param result    Receives the first transition after the base time.
      * @return  TRUE if the transition is found.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
 
@@ -717,7 +717,7 @@
      * @param inclusive Whether the base time is inclusive or not.
      * @param result    Receives the most recent transition before the base time.
      * @return  TRUE if the transition is found.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
 
@@ -727,7 +727,7 @@
      * <code>InitialTimeZoneRule</code>.  The return value range is 0 or any positive value.
      * @param status    Receives error status code.
      * @return The number of <code>TimeZoneRule</code>s representing time transitions.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t countTransitionRules(UErrorCode& status) /*const*/;
 
@@ -745,7 +745,7 @@
      *                      the timezone transition rules.  On output, actual number of
      *                      rules filled in the array will be set.
      * @param status        Receives error status code.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
         const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/;

Modified: trunk/source/i18n/unicode/timezone.h
===================================================================
--- trunk/source/i18n/unicode/timezone.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/timezone.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -329,7 +329,7 @@
      * Returns the timezone data version currently used by ICU.
      * @param status Output param to filled in with a success or an error.
      * @return the version string, such as "2007f"
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static const char* U_EXPORT2 getTZDataVersion(UErrorCode& status);
 

Modified: trunk/source/i18n/unicode/tzrule.h
===================================================================
--- trunk/source/i18n/unicode/tzrule.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/tzrule.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -27,13 +27,13 @@
  * <code>TimeZoneRule</code> has a set of time zone attributes, such as zone name,
  * raw offset (UTC offset for standard time) and daylight saving time offset.
  * 
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 class U_I18N_API TimeZoneRule : public UObject {
 public:
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual ~TimeZoneRule();
 
@@ -41,7 +41,7 @@
      * Clone this TimeZoneRule object polymorphically. The caller owns the result and
      * should delete it when done.
      * @return  A copy of the object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual TimeZoneRule* clone(void) const = 0;
 
@@ -50,7 +50,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZoneRule</code> objects are semantically equal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator==(const TimeZoneRule& that) const;
 
@@ -59,7 +59,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZoneRule</code> objects are semantically unequal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator!=(const TimeZoneRule& that) const;
 
@@ -67,14 +67,14 @@
      * Fills in "name" with the name of this time zone.
      * @param name  Receives the name of this time zone.
      * @return  A reference to "name"
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UnicodeString& getName(UnicodeString& name) const;
 
     /**
      * Gets the standard time offset.
      * @return  The standard time offset from UTC in milliseconds.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t getRawOffset(void) const;
 
@@ -82,7 +82,7 @@
      * Gets the amount of daylight saving delta time from the standard time.
      * @return  The amount of daylight saving offset used by this rule
      *          in milliseconds.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t getDSTSavings(void) const;
 
@@ -92,7 +92,7 @@
      * returns true.
      * @param other The <code>TimeZoneRule</code> object to be compared with.
      * @return  true if the other <code>TimeZoneRule</code> is the same as this one.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool isEquivalentTo(const TimeZoneRule& other) const;
 
@@ -105,7 +105,7 @@
      * @param result            Receives the very first time when this rule takes effect.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0;
 
@@ -118,7 +118,7 @@
      * @param result            Receives the final time when this rule takes effect.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0;
 
@@ -134,7 +134,7 @@
      *                          the specified base time.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
         UBool inclusive, UDate& result) const = 0;
@@ -151,7 +151,7 @@
      *                          the specified base time.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
         UBool inclusive, UDate& result) const = 0;
@@ -165,21 +165,21 @@
      * @param rawOffset     The UTC offset of its standard time in milliseconds.
      * @param dstSavings    The amount of daylight saving offset adjustment in milliseconds.
      *                      If this ia a rule for standard time, the value of this argument is 0.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings);
 
     /**
      * Copy constructor.
      * @param source    The TimeZoneRule object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeZoneRule(const TimeZoneRule& source);
 
     /**
      * Assignment operator.
      * @param right The object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeZoneRule& operator=(const TimeZoneRule& right);
 
@@ -193,7 +193,7 @@
  * <code>InitialTimeZoneRule</code> represents a time zone rule
  * representing a time zone effective from the beginning and
  * has no actual start times.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 class U_I18N_API InitialTimeZoneRule : public TimeZoneRule {
 public:
@@ -204,20 +204,20 @@
      * @param rawOffset     The UTC offset of its standard time in milliseconds.
      * @param dstSavings    The amount of daylight saving offset adjustment in milliseconds.
      *                      If this ia a rule for standard time, the value of this argument is 0.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     InitialTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings);
 
     /**
      * Copy constructor.
      * @param source    The InitialTimeZoneRule object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     InitialTimeZoneRule(const InitialTimeZoneRule& source);
 
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual ~InitialTimeZoneRule();
 
@@ -225,14 +225,14 @@
      * Clone this InitialTimeZoneRule object polymorphically. The caller owns the result and
      * should delete it when done.
      * @return    A copy of the object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual InitialTimeZoneRule* clone(void) const;
 
     /**
      * Assignment operator.
      * @param right The object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     InitialTimeZoneRule& operator=(const InitialTimeZoneRule& right);
 
@@ -241,7 +241,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZoneRule</code> objects are semantically equal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator==(const TimeZoneRule& that) const;
 
@@ -250,7 +250,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZoneRule</code> objects are semantically unequal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator!=(const TimeZoneRule& that) const;
 
@@ -264,7 +264,7 @@
      * @param result            Receives the start time in the year.
      * @return  true if this rule takes effect in the year and the result is set to
      *          "result".
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
 
@@ -274,7 +274,7 @@
      * returns true.
      * @param that  The <code>TimeZoneRule</code> object to be compared with.
      * @return  true if the other <code>TimeZoneRule</code> is equivalent to this one.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
 
@@ -287,7 +287,7 @@
      * @param result            Receives the very first time when this rule takes effect.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
 
@@ -300,7 +300,7 @@
      * @param result            Receives the final time when this rule takes effect.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
 
@@ -316,7 +316,7 @@
      *                          the specified base time.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
         UBool inclusive, UDate& result) const;
@@ -333,7 +333,7 @@
      *                          the specified base time.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
         UBool inclusive, UDate& result) const;
@@ -348,7 +348,7 @@
      * .       erived::getStaticClassID()) ...
      * </pre>
      * @return          The class ID for all objects of this class.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static UClassID U_EXPORT2 getStaticClassID(void);
 
@@ -361,7 +361,7 @@
      * @return          The class ID for this object. All objects of a
      *                  given class have the same class ID.  Objects of
      *                  other classes have different class IDs.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UClassID getDynamicClassID(void) const;
 };
@@ -371,7 +371,7 @@
  * rule which takes effect annually.  The calenday system used for the rule is
  * is based on Gregorian calendar
  * 
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 class U_I18N_API AnnualTimeZoneRule : public TimeZoneRule {
 public:
@@ -395,7 +395,7 @@
      * @param startYear     The first year when this rule takes effect.
      * @param endYear       The last year when this rule takes effect.  If this
      *                      rule is effective forever in future, specify MAX_YEAR.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
             const DateTimeRule& dateTimeRule, int32_t startYear, int32_t endYear);
@@ -414,7 +414,7 @@
      * @param startYear     The first year when this rule takes effect.
      * @param endYear       The last year when this rule takes effect.  If this
      *                      rule is effective forever in future, specify MAX_YEAR.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
             DateTimeRule* dateTimeRule, int32_t startYear, int32_t endYear);
@@ -422,13 +422,13 @@
     /**
      * Copy constructor.
      * @param source    The AnnualTimeZoneRule object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     AnnualTimeZoneRule(const AnnualTimeZoneRule& source);
 
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual ~AnnualTimeZoneRule();
 
@@ -436,14 +436,14 @@
      * Clone this AnnualTimeZoneRule object polymorphically. The caller owns the result and
      * should delete it when done.
      * @return    A copy of the object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual AnnualTimeZoneRule* clone(void) const;
 
     /**
      * Assignment operator.
      * @param right The object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     AnnualTimeZoneRule& operator=(const AnnualTimeZoneRule& right);
 
@@ -452,7 +452,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZoneRule</code> objects are semantically equal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator==(const TimeZoneRule& that) const;
 
@@ -461,7 +461,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZoneRule</code> objects are semantically unequal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator!=(const TimeZoneRule& that) const;
 
@@ -469,7 +469,7 @@
      * Gets the start date/time rule used by this rule.
      * @return  The <code>AnnualDateTimeRule</code> which represents the start date/time
      *          rule used by this time zone rule.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     const DateTimeRule* getRule(void) const;
 
@@ -477,7 +477,7 @@
      * Gets the first year when this rule takes effect.
      * @return  The start year of this rule.  The year is in Gregorian calendar
      *          with 0 == 1 BCE, -1 == 2 BCE, etc.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t getStartYear(void) const;
 
@@ -485,7 +485,7 @@
      * Gets the end year when this rule takes effect.
      * @return  The end year of this rule (inclusive). The year is in Gregorian calendar
      *          with 0 == 1 BCE, -1 == 2 BCE, etc.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t getEndYear(void) const;
 
@@ -499,7 +499,7 @@
      * @param result            Receives the start time in the year.
      * @return  true if this rule takes effect in the year and the result is set to
      *          "result".
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
 
@@ -509,7 +509,7 @@
      * returns true.
      * @param that  The <code>TimeZoneRule</code> object to be compared with.
      * @return  true if the other <code>TimeZoneRule</code> is equivalent to this one.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
 
@@ -522,7 +522,7 @@
      * @param result            Receives the very first time when this rule takes effect.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
 
@@ -535,7 +535,7 @@
      * @param result            Receives the final time when this rule takes effect.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
 
@@ -551,7 +551,7 @@
      *                          the specified base time.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
         UBool inclusive, UDate& result) const;
@@ -568,7 +568,7 @@
      *                          the specified base time.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
         UBool inclusive, UDate& result) const;
@@ -589,7 +589,7 @@
      * .       erived::getStaticClassID()) ...
      * </pre>
      * @return          The class ID for all objects of this class.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static UClassID U_EXPORT2 getStaticClassID(void);
 
@@ -602,7 +602,7 @@
      * @return          The class ID for this object. All objects of a
      *                  given class have the same class ID.  Objects of
      *                  other classes have different class IDs.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UClassID getDynamicClassID(void) const;
 };
@@ -611,7 +611,7 @@
  * <code>TimeArrayTimeZoneRule</code> represents a time zone rule whose start times are
  * defined by an array of milliseconds since the standard base time.
  * 
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 class U_I18N_API TimeArrayTimeZoneRule : public TimeZoneRule {
 public:
@@ -630,7 +630,7 @@
      * @param timeRuleType  The time type of the start times, which is one of
      *                      <code>DataTimeRule::WALL_TIME</code>, <code>STANDARD_TIME</code>
      *                      and <code>UTC_TIME</code>.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeArrayTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings,
         const UDate* startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType);
@@ -638,13 +638,13 @@
     /**
      * Copy constructor.
      * @param source    The TimeArrayTimeZoneRule object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule& source);
 
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual ~TimeArrayTimeZoneRule();
 
@@ -652,14 +652,14 @@
      * Clone this TimeArrayTimeZoneRule object polymorphically. The caller owns the result and
      * should delete it when done.
      * @return    A copy of the object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual TimeArrayTimeZoneRule* clone(void) const;
 
     /**
      * Assignment operator.
      * @param right The object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeArrayTimeZoneRule& operator=(const TimeArrayTimeZoneRule& right);
 
@@ -668,7 +668,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZoneRule</code> objects are semantically equal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator==(const TimeZoneRule& that) const;
 
@@ -677,7 +677,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZoneRule</code> objects are semantically unequal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator!=(const TimeZoneRule& that) const;
 
@@ -687,7 +687,7 @@
      * or <code>UTC_TIME</code>.
      * 
      * @return The time type used of the start times used by this rule.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     DateTimeRule::TimeRuleType getTimeType(void) const;
 
@@ -698,14 +698,14 @@
      * @return  true if the index is within the valid range and
      *          and the result is set.  When false, the output
      *          parameger "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool getStartTimeAt(int32_t index, UDate& result) const;
 
     /**
      * Returns the number of start times stored in this rule
      * @return The number of start times.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     int32_t countStartTimes(void) const;
 
@@ -715,7 +715,7 @@
      * returns true.
      * @param that  The <code>TimeZoneRule</code> object to be compared with.
      * @return  true if the other <code>TimeZoneRule</code> is equivalent to this one.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
 
@@ -728,7 +728,7 @@
      * @param result            Receives the very first time when this rule takes effect.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
 
@@ -741,7 +741,7 @@
      * @param result            Receives the final time when this rule takes effect.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
 
@@ -757,7 +757,7 @@
      *                          the specified base time.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
         UBool inclusive, UDate& result) const;
@@ -774,7 +774,7 @@
      *                          the specified base time.
      * @return  true if the start time is available.  When false is returned, output parameter
      *          "result" is unchanged.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
         UBool inclusive, UDate& result) const;
@@ -800,7 +800,7 @@
      * .       erived::getStaticClassID()) ...
      * </pre>
      * @return          The class ID for all objects of this class.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static UClassID U_EXPORT2 getStaticClassID(void);
 
@@ -813,7 +813,7 @@
      * @return          The class ID for this object. All objects of a
      *                  given class have the same class ID.  Objects of
      *                  other classes have different class IDs.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UClassID getDynamicClassID(void) const;
 };

Modified: trunk/source/i18n/unicode/tztrans.h
===================================================================
--- trunk/source/i18n/unicode/tztrans.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/tztrans.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -26,7 +26,7 @@
 /**
  * <code>TimeZoneTransition</code> is a class representing a time zone transition.
  * An instance has a time of transition and rules for both before and after the transition.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 class U_I18N_API TimeZoneTransition : public UObject {
 public:
@@ -37,26 +37,26 @@
      * @param time  The time of transition in milliseconds since the base time.
      * @param from  The time zone rule used before the transition.
      * @param to    The time zone rule used after the transition.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeZoneTransition(UDate time, const TimeZoneRule& from, const TimeZoneRule& to);
 
     /**
      * Constructs an empty <code>TimeZoneTransition</code>
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeZoneTransition();
 
     /**
      * Copy constructor.
      * @param source    The TimeZoneTransition object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeZoneTransition(const TimeZoneTransition& source);
 
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     ~TimeZoneTransition();
 
@@ -64,14 +64,14 @@
      * Clone this TimeZoneTransition object polymorphically. The caller owns the result and
      * should delete it when done.
      * @return  A copy of the object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeZoneTransition* clone(void) const;
 
     /**
      * Assignment operator.
      * @param right The object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     TimeZoneTransition& operator=(const TimeZoneTransition& right);
 
@@ -80,7 +80,7 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given TimeZoneTransition objects are semantically equal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool operator==(const TimeZoneTransition& that) const;
 
@@ -89,28 +89,28 @@
      * of different subclasses are considered unequal.
      * @param that  The object to be compared with.
      * @return  true if the given TimeZoneTransition objects are semantically unequal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool operator!=(const TimeZoneTransition& that) const;
 
     /**
      * Returns the time of transition in milliseconds.
      * @return The time of the transition in milliseconds since the 1970 Jan 1 epoch time.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UDate getTime(void) const;
 
     /**
      * Sets the time of transition in milliseconds.
      * @param time The time of the transition in milliseconds since the 1970 Jan 1 epoch time.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void setTime(UDate time);
 
     /**
      * Returns the rule used before the transition.
      * @return The time zone rule used after the transition.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     const TimeZoneRule* getFrom(void) const;
 
@@ -118,7 +118,7 @@
      * Sets the rule used before the transition.  The caller remains
      * responsible for deleting the <code>TimeZoneRule</code> object.
      * @param from The time zone rule used before the transition.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void setFrom(const TimeZoneRule& from);
 
@@ -126,7 +126,7 @@
      * Adopts the rule used before the transition.  The caller must
      * not delete the <code>TimeZoneRule</code> object passed in.
      * @param from The time zone rule used before the transition.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void adoptFrom(TimeZoneRule* from);
 
@@ -134,7 +134,7 @@
      * Sets the rule used after the transition.  The caller remains
      * responsible for deleting the <code>TimeZoneRule</code> object.
      * @param to The time zone rule used after the transition.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void setTo(const TimeZoneRule& to);
 
@@ -142,14 +142,14 @@
      * Adopts the rule used after the transition.  The caller must
      * not delete the <code>TimeZoneRule</code> object passed in.
      * @param to The time zone rule used after the transition.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void adoptTo(TimeZoneRule* to);
 
     /**
      * Returns the rule used after the transition.
      * @return The time zone rule used after the transition.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     const TimeZoneRule* getTo(void) const;
 
@@ -168,7 +168,7 @@
      * .       erived::getStaticClassID()) ...
      * </pre>
      * @return          The class ID for all objects of this class.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static UClassID U_EXPORT2 getStaticClassID(void);
 
@@ -181,7 +181,7 @@
      * @return          The class ID for this object. All objects of a
      *                  given class have the same class ID.  Objects of
      *                  other classes have different class IDs.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UClassID getDynamicClassID(void) const;
 };

Modified: trunk/source/i18n/unicode/ucal.h
===================================================================
--- trunk/source/i18n/unicode/ucal.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/ucal.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -1097,7 +1097,7 @@
  * Returns the timezone data version currently used by ICU.
  * @param status error code for the operation
  * @return the version string, such as "2007f"
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT const char * U_EXPORT2
 ucal_getTZDataVersion(UErrorCode* status);

Modified: trunk/source/i18n/unicode/ucoleitr.h
===================================================================
--- trunk/source/i18n/unicode/ucoleitr.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/ucoleitr.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -121,6 +121,7 @@
                         int32_t    textLength,
                         UErrorCode *status);
 
+
 /**
  * get a hash code for a key... Not very useful!
  * @param key    the given key.
@@ -153,6 +154,20 @@
 ucol_reset(UCollationElements *elems);
 
 /**
+ * Set the collation elements to use implicit ordering for Han
+ * even if they've been tailored. This will also force Hangul
+ * syllables to be ordered by decomposing them to their component
+ * Jamo.
+ *
+ * @param elems The UCollationElements containing the text.
+ * @param status A pointer to a UErrorCode to reveive any errors.
+ *
+ * @internal
+ */
+U_INTERNAL void U_EXPORT2
+ucol_forceHanImplicit(UCollationElements *elems, UErrorCode *status);
+
+/**
  * Get the ordering priority of the next collation element in the text.
  * A single character may contain more than one collation element.
  * @param elems The UCollationElements containing the text.

Modified: trunk/source/i18n/unicode/udatpg.h
===================================================================
--- trunk/source/i18n/unicode/udatpg.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/udatpg.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -39,7 +39,7 @@
 
 /**
  * Opaque type for a date/time pattern generator object.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 typedef void *UDateTimePatternGenerator;
 
@@ -49,57 +49,57 @@
  * Field number constants for udatpg_getAppendItemFormats() and similar functions.
  * These constants are separate from UDateFormatField despite semantic overlap
  * because some fields are merged for the date/time pattern generator.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 typedef enum UDateTimePatternField {
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_ERA_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_YEAR_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_QUARTER_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_MONTH_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_WEEK_OF_YEAR_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_WEEK_OF_MONTH_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_WEEKDAY_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_DAY_OF_YEAR_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_DAY_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_DAYPERIOD_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_HOUR_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_MINUTE_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_SECOND_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_FRACTIONAL_SECOND_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_ZONE_FIELD,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_FIELD_COUNT
 } UDateTimePatternField;
 
 /**
  * Status return values from udatpg_addPattern().
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 typedef enum UDateTimePatternConflict {
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_NO_CONFLICT,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_BASE_CONFLICT,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_CONFLICT,
-    /** @stable ICU 4.0 */
+    /** @stable ICU 3.8 */
     UDATPG_CONFLICT_COUNT
 } UDateTimePatternConflict;
 
@@ -111,7 +111,7 @@
   * @param pErrorCode a pointer to the UErrorCode which must not indicate a
   *                   failure before the function call.
   * @return a pointer to UDateTimePatternGenerator.
-  * @stable ICU 4.0
+  * @stable ICU 3.8
   */
 U_DRAFT UDateTimePatternGenerator * U_EXPORT2
 udatpg_open(const char *locale, UErrorCode *pErrorCode);
@@ -121,7 +121,7 @@
   * @param pErrorCode a pointer to the UErrorCode which must not indicate a
   *                   failure before the function call.
   * @return a pointer to UDateTimePatternGenerator.
-  * @stable ICU 4.0
+  * @stable ICU 3.8
   */
 U_DRAFT UDateTimePatternGenerator * U_EXPORT2
 udatpg_openEmpty(UErrorCode *pErrorCode);
@@ -129,7 +129,7 @@
 /**
   * Close a generator.
   * @param dtpg a pointer to UDateTimePatternGenerator.
-  * @stable ICU 4.0
+  * @stable ICU 3.8
   */
 U_DRAFT void U_EXPORT2
 udatpg_close(UDateTimePatternGenerator *dtpg);
@@ -140,7 +140,7 @@
   * @param pErrorCode a pointer to the UErrorCode which must not indicate a
   *                   failure before the function call.
   * @return a pointer to a new UDateTimePatternGenerator.
-  * @stable ICU 4.0
+  * @stable ICU 3.8
  */
 U_DRAFT UDateTimePatternGenerator * U_EXPORT2
 udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
@@ -166,7 +166,7 @@
  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
  *                   failure before the function call.
  * @return the length of bestPattern.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT int32_t U_EXPORT2
 udatpg_getBestPattern(UDateTimePatternGenerator *dtpg,
@@ -192,7 +192,7 @@
   * @param pErrorCode a pointer to the UErrorCode which must not indicate a
   *                  failure before the function call.
   * @return the length of skeleton.
-  * @stable ICU 4.0
+  * @stable ICU 3.8
   */
 U_DRAFT int32_t U_EXPORT2
 udatpg_getSkeleton(UDateTimePatternGenerator *dtpg,
@@ -221,7 +221,7 @@
  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
  *                  failure before the function call.
  * @return the length of baseSkeleton.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT int32_t U_EXPORT2
 udatpg_getBaseSkeleton(UDateTimePatternGenerator *dtpg,
@@ -251,7 +251,7 @@
  *                  failure before the function call.
  * @return conflicting status. The value could be UDATPG_NO_CONFLICT, 
  *                  UDATPG_BASE_CONFLICT or UDATPG_CONFLICT.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT UDateTimePatternConflict U_EXPORT2
 udatpg_addPattern(UDateTimePatternGenerator *dtpg,
@@ -278,7 +278,7 @@
   * @param field  UDateTimePatternField, such as UDATPG_ERA_FIELD
   * @param value  pattern, such as "{0}, {1}"
   * @param length the length of value.
-  * @stable ICU 4.0
+  * @stable ICU 3.8
   */
 U_DRAFT void U_EXPORT2
 udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg,
@@ -293,7 +293,7 @@
  * @param field  UDateTimePatternField, such as UDATPG_ERA_FIELD
  * @param pLength A pointer that will receive the length of appendItemFormat.
  * @return appendItemFormat for field.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT const UChar * U_EXPORT2
 udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg,
@@ -311,7 +311,7 @@
    * @param field  UDateTimePatternField
    * @param value  name for the field.
    * @param length the length of value.
-   * @stable ICU 4.0
+   * @stable ICU 3.8
    */
 U_DRAFT void U_EXPORT2
 udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg,
@@ -326,7 +326,7 @@
  * @param field  UDateTimePatternField, such as UDATPG_ERA_FIELD
  * @param pLength A pointer that will receive the length of the name for field.
  * @return name for field
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT const UChar * U_EXPORT2
 udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg,
@@ -352,7 +352,7 @@
  *            message format pattern, here {0} will be replaced by the date
  *            pattern and {1} will be replaced by the time pattern.
  * @param length the length of dtFormat.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT void U_EXPORT2
 udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg,
@@ -363,7 +363,7 @@
  * @param dtpg   a pointer to UDateTimePatternGenerator.
  * @param pLength A pointer that will receive the length of the format
  * @return dateTimeFormat.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT const UChar * U_EXPORT2
 udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg,
@@ -380,7 +380,7 @@
  * @param dtpg a pointer to UDateTimePatternGenerator.
  * @param decimal
  * @param length the length of decimal.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT void U_EXPORT2
 udatpg_setDecimal(UDateTimePatternGenerator *dtpg,
@@ -392,7 +392,7 @@
  * @param dtpg a pointer to UDateTimePatternGenerator.
  * @param pLength A pointer that will receive the length of the decimal string.
  * @return corresponding to the decimal point.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT const UChar * U_EXPORT2
 udatpg_getDecimal(const UDateTimePatternGenerator *dtpg,
@@ -421,7 +421,7 @@
  * @param pErrorCode a pointer to the UErrorCode which must not indicate a
  *                  failure before the function call.
  * @return the length of dest.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT int32_t U_EXPORT2
 udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg,
@@ -439,7 +439,7 @@
  *                  failure before the function call
  * @return a UEnumeration list of all the skeletons
  *         The caller must close the object.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT UEnumeration * U_EXPORT2
 udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
@@ -452,7 +452,7 @@
  *             failure before the function call.
  * @return a UEnumeration list of all the base skeletons
  *             The caller must close the object.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT UEnumeration * U_EXPORT2
 udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
@@ -465,7 +465,7 @@
  * @param skeletonLength pointer to the length of skeleton.
  * @param pLength pointer to the length of return pattern.
  * @return pattern corresponding to a given skeleton.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 U_DRAFT const UChar * U_EXPORT2
 udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg,

Modified: trunk/source/i18n/unicode/utmscale.h
===================================================================
--- trunk/source/i18n/unicode/utmscale.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/utmscale.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -277,7 +277,7 @@
      * Similar to Unix time (linear value from 1970) and struct timeval
      * (microseconds resolution).
      *
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UDTS_UNIX_MICROSECONDS_TIME,
 

Modified: trunk/source/i18n/unicode/vtzone.h
===================================================================
--- trunk/source/i18n/unicode/vtzone.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/unicode/vtzone.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -34,27 +34,27 @@
  * Note: The consumer of this class reading or writing VTIMEZONE data is responsible to
  * decode or encode Non-ASCII text.  Methods reading/writing VTIMEZONE data in this class
  * do nothing with MIME encoding.
- * @stable ICU 4.0
+ * @stable ICU 3.8
  */
 class U_I18N_API VTimeZone : public BasicTimeZone {
 public:
     /**
      * Copy constructor.
      * @param source    The <code>VTimeZone</code> object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     VTimeZone(const VTimeZone& source);
 
     /**
      * Destructor.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual ~VTimeZone();
 
     /**
      * Assignment operator.
      * @param right The object to be copied.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     VTimeZone& operator=(const VTimeZone& right);
 
@@ -64,7 +64,7 @@
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZone</code> objects are
       *semantically equal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator==(const TimeZone& that) const;
 
@@ -74,7 +74,7 @@
      * @param that  The object to be compared with.
      * @return  true if the given <code>TimeZone</code> objects are
      * semantically unequal.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool operator!=(const TimeZone& that) const;
 
@@ -83,7 +83,7 @@
      * @param ID The time zone ID, such as America/New_York
      * @return A <code>VTimeZone</code> object initialized by the time zone ID,
      * or NULL when the ID is unknown.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static VTimeZone* createVTimeZoneByID(const UnicodeString& ID);
 
@@ -94,7 +94,7 @@
      * @param status Output param to filled in with a success or an error.
      * @return A <code>VTimeZone</code> initialized by the VTIMEZONE data or
      * NULL if failed to load the rule from the VTIMEZONE data.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static VTimeZone* createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status);
 
@@ -104,14 +104,14 @@
      * in the data.  Otherwise, the initial value is not set.
      * @param url Receives the RFC2445 TZURL property value.
      * @return TRUE if TZURL attribute is available and value is set.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool getTZURL(UnicodeString& url) const;
 
     /**
      * Sets the RFC2445 TZURL property value.
      * @param url The TZURL property value.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void setTZURL(const UnicodeString& url);
 
@@ -121,14 +121,14 @@
      * value in the data.  Otherwise, the initial value is not set.
      * @param lastModified Receives the last modified date.
      * @return TRUE if lastModified attribute is available and value is set.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     UBool getLastModified(UDate& lastModified) const;
 
     /**
      * Sets the RFC2445 LAST-MODIFIED property value.
      * @param lastModified The LAST-MODIFIED date.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void setLastModified(UDate lastModified);
 
@@ -136,7 +136,7 @@
      * Writes RFC2445 VTIMEZONE data for this time zone
      * @param result Output param to filled in with the VTIMEZONE data.
      * @param status Output param to filled in with a success or an error.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void write(UnicodeString& result, UErrorCode& status) const;
 
@@ -146,7 +146,7 @@
      * @param start The start date.
      * @param result Output param to filled in with the VTIMEZONE data.
      * @param status Output param to filled in with a success or an error.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void write(UDate start, UnicodeString& result, UErrorCode& status) /*const*/;
 
@@ -161,7 +161,7 @@
      * @param time The date used for rule extraction.
      * @param result Output param to filled in with the VTIMEZONE data.
      * @param status Output param to filled in with a success or an error.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) /*const*/;
 
@@ -169,7 +169,7 @@
      * Clones TimeZone objects polymorphically. Clients are responsible for deleting
      * the TimeZone object cloned.
      * @return   A new copy of this TimeZone object.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual TimeZone* clone(void) const;
 
@@ -195,7 +195,7 @@
      * @param millis     The reference date's milliseconds in day, local standard time
      * @param status     Output param to filled in with a success or an error.
      * @return           The offset in milliseconds to add to GMT to get local time.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
                               uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
@@ -217,7 +217,7 @@
      * @param monthLength The length of the given month in days.
      * @param status     Output param to filled in with a success or an error.
      * @return           The offset in milliseconds to add to GMT to get local time.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
                            uint8_t dayOfWeek, int32_t millis,
@@ -243,7 +243,7 @@
      * effect, this value is zero; otherwise it is a positive value,
      * typically one hour.
      * @param ec input-output error code
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
                            int32_t& dstOffset, UErrorCode& ec) const;
@@ -253,7 +253,7 @@
      * to GMT to get local time, before taking daylight savings time into account).
      *
      * @param offsetMillis  The new raw GMT offset for this time zone.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual void setRawOffset(int32_t offsetMillis);
 
@@ -262,7 +262,7 @@
      * to GMT to get local time, before taking daylight savings time into account).
      *
      * @return   The TimeZone's raw GMT offset.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t getRawOffset(void) const;
 
@@ -270,7 +270,7 @@
      * Queries if this time zone uses daylight savings time.
      * @return true if this time zone uses daylight savings time,
      * false, otherwise.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool useDaylightTime(void) const;
 
@@ -295,7 +295,7 @@
      * @param other the <code>TimeZone</code> object to be compared with
      * @return true if the given zone is the same as this one,
      * with the possible exception of the ID
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool hasSameRules(const TimeZone& other) const;
 
@@ -305,7 +305,7 @@
      * @param inclusive Whether the base time is inclusive or not.
      * @param result    Receives the first transition after the base time.
      * @return  TRUE if the transition is found.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
 
@@ -315,7 +315,7 @@
      * @param inclusive Whether the base time is inclusive or not.
      * @param result    Receives the most recent transition before the base time.
      * @return  TRUE if the transition is found.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) /*const*/;
 
@@ -325,7 +325,7 @@
      * <code>InitialTimeZoneRule</code>.  The return value range is 0 or any positive value.
      * @param status    Receives error status code.
      * @return The number of <code>TimeZoneRule</code>s representing time transitions.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual int32_t countTransitionRules(UErrorCode& status) /*const*/;
 
@@ -343,7 +343,7 @@
      *                      the timezone transition rules.  On output, actual number of
      *                      rules filled in the array will be set.
      * @param status        Receives error status code.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
         const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) /*const*/;
@@ -417,7 +417,7 @@
      * .       erived::getStaticClassID()) ...
      * </pre>
      * @return          The class ID for all objects of this class.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     static UClassID U_EXPORT2 getStaticClassID(void);
 
@@ -430,7 +430,7 @@
      * @return          The class ID for this object. All objects of a
      *                  given class have the same class ID.  Objects of
      *                  other classes have different class IDs.
-     * @stable ICU 4.0
+     * @stable ICU 3.8
      */
     virtual UClassID getDynamicClassID(void) const;
 };

Modified: trunk/source/i18n/usearch.cpp
===================================================================
--- trunk/source/i18n/usearch.cpp	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/i18n/usearch.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 /*
 **********************************************************************
-*   Copyright (C) 2001-2008 IBM and others. All rights reserved.
+*   Copyright (C) 2001-2009 IBM and others. All rights reserved.
 **********************************************************************
 *   Date        Name        Description
 *  07/02/2001   synwee      Creation.
@@ -1073,7 +1073,6 @@
     return offset < 0 || offset > textlength;
 }
 
-#if BOYER_MOORE
 /**
 * Checks for identical match
 * @param strsrch string search data
@@ -1135,6 +1134,7 @@
     return U_SUCCESS(status) && result;
 }
 
+#if BOYER_MOORE
 /**
 * Checks to see if the match is repeated
 * @param strsrch string search data
@@ -3407,12 +3407,20 @@
         UBool      shift;
         uint32_t   varTop;
 
+        // **** hack to deal w/ how processed CEs encode quaternary ****
+        UCollationStrength newStrength = ucol_getStrength(strsrch->collator);
+        if ((strsrch->strength < UCOL_QUATERNARY && newStrength >= UCOL_QUATERNARY) ||
+            (strsrch->strength >= UCOL_QUATERNARY && newStrength < UCOL_QUATERNARY)) {
+                sameCollAttribute = FALSE;
+        }
+
         strsrch->strength    = ucol_getStrength(strsrch->collator);
         ceMask = getMask(strsrch->strength);
         if (strsrch->ceMask != ceMask) {
             strsrch->ceMask = ceMask;
             sameCollAttribute = FALSE;
         }
+
         // if status is a failure, ucol_getAttribute returns UCOL_DEFAULT
         shift = ucol_getAttribute(strsrch->collator, UCOL_ALTERNATE_HANDLING, 
                                   &status) == UCOL_SHIFTED;
@@ -3789,7 +3797,7 @@
         found = TRUE;
         //  Inner loop checks for a match beginning at each
         //  position from the outer loop.
-        for (patIx=0; patIx<strsrch->pattern.CELength; patIx++) {
+        for (patIx=0; patIx<strsrch->pattern.PCELength; patIx++) {
             int64_t patCE = strsrch->pattern.PCE[patIx];
             targetCEI = ceb.get(targetIx+patIx);
             //  Compare CE from target string with CE from the pattern.
@@ -3818,8 +3826,8 @@
         //     an acceptable character range.
         //
         const CEI *firstCEI = ceb.get(targetIx);
-        const CEI *lastCEI  = ceb.get(targetIx + strsrch->pattern.CELength - 1);
-        const CEI *nextCEI  = ceb.get(targetIx + strsrch->pattern.CELength);
+        const CEI *lastCEI  = ceb.get(targetIx + strsrch->pattern.PCELength - 1);
+        const CEI *nextCEI  = ceb.get(targetIx + strsrch->pattern.PCELength);
 
      // targetCEI = ceb.get(targetIx+strsrch->pattern.CELength);
      // maxLimit = targetCEI->lowIndex;
@@ -3887,6 +3895,10 @@
             found = FALSE;
         }
 
+        if (! checkIdentical(strsrch, mStart, mLimit)) {
+            found = FALSE;
+        }
+
         if (found) {
             break;
         }
@@ -4006,10 +4018,10 @@
         found = TRUE;
         //  Inner loop checks for a match beginning at each
         //  position from the outer loop.
-        for (patIx = strsrch->pattern.CELength - 1; patIx >= 0; patIx -= 1) {
+        for (patIx = strsrch->pattern.PCELength - 1; patIx >= 0; patIx -= 1) {
             int64_t patCE = strsrch->pattern.PCE[patIx];
 
-            targetCEI = ceb.getPrevious(targetIx + strsrch->pattern.CELength - 1 - patIx);
+            targetCEI = ceb.getPrevious(targetIx + strsrch->pattern.PCELength - 1 - patIx);
             //  Compare CE from target string with CE from the pattern.
             //    Note that the target CE will be UCOL_NULLORDER if we reach the end of input,
             //    which will fail the compare, below.
@@ -4035,7 +4047,7 @@
         //  There still is a chance of match failure if the CE range not correspond to
         //     an acceptable character range.
         //
-        const CEI *firstCEI = ceb.getPrevious(targetIx + strsrch->pattern.CELength - 1);
+        const CEI *firstCEI = ceb.getPrevious(targetIx + strsrch->pattern.PCELength - 1);
         const CEI *lastCEI  = ceb.getPrevious(targetIx);
         const CEI *nextCEI  = targetIx > 0? ceb.getPrevious(targetIx - 1) : NULL;
 
@@ -4102,6 +4114,10 @@
             found = FALSE;
         }
 
+        if (! checkIdentical(strsrch, mStart, mLimit)) {
+            found = FALSE;
+        }
+
         if (found) {
             break;
         }

Modified: trunk/source/layout/LEScripts.h
===================================================================
--- trunk/source/layout/LEScripts.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/layout/LEScripts.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -150,7 +150,7 @@
     zxxxScriptCode = 102,
     zzzzScriptCode = 103,
 
-    /** New script codes from ISO 15924 @stable ICU 4.0 */
+    /** New script codes from ISO 15924 @stable ICU 3.8 */
     cariScriptCode = 104,
     jpanScriptCode = 105,
     lanaScriptCode = 106,

Modified: trunk/source/test/cintltst/callcoll.c
===================================================================
--- trunk/source/test/cintltst/callcoll.c	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/cintltst/callcoll.c	2009-02-07 10:08:34 UTC (rev 162)
@@ -515,7 +515,7 @@
           }
 
           if (o != orders[index].order) {
-              log_err("Mismatched order at index %d: 0x%0:8X vs. 0x%0:8X\n", index,
+              log_err("Mismatched order at index %d: 0x%8.8X vs. 0x%8.8X\n", index,
                 orders[index].order, o);
             goto bail;
           }

Modified: trunk/source/test/cintltst/nccbtst.c
===================================================================
--- trunk/source/test/cintltst/nccbtst.c	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/cintltst/nccbtst.c	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 /********************************************************************
  * COPYRIGHT: 
- * Copyright (c) 1997-2007, International Business Machines Corporation and
+ * Copyright (c) 1997-2008, International Business Machines Corporation and
  * others. All Rights Reserved.
  ********************************************************************/
 /*
@@ -2530,13 +2530,13 @@
 
 
     static const uint8_t text943[] = {
-        0x82, 0xa9, 0x82, 0x20, /*0xc8,*/  0x61, 0x8a, 0xbf, 0x8e, 0x9a };
-    static const UChar toUnicode943sub[] = { 0x304b, 0xfffd, /*0xff88,*/ 0x0061, 0x6f22,  0x5b57};
-    static const UChar toUnicode943skip[]= { 0x304b, /*0xff88,*/ 0x0061, 0x6f22,  0x5b57};
+        0x82, 0xa9, 0x82, 0x20, 0x61, 0x8a, 0xbf, 0x8e, 0x9a };
+    static const UChar toUnicode943sub[] = { 0x304b, 0x1a, 0x20, 0x0061, 0x6f22,  0x5b57 };
+    static const UChar toUnicode943skip[]= { 0x304b, 0x20, 0x0061, 0x6f22,  0x5b57 };
     static const UChar toUnicode943stop[]= { 0x304b};
 
-    static const int32_t  fromIBM943Offssub[]  = {0, 2, 4, 5, 7};
-    static const int32_t  fromIBM943Offsskip[] = { 0, 4, 5, 7};
+    static const int32_t  fromIBM943Offssub[]  = { 0, 2, 3, 4, 5, 7 };
+    static const int32_t  fromIBM943Offsskip[] = { 0, 3, 4, 5, 7 };
     static const int32_t  fromIBM943Offsstop[] = { 0};
 
     gInBufferSize = inputsize;
@@ -2570,9 +2570,9 @@
 {
     static const uint8_t sampleText[] = {
         0x82, 0xa9, 0x61, 0x62, 0x63 , 0x82,
-        0xff, /*0x82, 0xa9,*/ 0x32, 0x33};
-    static const UChar toUnicode943sub[] = {0x304b, 0x0061, 0x0062, 0x0063,  0xfffd,/*0x304b,*/ 0x0032, 0x0033};
-    static const int32_t  fromIBM943Offssub[]  = {0, 2, 3, 4, 5, 7, 8};
+        0xff, 0x32, 0x33};
+    static const UChar toUnicode943sub[] = { 0x304b, 0x0061, 0x0062, 0x0063, 0x1a, 0x1a, 0x0032, 0x0033 };
+    static const int32_t fromIBM943Offssub[] = { 0, 2, 3, 4, 5, 6, 7, 8 };
     /*checking illegal value for ibm-943 with substitute*/ 
     gInBufferSize = inputsize;
     gOutBufferSize = outputsize;

Modified: trunk/source/test/cintltst/nucnvtst.c
===================================================================
--- trunk/source/test/cintltst/nucnvtst.c	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/cintltst/nucnvtst.c	2009-02-07 10:08:34 UTC (rev 162)
@@ -2608,7 +2608,7 @@
     TestNextUCharError(cnv, source, source, U_INDEX_OUTOFBOUNDS_ERROR, "sourceLimit <= source");
     /*Test for the condition where there is an invalid character*/
     {
-        static const uint8_t source2[]={0xa1, 0x01};
+        static const uint8_t source2[]={0xa1, 0x80};
         TestNextUCharError(cnv, (const char*)source2, (const char*)source2+sizeof(source2), U_ZERO_ERROR, "an invalid character");
     }
     /*Test for the condition where we have a truncated char*/
@@ -3901,11 +3901,11 @@
 TestISO_2022_KR() {
     /* test input */
     static const uint16_t in[]={
-                    0x9F4B,0x9F4E,0x9F52,0x9F5F,0x9F61,0x9F66,0x9F67,0x9F6A,0x000A,0x000D
-                   ,0x9F6C,0x9F77,0x9F8D,0x9F90,0x9F95,0x9F9C,0xAC00,0xAC01,0xAC02,0xAC04
+                    0x9F4B,0x9F4E,0x9F52,0x9F5F,0x9F61,0x9F67,0x9F6A,0x000A,0x000D
+                   ,0x9F6C,0x9F77,0x9F8D,0x9F90,0x9F95,0x9F9C,0xAC00,0xAC01,0xAC04
                    ,0xAC07,0xAC08,0xAC09,0x0025,0x0026,0x0027,0x000A,0x000D,0x0028,0x0029
                    ,0x002A,0x002B,0x002C,0x002D,0x002E,0x53C3,0x53C8,0x53C9,0x53CA,0x53CB
-                   ,0x53CD,0x53D4,0x53D6,0x53D7,0x53DB,0x000A,0x000D,0x53DF,0x53E1,0x53E2
+                   ,0x53CD,0x53D4,0x53D6,0x53D7,0x53DB,0x000A,0x000D,0x53E1,0x53E2
                    ,0x53E3,0x53E4,0x000A,0x000D};
     const UChar* uSource;
     const UChar* uSourceLimit;

Modified: trunk/source/test/cintltst/usrchtst.c
===================================================================
--- trunk/source/test/cintltst/usrchtst.c	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/cintltst/usrchtst.c	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,5 +1,5 @@
 /********************************************************************
- * Copyright (c) 2001-2008 International Business Machines 
+ * Copyright (c) 2001-2009 International Business Machines 
  * Corporation and others. All Rights Reserved.
  ********************************************************************
  * File usrchtst.c
@@ -2261,6 +2261,64 @@
     }
 }
 
+#define TEST_ASSERT(x) \
+   {if ((x)==FALSE) {log_err("%s:%d: FAIL: test assertion failure \"%s\"\n", __FILE__, __LINE__, #x);\
+   }}
+
+static void TestStrengthIdentical(void)
+{
+	UCollator *coll;
+	UErrorCode ec = U_ZERO_ERROR;
+	UStringSearch *search;
+	
+    UChar pattern[] = {0x05E9, 0x0591, 0x05E9};
+    UChar text[]    = {0x05E9, 0x0592, 0x05E9};
+    int32_t pLen = sizeof (pattern) / sizeof(pattern[0]);
+    int32_t tLen = sizeof(text) / sizeof (text[0]);
+	int32_t expectedPos = 0;
+	int32_t expectedLen = 3;
+
+	int32_t pos;
+	int32_t len;
+
+    /* create a US-English collator */
+	coll = ucol_open ("en_US", &ec);
+
+	/* make sure we didn't fail. */
+	TEST_ASSERT (U_SUCCESS (ec));
+
+    ucol_setStrength( coll, UCOL_TERTIARY); 
+
+	/* open a search looking for 0 */
+	search = usearch_openFromCollator (pattern, pLen, text, tLen, coll, NULL, &ec);
+	TEST_ASSERT (U_SUCCESS (ec));
+
+	pos = usearch_first(search, &ec);
+	len = usearch_getMatchedLength(search);
+
+	if(pos != expectedPos) {
+		log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos);
+	}
+		
+	if(len != expectedLen) {
+		log_err("Expected search result length: %d; Got instead: %d\n", expectedLen, len);
+	}
+	
+    /* Now try it at strength == UCOL_IDENTICAL */
+    ucol_setStrength(coll, UCOL_IDENTICAL); 
+	usearch_reset(search);
+
+	pos = usearch_first(search, &ec);
+	len = usearch_getMatchedLength(search);
+
+	if(pos != -1) {
+		log_err("Expected failure for strentgh = UCOL_IDENTICAL: got %d instead.\n", pos);
+	}
+
+    usearch_close(search);
+    ucol_close(coll);
+}
+
 void addSearchTest(TestNode** root)
 {
     addTest(root, &TestStart, "tscoll/usrchtst/TestStart");
@@ -2313,6 +2371,7 @@
     addTest(root, &TestNumeric, "tscoll/usrchtst/TestNumeric");
     addTest(root, &TestDiacriticMatch, "tscoll/usrchtst/TestDiacriticMatch");
     addTest(root, &TestForwardBackward, "tscoll/usrchtst/TestForwardBackward");
+    addTest(root, &TestStrengthIdentical, "tscoll/usrchtst/TestStrengthIdentical");
 }
 
 #endif /* #if !UCONFIG_NO_COLLATION */

Modified: trunk/source/test/intltest/ssearch.cpp
===================================================================
--- trunk/source/test/intltest/ssearch.cpp	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/intltest/ssearch.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 /*
  **********************************************************************
- *   Copyright (C) 2005-2008, International Business Machines
+ *   Copyright (C) 2005-2009, International Business Machines
  *   Corporation and others.  All Rights Reserved.
  **********************************************************************
  */
@@ -32,7 +32,12 @@
 #include "intltest.h"
 #include "ssearch.h"
 
+#include "unicode/colldata.h"
+#include "unicode/bmsearch.h"
+#include "unicode/bms.h"
+
 #include "xmlparser.h"
+#include "ucbuf.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -51,6 +56,8 @@
           __FILE__, __LINE__, testId, u_errorName(errcode));}}
 
 #define ARRAY_SIZE(array) (sizeof array / sizeof array[0])
+#define NEW_ARRAY(type, count) (type *) uprv_malloc((count) * sizeof(type))
+#define DELETE_ARRAY(array) uprv_free((void *) (array))
 
 //---------------------------------------------------------------------------
 //
@@ -81,6 +88,34 @@
         case 2: name = "monkeyTest";
             if (exec) monkeyTest(params);
             break;
+
+        case 3: name = "bmMonkeyTest";
+            if (exec) bmMonkeyTest(params);
+            break;
+
+        case 4: name = "boyerMooreTest";
+            if (exec) boyerMooreTest();
+            break;
+
+        case 5: name = "goodSuffixTest";
+            if (exec) goodSuffixTest();
+            break;
+
+        case 6: name = "searchTime";
+            if (exec) searchTime();
+            break;
+
+        case 7: name = "bmsTest";
+            if (exec) bmsTest();
+            break;
+
+        case 8: name = "bmSearchTest";
+            if (exec) bmSearchTest();
+            break;
+
+        case 9: name = "udhrTest";
+            if (exec) udhrTest();
+            break;
 #endif
         default: name = "";
             break; //needed to end loop
@@ -181,6 +216,16 @@
             normalize = UCOL_ON;
         }
 
+        //
+        // Get the alternate_handling flag. Default is UCOL_NON_IGNORABLE.
+        //
+        UColAttributeValue alternateHandling = UCOL_NON_IGNORABLE;
+        const UnicodeString *alt = testCase->getAttribute("alternate_handling");
+        TEST_ASSERT (alt == NULL || *alt == "SHIFTED" || *alt == "NON_IGNORABLE");
+        if (alt != NULL && *alt == "SHIFTED") {
+            alternateHandling = UCOL_SHIFTED;
+        }
+
         const UnicodeString defLocale("en");
         char  clocale[100];
         const UnicodeString *locale   = testCase->getAttribute("locale");
@@ -196,7 +241,7 @@
         int32_t        expectedMatchStart = -1;
         int32_t        expectedMatchLimit = -1;
         const UXMLElement  *n;
-        int                nodeCount = 0;
+        int32_t                nodeCount = 0;
 
         n = testCase->getChildElement("pattern");
         TEST_ASSERT(n != NULL);
@@ -237,13 +282,14 @@
         //  Check that there weren't extra things in the XML
         TEST_ASSERT(nodeCount == testCase->countChildren());
 
-        // Open a collotor and StringSearch based on the parameters
+        // Open a collator and StringSearch based on the parameters
         //   obtained from the XML.
         //
         status = U_ZERO_ERROR;
         UCollator *collator = ucol_open(clocale, &status);
         ucol_setStrength(collator, collatorStrength);
         ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, normalize, &status);
+        ucol_setAttribute(collator, UCOL_ALTERNATE_HANDLING, alternateHandling, &status);
         UStringSearch *uss = usearch_openFromCollator(pattern.getBuffer(), pattern.length(),
                                          target.getBuffer(), target.length(),
                                          collator,
@@ -315,6 +361,323 @@
 #endif
 }
 
+struct UdhrTestCase
+{
+    char *locale;
+    char *file;
+};
+
+void SSearchTest::udhrTest()
+{
+    UErrorCode status = U_ZERO_ERROR;
+    char path[PATH_BUFFER_SIZE];
+    const char *udhrPath = getPath(path, "udhr");
+
+    if (udhrPath == NULL) {
+        // couldn't get path: error message already output...
+        return;
+    }
+
+    UdhrTestCase testCases[] = {
+        {"en", "udhr_eng.txt"},
+        {"de", "udhr_deu_1996.txt"},
+        {"fr", "udhr_fra.txt"},
+        {"ru", "udhr_rus.txt"},
+        {"th", "udhr_tha.txt"},
+        {"ja", "udhr_jpn.txt"},
+        {"ko", "udhr_kor.txt"},
+        {"zh", "udhr_cmn_hans.txt"},
+        {"zh_Hant", "udhr_cmn_hant.txt"}
+    };
+
+    int32_t testCount = ARRAY_SIZE(testCases);
+
+    for (int32_t t = 0; t < testCount; t += 1) {
+        int32_t len = 0;
+        char *resolvedFileName = NULL;
+        const char *encoding = NULL;
+        UCHARBUF *ucharBuf = NULL;
+
+        ucbuf_resolveFileName(udhrPath, testCases[t].file, NULL, &len, &status);
+        resolvedFileName = NEW_ARRAY(char, len);
+
+        if(resolvedFileName == NULL){
+            continue;
+        }
+
+        if(status == U_BUFFER_OVERFLOW_ERROR){
+            status = U_ZERO_ERROR;
+        }
+
+        ucbuf_resolveFileName(udhrPath, testCases[t].file, resolvedFileName, &len, &status);
+        ucharBuf = ucbuf_open(resolvedFileName, &encoding, TRUE, FALSE, &status);
+
+        DELETE_ARRAY(resolvedFileName);
+
+        if(U_FAILURE(status)){
+            infoln("Could not open the input file %s. Test skipped\n", testCases[t].file);
+            continue;
+        }
+
+        int32_t targetLen = 0;
+        const UChar *target = ucbuf_getBuffer(ucharBuf, &targetLen, &status);
+
+        /* The first line of the file contains the pattern */
+        int32_t start = 0, end = 0, plen = 0;
+
+        for(end = start; ; end += 1) {
+            UChar ch = target[end];
+
+            if (ch == 0x000A || ch == 0x000D || ch == 0x2028) {
+                break;
+            }
+        }
+
+        plen = end - start;
+
+        UChar *pattern = NEW_ARRAY(UChar, plen);
+        for (int32_t i = 0; i < plen; i += 1) {
+            pattern[i] =  target[start++];
+        }
+
+        int32_t offset = 0;
+        UCollator *coll = ucol_open(testCases[t].locale, &status);
+        UCD *ucd = NULL;
+        BMS *bms = NULL;
+
+        if (U_FAILURE(status)) {
+            errln("Could not open collator for %s", testCases[t].locale);
+            goto delete_collator;
+        }
+
+        ucd = ucd_open(coll, &status);
+
+        if (U_FAILURE(status)) {
+            errln("Could not open CollData object for %s", testCases[t].locale);
+            goto delete_ucd;
+        }
+
+        bms = bms_open(ucd, pattern, plen, target, targetLen, &status);
+
+        if (U_FAILURE(status)) {
+            errln("Could not open search object for %s", testCases[t].locale);
+            goto delete_bms;
+        }
+        
+        start = end = -1;
+        while (bms_search(bms, offset, &start, &end)) {
+            offset = end;
+        }
+
+        if (offset == 0) {
+            errln("Could not find pattern - locale: %s, file: %s ", testCases[t].locale, testCases[t].file);
+        }
+
+delete_bms:
+        bms_close(bms);
+
+delete_ucd:
+        ucd_close(ucd);
+
+delete_collator:
+        ucol_close(coll);
+
+        DELETE_ARRAY(pattern);
+        ucbuf_close(ucharBuf);
+    }
+
+    ucd_flushCache();
+}
+
+void SSearchTest::bmSearchTest()
+{
+#if !UCONFIG_NO_REGULAR_EXPRESSIONS
+    UErrorCode status = U_ZERO_ERROR;
+    char path[PATH_BUFFER_SIZE];
+    const char *testFilePath = getPath(path, "ssearch.xml");
+
+    if (testFilePath == NULL) {
+        return; /* Couldn't get path: error message already output. */
+    }
+
+    UXMLParser  *parser = UXMLParser::createParser(status);
+    TEST_ASSERT_SUCCESS(status);
+    UXMLElement *root   = parser->parseFile(testFilePath, status);
+    TEST_ASSERT_SUCCESS(status);
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    const UnicodeString *debugTestCase = root->getAttribute("debug");
+    if (debugTestCase != NULL) {
+//       setenv("USEARCH_DEBUG", "1", 1);
+    }
+
+
+    const UXMLElement *testCase;
+    int32_t tc = 0;
+
+    while((testCase = root->nextChildElement(tc)) != NULL) {
+
+        if (testCase->getTagName().compare("test-case") != 0) {
+            errln("ssearch, unrecognized XML Element in test file");
+            continue;
+        }
+        const UnicodeString *id       = testCase->getAttribute("id");
+        *testId = 0;
+        if (id != NULL) {
+            id->extract(0, id->length(), testId,  sizeof(testId), US_INV);
+        }
+
+        // If debugging test case has been specified and this is not it, skip to next.
+        if (id!=NULL && debugTestCase!=NULL && *id != *debugTestCase) {
+            continue;
+        }
+        //
+        //  Get the requested collation strength.
+        //    Default is tertiary if the XML attribute is missing from the test case.
+        //
+        const UnicodeString *strength = testCase->getAttribute("strength");
+        UColAttributeValue collatorStrength;
+        if      (strength==NULL)          { collatorStrength = UCOL_TERTIARY;}
+        else if (*strength=="PRIMARY")    { collatorStrength = UCOL_PRIMARY;}
+        else if (*strength=="SECONDARY")  { collatorStrength = UCOL_SECONDARY;}
+        else if (*strength=="TERTIARY")   { collatorStrength = UCOL_TERTIARY;}
+        else if (*strength=="QUATERNARY") { collatorStrength = UCOL_QUATERNARY;}
+        else if (*strength=="IDENTICAL")  { collatorStrength = UCOL_IDENTICAL;}
+        else {
+            // Bogus value supplied for strength.  Shouldn't happen, even from
+            //  typos, if the  XML source has been validated.
+            //  This assert is a little deceiving in that strength can be
+            //   any of the allowed values, not just TERTIARY, but it will
+            //   do the job of getting the error output.
+            TEST_ASSERT(*strength=="TERTIARY")
+        }
+
+        //
+        // Get the collator normalization flag.  Default is UCOL_OFF.
+        //
+        UColAttributeValue normalize = UCOL_OFF;
+        const UnicodeString *norm = testCase->getAttribute("norm");
+        TEST_ASSERT (norm==NULL || *norm=="ON" || *norm=="OFF");
+        if (norm!=NULL && *norm=="ON") {
+            normalize = UCOL_ON;
+        }
+
+        //
+        // Get the alternate_handling flag. Default is UCOL_NON_IGNORABLE.
+        //
+        UColAttributeValue alternateHandling = UCOL_NON_IGNORABLE;
+        const UnicodeString *alt = testCase->getAttribute("alternate_handling");
+        TEST_ASSERT (alt == NULL || *alt == "SHIFTED" || *alt == "NON_IGNORABLE");
+        if (alt != NULL && *alt == "SHIFTED") {
+            alternateHandling = UCOL_SHIFTED;
+        }
+
+        const UnicodeString defLocale("en");
+        char  clocale[100];
+        const UnicodeString *locale   = testCase->getAttribute("locale");
+        if (locale == NULL || locale->length()==0) {
+            locale = &defLocale;
+        };
+        locale->extract(0, locale->length(), clocale, sizeof(clocale), NULL);
+
+
+        UnicodeString  text;
+        UnicodeString  target;
+        UnicodeString  pattern;
+        int32_t        expectedMatchStart = -1;
+        int32_t        expectedMatchLimit = -1;
+        const UXMLElement  *n;
+        int32_t                nodeCount = 0;
+
+        n = testCase->getChildElement("pattern");
+        TEST_ASSERT(n != NULL);
+        if (n==NULL) {
+            continue;
+        }
+        text = n->getText(FALSE);
+        text = text.unescape();
+        pattern.append(text);
+        nodeCount++;
+
+        n = testCase->getChildElement("pre");
+        if (n!=NULL) {
+            text = n->getText(FALSE);
+            text = text.unescape();
+            target.append(text);
+            nodeCount++;
+        }
+        
+        n = testCase->getChildElement("m");
+        if (n!=NULL) {
+            expectedMatchStart = target.length();
+            text = n->getText(FALSE);
+            text = text.unescape();
+            target.append(text);
+            expectedMatchLimit = target.length();
+            nodeCount++;
+        }
+
+        n = testCase->getChildElement("post");
+        if (n!=NULL) {
+            text = n->getText(FALSE);
+            text = text.unescape();
+            target.append(text);
+            nodeCount++;
+        }
+
+        //  Check that there weren't extra things in the XML
+        TEST_ASSERT(nodeCount == testCase->countChildren());
+
+        // Open a collator and StringSearch based on the parameters
+        //   obtained from the XML.
+        //
+        status = U_ZERO_ERROR;
+        UCollator *collator = ucol_open(clocale, &status);
+        ucol_setStrength(collator, collatorStrength);
+        ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, normalize, &status);
+        ucol_setAttribute(collator, UCOL_ALTERNATE_HANDLING, alternateHandling, &status);
+        UCD *ucd = ucd_open(collator, &status);
+        BMS *bms = bms_open(ucd, pattern.getBuffer(), pattern.length(), target.getBuffer(), target.length(), &status);
+
+        TEST_ASSERT_SUCCESS(status);
+        if (U_FAILURE(status)) {
+            bms_close(bms);
+            ucd_close(ucd);
+            ucol_close(collator);
+            continue;
+        }
+
+        int32_t foundStart = 0;
+        int32_t foundLimit = 0;
+        UBool   foundMatch;
+
+        //
+        // Do the search, check the match result against the expected results.
+        //
+        foundMatch = bms_search(bms, 0, &foundStart, &foundLimit);
+      //TEST_ASSERT_SUCCESS(status);
+        if (foundMatch && expectedMatchStart < 0 ||
+            foundStart != expectedMatchStart   ||
+            foundLimit != expectedMatchLimit) {
+                TEST_ASSERT(FALSE);   //  ouput generic error position
+                infoln("Found, expected match start = %d, %d \n"
+                       "Found, expected match limit = %d, %d",
+                foundStart, expectedMatchStart, foundLimit, expectedMatchLimit);
+        }
+
+        bms_close(bms);
+        ucd_close(ucd);
+        ucol_close(collator);
+    }
+
+    ucd_flushCache();
+    delete root;
+    delete parser;
+#endif
+}
+
 struct Order
 {
     int32_t order;
@@ -549,6 +912,10 @@
 void SSearchTest::offsetTest()
 {
     const char *test[] = {
+        // The sequence \u0FB3\u0F71\u0F71\u0F80 contains a discontiguous
+        // contraction (\u0FB3\u0F71\u0F80) logically followed by \u0F71.
+        "\\u1E33\\u0FB3\\u0F71\\u0F71\\u0F80\\uD835\\uDF6C\\u01B0",
+
         "\\ua191\\u16ef\\u2036\\u017a",
 
 #if 0
@@ -673,430 +1040,531 @@
     delete col;
 }
 
-class CEList
+static UnicodeString &escape(const UnicodeString &string, UnicodeString &buffer)
 {
-public:
-    CEList(UCollator *coll, const UnicodeString &string);
-    ~CEList();
+    for(int32_t i = 0; i < string.length(); i += 1) {
+        UChar32 ch = string.char32At(i);
 
-    int32_t size() const;
-    int32_t get(int32_t index) const;
-    UBool matchesAt(int32_t offset, const CEList *other) const; 
+        if (ch >= 0x0020 && ch <= 0x007F) {
+            if (ch == 0x005C) {
+                buffer.append("\\\\");
+            } else {
+                buffer.append(ch);
+            }
+        } else {
+            char cbuffer[12];
 
-private:
-    void add(int32_t ce);
+            if (ch <= 0xFFFFL) {
+                sprintf(cbuffer, "\\u%4.4X", ch);
+            } else {
+                sprintf(cbuffer, "\\U%8.8X", ch);
+            }
 
-    int32_t *ces;
-    int32_t listMax;
-    int32_t listSize;
-};
+            buffer.append(cbuffer);
+        }
 
-CEList::CEList(UCollator *coll, const UnicodeString &string)
-    : ces(NULL), listMax(8), listSize(0)
-{
-    UErrorCode status = U_ZERO_ERROR;
-    UCollationElements *elems = ucol_openElements(coll, string.getBuffer(), string.length(), &status);
-    uint32_t strengthMask = 0;
-    int32_t order;
-
-#if 0
-    switch (ucol_getStrength(coll)) 
-    {
-    default:
-        strengthMask |= UCOL_TERTIARYORDERMASK;
-        /* fall through */
-
-    case UCOL_SECONDARY:
-        strengthMask |= UCOL_SECONDARYORDERMASK;
-        /* fall through */
-
-    case UCOL_PRIMARY:
-        strengthMask |= UCOL_PRIMARYORDERMASK;
-    }
-#else
-    strengthMask = UCOL_PRIMARYORDERMASK;
-#endif
-
-    ces = new int32_t[listMax];
-
-    while ((order = ucol_next(elems, &status)) != UCOL_NULLORDER) {
-        order &= strengthMask;
-
-        if (order == UCOL_IGNORABLE) {
-            continue;
+        if (ch >= 0x10000L) {
+            i += 1;
         }
-
-        add(order);
     }
 
-    ucol_closeElements(elems);
+    return buffer;
 }
+static USet *uset_openEmpty();
+#if 1
 
-CEList::~CEList()
+struct PCE
 {
-    delete[] ces;
-}
+    uint64_t ce;
+    int32_t  lowOffset;
+    int32_t  highOffset;
+};
 
-void CEList::add(int32_t ce)
+class PCEList
 {
-    if (listSize >= listMax) {
-        listMax *= 2;
+public:
+    PCEList(UCollator *coll, const UnicodeString &string);
+    ~PCEList();
 
-        int32_t *newCEs = new int32_t[listMax];
+    int32_t size() const;
 
-        uprv_memcpy(newCEs, ces, listSize * sizeof(int32_t));
-        delete[] ces;
-        ces = newCEs;
-    }
+    const PCE *get(int32_t index) const;
 
-    ces[listSize++] = ce;
-}
+    int32_t getLowOffset(int32_t index) const;
+    int32_t getHighOffset(int32_t index) const;
+    uint64_t getOrder(int32_t index) const;
 
-int32_t CEList::get(int32_t index) const
-{
-    if (index >= 0 && index < listSize) {
-        return ces[index];
-    }
+    UBool matchesAt(int32_t offset, const PCEList &other) const;
 
-    return -1;
-}
+    uint64_t operator[](int32_t index) const;
 
-UBool CEList::matchesAt(int32_t offset, const CEList *other) const
-{
-    if (listSize - offset < other->size()) {
-        return FALSE;
-    }
+private:
+    void add(uint64_t ce, int32_t low, int32_t high);
 
-    for (int32_t i = offset, j = 0; j < other->size(); i += 1, j += 1) {
-        if (ces[i] != other->get(j)) {
-            return FALSE;
-        }
-    }
+    PCE *list;
+    int32_t listMax;
+    int32_t listSize;
+};
 
-    return TRUE;
-}
-
-int32_t CEList::size() const
+PCEList::PCEList(UCollator *coll, const UnicodeString &string)
 {
-    return listSize;
-}
+    UErrorCode status = U_ZERO_ERROR;
+    UCollationElements *elems = ucol_openElements(coll, string.getBuffer(), string.length(), &status);
+    uint64_t order;
+    int32_t low, high;
 
-class StringList
-{
-public:
-    StringList();
-    ~StringList();
+    list = new PCE[listMax];
 
-    void add(const UnicodeString *string);
-    void add(const UChar *chars, int32_t count);
-    const UnicodeString *get(int32_t index) const;
-    int32_t size() const;
+    ucol_setOffset(elems, 0, &status);
 
-private:
-    UnicodeString *strings;
-    int32_t listMax;
-    int32_t listSize;
-};
+    do {
+        order = ucol_nextProcessed(elems, &low, &high, &status);
+        add(order, low, high);
+    } while (order != UCOL_PROCESSED_NULLORDER);
 
-StringList::StringList()
-    : strings(NULL), listMax(16), listSize(0)
-{
-    strings = new UnicodeString [listMax];
+    ucol_closeElements(elems);
 }
 
-StringList::~StringList()
+PCEList::~PCEList()
 {
-    delete[] strings;
+    delete[] list;
 }
 
-void StringList::add(const UnicodeString *string)
+void PCEList::add(uint64_t order, int32_t low, int32_t high)
 {
     if (listSize >= listMax) {
         listMax *= 2;
 
-        UnicodeString *newStrings = new UnicodeString[listMax];
+        PCE *newList = new PCE[listMax];
 
-        uprv_memcpy(newStrings, strings, listSize * sizeof(UnicodeString));
-
-        delete[] strings;
-        strings = newStrings;
+        uprv_memcpy(newList, list, listSize * sizeof(Order));
+        delete[] list;
+        list = newList;
     }
 
-    // The ctor initialized all the strings in
-    // the array to empty strings, so this
-    // is the same as copying the source string.
-    strings[listSize++].append(*string);
-}
+    list[listSize].ce         = order;
+    list[listSize].lowOffset  = low;
+    list[listSize].highOffset = high;
 
-void StringList::add(const UChar *chars, int32_t count)
-{
-    const UnicodeString string(chars, count);
-
-    add(&string);
+    listSize += 1;
 }
 
-const UnicodeString *StringList::get(int32_t index) const
+const PCE *PCEList::get(int32_t index) const
 {
-    if (index >= 0 && index < listSize) {
-        return &strings[index];
+    if (index >= listSize) {
+        return NULL;
     }
 
-    return NULL;
+    return &list[index];
 }
 
-int32_t StringList::size() const
+int32_t PCEList::getLowOffset(int32_t index) const
 {
-    return listSize;
-}
+    const PCE *pce = get(index);
 
-class CEToStringsMap
-{
-public:
+    if (pce != NULL) {
+        return pce->lowOffset;
+    }
 
-    CEToStringsMap();
-    ~CEToStringsMap();
+    return -1;
+}
 
-    void put(int32_t ce, UnicodeString *string);
-    StringList *getStringList(int32_t ce) const;
-
-private:
- 
-    static void deleteStringList(void *obj);
-    void putStringList(int32_t ce, StringList *stringList);
-    UHashtable *map;
-};
-
-CEToStringsMap::CEToStringsMap()
+int32_t PCEList::getHighOffset(int32_t index) const
 {
-    UErrorCode status = U_ZERO_ERROR;
+    const PCE *pce = get(index);
 
-    map = uhash_open(uhash_hashLong, uhash_compareLong,
-                     uhash_compareCaselessUnicodeString,
-                     &status);
+    if (pce != NULL) {
+        return pce->highOffset;
+    }
 
-    uhash_setValueDeleter(map, deleteStringList);
+    return -1;
 }
 
-CEToStringsMap::~CEToStringsMap()
+uint64_t PCEList::getOrder(int32_t index) const
 {
-    uhash_close(map);
-}
+    const PCE *pce = get(index);
 
-void CEToStringsMap::put(int32_t ce, UnicodeString *string)
-{
-    StringList *strings = getStringList(ce);
-
-    if (strings == NULL) {
-        strings = new StringList();
-        putStringList(ce, strings);
+    if (pce != NULL) {
+        return pce->ce;
     }
 
-    strings->add(string);
+    return UCOL_PROCESSED_NULLORDER;
 }
 
-StringList *CEToStringsMap::getStringList(int32_t ce) const
+int32_t PCEList::size() const
 {
-    return (StringList *) uhash_iget(map, ce);
+    return listSize;
 }
 
-void CEToStringsMap::putStringList(int32_t ce, StringList *stringList)
+UBool PCEList::matchesAt(int32_t offset, const PCEList &other) const
 {
-    UErrorCode status = U_ZERO_ERROR;
+    // NOTE: sizes include the NULLORDER, which we don't want to compare.
+    int32_t otherSize = other.size() - 1;
 
-    uhash_iput(map, ce, (void *) stringList, &status);
-}
+    if (listSize - 1 - offset < otherSize) {
+        return FALSE;
+    }
 
-void CEToStringsMap::deleteStringList(void *obj)
-{
-    StringList *strings = (StringList *) obj;
+    for (int32_t i = offset, j = 0; j < otherSize; i += 1, j += 1) {
+        if (getOrder(i) != other.getOrder(j)) {
+            return FALSE;
+        }
+    }
 
-    delete strings;
+    return TRUE;
 }
 
-class StringToCEsMap
+uint64_t PCEList::operator[](int32_t index) const
 {
-public:
-    StringToCEsMap();
-    ~StringToCEsMap();
+    return getOrder(index);
+}
 
-    void put(const UnicodeString *string, const CEList *ces);
-    const CEList *get(const UnicodeString *string);
-
-private:
-
-    static void deleteCEList(void *obj);
-    static void deleteUnicodeStringKey(void *obj);
-
-    UHashtable *map;
-};
-
-StringToCEsMap::StringToCEsMap()
+void SSearchTest::boyerMooreTest()
 {
     UErrorCode status = U_ZERO_ERROR;
+    UCollator *coll = ucol_openFromShortString("S1", FALSE, NULL, &status);
+    CollData *data = NULL;
+    UnicodeString lp  = "fuss";
+    UnicodeString sp = "fu\\u00DF";
+    BoyerMooreSearch *longPattern = NULL;
+    BoyerMooreSearch *shortPattern = NULL;
+    UnicodeString targets[]  = {"fu\\u00DF", "fu\\u00DFball", "1fu\\u00DFball", "12fu\\u00DFball", "123fu\\u00DFball", "1234fu\\u00DFball",
+                                "ffu\\u00DF", "fufu\\u00DF", "fusfu\\u00DF",
+                                "fuss", "ffuss", "fufuss", "fusfuss", "1fuss", "12fuss", "123fuss", "1234fuss", "fu\\u00DF", "1fu\\u00DF", "12fu\\u00DF", "123fu\\u00DF", "1234fu\\u00DF"};
+    int32_t start = -1, end = -1;
 
-    map = uhash_open(uhash_hashCaselessUnicodeString,
-                     uhash_compareCaselessUnicodeString,
-                     uhash_compareLong,
-                     &status);
+    coll = ucol_openFromShortString("S1", FALSE, NULL, &status);
+    if (U_FAILURE(status)) {
+        errln("Could not open collator.");
+        return;
+    }
 
-    uhash_setValueDeleter(map, deleteCEList);
-    uhash_setKeyDeleter(map, deleteUnicodeStringKey);
-}
+    data = CollData::open(coll, status);
+    if (U_FAILURE(status)) {
+        errln("Could not open CollData object.");
+        goto close_data;
+    }
 
-StringToCEsMap::~StringToCEsMap()
-{
-    uhash_close(map);
-}
 
-void StringToCEsMap::put(const UnicodeString *string, const CEList *ces)
-{
-    UErrorCode status = U_ZERO_ERROR;
+    longPattern = new BoyerMooreSearch(data, lp.unescape(), NULL, status);
+    shortPattern = new BoyerMooreSearch(data, sp.unescape(), NULL, status);
+    if (U_FAILURE(status)) {
+        errln("Could not create pattern objects.");
+        goto close_patterns;
+    }
 
-    uhash_put(map, (void *) string, (void *) ces, &status);
-}
+    for (int32_t t = 0; t < (sizeof(targets)/sizeof(targets[0])); t += 1) {
+        UnicodeString target = targets[t].unescape();
+        
+        longPattern->setTargetString(&target, status);
+        if (longPattern->search(0, start, end)) {
+            logln("Test %d: found long pattern at [%d, %d].", t, start, end);
+        } else {
+            errln("Test %d: did not find long pattern.", t);
+        }
 
-const CEList *StringToCEsMap::get(const UnicodeString *string)
-{
-    return (const CEList *) uhash_get(map, string);
-}
+        shortPattern->setTargetString(&target, status);
+        if (shortPattern->search(0, start, end)) {
+            logln("Test %d: found short pattern at [%d, %d].", t, start, end);
+        } else {
+            errln("Test %d: did not find short pattern.", t);
+        }
+    }
 
-void StringToCEsMap::deleteCEList(void *obj)
-{
-    CEList *list = (CEList *) obj;
+close_patterns:
+    delete shortPattern;
+    delete longPattern;
 
-    delete list;
+close_data:
+    CollData::close(data);
+    ucol_close(coll);
 }
 
-void StringToCEsMap::deleteUnicodeStringKey(void *obj)
+void SSearchTest::bmsTest()
 {
-    UnicodeString *key = (UnicodeString *) obj;
-
-    delete key;
-}
-
-static void buildData(UCollator *coll, USet *charsToTest, StringToCEsMap *charsToCEList, CEToStringsMap *ceToCharsStartingWith)
-{
-    int32_t itemCount = uset_getItemCount(charsToTest);
     UErrorCode status = U_ZERO_ERROR;
+    UCollator *coll = NULL;
+    UCD *data = NULL;
+    UnicodeString lp  = "fuss";
+    UnicodeString lpu = lp.unescape();
+    UnicodeString sp  = "fu\\u00DF";
+    UnicodeString spu = sp.unescape();
+    BMS *longPattern = NULL;
+    BMS *shortPattern = NULL;
+    UnicodeString targets[]  = {"fu\\u00DF", "fu\\u00DFball", "1fu\\u00DFball", "12fu\\u00DFball", "123fu\\u00DFball", "1234fu\\u00DFball",
+                                "ffu\\u00DF", "fufu\\u00DF", "fusfu\\u00DF",
+                                "fuss", "ffuss", "fufuss", "fusfuss", "1fuss", "12fuss", "123fuss", "1234fuss", "fu\\u00DF", "1fu\\u00DF", "12fu\\u00DF", "123fu\\u00DF", "1234fu\\u00DF"};
+    int32_t start = -1, end = -1;
 
-    for(int32_t item = 0; item < itemCount; item += 1) {
-        UChar32 start = 0, end = 0;
-        UChar buffer[16];
-        int32_t len = uset_getItem(charsToTest, item, &start, &end,
-                                   buffer, 16, &status);
+    coll = ucol_openFromShortString("S1", FALSE, NULL, &status);
+    if (U_FAILURE(status)) {
+        errln("Could not open collator.");
+        return;
+    }
 
-        if (len == 0) {
-            for (UChar32 ch = start; ch <= end; ch += 1) {
-                UnicodeString *st = new UnicodeString(ch);
-                CEList *ceList = new CEList(coll, *st);
+    data = ucd_open(coll, &status);
+    if (U_FAILURE(status)) {
+        errln("Could not open CollData object.");
+        goto close_data;
+    }
 
-                charsToCEList->put(st, ceList);
-                ceToCharsStartingWith->put(ceList->get(0), st);
-            }
-        } else if (len > 0) {
-            UnicodeString *st = new UnicodeString(buffer, len);
-            CEList *ceList = new CEList(coll, *st);
+    longPattern = bms_open(data, lpu.getBuffer(), lpu.length(), NULL, 0, &status);
+    shortPattern = bms_open(data, spu.getBuffer(), spu.length(), NULL, 0, &status);
+    if (U_FAILURE(status)) {
+        errln("Couldn't open pattern objects.");
+        goto close_patterns;
+    }
 
-            charsToCEList->put(st, ceList);
-            ceToCharsStartingWith->put(ceList->get(0), st);
+    for (int32_t t = 0; t < (sizeof(targets)/sizeof(targets[0])); t += 1) {
+        UnicodeString target = targets[t].unescape();
+        
+        bms_setTargetString(longPattern, target.getBuffer(), target.length(), &status);
+        if (bms_search(longPattern, 0, &start, &end)) {
+            logln("Test %d: found long pattern at [%d, %d].", t, start, end);
         } else {
-            // shouldn't happen...
+            errln("Test %d: did not find long pattern.", t);
         }
+
+        bms_setTargetString(shortPattern, target.getBuffer(), target.length(), &status);
+        if (bms_search(shortPattern, 0, &start, &end)) {
+            logln("Test %d: found short pattern at [%d, %d].", t, start, end);
+        } else {
+            errln("Test %d: did not find short pattern.", t);
+        }
     }
+
+close_patterns:
+    bms_close(shortPattern);
+    bms_close(longPattern);
+
+close_data:
+    ucd_close(data);
+    ucol_close(coll);
 }
 
-static UnicodeString &escape(const UnicodeString &string, UnicodeString &buffer)
+void SSearchTest::goodSuffixTest()
 {
-    for(int32_t i = 0; i < string.length(); i += 1) {
-        UChar32 ch = string.char32At(i);
+    UErrorCode status = U_ZERO_ERROR;
+    UCollator *coll = NULL;
+    CollData *data = NULL;
+    UnicodeString pat = /*"gcagagag"*/ "fxeld";
+    UnicodeString target = /*"gcatcgcagagagtatacagtacg"*/ "cloveldfxeld";
+    BoyerMooreSearch *pattern = NULL;
+    int32_t start = -1, end = -1;
 
-        if (ch >= 0x0020 && ch <= 0x007F) {
-            if (ch == 0x005C) {
-                buffer.append("\\\\");
-            } else {
-                buffer.append(ch);
-            }
-        } else {
-            char cbuffer[12];
+    coll = ucol_open(NULL, &status);
+    if (U_FAILURE(status)) {
+        errln("Couldn't open collator.");
+        return;
+    }
 
-            if (ch <= 0xFFFFL) {
-                sprintf(cbuffer, "\\u%4.4X", ch);
-            } else {
-                sprintf(cbuffer, "\\U%8.8X", ch);
-            }
+    data = CollData::open(coll, status);
+    if (U_FAILURE(status)) {
+        errln("Couldn't open CollData object.");
+        goto close_data;
+    }
 
-            buffer.append(cbuffer);
-        }
+    pattern = new BoyerMooreSearch(data, pat, &target, status);
+    if (U_FAILURE(status)) {
+        errln("Couldn't open pattern object.");
+        goto close_pattern;
+    }
 
-        if (ch >= 0x10000L) {
-            i += 1;
-        }
+    if (pattern->search(0, start, end)) {
+        logln("Found pattern at [%d, %d].", start, end);
+    } else {
+        errln("Did not find pattern.");
     }
 
-    return buffer;
+close_pattern:
+    delete pattern;
+
+close_data:
+    CollData::close(data);
+    ucol_close(coll);
 }
 
-static int32_t minLengthInChars(const CEList *ceList, int32_t offset, StringToCEsMap *charsToCEList, CEToStringsMap *ceToCharsStartingWith,
-                                UnicodeString &debug)
-{
-    // find out shortest string for the longest sequence of ces.
-    // needs to be refined to use dynamic programming, but will be roughly right
-	int32_t totalStringLength = 0;
-	
-    while (offset < ceList->size()) {
-        int32_t ce = ceList->get(offset);
-        int32_t bestLength = INT32_MIN;
-        const UnicodeString *bestString = NULL;
-        int32_t bestCeLength = 0;
-        const StringList *strings = ceToCharsStartingWith->getStringList(ce);
-        int32_t stringCount = strings->size();
-      
-        for (int32_t s = 0; s < stringCount; s += 1) {
-            const UnicodeString *string = strings->get(s);
-            const CEList *ceList2 = charsToCEList->get(string);
+//
+//  searchTime()    A quick and dirty performance test for string search.
+//                  Probably  doesn't really belong as part of intltest, but it
+//                  does check that the search succeeds, and gets the right result,
+//                  so it serves as a functionality test also.
+//
+//                  To run as a perf test, up the loop count, select by commenting
+//                  and uncommenting in the code the operation to be measured,
+//                  rebuild, and measure the running time of this test alone.
+//
+//                     time LD_LIBRARY_PATH=whatever  ./intltest  collate/SSearchTest/searchTime
+//
+void SSearchTest::searchTime() {
+    static const char *longishText =
+"Whylom, as olde stories tellen us,\n"
+"Ther was a duk that highte Theseus:\n"
+"Of Athenes he was lord and governour,\n"
+"And in his tyme swich a conquerour,\n"
+"That gretter was ther noon under the sonne.\n"
+"Ful many a riche contree hadde he wonne;\n"
+"What with his wisdom and his chivalrye,\n"
+"He conquered al the regne of Femenye,\n"
+"That whylom was y-cleped Scithia;\n"
+"And weddede the quene Ipolita,\n"
+"And broghte hir hoom with him in his contree\n"
+"With muchel glorie and greet solempnitee,\n"
+"And eek hir yonge suster Emelye.\n"
+"And thus with victorie and with melodye\n"
+"Lete I this noble duk to Athenes ryde,\n"
+"And al his hoost, in armes, him bisyde.\n"
+"And certes, if it nere to long to here,\n"
+"I wolde han told yow fully the manere,\n"
+"How wonnen was the regne of Femenye\n"
+"By Theseus, and by his chivalrye;\n"
+"And of the grete bataille for the nones\n"
+"Bitwixen Athen's and Amazones;\n"
+"And how asseged was Ipolita,\n"
+"The faire hardy quene of Scithia;\n"
+"And of the feste that was at hir weddinge,\n"
+"And of the tempest at hir hoom-cominge;\n"
+"But al that thing I moot as now forbere.\n"
+"I have, God woot, a large feeld to ere,\n"
+"And wayke been the oxen in my plough.\n"
+"The remenant of the tale is long y-nough.\n"
+"I wol nat letten eek noon of this route;\n"
+"Lat every felawe telle his tale aboute,\n"
+"And lat see now who shal the soper winne;\n"
+"And ther I lefte, I wol ageyn biginne.\n"
+"This duk, of whom I make mencioun,\n"
+"When he was come almost unto the toun,\n"
+"In al his wele and in his moste pryde,\n"
+"He was war, as he caste his eye asyde,\n"
+"Wher that ther kneled in the hye weye\n"
+"A companye of ladies, tweye and tweye,\n"
+"Ech after other, clad in clothes blake; \n"
+"But swich a cry and swich a wo they make,\n"
+"That in this world nis creature livinge,\n"
+"That herde swich another weymentinge;\n"
+"And of this cry they nolde never stenten,\n"
+"Til they the reynes of his brydel henten.\n"
+"'What folk ben ye, that at myn hoomcominge\n"
+"Perturben so my feste with cryinge'?\n"
+"Quod Theseus, 'have ye so greet envye\n"
+"Of myn honour, that thus compleyne and crye? \n"
+"Or who hath yow misboden, or offended?\n"
+"And telleth me if it may been amended;\n"
+"And why that ye ben clothed thus in blak'?\n"
+"The eldest lady of hem alle spak,\n"
+"When she hadde swowned with a deedly chere,\n"
+"That it was routhe for to seen and here,\n"
+"And seyde: 'Lord, to whom Fortune hath yiven\n"
+"Victorie, and as a conquerour to liven,\n"
+"Noght greveth us your glorie and your honour;\n"
+"But we biseken mercy and socour.\n"
+"Have mercy on our wo and our distresse.\n"
+"Som drope of pitee, thurgh thy gentilesse,\n"
+"Up-on us wrecched wommen lat thou falle.\n"
+"For certes, lord, ther nis noon of us alle,\n"
+"That she nath been a duchesse or a quene;\n"
+"Now be we caitifs, as it is wel sene:\n"
+"Thanked be Fortune, and hir false wheel,\n"
+"That noon estat assureth to be weel.\n"
+"And certes, lord, t'abyden your presence,\n"
+"Here in the temple of the goddesse Clemence\n"
+"We han ben waytinge al this fourtenight;\n"
+"Now help us, lord, sith it is in thy might.\n"
+"I wrecche, which that wepe and waille thus,\n"
+"Was whylom wyf to king Capaneus,\n"
+"That starf at Thebes, cursed be that day!\n"
+"And alle we, that been in this array,\n"
+"And maken al this lamentacioun,\n"
+"We losten alle our housbondes at that toun,\n"
+"Whyl that the sege ther-aboute lay.\n"
+"And yet now th'olde Creon, weylaway!\n"
+"The lord is now of Thebes the citee, \n"
+"Fulfild of ire and of iniquitee,\n"
+"He, for despyt, and for his tirannye,\n"
+"To do the dede bodyes vileinye,\n"
+"Of alle our lordes, whiche that ben slawe,\n"
+"Hath alle the bodyes on an heep y-drawe,\n"
+"And wol nat suffren hem, by noon assent,\n"
+"Neither to been y-buried nor y-brent,\n"
+"But maketh houndes ete hem in despyt. zet'\n";
 
-            if (ceList->matchesAt(offset, ceList2)) {
-                int32_t length = ceList2->size() - string->length();
+#define TEST_BOYER_MOORE 1
+const char *cPattern = "maketh houndes ete hem";
+//const char *cPattern = "Whylom";
+//const char *cPattern = "zet";
+    const char *testId = "searchTime()";   // for error macros.
+    UnicodeString target = longishText;
+    UErrorCode status = U_ZERO_ERROR;
 
-                if (bestLength < length) {
-                    bestLength = length;
-                    bestCeLength = ceList2->size();
-                    bestString = string;
-                }
-            }
-        }
-      
-        totalStringLength += bestString->length();
-        escape(*bestString, debug).append("/");
-        offset += bestCeLength;
-    }
 
-    debug.append((UChar)0x0000);
-    return totalStringLength;
-}
+    UCollator *collator = ucol_open("en", &status);
+    CollData *data = CollData::open(collator, status);
+    TEST_ASSERT_SUCCESS(status);
+    //ucol_setStrength(collator, collatorStrength);
+    //ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, normalize, &status);
+    UnicodeString uPattern = cPattern;
+#ifndef TEST_BOYER_MOORE
+    UStringSearch *uss = usearch_openFromCollator(uPattern.getBuffer(), uPattern.length(),
+                                        target.getBuffer(), target.length(),
+                                        collator,
+                                        NULL,     // the break iterator
+                                        &status);
+    TEST_ASSERT_SUCCESS(status);
+#else
+    BoyerMooreSearch bms(data, uPattern, &target, status);
+    TEST_ASSERT_SUCCESS(status);
+#endif
+    
+//  int32_t foundStart;
+//  int32_t foundEnd;
+    UBool   found;
+    
+    // Find the match position usgin strstr
+    const char *pm = strstr(longishText, cPattern);
+    TEST_ASSERT_M(pm!=NULL, "No pattern match with strstr");
+    int32_t  refMatchPos = (int32_t)(pm - longishText);
+    int32_t  icuMatchPos;
+    int32_t  icuMatchEnd;
+#ifndef TEST_BOYER_MOORE
+    usearch_search(uss, 0, &icuMatchPos, &icuMatchEnd, &status);
+    TEST_ASSERT_SUCCESS(status);
+#else
+    found = bms.search(0, icuMatchPos, icuMatchEnd);
+#endif
+    TEST_ASSERT_M(refMatchPos == icuMatchPos, "strstr and icu give different match positions.");
 
-static void minLengthTest(UCollator *coll, StringToCEsMap *charsToCEList, CEToStringsMap *ceToCharsStartingWith)
-{
-    UnicodeString examples[] = {"fuss", "fiss", "affliss", "VII"};
-    UnicodeString debug;
-    int32_t nExamples = sizeof(examples) / sizeof(examples[0]);
+    int32_t i;
+    int32_t j=0;
 
-    for (int32_t s = 0; s < nExamples; s += 1) {
-        CEList *ceList = new CEList(coll, examples[s]);
+    // Try loopcounts around 100000 to some millions, depending on the operation,
+    //   to get runtimes of at least several seconds.
+    for (i=0; i<10000; i++) {
+#ifndef TEST_BOYER_MOORE
+        found = usearch_search(uss, 0, &icuMatchPos, &icuMatchEnd, &status);
+#else
+        found = bms.search(0, icuMatchPos, icuMatchEnd);
+#endif
+        //TEST_ASSERT_SUCCESS(status);
+        //TEST_ASSERT(found);
 
-      //infoln("%S:", examples[s].getTerminatedBuffer());
+        // usearch_setOffset(uss, 0, &status);
+        // icuMatchPos = usearch_next(uss, &status);
 
-        for(int32_t i = 0; i < examples[s].length(); i += 1) {
-            debug.remove();
+         // The i+j stuff is to confuse the optimizer and get it to actually leave the
+         //   call to strstr in place.
+         //pm = strstr(longishText+j, cPattern);
+         //j = (j + i)%5;
+    }
 
-            int32_t minLength = minLengthInChars(ceList, i, charsToCEList, ceToCharsStartingWith, debug);
-          //infoln("\t%d\t%S", minLength, debug.getTerminatedBuffer());
-        }
-
-      //infoln();
-        delete ceList;
-    }
+    printf("%d\n", pm-longishText, j);
+#ifndef TEST_BOYER_MOORE
+    usearch_close(uss);
+#else
+    CollData::close(data);
+#endif
+    ucol_close(collator);
 }
+#endif
 
 //----------------------------------------------------------------------------------------
 //
@@ -1171,7 +1639,7 @@
 class StringSetMonkey : public Monkey
 {
 public:
-    StringSetMonkey(const USet *theSet, UCollator *theCollator, StringToCEsMap *theCharsToCEList, CEToStringsMap *theCeToCharsStartingWith);
+    StringSetMonkey(const USet *theSet, UCollator *theCollator, CollData *theCollData);
     ~StringSetMonkey();
 
     void append(UnicodeString &testCase, UnicodeString &alternate);
@@ -1180,13 +1648,12 @@
     UnicodeString &generateAlternative(const UnicodeString &testCase, UnicodeString &alternate);
 
     const USet *set;
-    UCollator      *coll;
-    StringToCEsMap *charsToCEList;
-    CEToStringsMap *ceToCharsStartingWith;
+    UCollator  *coll;
+    CollData   *collData;
 };
 
-StringSetMonkey::StringSetMonkey(const USet *theSet, UCollator *theCollator, StringToCEsMap *theCharsToCEList, CEToStringsMap *theCeToCharsStartingWith)
-: Monkey(), set(theSet), coll(theCollator), charsToCEList(theCharsToCEList), ceToCharsStartingWith(theCeToCharsStartingWith)
+StringSetMonkey::StringSetMonkey(const USet *theSet, UCollator *theCollator, CollData *theCollData)
+: Monkey(), set(theSet), coll(theCollator), collData(theCollData)
 {
     // ook.
 }
@@ -1228,7 +1695,8 @@
 {
     // find out shortest string for the longest sequence of ces.
     // needs to be refined to use dynamic programming, but will be roughly right
-    CEList ceList(coll, testCase);
+    UErrorCode status = U_ZERO_ERROR;
+    CEList ceList(coll, testCase, status);
     UnicodeString alt;
     int32_t offset = 0;
 
@@ -1238,7 +1706,7 @@
 
     while (offset < ceList.size()) {
         int32_t ce = ceList.get(offset);
-        const StringList *strings = ceToCharsStartingWith->getStringList(ce);
+        const StringList *strings = collData->getStringList(ce);
 
         if (strings == NULL) {
             return alternate.append(testCase);
@@ -1248,8 +1716,9 @@
         int32_t tries = 0;
       
         // find random string that generates the same CEList
-        const CEList *ceList2;
-        const UnicodeString *string;
+        const CEList *ceList2 = NULL;
+        const UnicodeString *string = NULL;
+              UBool matches = FALSE;
 
         do {
             int32_t s = m_rand() % stringCount;
@@ -1260,14 +1729,20 @@
             }
 
             string = strings->get(s);
-            ceList2 = charsToCEList->get(string);
-        } while (! ceList.matchesAt(offset, ceList2));
+            ceList2 = collData->getCEList(string);
+            matches = ceList.matchesAt(offset, ceList2);
 
+            if (! matches) {
+                collData->freeCEList((CEList *) ceList2);
+            }
+        } while (! matches);
+
         alt.append(*string);
         offset += ceList2->size();
+        collData->freeCEList(ceList2);
     }
 
-    const CEList altCEs(coll, alt);
+    const CEList altCEs(coll, alt, status);
 
     if (ceList.matchesAt(0, &altCEs)) {
         return alternate.append(alt);
@@ -1279,6 +1754,7 @@
 static void generateTestCase(UCollator *coll, Monkey *monkeys[], int32_t monkeyCount, UnicodeString &testCase, UnicodeString &alternate)
 {
     int32_t pieces = (m_rand() % 4) + 1;
+    UErrorCode status = U_ZERO_ERROR;
     UBool matches;
 
     do {
@@ -1292,8 +1768,8 @@
             monkeys[monkey]->append(testCase, alternate);
         }
 
-        const CEList ceTest(coll, testCase);
-        const CEList ceAlt(coll, alternate);
+        const CEList ceTest(coll, testCase, status);
+        const CEList ceAlt(coll, alternate, status);
 
         matches = ceTest.matchesAt(0, &ceAlt);
     } while (! matches);
@@ -1388,7 +1864,8 @@
         									      target.getBuffer(), target.length(), &status);
 
     if (patternSize == 0) {
-        matchStart = matchEnd = 0;
+        // Searching for an empty pattern always fails
+        matchStart = matchEnd = -1;
         return FALSE;
     }
 
@@ -1509,14 +1986,9 @@
     // **** TODO: find *all* matches, not just first one ****
     simpleSearch(coll, testCase, 0, pattern, expectedStart, expectedEnd);
 
-#if 0
     usearch_search(uss, 0, &actualStart, &actualEnd, &status);
-#else
-    actualStart = usearch_next(uss, &status);
-    actualEnd   = actualStart + usearch_getMatchedLength(uss);
-#endif
 
-    if (actualStart != expectedStart || actualEnd != expectedEnd) {
+    if (expectedStart >= 0 && (actualStart != expectedStart || actualEnd != expectedEnd)) {
         errln("Search for <pattern> in <%s> failed: expected [%d, %d], got [%d, %d]\n"
               "    strength=%s seed=%d",
               name, expectedStart, expectedEnd, actualStart, actualEnd, strength, seed);
@@ -1531,15 +2003,9 @@
 
     usearch_setPattern(uss, altPattern.getBuffer(), altPattern.length(), &status);
 
-#if 0
     usearch_search(uss, 0, &actualStart, &actualEnd, &status);
-#else
-    usearch_reset(uss);
-    actualStart = usearch_next(uss, &status);
-    actualEnd   = actualStart + usearch_getMatchedLength(uss);
-#endif
 
-    if (actualStart != expectedStart || actualEnd != expectedEnd) {
+    if (expectedStart >= 0 && (actualStart != expectedStart || actualEnd != expectedEnd)) {
         errln("Search for <alt_pattern> in <%s> failed: expected [%d, %d], got [%d, %d]\n"
               "    strength=%s seed=%d",
               name, expectedStart, expectedEnd, actualStart, actualEnd, strength, seed);
@@ -1553,39 +2019,79 @@
 
     return notFoundCount;
 }
+
+int32_t SSearchTest::bmMonkeyTestCase(UCollator *coll, const UnicodeString &testCase, const UnicodeString &pattern, const UnicodeString &altPattern,
+                                    BoyerMooreSearch *bms, BoyerMooreSearch *abms,
+                                    const char *name, const char *strength, uint32_t seed)
+{
+    UErrorCode status = U_ZERO_ERROR;
+    int32_t actualStart = -1, actualEnd = -1;
+  //int32_t expectedStart = prefix.length(), expectedEnd = prefix.length() + altPattern.length();
+    int32_t expectedStart = -1, expectedEnd = -1;
+    int32_t notFoundCount = 0;
+
+    // **** TODO: find *all* matches, not just first one ****
+    simpleSearch(coll, testCase, 0, pattern, expectedStart, expectedEnd);
+
+    bms->setTargetString(&testCase, status);
+    bms->search(0, actualStart, actualEnd);
+
+    if (expectedStart >= 0 && (actualStart != expectedStart || actualEnd != expectedEnd)) {
+        errln("Boyer-Moore Search for <pattern> in <%s> failed: expected [%d, %d], got [%d, %d]\n"
+              "    strength=%s seed=%d",
+              name, expectedStart, expectedEnd, actualStart, actualEnd, strength, seed);
+    }
+
+    if (expectedStart == -1 && actualStart == -1) {
+        notFoundCount += 1;
+    }
+
+    // **** TODO: find *all* matches, not just first one ****
+    simpleSearch(coll, testCase, 0, altPattern, expectedStart, expectedEnd);
+
+    abms->setTargetString(&testCase, status);
+    abms->search(0, actualStart, actualEnd);
+
+    if (expectedStart >= 0 && (actualStart != expectedStart || actualEnd != expectedEnd)) {
+        errln("Boyer-Moore Search for <alt_pattern> in <%s> failed: expected [%d, %d], got [%d, %d]\n"
+              "    strength=%s seed=%d",
+              name, expectedStart, expectedEnd, actualStart, actualEnd, strength, seed);
+    }
+
+    if (expectedStart == -1 && actualStart == -1) {
+        notFoundCount += 1;
+    }
+
+
+    return notFoundCount;
+}
 #endif
 
 void SSearchTest::monkeyTest(char *params)
 {
     // ook!
     UErrorCode status = U_ZERO_ERROR;
-    U_STRING_DECL(test_pattern, "[[:assigned:]-[:ideographic:]-[:hangul:]-[:c:]]", 47);
-    U_STRING_INIT(test_pattern, "[[:assigned:]-[:ideographic:]-[:hangul:]-[:c:]]", 47);
-    UCollator *coll = ucol_open(NULL, &status);
+  //UCollator *coll = ucol_open(NULL, &status);
+    UCollator *coll = ucol_openFromShortString("S1", FALSE, NULL, &status);
+
     if (U_FAILURE(status)) {
         errln("Failed to create collator in MonkeyTest!");
         return;
     }
-    USet *charsToTest  = uset_openPattern(test_pattern, 47, &status);
+
+    CollData  *monkeyData = CollData::open(coll, status);
+
     USet *expansions   = uset_openEmpty();
     USet *contractions = uset_openEmpty();
-    StringToCEsMap *charsToCEList = new StringToCEsMap();
-    CEToStringsMap *ceToCharsStartingWith = new CEToStringsMap();
 
     ucol_getContractionsAndExpansions(coll, contractions, expansions, FALSE, &status);
 
-    uset_addAll(charsToTest, contractions);
-    uset_addAll(charsToTest, expansions);
-
-    // TODO: set strength to UCOL_PRIMARY, change CEList to use strength?
-    buildData(coll, charsToTest, charsToCEList, ceToCharsStartingWith);
-
     U_STRING_DECL(letter_pattern, "[[:letter:]-[:ideographic:]-[:hangul:]]", 39);
     U_STRING_INIT(letter_pattern, "[[:letter:]-[:ideographic:]-[:hangul:]]", 39);
     USet *letters = uset_openPattern(letter_pattern, 39, &status);
     SetMonkey letterMonkey(letters);
-    StringSetMonkey contractionMonkey(contractions, coll, charsToCEList, ceToCharsStartingWith);
-    StringSetMonkey expansionMonkey(expansions, coll, charsToCEList, ceToCharsStartingWith);
+    StringSetMonkey contractionMonkey(contractions, coll, monkeyData);
+    StringSetMonkey expansionMonkey(expansions, coll, monkeyData);
     UnicodeString testCase;
     UnicodeString alternate;
     UnicodeString pattern, altPattern;
@@ -1610,7 +2116,7 @@
     int32_t strengthCount = sizeof(strengths) / sizeof(strengths[0]);
     int32_t loopCount = quick? 1000 : 10000;
     int32_t firstStrength = 0;
-    int32_t lastStrength  = strengthCount - 1;
+    int32_t lastStrength  = strengthCount - 1; //*/ 0;
 
     if (params != NULL) {
 #if !UCONFIG_NO_REGULAR_EXPRESSIONS
@@ -1651,11 +2157,12 @@
     for(int32_t s = firstStrength; s <= lastStrength; s += 1) {
         int32_t notFoundCount = 0;
 
+        logln("Setting strength to %s.", strengthNames[s]);
         ucol_setStrength(coll, strengths[s]);
 
         // TODO: try alternate prefix and suffix too?
         // TODO: alterntaes are only equal at primary strength. Is this OK?
-        for(int32_t t = 0; t < 10000; t += 1) {
+        for(int32_t t = 0; t < loopCount; t += 1) {
             uint32_t seed = m_seed;
             int32_t  nmc = 0;
 
@@ -1686,16 +2193,166 @@
             notFoundCount += monkeyTestCase(coll, testCase, pattern, altPattern, "pattern + suffix", strengthNames[s], seed);
         }
 
+       logln("For strength %s the not found count is %d.", strengthNames[s], notFoundCount);
+    }
+
+    uset_close(contractions);
+    uset_close(expansions);
+    uset_close(letters);
+
+    CollData::close(monkeyData);
+    
+    ucol_close(coll);
+}
+
+void SSearchTest::bmMonkeyTest(char *params)
+{
+    // ook!
+    UErrorCode status = U_ZERO_ERROR;
+    UCollator *coll = ucol_openFromShortString("S1", FALSE, NULL, &status);
+
+    if (U_FAILURE(status)) {
+        errln("Failed to create collator in MonkeyTest!");
+        return;
+    }
+
+    CollData  *monkeyData = CollData::open(coll, status);
+
+    USet *expansions   = uset_openEmpty();
+    USet *contractions = uset_openEmpty();
+
+    ucol_getContractionsAndExpansions(coll, contractions, expansions, FALSE, &status);
+
+    U_STRING_DECL(letter_pattern, "[[:letter:]-[:ideographic:]-[:hangul:]]", 39);
+    U_STRING_INIT(letter_pattern, "[[:letter:]-[:ideographic:]-[:hangul:]]", 39);
+    USet *letters = uset_openPattern(letter_pattern, 39, &status);
+    SetMonkey letterMonkey(letters);
+    StringSetMonkey contractionMonkey(contractions, coll, monkeyData);
+    StringSetMonkey expansionMonkey(expansions, coll, monkeyData);
+    UnicodeString testCase;
+    UnicodeString alternate;
+    UnicodeString pattern, altPattern;
+    UnicodeString prefix, altPrefix;
+    UnicodeString suffix, altSuffix;
+
+    Monkey *monkeys[] = {
+        &letterMonkey,
+        &contractionMonkey,
+        &expansionMonkey,
+        &contractionMonkey,
+        &expansionMonkey,
+        &contractionMonkey,
+        &expansionMonkey,
+        &contractionMonkey,
+        &expansionMonkey};
+    int32_t monkeyCount = sizeof(monkeys) / sizeof(monkeys[0]);
+    int32_t nonMatchCount = 0;
+
+    UCollationStrength strengths[] = {UCOL_PRIMARY, UCOL_SECONDARY, UCOL_TERTIARY};
+    const char *strengthNames[] = {"primary", "secondary", "tertiary"};
+    int32_t strengthCount = sizeof(strengths) / sizeof(strengths[0]);
+    int32_t loopCount = quick? 1000 : 10000;
+    int32_t firstStrength = 0;
+    int32_t lastStrength  = strengthCount - 1; //*/ 0;
+
+    if (params != NULL) {
+#if !UCONFIG_NO_REGULAR_EXPRESSIONS
+        UnicodeString p(params);
+
+        loopCount = getIntParam("loop", p, loopCount);
+        m_seed    = getIntParam("seed", p, m_seed);
+
+        RegexMatcher m(" *strength *= *(primary|secondary|tertiary) *", p, 0, status);
+        if (m.find()) {
+            UnicodeString breakType = m.group(1, status);
+
+            for (int32_t s = 0; s < strengthCount; s += 1) {
+                if (breakType == strengthNames[s]) {
+                    firstStrength = lastStrength = s;
+                    break;
+                }
+            }
+
+            m.reset();
+            p = m.replaceFirst("", status);
+        }
+
+        if (RegexMatcher("\\S", p, 0, status).find()) {
+            // Each option is stripped out of the option string as it is processed.
+            // All options have been checked.  The option string should have been completely emptied..
+            char buf[100];
+            p.extract(buf, sizeof(buf), NULL, status);
+            buf[sizeof(buf)-1] = 0;
+            errln("Unrecognized or extra parameter:  %s\n", buf);
+            return;
+        }
+#else
+        infoln("SSearchTest built with UCONFIG_NO_REGULAR_EXPRESSIONS: ignoring parameters.");
+#endif
+    }
+
+    for(int32_t s = firstStrength; s <= lastStrength; s += 1) {
+        int32_t notFoundCount = 0;
+
+        logln("Setting strength to %s.", strengthNames[s]);
+        ucol_setStrength(coll, strengths[s]);
+
+        CollData *data = CollData::open(coll, status);
+        
+        // TODO: try alternate prefix and suffix too?
+        // TODO: alterntaes are only equal at primary strength. Is this OK?
+        for(int32_t t = 0; t < loopCount; t += 1) {
+            uint32_t seed = m_seed;
+            int32_t  nmc = 0;
+
+            generateTestCase(coll, monkeys, monkeyCount, pattern, altPattern);
+            generateTestCase(coll, monkeys, monkeyCount, prefix,  altPrefix);
+            generateTestCase(coll, monkeys, monkeyCount, suffix,  altSuffix);
+
+            BoyerMooreSearch pat(data, pattern, NULL, status);
+            BoyerMooreSearch alt(data, altPattern, NULL, status);
+
+            // **** need a better way to deal with this ****
+#if 0
+            if (pat.empty() ||
+                alt.empty()) {
+                    continue;
+            }
+#endif
+
+            // pattern
+            notFoundCount += bmMonkeyTestCase(coll, pattern, pattern, altPattern, &pat, &alt, "pattern", strengthNames[s], seed);
+
+            testCase.remove();
+            testCase.append(prefix);
+            testCase.append(/*alt*/pattern);
+
+            // prefix + pattern
+            notFoundCount += bmMonkeyTestCase(coll, testCase, pattern, altPattern, &pat, &alt, "prefix + pattern", strengthNames[s], seed);
+
+            testCase.append(suffix);
+
+            // prefix + pattern + suffix
+            notFoundCount += bmMonkeyTestCase(coll, testCase, pattern, altPattern, &pat, &alt, "prefix + pattern + suffix", strengthNames[s], seed);
+
+            testCase.remove();
+            testCase.append(pattern);
+            testCase.append(suffix);
+            
+            // pattern + suffix
+            notFoundCount += bmMonkeyTestCase(coll, testCase, pattern, altPattern, &pat, &alt, "pattern + suffix", strengthNames[s], seed);
+        }
+
+        CollData::close(data);
+
         logln("For strength %s the not found count is %d.", strengthNames[s], notFoundCount);
     }
 
-    delete ceToCharsStartingWith;
-    delete charsToCEList;
-
     uset_close(contractions);
     uset_close(expansions);
-    uset_close(charsToTest);
     uset_close(letters);
+
+    CollData::close(monkeyData);
     
     ucol_close(coll);
 }

Modified: trunk/source/test/intltest/ssearch.h
===================================================================
--- trunk/source/test/intltest/ssearch.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/intltest/ssearch.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -11,6 +11,7 @@
 #include "unicode/utypes.h"
 #include "unicode/unistr.h"
 #include "unicode/ucol.h"
+#include "unicode/bmsearch.h"
 
 #include "intltest.h"
 
@@ -34,10 +35,24 @@
     virtual void offsetTest();
     virtual void monkeyTest(char *params);
 
+    virtual void bmMonkeyTest(char *params);
+    virtual void boyerMooreTest();
+    virtual void goodSuffixTest();
+    virtual void searchTime();
+    
+    virtual void bmsTest();
+    virtual void bmSearchTest();
+
+    virtual void udhrTest();
+
 private:
     virtual const char   *getPath(char buffer[2048], const char *filename);
     virtual       int32_t monkeyTestCase(UCollator *coll, const UnicodeString &testCase, const UnicodeString &pattern, const UnicodeString &altPattern,
                                          const char *name, const char *strength, uint32_t seed);
+
+    virtual       int32_t bmMonkeyTestCase(UCollator *coll, const UnicodeString &testCase, const UnicodeString &pattern, const UnicodeString &altPattern,
+                                         BoyerMooreSearch *bms, BoyerMooreSearch *abms,
+                                         const char *name, const char *strength, uint32_t seed);
 #endif
                                          
 };

Modified: trunk/source/test/intltest/transrt.cpp
===================================================================
--- trunk/source/test/intltest/transrt.cpp	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/intltest/transrt.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -83,7 +83,7 @@
 // Time bomb - allows temporary behavior that expires at a given
 //             release
 //--------------------------------------------------------------------
-static const UVersionInfo ICU_39 = {4,0,0,1};
+static const UVersionInfo ICU_39 = {4,0,1,1};
 
 
 //--------------------------------------------------------------------

Modified: trunk/source/test/intltest/tztest.cpp
===================================================================
--- trunk/source/test/intltest/tztest.cpp	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/intltest/tztest.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 /***********************************************************************
  * COPYRIGHT: 
- * Copyright (c) 1997-2008, International Business Machines Corporation
+ * Copyright (c) 1997-2009, International Business Machines Corporation
  * and others. All Rights Reserved.
  ***********************************************************************/
 
@@ -579,6 +579,42 @@
  */
 void TimeZoneTest::TestShortZoneIDs()
 {
+    // TODO: This test case is tzdata sensitive.
+    // We should actually put the data version in this test code
+    // at build time.  For now, we just hardcode the version string
+    // and display warning instead of error if non-reference tzdata
+    // version is used.
+    const char *REFERENCE_DATA_VERSION = "2008i";
+
+    UErrorCode status = U_ZERO_ERROR;
+    UBool isNonReferenceTzdataVersion = FALSE;
+    const char *tzdataVer = TimeZone::getTZDataVersion(status);
+    if (failure(status, "getTZDataVersion")) return;
+    if (uprv_strcmp(tzdataVer, REFERENCE_DATA_VERSION) != 0) {
+        // Note: We want to display a warning message here if
+        // REFERENCE_DATA_VERSION is out of date - so we
+        // do not forget to update the value before GA.
+        isNonReferenceTzdataVersion = TRUE;
+        logln(UnicodeString("Warning: Active tzdata version (") + tzdataVer +
+            ") does not match the reference tzdata version ("
+            + REFERENCE_DATA_VERSION + ") for this test case data.");
+    }
+
+    // Note: useDaylightTime returns true if DST is observed
+    // in the time zone in the current calendar year.  The test
+    // data is valid for the date after the reference year below.
+    // If system clock is before the year, some test cases may fail.
+    const int32_t REFERENCE_YEAR = 2009;
+    GregorianCalendar cal(*TimeZone::getGMT(), status);
+    if (failure(status, "GregorianCalendar")) return;
+    cal.set(REFERENCE_YEAR, UCAL_JANUARY, 2); // day 2 in GMT
+
+    UBool isDateBeforeReferenceYear = ucal_getNow() < cal.getTime(status);
+    if (failure(status, "Calendar::getTime")) return;
+    if (isDateBeforeReferenceYear) {
+        logln("Warning: Past time is set to the system clock.  Some test cases may not return expected results.");
+    }
+
     int32_t i;
     // Create a small struct to hold the array
     struct
@@ -602,18 +638,16 @@
         {"CNT", -210, TRUE},
         {"AGT", -180, TRUE}, // updated by tzdata2007k
         {"BET", -180, TRUE},
-        // "CAT", -60, FALSE, // Wrong:
-        // As of bug 4130885, fix CAT (Central Africa)
-        {"CAT", 120, FALSE}, // Africa/Harare
         {"GMT", 0, FALSE},
         {"UTC", 0, FALSE}, // ** srl: seems broken in C++
         {"ECT", 60, TRUE},
+        {"MET", 60, TRUE}, // updated 12/3/99 aliu
         {"ART", 120, TRUE},
         {"EET", 120, TRUE},
+        {"CAT", 120, FALSE}, // Africa/Harare
         {"EAT", 180, FALSE},
-        {"MET", 60, TRUE}, // updated 12/3/99 aliu
         {"NET", 240, TRUE}, // updated 12/3/99 aliu
-        {"PLT", 300, TRUE}, // updated by 2008c
+        {"PLT", 300, FALSE}, // updated by 2008c - no DST after 2008
         {"IST", 330, FALSE},
         {"BST", 360, FALSE},
         {"VST", 420, FALSE},
@@ -622,8 +656,6 @@
         {"ACT", 570, FALSE}, // updated Aug 2003 aliu
         {"AET", 600, TRUE},
         {"SST", 660, FALSE},
-        // "NST", 720, FALSE,
-        // As of bug 4130885, fix NST (New Zealand)
         {"NST", 720, TRUE}, // Pacific/Auckland
 
         // From icuzones:
@@ -646,7 +678,6 @@
         {"",0,FALSE}
     };
 
-
     for(i=0;kReferenceList[i].id[0];i++) {
         UnicodeString itsID(kReferenceList[i].id);
         UBool ok = TRUE;
@@ -660,19 +691,32 @@
         // Check daylight usage.
         UBool usesDaylight = tz->useDaylightTime();
         if (usesDaylight != kReferenceList[i].daylight) {
-            errln("FAIL: Time Zone " + itsID + " use daylight is " +
-                  (usesDaylight?"TRUE":"FALSE") +
-                  " but it should be " +
-                  ((kReferenceList[i].daylight)?"TRUE":"FALSE"));
+            if (isNonReferenceTzdataVersion || isDateBeforeReferenceYear) {
+                logln("Warning: Time Zone " + itsID + " use daylight is " +
+                      (usesDaylight?"TRUE":"FALSE") +
+                      " but it should be " +
+                      ((kReferenceList[i].daylight)?"TRUE":"FALSE"));
+            } else {
+                errln("FAIL: Time Zone " + itsID + " use daylight is " +
+                      (usesDaylight?"TRUE":"FALSE") +
+                      " but it should be " +
+                      ((kReferenceList[i].daylight)?"TRUE":"FALSE"));
+            }
             ok = FALSE;
         }
 
         // Check offset
         int32_t offsetInMinutes = tz->getRawOffset()/60000;
         if (offsetInMinutes != kReferenceList[i].offset) {
-            errln("FAIL: Time Zone " + itsID + " raw offset is " +
-                  offsetInMinutes +
-                  " but it should be " + kReferenceList[i].offset);
+            if (isNonReferenceTzdataVersion || isDateBeforeReferenceYear) {
+                logln("FAIL: Time Zone " + itsID + " raw offset is " +
+                      offsetInMinutes +
+                      " but it should be " + kReferenceList[i].offset);
+            } else {
+                errln("FAIL: Time Zone " + itsID + " raw offset is " +
+                      offsetInMinutes +
+                      " but it should be " + kReferenceList[i].offset);
+            }
             ok = FALSE;
         }
 

Modified: trunk/source/test/perf/strsrchperf/strsrchperf.cpp
===================================================================
--- trunk/source/test/perf/strsrchperf/strsrchperf.cpp	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/perf/strsrchperf/strsrchperf.cpp	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 /********************************************************************
  * COPYRIGHT:
- * Copyright (C) 2008 IBM, Inc.   All Rights Reserved.
+ * Copyright (C) 2008-2009 IBM, Inc.   All Rights Reserved.
  *
  ********************************************************************/
 /** 
@@ -14,7 +14,13 @@
 StringSearchPerformanceTest::StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status)
 :UPerfTest(argc,argv,status){
     int32_t start, end;
+
+#ifdef TEST_BOYER_MOORE_SEARCH
+    bms = NULL;
+#else
     srch = NULL;
+#endif
+
     pttrn = NULL;
     if(status== U_ILLEGAL_ARGUMENT_ERROR || line_mode){
        fprintf(stderr,gUsageString, "strsrchperf");
@@ -22,7 +28,8 @@
     }
     /* Get the Text */
     src = getBuffer(srcLen, status);
-    
+
+#if 0
     /* Get a word to find. Do this by selecting a random word with a word breakiterator. */
     UBreakIterator* brk = ubrk_open(UBRK_WORD, locale, src, srcLen, &status);
     if(U_FAILURE(status)){
@@ -38,9 +45,38 @@
     }
     pttrn = temp; /* store word in pttrn */
     ubrk_close(brk);
+#else
+    /* The first line of the file contains the pattern */
+    start = 0;
+
+    for(end = start; ; end += 1) {
+        UChar ch = src[end];
+
+        if (ch == 0x000A || ch == 0x000D || ch == 0x2028) {
+            break;
+        }
+    }
+
+    pttrnLen = end - start;
+    UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen));
+    for (int i = 0; i < pttrnLen; i++) {
+        temp[i] = src[start++];
+    }
+    pttrn = temp; /* store word in pttrn */
+#endif
     
+#ifdef TEST_BOYER_MOORE_SEARCH
+    UnicodeString patternString(pttrn, pttrnLen);
+    UCollator *coll = ucol_open(locale, &status);
+    CollData *data = CollData::open(coll, status);
+
+    targetString = new UnicodeString(src, srcLen);
+    bms = new BoyerMooreSearch(data, patternString, targetString, status);
+#else
     /* Create the StringSearch object to be use in performance test. */
     srch = usearch_open(pttrn, pttrnLen, src, srcLen, locale, NULL, &status);
+#endif
+
     if(U_FAILURE(status)){
         fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status));
         return;
@@ -49,12 +85,23 @@
 }
 
 StringSearchPerformanceTest::~StringSearchPerformanceTest() {
+    CollData *data  = bms->getData();
+    UCollator *coll = data->getCollator();
+
+    delete bms;
+    delete targetString;
+    CollData::close(data);
+    ucol_close(coll);
+
     if (pttrn != NULL) {
         free(pttrn);
     }
+
+#ifndef TEST_BOYER_MOORE_SEARCH
     if (srch != NULL) {
         usearch_close(srch);
     }
+#endif
 }
 
 UPerfFunction* StringSearchPerformanceTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char *par) {
@@ -70,12 +117,20 @@
 }
 
 UPerfFunction* StringSearchPerformanceTest::Test_ICU_Forward_Search(){
+#ifdef TEST_BOYER_MOORE_SEARCH
+    StringSearchPerfFunction *func = new StringSearchPerfFunction(ICUForwardSearch, bms, src, srcLen, pttrn, pttrnLen);
+#else
     StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUForwardSearch, srch, src, srcLen, pttrn, pttrnLen);
+#endif
     return func;
 }
 
 UPerfFunction* StringSearchPerformanceTest::Test_ICU_Backward_Search(){
+#ifdef TEST_BOYER_MOORE_SEARCH
+    StringSearchPerfFunction *func = new StringSearchPerfFunction(ICUBackwardSearch, bms, src, srcLen, pttrn, pttrnLen);
+#else
     StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUBackwardSearch, srch, src, srcLen, pttrn, pttrnLen);
+#endif
     return func;
 }
 

Modified: trunk/source/test/perf/strsrchperf/strsrchperf.h
===================================================================
--- trunk/source/test/perf/strsrchperf/strsrchperf.h	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/perf/strsrchperf/strsrchperf.h	2009-02-07 10:08:34 UTC (rev 162)
@@ -8,11 +8,19 @@
 
 #include "unicode/ubrk.h"
 #include "unicode/usearch.h"
+#include "unicode/colldata.h"
+#include "unicode/bmsearch.h"
 #include "unicode/uperf.h"
 #include <stdlib.h>
 #include <stdio.h>
 
+#define TEST_BOYER_MOORE_SEARCH
+
+#ifdef TEST_BOYER_MOORE_SEARCH
+typedef void (*StrSrchFn) (BoyerMooreSearch * bms, const UChar *src, int32_t srcLen, const UChar *pttrn, int32_t pttrnLen, UErrorCode *status);
+#else
 typedef void (*StrSrchFn)(UStringSearch* srch, const UChar* src,int32_t srcLen, const UChar* pttrn, int32_t pttrnLen, UErrorCode* status);
+#endif
 
 class StringSearchPerfFunction : public UPerfFunction {
 private:
@@ -21,17 +29,39 @@
     int32_t srcLen;
     const UChar* pttrn;
     int32_t pttrnLen;
+#ifdef TEST_BOYER_MOORE_SEARCH
+    BoyerMooreSearch *bms;
+#else
     UStringSearch* srch;
+#endif
     
 public:
     virtual void call(UErrorCode* status) {
+#ifdef TEST_BOYER_MOORE_SEARCH
+        (*fn)(bms, src, srcLen, pttrn, pttrnLen, status);
+#else
         (*fn)(srch, src, srcLen, pttrn, pttrnLen, status);
+#endif
     }
     
     virtual long getOperationsPerIteration() {
+#if 0
         return (long)(srcLen/pttrnLen);
+#else
+        return (long) srcLen;
+#endif
     }
     
+#ifdef TEST_BOYER_MOORE_SEARCH
+    StringSearchPerfFunction(StrSrchFn func, BoyerMooreSearch *search, const UChar *source, int32_t sourceLen, const UChar *pattern, int32_t patternLen) {
+        fn       = func;
+        src      = source;
+        srcLen   = sourceLen;
+        pttrn    = pattern;
+        pttrnLen = patternLen;
+        bms      = search;
+    }
+#else
     StringSearchPerfFunction(StrSrchFn func, UStringSearch* search, const UChar* source,int32_t sourceLen, const UChar* pattern, int32_t patternLen) {
         fn = func;
         src = source;
@@ -40,6 +70,7 @@
         pttrnLen = patternLen;
         srch = search;
     }
+#endif
 };
 
 class StringSearchPerformanceTest : public UPerfTest {
@@ -48,7 +79,12 @@
     int32_t srcLen;
     UChar* pttrn;
     int32_t pttrnLen;
+#ifdef TEST_BOYER_MOORE_SEARCH
+    UnicodeString *targetString;
+    BoyerMooreSearch *bms;
+#else
     UStringSearch* srch;
+#endif
     
 public:
     StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status);
@@ -56,9 +92,29 @@
     virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
     
     UPerfFunction* Test_ICU_Forward_Search();
+
     UPerfFunction* Test_ICU_Backward_Search();
 };
 
+
+#ifdef TEST_BOYER_MOORE_SEARCH
+void ICUForwardSearch(BoyerMooreSearch *bms, const UChar *source, int32_t sourceLen, const UChar *pattern, int32_t patternLen, UErrorCode * /*status*/) { 
+    int32_t offset = 0, start = -1, end = -1;
+
+    while (bms->search(offset, start, end)) {
+        offset = end;
+    }
+}
+
+void ICUBackwardSearch(BoyerMooreSearch *bms, const UChar *source, int32_t sourceLen, const UChar *pattern, int32_t patternLen, UErrorCode * /*status*/) { 
+    int32_t offset = 0, start = -1, end = -1;
+
+    /* NOTE: No Boyer-Moore backward search yet... */
+    while (bms->search(offset, start, end)) {
+        offset = end;
+    }
+}
+#else
 void ICUForwardSearch(UStringSearch *srch, const UChar* source, int32_t sourceLen, const UChar* pattern, int32_t patternLen, UErrorCode* status) {
     int32_t match;
     
@@ -76,5 +132,6 @@
         match = usearch_previous(srch, status);
     }
 }
+#endif
 
 #endif /* _STRSRCHPERF_H */

Modified: trunk/source/test/perf/strsrchperf/strsrchperf.vcproj
===================================================================
--- trunk/source/test/perf/strsrchperf/strsrchperf.vcproj	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/perf/strsrchperf/strsrchperf.vcproj	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,252 +1,464 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="strsrchperf"
-	ProjectGUID="{241DED26-1635-45E6-9564-7742AC8043B5}"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\Debug"
-			IntermediateDirectory=".\Debug"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TypeLibraryName=".\Debug/strsrchperf.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_MBCS"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/strsrchperf.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				BrowseInformation="1"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="icuucd.lib icutud.lib icutestd.lib winmm.lib"
-				OutputFile=".\Debug/strsrchperf.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\..\..\lib\"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\Debug/strsrchperf.pdb"
-				SubSystem="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TypeLibraryName=".\Release/strsrchperf.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
-				StringPooling="true"
-				RuntimeLibrary="2"
-				EnableFunctionLevelLinking="true"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/strsrchperf.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="icuuc.lib icutu.lib icutest.lib winmm.lib"
-				OutputFile=".\Release/strsrchperf.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\..\..\lib\"
-				ProgramDatabaseFile=".\Release/strsrchperf.pdb"
-				SubSystem="1"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-			>
-			<File
-				RelativePath="strsrchperf.cpp"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_MBCS;_UNICODE;$(NoInherit)"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl"
-			>
-			<File
-				RelativePath="strsrchperf.h"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-			>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="strsrchperf"
+	ProjectGUID="{241DED26-1635-45E6-9564-7742AC8043B5}"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\x86\Debug"
+			IntermediateDirectory=".\x86\Debug"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TypeLibraryName=".\x86\Debug/strsrchperf.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_MBCS"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\x86\Debug/strsrchperf.pch"
+				AssemblerListingLocation=".\x86\Debug/"
+				ObjectFile=".\x86\Debug/"
+				ProgramDataBaseFileName=".\x86\Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="icuucd.lib icuind.lib icutud.lib icutestd.lib winmm.lib"
+				OutputFile=".\x86\Debug/strsrchperf.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				AdditionalLibraryDirectories="..\..\..\..\lib\"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\x86\Debug/strsrchperf.pdb"
+				SubSystem="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory=".\x64\Debug"
+			IntermediateDirectory=".\x64\Debug"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+				TypeLibraryName=".\x64\Debug/strsrchperf.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw"
+				PreprocessorDefinitions="WIN64;WIN32;_DEBUG;_CONSOLE;_MBCS"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\x64\Debug/strsrchperf.pch"
+				AssemblerListingLocation=".\x64\Debug/"
+				ObjectFile=".\x64\Debug/"
+				ProgramDataBaseFileName=".\x64\Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="icuucd.lib icutud.lib icutestd.lib winmm.lib"
+				OutputFile=".\x64\Debug/strsrchperf.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				AdditionalLibraryDirectories="..\..\..\..\lib64\"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\x64\Debug/strsrchperf.pdb"
+				SubSystem="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\x86\Release"
+			IntermediateDirectory=".\x86\Release"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TypeLibraryName=".\x86\Release/strsrchperf.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\x86\Release/strsrchperf.pch"
+				AssemblerListingLocation=".\x86\Release/"
+				ObjectFile=".\x86\Release/"
+				ProgramDataBaseFileName=".\x86\Release/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="icuuc.lib icuin.lib icutu.lib icutest.lib winmm.lib"
+				OutputFile=".\x86\Release/strsrchperf.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				AdditionalLibraryDirectories="..\..\..\..\lib\"
+				ProgramDatabaseFile=".\x86\Release/strsrchperf.pdb"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory=".\x64\Release"
+			IntermediateDirectory=".\x64\Release"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+				TypeLibraryName=".\x64\Release/strsrchperf.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw"
+				PreprocessorDefinitions="WIN64;WIN32;NDEBUG;_CONSOLE"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\x64\Release/strsrchperf.pch"
+				AssemblerListingLocation=".\x64\Release/"
+				ObjectFile=".\x64\Release/"
+				ProgramDataBaseFileName=".\x64\Release/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="icuuc.lib icutu.lib icutest.lib winmm.lib"
+				OutputFile=".\x64\Release/strsrchperf.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				AdditionalLibraryDirectories="..\..\..\..\lib64\"
+				ProgramDatabaseFile=".\x64\Release/strsrchperf.pdb"
+				SubSystem="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="strsrchperf.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_MBCS;_UNICODE;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN64;WIN32;_DEBUG;_CONSOLE;_MBCS;_UNICODE;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="strsrchperf.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Modified: trunk/source/test/testdata/conversion.txt
===================================================================
--- trunk/source/test/testdata/conversion.txt	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/testdata/conversion.txt	2009-02-07 10:08:34 UTC (rev 162)
@@ -48,6 +48,138 @@
     toUnicode {
       Headers { "charset", "bytes", "unicode", "offsets", "flush", "fallbacks", "errorCode", "callback", "invalidChars" }
       Cases {
+        // Test ticket 5691: consistent illegal sequences
+        // The following test cases are for illegal character byte sequences.
+        //
+        // Unfortunately, we cannot use the Shift-JIS examples from the ticket
+        // comments because our Shift-JIS table is Windows-compatible and
+        // therefore has no illegal single bytes. Same for GBK.
+        // Instead, we use the stricter GB 18030 also for 2-byte examples.
+        // The byte sequences are generally slightly different from the ticket
+        // comment, simply using assigned characters rather than just
+        // theoretically valid sequences.
+        {
+          "gb18030",
+          :bin{ 618140813c81ff7a },
+          "a\u4e02\\x81<\\x81\\xFFz",
+          :intvector{ 0,1,3,3,3,3,4,5,5,5,5,5,5,5,5,7 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "EUC-JP",
+          :bin{ 618fb0a98fb03c8f3cb0a97a },
+          "a\u4e28\\x8F\\xB0<\\x8F<\u9022z",
+          :intvector{ 0,1,4,4,4,4,5,5,5,5,6,7,7,7,7,8,9,11 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "gb18030",
+          :bin{ 618130fc318130fc8181303c3e813cfc817a },
+          "a\u05ed\\x810\u9f07\\x810<>\\x81<\u9f07z",
+          :intvector{ 0,1,5,5,5,5,6,7,9,9,9,9,10,11,12,13,13,13,13,14,15,17 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "UTF-8",
+          :bin{ 61f1808182f180813cf18081fff180ff3cf1ff3c3e7a },
+          "a\U00040042\\xF1\\x80\\x81<\\xF1\\x80\\x81\\xFF\\xF1\\x80\\xFF<\\xF1\\xFF<>z",
+          :intvector{ 0,1,1,5,5,5,5,5,5,5,5,5,5,5,5,8,9,9,9,9,9,9,9,9,9,9,9,9,12,12,12,12,13,13,13,13,13,13,13,13,15,15,15,15,16,17,17,17,17,18,18,18,18,19,20,21 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "ISO-2022-JP",
+          :bin{ 1b24424141af4142affe41431b2842 },
+          "\u758f\\xAF\u758e\\xAF\\xFE\u790e",
+          :intvector{ 3,5,5,5,5,6,8,8,8,8,8,8,8,8,10 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "ibm-25546",
+          :bin{ 411b242943420e4141af4142affe41430f5a },
+          "AB\uc88b\\xAF\uc88c\\xAF\\xFE\uc88dZ",
+          :intvector{ 0,5,7,9,9,9,9,10,12,12,12,12,12,12,12,12,14,17 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "ISO-2022-KR",
+          :bin{ 411b242943420e4141af4142affe41430f5a },
+          "AB\uc88b\\xAF\uc88c\\xAF\\xFE\uc88dZ",
+          :intvector{ 0,5,7,9,9,9,9,10,12,12,12,12,12,12,12,12,14,17 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "ISO-2022-CN",
+          :bin{ 411b242941420e4141af4142affe41430f5a },
+          "AB\u4eae\\xAF\u8c05\\xAF\\xFE\u64a9Z",
+          :intvector{ 0,5,7,9,9,9,9,10,12,12,12,12,12,12,12,12,14,17 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "HZ",
+          :bin{ 417e7b4141af4142affe41437e7d5a },
+          "A\u4eae\\xAF\u8c05\\xAF\\xFE\u64a9Z",
+          :intvector{ 0,3,5,5,5,5,6,8,8,8,8,8,8,8,8,10,14 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        // Test ticket 5691: consistent illegal sequences
+        // The following test cases are for illegal escape/designator/shift sequences.
+        //
+        // ISO-2022-JP and -CN with illegal escape sequences.
+        {
+          "ISO-2022-JP",
+          :bin{ 611b24201b244241411b283f1b28427a },
+          "a\\x1B$ \u758f\\x1B\u2538z",
+          :intvector{ 0,1,1,1,1,2,3,7,9,9,9,9,10,15 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "ISO-2022-CN",
+          :bin{ 611b2429201b2429410e41410f7a },
+          "a\\x1B$) \u4eaez",
+          :intvector{ 0,1,1,1,1,2,3,4,10,13 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        // Test ticket 5691: ISO-2022-JP-2 with illegal single-shift SS2 and SS3 sequences.
+        // The first ESC N comes before its designator sequence, the last sequence is ESC+space.
+        {
+          "ISO-2022-JP-2",
+          :bin{ 4e1b4e4e1b2e414e1b4e4e4e1b204e },
+          "N\\x1BNNN\xceN\\x1B N",
+          :intvector{ 0,1,1,1,1,2,3,7,10,11,12,12,12,12,13,14 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "ISO-2022-CN-EXT",
+          :bin{ 4e1b4e4e1b242a484e1b4e4e4e4e1b204e },
+          "N\\x1BNNN\u8f0eN\\x1B N",
+          :intvector{ 0,1,1,1,1,2,3,8,11,13,14,14,14,14,15,16 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        {
+          "ISO-2022-CN-EXT",
+          :bin{ 4f1b4f4f1b242b494f1b4f4f4f4f1b204f },
+          "O\\x1BOOO\u492bO\\x1B O",
+          :intvector{ 0,1,1,1,1,2,3,8,11,13,14,14,14,14,15,16 },
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        // Test ticket 5691: HZ with illegal tilde sequences.
+        {
+          "HZ",
+          :bin{ 417e20427e21437e80447e7b41417e207e41427e7f41437e7d5a },
+          "A\\x7E B\\x7E!C\\x7E\\x80D\u4eae\\x7E\\x20\\x7E\u8c05\\x7E\\x7F\u64a9Z",
+          :intvector{ 0,1,1,1,1,2,3,4,4,4,4,5,6,7,7,7,7,7,7,7,7,9,                          // SBCS
+                      12,14,14,14,14,14,14,14,14,16,16,16,16,17,19,19,19,19,19,19,19,19,21, // DBCS
+                      25 },                                                                 // SBCS
+          :int{1}, :int{0}, "", "&C", :bin{""}
+        }
+        // Test ticket 5691: Example from Peter Edberg.
+        {
+          "ISO-2022-JP",
+          :bin{ 1b244230212f7e742630801b284a621b2458631b2842648061 },
+          "\u4e9c\ufffd\u7199\ufffdb\ufffd$Xcd\ufffda",
+          :intvector{ 3,5,7,9,14,15,16,17,18,22,23,24 },
+          :int{1}, :int{0}, "", "?", :bin{""}
+        }
         // Test bug 6071 (2:1 Unicode:charset SBCS mapping).
         {
           "*test1bmp",
@@ -59,9 +191,9 @@
         // test that HZ limits its byte values to lead bytes 21..7d and trail bytes 21..7e
         {
           "HZ",
-          :bin{ 7e7b21212120217e217f772100007e217e7d207e7e807e0a2b },
-          "\u3000\ufffd\u3013\ufffd\u9ccc\ufffd\ufffd ~\ufffd+",
-          :intvector{ 2,4,6,8,10,12,14,18,19,21,24 },
+          :bin{ 7e7b21212120217e217f772100007e217e7e7d207e7e807e0a2b },
+          "\u3000\ufffd\u3013\ufffd\u9ccc\ufffd\ufffd\u3013 ~\ufffd+",
+          :intvector{ 2,4,6,8,10,12,14,15,19,20,22,25 },
           :int{1}, :int{1}, "", "?", :bin{""}
         }
         // improve coverage of ISO-2022-JP converter with hardcoded JIS X 0201 and
@@ -69,8 +201,8 @@
         {
           "ISO-2022-JP",
           :bin{ 1b284a7d7e801b2442306c20217f7e21202160217f22202225227f5f211b2842 },
-          "}\u203e\ufffd\u4e00\ufffd\ufffd\ufffd\xf7\ufffd\ufffd\u25b2\ufffd\u6f3e",
-          :intvector{ 3,4,5,9,11,13,15,17,19,21,23,25,27 },
+          "}\u203e\ufffd\u4e00\ufffd\ufffd\ufffd\ufffd\xf7\ufffd\ufffd\u25b2\ufffd\u6f3e",
+          :intvector{ 3,4,5,9,11,12,14,16,17,19,21,23,25,27 },
           :int{1}, :int{1}, "", "?", :bin{""}
         }
         // improve coverage of ISO-2022-JP converter by simulating erroneous input
@@ -365,7 +497,7 @@
         {
           "ISO-2022-CN-EXT",
           :bin{ 411b4e2121 }, "\x41", :intvector{ 0 },
-          :int{1}, :int{1}, "illesc", ".", :bin{ 1b4e }
+          :int{1}, :int{1}, "illesc", ".", :bin{ 1b }
         }
         // G3 designator: recognized, but not supported for -CN (only for -CN-EXT)
         {

Modified: trunk/source/test/testdata/ssearch.xml
===================================================================
--- trunk/source/test/testdata/ssearch.xml	2009-02-07 09:37:15 UTC (rev 161)
+++ trunk/source/test/testdata/ssearch.xml	2009-02-07 10:08:34 UTC (rev 162)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- Copyright (c) 2007-2008 IBM Corporation and others. All rights reserved -->
+<!-- Copyright (c) 2007-2009 IBM Corporation and others. All rights reserved -->
 
 <!-- Test data file for string search  -->
 <!DOCTYPE stringsearch-tests [
@@ -12,6 +12,7 @@
           locale CDATA "en" 
           strength (PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL) "TERTIARY" 
           norm (ON | OFF) "OFF"
+          alternate_handling (NON_IGNORABLE | SHIFTED) "NON_IGNORABLE"
           >
 
 <!ELEMENT pattern (#PCDATA)>
@@ -20,7 +21,7 @@
 <!ELEMENT post (#PCDATA)>
 ]>
 
-<stringsearch-tests debug="test32">
+<stringsearch-tests>
   <!-- debug="test11"     (for copying into the above element)  -->
     
     <!-- Very simple match  -->
@@ -174,8 +175,15 @@
       <pattern>A\u0300</pattern>
       <pre>At IDENTICAL, shoud this match?  </pre><m>\u00c0</m><post></post>
     </test-case>
-    
-    <test-case id="test25" strength="SECONDARY" locale="en">
+
+  <test-case id="test24b" strength="IDENTICAL" alternate_handling="SHIFTED" locale="en">
+    <pattern>A\u0300</pattern>
+    <pre>At IDENTICAL, shoud this match?  </pre>
+    <m>\u00c0</m>
+    <post></post>
+  </test-case>
+
+  <test-case id="test25" strength="SECONDARY" locale="en">
       <pattern>Ű</pattern>
       <pre>12</pre><m>ű</m><post> Ű</post>
     </test-case>
@@ -285,11 +293,13 @@
     
 
     <!-- Long combining sequences  -->
+    <!-- Backwards search fails because patterns ends w/ ignorables
     <test-case id="test60" strength="PRIMARY">
       <pattern>A\u0301\u0301\u0301\u0301</pattern>
       <m>A\u0301\u0301\u0301\u0301\u0301</m>
     </test-case>
-    
+    -->
+
     <test-case id="test61" strength="TERTIARY">
       <pattern>A\u0301\u0301\u0301\u0301</pattern>
           <pre>A\u0301\u0301\u0301\u0301\u0301</pre>
@@ -409,5 +419,27 @@
     <pattern>VII</pattern>
     <m>\u2166</m>
   </test-case>
+
+  <test-case id="test83" strength="IDENTICAL" alternate_handling="SHIFTED" locale="en">
+    <pattern>Universal Declaration of Human Rights</pattern>
+    <pre>Proclaims this </pre><m>Universal Declaration of Human Rights</m><post> as a common standard of achievement for all peoples and all nations</post>
+  </test-case>
+
+  <test-case id="test83b" strength="TERTIARY" alternate_handling="SHIFTED" locale="en">
+    <pattern>Universal Declaration of Human Rights</pattern>
+    <pre>Proclaims this </pre>
+    <m>Universal-Declaration-of-Human-Rights</m>
+    <post> as a common standard of achievement for all peoples and all nations</post>
+  </test-case>
+
+  <test-case id="test84" strength="TERTIARY" locale="en">
+    <pattern>\u05E9\u0591\u05E9</pattern>
+    <m>\u05E9\u0592\u05E9</m>
+  </test-case>
+
+  <test-case id="test84b" strength="IDENTICAL" locale="en">
+    <pattern>\u05E9\u0591\u05E9</pattern>
+    <pre>\u05E9\u0592\u05E9</pre>
+  </test-case>
 </stringsearch-tests>
   




More information about the sword-cvs mailing list