Merge "Fix replacement time zone ID generation logic" am: 34c79e8076 am: 4be6b86335
Original change: https://android-review.googlesource.com/c/platform/system/timezone/+/1477258
Change-Id: Ibaba28e9e3a05c822eecc76bff507c780beffab0
diff --git a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTree.java b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTree.java
index 88c9f21..43ace04 100644
--- a/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTree.java
+++ b/input_tools/android/tzlookup_generator/src/main/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTree.java
@@ -31,6 +31,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import static java.util.stream.Collectors.toList;
@@ -510,7 +511,7 @@
}
Instant endInstant = node.getEndInstant();
- String replacementTimeZoneId = findReplacementTimeZoneId(node);
+ String replacementTimeZoneId = getReplacementTimeZoneIdOrNull(node);
if (!node.isLeaf()) {
ZoneInfo primaryZone = node.getPrimaryZoneInfo();
addZoneEntryIfMissing(endInstant, replacementTimeZoneId, primaryZone);
@@ -525,22 +526,34 @@
}
/**
- * Find the time zone that the node ultimately "merges" into, i.e. the one it is
- * effectively replaced by.
+ * Takes a {@link ZoneNode} and if the parent node has a different primary zone ID, then
+ * this method returns that zone ID. {@code null} is returned otherwise.
*/
- private String findReplacementTimeZoneId(ZoneNode node) {
- if (node.getParent().isRoot()) {
+ private String getReplacementTimeZoneIdOrNull(ZoneNode node) {
+ if (node.isRoot()) {
+ // There is no parent node, so there can be no replacement ID.
return null;
}
- do {
- node = node.getParent();
- } while (!node.getParent().isRoot());
- return node.primaryZoneInfo.getZoneId();
+
+ String zoneId = node.primaryZoneInfo.getZoneId();
+ String replacementId = node.getParent().primaryZoneInfo.getZoneId();
+ if (Objects.equals(zoneId, replacementId)) {
+ // Often, the parent node will have the same primary zone ID. A zone ID cannot
+ // replace itself. Since we're traversing the tree "preorder" this is fine - if
+ // there is a replacement later in time it will already have been found.
+ return null;
+ }
+ return replacementId;
}
private void addZoneEntryIfMissing(
Instant endInstant, String replacementTimeZoneId, ZoneInfo zoneInfo) {
String zoneId = zoneInfo.getZoneId();
+
+ if (Objects.equals(zoneId, replacementTimeZoneId)) {
+ throw new IllegalStateException(zoneId + " cannot replace itself. Cycle!");
+ }
+
if (!notAfterCutOff.isAfter(endInstant)) {
// notAfterCutOff <= endInstant
endInstant = null;
diff --git a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/TzLookupGeneratorTest.java b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/TzLookupGeneratorTest.java
index a3d4976..75c5ae9 100644
--- a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/TzLookupGeneratorTest.java
+++ b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/TzLookupGeneratorTest.java
@@ -645,26 +645,26 @@
+ "<id notafter=\"1130652000000\" repl=\"America/New_York\">America/Indiana/Indianapolis</id>\n"
+ "<id notafter=\"1194159600000\" repl=\"America/New_York\">America/Indiana/Vincennes</id>\n"
+ "<id notafter=\"1173600000000\" repl=\"America/New_York\">America/Indiana/Winamac</id>\n"
- + "<id notafter=\"183535200000\" repl=\"America/New_York\">America/Indiana/Marengo</id>\n"
- + "<id notafter=\"247042800000\" repl=\"America/New_York\">America/Indiana/Petersburg</id>\n"
- + "<id notafter=\"89186400000\" repl=\"America/New_York\">America/Indiana/Vevay</id>\n"
+ + "<id notafter=\"183535200000\" repl=\"America/Indiana/Indianapolis\">America/Indiana/Marengo</id>\n"
+ + "<id notafter=\"247042800000\" repl=\"America/Indiana/Vincennes\">America/Indiana/Petersburg</id>\n"
+ + "<id notafter=\"89186400000\" repl=\"America/Indiana/Indianapolis\">America/Indiana/Vevay</id>\n"
+ "<id>America/Chicago</id>\n"
- + "<id notafter=\"688546800000\" repl=\"America/Chicago\">America/Indiana/Knox</id>\n"
+ + "<id notafter=\"688546800000\" repl=\"America/Indiana/Tell_City\">America/Indiana/Knox</id>\n"
+ "<id notafter=\"104918400000\" repl=\"America/Chicago\">America/Menominee</id>\n"
+ "<id notafter=\"720000000000\" repl=\"America/Chicago\">America/North_Dakota/Center</id>\n"
+ "<id notafter=\"1067155200000\" repl=\"America/Chicago\">America/North_Dakota/New_Salem</id>\n"
+ "<id notafter=\"1143964800000\" repl=\"America/Chicago\">America/Indiana/Tell_City</id>\n"
+ "<id notafter=\"1289116800000\" repl=\"America/Chicago\">America/North_Dakota/Beulah</id>\n"
+ "<id>America/Denver</id>\n"
+ + "<id notafter=\"129114000000\" repl=\"America/Denver\">America/Boise</id>\n"
+ "<id>America/Phoenix</id>\n"
- + "<id notafter=\"129114000000\" repl=\"America/Phoenix\">America/Boise</id>\n"
+ "<id>America/Los_Angeles</id>\n"
+ "<id>America/Anchorage</id>\n"
+ "<id notafter=\"436359600000\" repl=\"America/Anchorage\">America/Juneau</id>\n"
- + "<id notafter=\"436356000000\" repl=\"America/Anchorage\">America/Yakutat</id>\n"
+ + "<id notafter=\"436356000000\" repl=\"America/Juneau\">America/Yakutat</id>\n"
+ "<id notafter=\"436363200000\" repl=\"America/Anchorage\">America/Nome</id>\n"
+ "<id notafter=\"1547978400000\" repl=\"America/Anchorage\">America/Metlakatla</id>\n"
- + "<id notafter=\"341402400000\" repl=\"America/Anchorage\">America/Sitka</id>\n"
+ + "<id notafter=\"341402400000\" repl=\"America/Juneau\">America/Sitka</id>\n"
+ "<id>Pacific/Honolulu</id>\n"
+ "<id>America/Adak</id>\n";
String[] expectedTzLookupXmlLines = expectedTzLookupOutput.split("\\n");
@@ -693,21 +693,21 @@
addReplacement(b, 1130652000000L, "America/New_York", "America/Indiana/Indianapolis");
addReplacement(b, 1194159600000L, "America/New_York", "America/Indiana/Vincennes");
addReplacement(b, 1173600000000L, "America/New_York", "America/Indiana/Winamac");
- addReplacement(b, 183535200000L, "America/New_York", "America/Indiana/Marengo");
- addReplacement(b, 247042800000L, "America/New_York", "America/Indiana/Petersburg");
- addReplacement(b, 89186400000L, "America/New_York", "America/Indiana/Vevay");
- addReplacement(b, 688546800000L, "America/Chicago", "America/Indiana/Knox");
+ addReplacement(b, 183535200000L, "America/Indiana/Indianapolis", "America/Indiana/Marengo");
+ addReplacement(b, 247042800000L, "America/Indiana/Vincennes", "America/Indiana/Petersburg");
+ addReplacement(b, 89186400000L, "America/Indiana/Indianapolis", "America/Indiana/Vevay");
+ addReplacement(b, 688546800000L, "America/Indiana/Tell_City", "America/Indiana/Knox");
addReplacement(b, 104918400000L, "America/Chicago", "America/Menominee");
addReplacement(b, 720000000000L, "America/Chicago", "America/North_Dakota/Center");
addReplacement(b, 1067155200000L, "America/Chicago", "America/North_Dakota/New_Salem");
addReplacement(b, 1143964800000L, "America/Chicago", "America/Indiana/Tell_City");
addReplacement(b, 1289116800000L, "America/Chicago", "America/North_Dakota/Beulah");
- addReplacement(b, 129114000000L, "America/Phoenix", "America/Boise");
+ addReplacement(b, 129114000000L, "America/Denver", "America/Boise");
addReplacement(b, 436359600000L, "America/Anchorage", "America/Juneau");
- addReplacement(b, 436356000000L, "America/Anchorage", "America/Yakutat");
+ addReplacement(b, 436356000000L, "America/Juneau", "America/Yakutat");
addReplacement(b, 436363200000L, "America/Anchorage", "America/Nome");
addReplacement(b, 1547978400000L, "America/Anchorage", "America/Metlakatla");
- addReplacement(b, 341402400000L, "America/Anchorage", "America/Sitka");;
+ addReplacement(b, 341402400000L, "America/Juneau", "America/Sitka");;
tzIdsBuilder.addCountryMappings(b);
assertEquals(tzIdsBuilder.build(), outputData.timeZoneIds);
diff --git a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTreeTest.java b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTreeTest.java
index 3986215..f3ff299 100644
--- a/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTreeTest.java
+++ b/input_tools/android/tzlookup_generator/src/test/java/com/android/libcore/timezone/tzlookup/zonetree/CountryZoneTreeTest.java
@@ -108,6 +108,8 @@
Instant.ofEpochSecond(338950800); /* 1980-09-28T01:00:00Z */
assertEquals(expectedNotUsedAfterInstant,
countryZoneUsage.getNotUsedAfterInstant("Europe/Busingen"));
+ assertEquals("Europe/Berlin",
+ countryZoneUsage.getNotUsedReplacementId("Europe/Busingen"));
}
@Test
@@ -154,7 +156,11 @@
Instant.ofEpochSecond(762883200); /* 1994-03-05T16:00:00Z */
assertEquals(expectedNotUsedAfterInstant,
countryZoneUsage.getNotUsedAfterInstant("Australia/Lindeman"));
+ assertEquals("Australia/Brisbane",
+ countryZoneUsage.getNotUsedReplacementId("Australia/Lindeman"));
+
assertNull(countryZoneUsage.getNotUsedAfterInstant("Australia/Brisbane"));
+ assertNull(countryZoneUsage.getNotUsedReplacementId("Australia/Brisbane"));
}
private static Country parseCountry(String text) throws Exception {
diff --git a/output_data/android/tzids.prototxt b/output_data/android/tzids.prototxt
index 4f082bf..9030977 100644
--- a/output_data/android/tzids.prototxt
+++ b/output_data/android/tzids.prototxt
@@ -94,37 +94,37 @@
}
timeZoneReplacements {
replacedId: "America/Argentina/Salta"
- replacementId: "America/Argentina/Buenos_Aires"
+ replacementId: "America/Argentina/Mendoza"
fromMillis: 1096171200000
}
timeZoneReplacements {
replacedId: "America/Argentina/San_Juan"
- replacementId: "America/Argentina/Buenos_Aires"
+ replacementId: "America/Argentina/Salta"
fromMillis: 1090728000000
}
timeZoneReplacements {
replacedId: "America/Argentina/Jujuy"
- replacementId: "America/Argentina/Buenos_Aires"
+ replacementId: "America/Argentina/Salta"
fromMillis: 687931200000
}
timeZoneReplacements {
replacedId: "America/Argentina/Catamarca"
- replacementId: "America/Argentina/Buenos_Aires"
+ replacementId: "America/Argentina/Salta"
fromMillis: 1087704000000
}
timeZoneReplacements {
replacedId: "America/Argentina/La_Rioja"
- replacementId: "America/Argentina/Buenos_Aires"
+ replacementId: "America/Argentina/Catamarca"
fromMillis: 687931200000
}
timeZoneReplacements {
replacedId: "America/Argentina/Rio_Gallegos"
- replacementId: "America/Argentina/Buenos_Aires"
+ replacementId: "America/Argentina/La_Rioja"
fromMillis: 673588800000
}
timeZoneReplacements {
replacedId: "America/Argentina/Ushuaia"
- replacementId: "America/Argentina/Buenos_Aires"
+ replacementId: "America/Argentina/Salta"
fromMillis: 1087704000000
}
}
@@ -209,7 +209,7 @@
}
timeZoneReplacements {
replacedId: "Australia/Currie"
- replacementId: "Australia/Sydney"
+ replacementId: "Australia/Hobart"
fromMillis: 37728000000
}
timeZoneReplacements {
@@ -333,32 +333,32 @@
}
timeZoneReplacements {
replacedId: "America/Santarem"
- replacementId: "America/Sao_Paulo"
+ replacementId: "America/Recife"
fromMillis: 1214280000000
}
timeZoneReplacements {
replacedId: "America/Recife"
- replacementId: "America/Sao_Paulo"
+ replacementId: "America/Bahia"
fromMillis: 1330221600000
}
timeZoneReplacements {
replacedId: "America/Fortaleza"
- replacementId: "America/Sao_Paulo"
+ replacementId: "America/Recife"
fromMillis: 972180000000
}
timeZoneReplacements {
replacedId: "America/Belem"
- replacementId: "America/Sao_Paulo"
+ replacementId: "America/Recife"
fromMillis: 1013911200000
}
timeZoneReplacements {
replacedId: "America/Maceio"
- replacementId: "America/Sao_Paulo"
+ replacementId: "America/Fortaleza"
fromMillis: 824004000000
}
timeZoneReplacements {
replacedId: "America/Araguaina"
- replacementId: "America/Sao_Paulo"
+ replacementId: "America/Bahia"
fromMillis: 1361066400000
}
timeZoneReplacements {
@@ -368,7 +368,7 @@
}
timeZoneReplacements {
replacedId: "America/Campo_Grande"
- replacementId: "America/Manaus"
+ replacementId: "America/Cuiaba"
fromMillis: 1076814000000
}
timeZoneReplacements {
@@ -490,17 +490,17 @@
}
timeZoneReplacements {
replacedId: "America/Nipigon"
- replacementId: "America/Toronto"
+ replacementId: "America/Thunder_Bay"
fromMillis: 89186400000
}
timeZoneReplacements {
replacedId: "America/Pangnirtung"
- replacementId: "America/Toronto"
+ replacementId: "America/Iqaluit"
fromMillis: 796806000000
}
timeZoneReplacements {
replacedId: "America/Swift_Current"
- replacementId: "America/Winnipeg"
+ replacementId: "America/Regina"
fromMillis: 73472400000
}
timeZoneReplacements {
@@ -510,7 +510,7 @@
}
timeZoneReplacements {
replacedId: "America/Rainy_River"
- replacementId: "America/Winnipeg"
+ replacementId: "America/Rankin_Inlet"
fromMillis: 986112000000
}
timeZoneReplacements {
@@ -525,22 +525,22 @@
}
timeZoneReplacements {
replacedId: "America/Dawson_Creek"
- replacementId: "America/Edmonton"
+ replacementId: "America/Whitehorse"
fromMillis: 1604214000000
}
timeZoneReplacements {
replacedId: "America/Creston"
- replacementId: "America/Edmonton"
+ replacementId: "America/Dawson_Creek"
fromMillis: 84013200000
}
timeZoneReplacements {
replacedId: "America/Fort_Nelson"
- replacementId: "America/Edmonton"
+ replacementId: "America/Dawson_Creek"
fromMillis: 1425808800000
}
timeZoneReplacements {
replacedId: "America/Inuvik"
- replacementId: "America/Edmonton"
+ replacementId: "America/Yellowknife"
fromMillis: 294228000000
}
timeZoneReplacements {
@@ -550,7 +550,7 @@
}
timeZoneReplacements {
replacedId: "America/Dawson"
- replacementId: "America/Edmonton"
+ replacementId: "America/Whitehorse"
fromMillis: 120646800000
}
}
@@ -1497,7 +1497,7 @@
}
timeZoneReplacements {
replacedId: "Asia/Khandyga"
- replacementId: "Asia/Chita"
+ replacementId: "Asia/Yakutsk"
fromMillis: 1315832400000
}
timeZoneReplacements {
@@ -1517,7 +1517,7 @@
}
timeZoneReplacements {
replacedId: "Europe/Astrakhan"
- replacementId: "Europe/Saratov"
+ replacementId: "Europe/Ulyanovsk"
fromMillis: 701823600000
}
}
@@ -1704,7 +1704,7 @@
}
timeZoneReplacements {
replacedId: "Europe/Uzhgorod"
- replacementId: "Europe/Kiev"
+ replacementId: "Europe/Zaporozhye"
fromMillis: 686091600000
}
}
@@ -1830,7 +1830,7 @@
}
timeZoneReplacements {
replacedId: "America/Indiana/Petersburg"
- replacementId: "America/New_York"
+ replacementId: "America/Indiana/Vincennes"
fromMillis: 247042800000
}
timeZoneReplacements {
@@ -1840,12 +1840,12 @@
}
timeZoneReplacements {
replacedId: "America/Indiana/Vevay"
- replacementId: "America/New_York"
+ replacementId: "America/Indiana/Indianapolis"
fromMillis: 89186400000
}
timeZoneReplacements {
replacedId: "America/Indiana/Marengo"
- replacementId: "America/New_York"
+ replacementId: "America/Indiana/Indianapolis"
fromMillis: 183535200000
}
timeZoneReplacements {
@@ -1860,7 +1860,7 @@
}
timeZoneReplacements {
replacedId: "America/Indiana/Knox"
- replacementId: "America/Chicago"
+ replacementId: "America/Indiana/Tell_City"
fromMillis: 688546800000
}
timeZoneReplacements {
@@ -1880,7 +1880,7 @@
}
timeZoneReplacements {
replacedId: "America/Boise"
- replacementId: "America/Phoenix"
+ replacementId: "America/Denver"
fromMillis: 129114000000
}
timeZoneReplacements {
@@ -1890,7 +1890,7 @@
}
timeZoneReplacements {
replacedId: "America/Sitka"
- replacementId: "America/Anchorage"
+ replacementId: "America/Juneau"
fromMillis: 341402400000
}
timeZoneReplacements {
@@ -1905,7 +1905,7 @@
}
timeZoneReplacements {
replacedId: "America/Yakutat"
- replacementId: "America/Anchorage"
+ replacementId: "America/Juneau"
fromMillis: 436356000000
}
}
diff --git a/output_data/android/tzlookup.xml b/output_data/android/tzlookup.xml
index a3e15b7..a41aee4 100644
--- a/output_data/android/tzlookup.xml
+++ b/output_data/android/tzlookup.xml
@@ -45,13 +45,13 @@
<id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Cordoba,America/Rosario">America/Argentina/Cordoba</id>
<id notafter="1237082400000" repl="America/Argentina/Buenos_Aires" alts="America/Mendoza">America/Argentina/Mendoza</id>
<id notafter="1087099200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Tucuman</id>
- <id notafter="1096171200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Salta</id>
- <id notafter="1090728000000" repl="America/Argentina/Buenos_Aires">America/Argentina/San_Juan</id>
- <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Jujuy">America/Argentina/Jujuy</id>
- <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
- <id notafter="687931200000" repl="America/Argentina/Buenos_Aires">America/Argentina/La_Rioja</id>
- <id notafter="673588800000" repl="America/Argentina/Buenos_Aires">America/Argentina/Rio_Gallegos</id>
- <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires">America/Argentina/Ushuaia</id>
+ <id notafter="1096171200000" repl="America/Argentina/Mendoza">America/Argentina/Salta</id>
+ <id notafter="1090728000000" repl="America/Argentina/Salta">America/Argentina/San_Juan</id>
+ <id notafter="687931200000" repl="America/Argentina/Salta" alts="America/Jujuy">America/Argentina/Jujuy</id>
+ <id notafter="1087704000000" repl="America/Argentina/Salta" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
+ <id notafter="687931200000" repl="America/Argentina/Catamarca">America/Argentina/La_Rioja</id>
+ <id notafter="673588800000" repl="America/Argentina/La_Rioja">America/Argentina/Rio_Gallegos</id>
+ <id notafter="1087704000000" repl="America/Argentina/Salta">America/Argentina/Ushuaia</id>
<id>America/Argentina/San_Luis</id>
</country>
<country code="as" default="Pacific/Pago_Pago" everutc="n">
@@ -64,7 +64,7 @@
<id alts="Australia/ACT,Australia/Canberra,Australia/NSW">Australia/Sydney</id>
<id notafter="796147200000" repl="Australia/Sydney" alts="Australia/Victoria">Australia/Melbourne</id>
<id notafter="1193500800000" repl="Australia/Sydney" alts="Australia/Tasmania">Australia/Hobart</id>
- <id notafter="37728000000" repl="Australia/Sydney">Australia/Currie</id>
+ <id notafter="37728000000" repl="Australia/Hobart">Australia/Currie</id>
<id alts="Australia/Queensland">Australia/Brisbane</id>
<id notafter="762883200000" repl="Australia/Brisbane">Australia/Lindeman</id>
<id notafter="1286035200000" repl="Australia/Sydney">Antarctica/Macquarie</id>
@@ -130,15 +130,15 @@
<id alts="Brazil/DeNoronha">America/Noronha</id>
<id alts="Brazil/East">America/Sao_Paulo</id>
<id notafter="1550368800000" repl="America/Sao_Paulo">America/Bahia</id>
- <id notafter="1214280000000" repl="America/Sao_Paulo">America/Santarem</id>
- <id notafter="1330221600000" repl="America/Sao_Paulo">America/Recife</id>
- <id notafter="972180000000" repl="America/Sao_Paulo">America/Fortaleza</id>
- <id notafter="1013911200000" repl="America/Sao_Paulo">America/Belem</id>
- <id notafter="824004000000" repl="America/Sao_Paulo">America/Maceio</id>
- <id notafter="1361066400000" repl="America/Sao_Paulo">America/Araguaina</id>
+ <id notafter="1214280000000" repl="America/Recife">America/Santarem</id>
+ <id notafter="1330221600000" repl="America/Bahia">America/Recife</id>
+ <id notafter="972180000000" repl="America/Recife">America/Fortaleza</id>
+ <id notafter="1013911200000" repl="America/Recife">America/Belem</id>
+ <id notafter="824004000000" repl="America/Fortaleza">America/Maceio</id>
+ <id notafter="1361066400000" repl="America/Bahia">America/Araguaina</id>
<id alts="Brazil/West">America/Manaus</id>
<id notafter="1550372400000" repl="America/Manaus">America/Cuiaba</id>
- <id notafter="1076814000000" repl="America/Manaus">America/Campo_Grande</id>
+ <id notafter="1076814000000" repl="America/Cuiaba">America/Campo_Grande</id>
<id notafter="761713200000" repl="America/Manaus">America/Porto_Velho</id>
<id notafter="971578800000" repl="America/Manaus">America/Boa_Vista</id>
<id alts="America/Porto_Acre,Brazil/Acre">America/Rio_Branco</id>
@@ -172,21 +172,21 @@
<id>America/Blanc-Sablon</id>
<id notafter="120636000000" repl="America/Toronto">America/Thunder_Bay</id>
<id notafter="972802800000" repl="America/Toronto">America/Iqaluit</id>
- <id notafter="89186400000" repl="America/Toronto">America/Nipigon</id>
- <id notafter="796806000000" repl="America/Toronto">America/Pangnirtung</id>
+ <id notafter="89186400000" repl="America/Thunder_Bay">America/Nipigon</id>
+ <id notafter="796806000000" repl="America/Iqaluit">America/Pangnirtung</id>
<id alts="America/Coral_Harbour">America/Atikokan</id>
<id alts="Canada/Saskatchewan">America/Regina</id>
- <id notafter="73472400000" repl="America/Winnipeg">America/Swift_Current</id>
+ <id notafter="73472400000" repl="America/Regina">America/Swift_Current</id>
<id notafter="1130659200000" repl="America/Winnipeg">America/Rankin_Inlet</id>
- <id notafter="986112000000" repl="America/Winnipeg">America/Rainy_River</id>
+ <id notafter="986112000000" repl="America/Rankin_Inlet">America/Rainy_River</id>
<id notafter="1173600000000" repl="America/Winnipeg">America/Resolute</id>
<id notafter="309945600000" repl="America/Edmonton">America/Yellowknife</id>
- <id notafter="1604214000000" repl="America/Edmonton">America/Dawson_Creek</id>
- <id notafter="84013200000" repl="America/Edmonton">America/Creston</id>
- <id notafter="1425808800000" repl="America/Edmonton">America/Fort_Nelson</id>
- <id notafter="294228000000" repl="America/Edmonton">America/Inuvik</id>
+ <id notafter="1604214000000" repl="America/Whitehorse">America/Dawson_Creek</id>
+ <id notafter="84013200000" repl="America/Dawson_Creek">America/Creston</id>
+ <id notafter="1425808800000" repl="America/Dawson_Creek">America/Fort_Nelson</id>
+ <id notafter="294228000000" repl="America/Yellowknife">America/Inuvik</id>
<id notafter="986115600000" repl="America/Edmonton">America/Cambridge_Bay</id>
- <id notafter="120646800000" repl="America/Edmonton">America/Dawson</id>
+ <id notafter="120646800000" repl="America/Whitehorse">America/Dawson</id>
<id alts="Canada/Yukon">America/Whitehorse</id>
</country>
<country code="cc" default="Indian/Cocos" everutc="n">
@@ -698,7 +698,7 @@
<id notafter="1315828800000" repl="Asia/Vladivostok">Asia/Ust-Nera</id>
<id>Asia/Chita</id>
<id notafter="1459015200000" repl="Asia/Chita">Asia/Yakutsk</id>
- <id notafter="1315832400000" repl="Asia/Chita">Asia/Khandyga</id>
+ <id notafter="1315832400000" repl="Asia/Yakutsk">Asia/Khandyga</id>
<id>Asia/Irkutsk</id>
<id>Asia/Krasnoyarsk</id>
<id notafter="1459022400000" repl="Asia/Krasnoyarsk">Asia/Novokuznetsk</id>
@@ -710,7 +710,7 @@
<id>Europe/Samara</id>
<id>Europe/Saratov</id>
<id notafter="1480806000000" repl="Europe/Saratov">Europe/Ulyanovsk</id>
- <id notafter="701823600000" repl="Europe/Saratov">Europe/Astrakhan</id>
+ <id notafter="701823600000" repl="Europe/Ulyanovsk">Europe/Astrakhan</id>
<id>Europe/Volgograd</id>
<id alts="W-SU">Europe/Moscow</id>
<id>Europe/Kirov</id>
@@ -833,7 +833,7 @@
<country code="ua" default="Europe/Kiev" everutc="n">
<id>Europe/Kiev</id>
<id notafter="686102400000" repl="Europe/Kiev">Europe/Zaporozhye</id>
- <id notafter="686091600000" repl="Europe/Kiev">Europe/Uzhgorod</id>
+ <id notafter="686091600000" repl="Europe/Zaporozhye">Europe/Uzhgorod</id>
<id picker="n">Europe/Simferopol</id>
</country>
<country code="ug" default="Africa/Kampala" everutc="n">
@@ -850,27 +850,27 @@
<id notafter="1130652000000" repl="America/New_York" alts="America/Fort_Wayne,America/Indianapolis,US/East-Indiana">America/Indiana/Indianapolis</id>
<id notafter="1194159600000" repl="America/New_York">America/Indiana/Vincennes</id>
<id notafter="972802800000" repl="America/New_York">America/Kentucky/Monticello</id>
- <id notafter="247042800000" repl="America/New_York">America/Indiana/Petersburg</id>
+ <id notafter="247042800000" repl="America/Indiana/Vincennes">America/Indiana/Petersburg</id>
<id notafter="1173600000000" repl="America/New_York">America/Indiana/Winamac</id>
- <id notafter="89186400000" repl="America/New_York">America/Indiana/Vevay</id>
- <id notafter="183535200000" repl="America/New_York">America/Indiana/Marengo</id>
+ <id notafter="89186400000" repl="America/Indiana/Indianapolis">America/Indiana/Vevay</id>
+ <id notafter="183535200000" repl="America/Indiana/Indianapolis">America/Indiana/Marengo</id>
<id alts="US/Central">America/Chicago</id>
<id notafter="104918400000" repl="America/Chicago">America/Menominee</id>
<id notafter="1143964800000" repl="America/Chicago">America/Indiana/Tell_City</id>
- <id notafter="688546800000" repl="America/Chicago" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
+ <id notafter="688546800000" repl="America/Indiana/Tell_City" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
<id notafter="1289116800000" repl="America/Chicago">America/North_Dakota/Beulah</id>
<id notafter="1067155200000" repl="America/Chicago">America/North_Dakota/New_Salem</id>
<id notafter="720000000000" repl="America/Chicago">America/North_Dakota/Center</id>
<id alts="America/Shiprock,Navajo,US/Mountain">America/Denver</id>
<id alts="US/Arizona">America/Phoenix</id>
- <id notafter="129114000000" repl="America/Phoenix">America/Boise</id>
+ <id notafter="129114000000" repl="America/Denver">America/Boise</id>
<id alts="US/Pacific">America/Los_Angeles</id>
<id alts="US/Alaska">America/Anchorage</id>
<id notafter="436359600000" repl="America/Anchorage">America/Juneau</id>
- <id notafter="341402400000" repl="America/Anchorage">America/Sitka</id>
+ <id notafter="341402400000" repl="America/Juneau">America/Sitka</id>
<id notafter="436363200000" repl="America/Anchorage">America/Nome</id>
<id notafter="1547978400000" repl="America/Anchorage">America/Metlakatla</id>
- <id notafter="436356000000" repl="America/Anchorage">America/Yakutat</id>
+ <id notafter="436356000000" repl="America/Juneau">America/Yakutat</id>
<id alts="Pacific/Johnston,US/Hawaii">Pacific/Honolulu</id>
<id alts="America/Atka,US/Aleutian">America/Adak</id>
</country>
diff --git a/output_data/distro/distro.zip b/output_data/distro/distro.zip
index 05d8697..f6ec8fb 100644
--- a/output_data/distro/distro.zip
+++ b/output_data/distro/distro.zip
Binary files differ
diff --git a/testing/data/test1/output_data/android/tzlookup.xml b/testing/data/test1/output_data/android/tzlookup.xml
index e70c285..328ff79 100644
--- a/testing/data/test1/output_data/android/tzlookup.xml
+++ b/testing/data/test1/output_data/android/tzlookup.xml
@@ -45,13 +45,13 @@
<id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Cordoba,America/Rosario">America/Argentina/Cordoba</id>
<id notafter="1237082400000" repl="America/Argentina/Buenos_Aires" alts="America/Mendoza">America/Argentina/Mendoza</id>
<id notafter="1087099200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Tucuman</id>
- <id notafter="1096171200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Salta</id>
- <id notafter="1090728000000" repl="America/Argentina/Buenos_Aires">America/Argentina/San_Juan</id>
- <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Jujuy">America/Argentina/Jujuy</id>
- <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
- <id notafter="687931200000" repl="America/Argentina/Buenos_Aires">America/Argentina/La_Rioja</id>
- <id notafter="673588800000" repl="America/Argentina/Buenos_Aires">America/Argentina/Rio_Gallegos</id>
- <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires">America/Argentina/Ushuaia</id>
+ <id notafter="1096171200000" repl="America/Argentina/Mendoza">America/Argentina/Salta</id>
+ <id notafter="1090728000000" repl="America/Argentina/Salta">America/Argentina/San_Juan</id>
+ <id notafter="687931200000" repl="America/Argentina/Salta" alts="America/Jujuy">America/Argentina/Jujuy</id>
+ <id notafter="1087704000000" repl="America/Argentina/Salta" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
+ <id notafter="687931200000" repl="America/Argentina/Catamarca">America/Argentina/La_Rioja</id>
+ <id notafter="673588800000" repl="America/Argentina/La_Rioja">America/Argentina/Rio_Gallegos</id>
+ <id notafter="1087704000000" repl="America/Argentina/Salta">America/Argentina/Ushuaia</id>
<id>America/Argentina/San_Luis</id>
</country>
<country code="as" default="Pacific/Pago_Pago" everutc="n">
@@ -64,7 +64,7 @@
<id alts="Australia/ACT,Australia/Canberra,Australia/NSW">Australia/Sydney</id>
<id notafter="796147200000" repl="Australia/Sydney" alts="Australia/Victoria">Australia/Melbourne</id>
<id notafter="1193500800000" repl="Australia/Sydney" alts="Australia/Tasmania">Australia/Hobart</id>
- <id notafter="37728000000" repl="Australia/Sydney">Australia/Currie</id>
+ <id notafter="37728000000" repl="Australia/Hobart">Australia/Currie</id>
<id alts="Australia/Queensland">Australia/Brisbane</id>
<id notafter="762883200000" repl="Australia/Brisbane">Australia/Lindeman</id>
<id notafter="1286035200000" repl="Australia/Sydney">Antarctica/Macquarie</id>
@@ -130,15 +130,15 @@
<id alts="Brazil/DeNoronha">America/Noronha</id>
<id alts="Brazil/East">America/Sao_Paulo</id>
<id notafter="1550368800000" repl="America/Sao_Paulo">America/Bahia</id>
- <id notafter="1214280000000" repl="America/Sao_Paulo">America/Santarem</id>
- <id notafter="1330221600000" repl="America/Sao_Paulo">America/Recife</id>
- <id notafter="972180000000" repl="America/Sao_Paulo">America/Fortaleza</id>
- <id notafter="1013911200000" repl="America/Sao_Paulo">America/Belem</id>
- <id notafter="824004000000" repl="America/Sao_Paulo">America/Maceio</id>
- <id notafter="1361066400000" repl="America/Sao_Paulo">America/Araguaina</id>
+ <id notafter="1214280000000" repl="America/Recife">America/Santarem</id>
+ <id notafter="1330221600000" repl="America/Bahia">America/Recife</id>
+ <id notafter="972180000000" repl="America/Recife">America/Fortaleza</id>
+ <id notafter="1013911200000" repl="America/Recife">America/Belem</id>
+ <id notafter="824004000000" repl="America/Fortaleza">America/Maceio</id>
+ <id notafter="1361066400000" repl="America/Bahia">America/Araguaina</id>
<id alts="Brazil/West">America/Manaus</id>
<id notafter="1550372400000" repl="America/Manaus">America/Cuiaba</id>
- <id notafter="1076814000000" repl="America/Manaus">America/Campo_Grande</id>
+ <id notafter="1076814000000" repl="America/Cuiaba">America/Campo_Grande</id>
<id notafter="761713200000" repl="America/Manaus">America/Porto_Velho</id>
<id notafter="971578800000" repl="America/Manaus">America/Boa_Vista</id>
<id alts="America/Porto_Acre,Brazil/Acre">America/Rio_Branco</id>
@@ -172,21 +172,21 @@
<id>America/Blanc-Sablon</id>
<id notafter="120636000000" repl="America/Toronto">America/Thunder_Bay</id>
<id notafter="972802800000" repl="America/Toronto">America/Iqaluit</id>
- <id notafter="89186400000" repl="America/Toronto">America/Nipigon</id>
- <id notafter="796806000000" repl="America/Toronto">America/Pangnirtung</id>
+ <id notafter="89186400000" repl="America/Thunder_Bay">America/Nipigon</id>
+ <id notafter="796806000000" repl="America/Iqaluit">America/Pangnirtung</id>
<id alts="America/Coral_Harbour">America/Atikokan</id>
<id alts="Canada/Saskatchewan">America/Regina</id>
- <id notafter="73472400000" repl="America/Winnipeg">America/Swift_Current</id>
+ <id notafter="73472400000" repl="America/Regina">America/Swift_Current</id>
<id notafter="1130659200000" repl="America/Winnipeg">America/Rankin_Inlet</id>
- <id notafter="986112000000" repl="America/Winnipeg">America/Rainy_River</id>
+ <id notafter="986112000000" repl="America/Rankin_Inlet">America/Rainy_River</id>
<id notafter="1173600000000" repl="America/Winnipeg">America/Resolute</id>
<id notafter="309945600000" repl="America/Edmonton">America/Yellowknife</id>
- <id notafter="1604214000000" repl="America/Edmonton">America/Dawson_Creek</id>
- <id notafter="84013200000" repl="America/Edmonton">America/Creston</id>
- <id notafter="1425808800000" repl="America/Edmonton">America/Fort_Nelson</id>
- <id notafter="294228000000" repl="America/Edmonton">America/Inuvik</id>
+ <id notafter="1604214000000" repl="America/Whitehorse">America/Dawson_Creek</id>
+ <id notafter="84013200000" repl="America/Dawson_Creek">America/Creston</id>
+ <id notafter="1425808800000" repl="America/Dawson_Creek">America/Fort_Nelson</id>
+ <id notafter="294228000000" repl="America/Yellowknife">America/Inuvik</id>
<id notafter="986115600000" repl="America/Edmonton">America/Cambridge_Bay</id>
- <id notafter="120646800000" repl="America/Edmonton">America/Dawson</id>
+ <id notafter="120646800000" repl="America/Whitehorse">America/Dawson</id>
<id alts="Canada/Yukon">America/Whitehorse</id>
</country>
<country code="cc" default="Indian/Cocos" everutc="n">
@@ -698,7 +698,7 @@
<id notafter="1315828800000" repl="Asia/Vladivostok">Asia/Ust-Nera</id>
<id>Asia/Chita</id>
<id notafter="1459015200000" repl="Asia/Chita">Asia/Yakutsk</id>
- <id notafter="1315832400000" repl="Asia/Chita">Asia/Khandyga</id>
+ <id notafter="1315832400000" repl="Asia/Yakutsk">Asia/Khandyga</id>
<id>Asia/Irkutsk</id>
<id>Asia/Krasnoyarsk</id>
<id notafter="1459022400000" repl="Asia/Krasnoyarsk">Asia/Novokuznetsk</id>
@@ -710,7 +710,7 @@
<id>Europe/Samara</id>
<id>Europe/Saratov</id>
<id notafter="1480806000000" repl="Europe/Saratov">Europe/Ulyanovsk</id>
- <id notafter="701823600000" repl="Europe/Saratov">Europe/Astrakhan</id>
+ <id notafter="701823600000" repl="Europe/Ulyanovsk">Europe/Astrakhan</id>
<id>Europe/Volgograd</id>
<id alts="W-SU">Europe/Moscow</id>
<id>Europe/Kirov</id>
@@ -833,7 +833,7 @@
<country code="ua" default="Europe/Kiev" everutc="n">
<id>Europe/Kiev</id>
<id notafter="686102400000" repl="Europe/Kiev">Europe/Zaporozhye</id>
- <id notafter="686091600000" repl="Europe/Kiev">Europe/Uzhgorod</id>
+ <id notafter="686091600000" repl="Europe/Zaporozhye">Europe/Uzhgorod</id>
<id picker="n">Europe/Simferopol</id>
</country>
<country code="ug" default="Africa/Kampala" everutc="n">
@@ -850,27 +850,27 @@
<id notafter="1130652000000" repl="America/New_York" alts="America/Fort_Wayne,America/Indianapolis,US/East-Indiana">America/Indiana/Indianapolis</id>
<id notafter="1194159600000" repl="America/New_York">America/Indiana/Vincennes</id>
<id notafter="972802800000" repl="America/New_York">America/Kentucky/Monticello</id>
- <id notafter="247042800000" repl="America/New_York">America/Indiana/Petersburg</id>
+ <id notafter="247042800000" repl="America/Indiana/Vincennes">America/Indiana/Petersburg</id>
<id notafter="1173600000000" repl="America/New_York">America/Indiana/Winamac</id>
- <id notafter="89186400000" repl="America/New_York">America/Indiana/Vevay</id>
- <id notafter="183535200000" repl="America/New_York">America/Indiana/Marengo</id>
+ <id notafter="89186400000" repl="America/Indiana/Indianapolis">America/Indiana/Vevay</id>
+ <id notafter="183535200000" repl="America/Indiana/Indianapolis">America/Indiana/Marengo</id>
<id alts="US/Central">America/Chicago</id>
<id notafter="104918400000" repl="America/Chicago">America/Menominee</id>
<id notafter="1143964800000" repl="America/Chicago">America/Indiana/Tell_City</id>
- <id notafter="688546800000" repl="America/Chicago" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
+ <id notafter="688546800000" repl="America/Indiana/Tell_City" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
<id notafter="1289116800000" repl="America/Chicago">America/North_Dakota/Beulah</id>
<id notafter="1067155200000" repl="America/Chicago">America/North_Dakota/New_Salem</id>
<id notafter="720000000000" repl="America/Chicago">America/North_Dakota/Center</id>
<id alts="America/Shiprock,Navajo,US/Mountain">America/Denver</id>
<id alts="US/Arizona">America/Phoenix</id>
- <id notafter="129114000000" repl="America/Phoenix">America/Boise</id>
+ <id notafter="129114000000" repl="America/Denver">America/Boise</id>
<id alts="US/Pacific">America/Los_Angeles</id>
<id alts="US/Alaska">America/Anchorage</id>
<id notafter="436359600000" repl="America/Anchorage">America/Juneau</id>
- <id notafter="341402400000" repl="America/Anchorage">America/Sitka</id>
+ <id notafter="341402400000" repl="America/Juneau">America/Sitka</id>
<id notafter="436363200000" repl="America/Anchorage">America/Nome</id>
<id notafter="1547978400000" repl="America/Anchorage">America/Metlakatla</id>
- <id notafter="436356000000" repl="America/Anchorage">America/Yakutat</id>
+ <id notafter="436356000000" repl="America/Juneau">America/Yakutat</id>
<id alts="Pacific/Johnston,US/Hawaii">Pacific/Honolulu</id>
<id alts="America/Atka,US/Aleutian">America/Adak</id>
</country>
diff --git a/testing/data/test1/output_data/distro/distro.zip b/testing/data/test1/output_data/distro/distro.zip
index a829101..a88c2c2 100644
--- a/testing/data/test1/output_data/distro/distro.zip
+++ b/testing/data/test1/output_data/distro/distro.zip
Binary files differ
diff --git a/testing/data/test2/output_data/android/tzlookup.xml b/testing/data/test2/output_data/android/tzlookup.xml
index 5f453a8..f997f3f 100644
--- a/testing/data/test2/output_data/android/tzlookup.xml
+++ b/testing/data/test2/output_data/android/tzlookup.xml
@@ -45,13 +45,13 @@
<id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Cordoba,America/Rosario">America/Argentina/Cordoba</id>
<id notafter="1237082400000" repl="America/Argentina/Buenos_Aires" alts="America/Mendoza">America/Argentina/Mendoza</id>
<id notafter="1087099200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Tucuman</id>
- <id notafter="1096171200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Salta</id>
- <id notafter="1090728000000" repl="America/Argentina/Buenos_Aires">America/Argentina/San_Juan</id>
- <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Jujuy">America/Argentina/Jujuy</id>
- <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
- <id notafter="687931200000" repl="America/Argentina/Buenos_Aires">America/Argentina/La_Rioja</id>
- <id notafter="673588800000" repl="America/Argentina/Buenos_Aires">America/Argentina/Rio_Gallegos</id>
- <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires">America/Argentina/Ushuaia</id>
+ <id notafter="1096171200000" repl="America/Argentina/Mendoza">America/Argentina/Salta</id>
+ <id notafter="1090728000000" repl="America/Argentina/Salta">America/Argentina/San_Juan</id>
+ <id notafter="687931200000" repl="America/Argentina/Salta" alts="America/Jujuy">America/Argentina/Jujuy</id>
+ <id notafter="1087704000000" repl="America/Argentina/Salta" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
+ <id notafter="687931200000" repl="America/Argentina/Catamarca">America/Argentina/La_Rioja</id>
+ <id notafter="673588800000" repl="America/Argentina/La_Rioja">America/Argentina/Rio_Gallegos</id>
+ <id notafter="1087704000000" repl="America/Argentina/Salta">America/Argentina/Ushuaia</id>
<id>America/Argentina/San_Luis</id>
</country>
<country code="as" default="Pacific/Pago_Pago" everutc="n">
@@ -64,7 +64,7 @@
<id alts="Australia/ACT,Australia/Canberra,Australia/NSW">Australia/Sydney</id>
<id notafter="796147200000" repl="Australia/Sydney" alts="Australia/Victoria">Australia/Melbourne</id>
<id notafter="1193500800000" repl="Australia/Sydney" alts="Australia/Tasmania">Australia/Hobart</id>
- <id notafter="37728000000" repl="Australia/Sydney">Australia/Currie</id>
+ <id notafter="37728000000" repl="Australia/Hobart">Australia/Currie</id>
<id alts="Australia/Queensland">Australia/Brisbane</id>
<id notafter="762883200000" repl="Australia/Brisbane">Australia/Lindeman</id>
<id notafter="1286035200000" repl="Australia/Sydney">Antarctica/Macquarie</id>
@@ -130,15 +130,15 @@
<id alts="Brazil/DeNoronha">America/Noronha</id>
<id alts="Brazil/East">America/Sao_Paulo</id>
<id notafter="1550368800000" repl="America/Sao_Paulo">America/Bahia</id>
- <id notafter="1214280000000" repl="America/Sao_Paulo">America/Santarem</id>
- <id notafter="1330221600000" repl="America/Sao_Paulo">America/Recife</id>
- <id notafter="972180000000" repl="America/Sao_Paulo">America/Fortaleza</id>
- <id notafter="1013911200000" repl="America/Sao_Paulo">America/Belem</id>
- <id notafter="824004000000" repl="America/Sao_Paulo">America/Maceio</id>
- <id notafter="1361066400000" repl="America/Sao_Paulo">America/Araguaina</id>
+ <id notafter="1214280000000" repl="America/Recife">America/Santarem</id>
+ <id notafter="1330221600000" repl="America/Bahia">America/Recife</id>
+ <id notafter="972180000000" repl="America/Recife">America/Fortaleza</id>
+ <id notafter="1013911200000" repl="America/Recife">America/Belem</id>
+ <id notafter="824004000000" repl="America/Fortaleza">America/Maceio</id>
+ <id notafter="1361066400000" repl="America/Bahia">America/Araguaina</id>
<id alts="Brazil/West">America/Manaus</id>
<id notafter="1550372400000" repl="America/Manaus">America/Cuiaba</id>
- <id notafter="1076814000000" repl="America/Manaus">America/Campo_Grande</id>
+ <id notafter="1076814000000" repl="America/Cuiaba">America/Campo_Grande</id>
<id notafter="761713200000" repl="America/Manaus">America/Porto_Velho</id>
<id notafter="971578800000" repl="America/Manaus">America/Boa_Vista</id>
<id alts="America/Porto_Acre,Brazil/Acre">America/Rio_Branco</id>
@@ -172,21 +172,21 @@
<id>America/Blanc-Sablon</id>
<id notafter="120636000000" repl="America/Toronto">America/Thunder_Bay</id>
<id notafter="972802800000" repl="America/Toronto">America/Iqaluit</id>
- <id notafter="89186400000" repl="America/Toronto">America/Nipigon</id>
- <id notafter="796806000000" repl="America/Toronto">America/Pangnirtung</id>
+ <id notafter="89186400000" repl="America/Thunder_Bay">America/Nipigon</id>
+ <id notafter="796806000000" repl="America/Iqaluit">America/Pangnirtung</id>
<id alts="America/Coral_Harbour">America/Atikokan</id>
<id alts="Canada/Saskatchewan">America/Regina</id>
- <id notafter="73472400000" repl="America/Winnipeg">America/Swift_Current</id>
+ <id notafter="73472400000" repl="America/Regina">America/Swift_Current</id>
<id notafter="1130659200000" repl="America/Winnipeg">America/Rankin_Inlet</id>
- <id notafter="986112000000" repl="America/Winnipeg">America/Rainy_River</id>
+ <id notafter="986112000000" repl="America/Rankin_Inlet">America/Rainy_River</id>
<id notafter="1173600000000" repl="America/Winnipeg">America/Resolute</id>
<id notafter="309945600000" repl="America/Edmonton">America/Yellowknife</id>
- <id notafter="1604214000000" repl="America/Edmonton">America/Dawson_Creek</id>
- <id notafter="84013200000" repl="America/Edmonton">America/Creston</id>
- <id notafter="1425808800000" repl="America/Edmonton">America/Fort_Nelson</id>
- <id notafter="294228000000" repl="America/Edmonton">America/Inuvik</id>
+ <id notafter="1604214000000" repl="America/Whitehorse">America/Dawson_Creek</id>
+ <id notafter="84013200000" repl="America/Dawson_Creek">America/Creston</id>
+ <id notafter="1425808800000" repl="America/Dawson_Creek">America/Fort_Nelson</id>
+ <id notafter="294228000000" repl="America/Yellowknife">America/Inuvik</id>
<id notafter="986115600000" repl="America/Edmonton">America/Cambridge_Bay</id>
- <id notafter="120646800000" repl="America/Edmonton">America/Dawson</id>
+ <id notafter="120646800000" repl="America/Whitehorse">America/Dawson</id>
<id alts="Canada/Yukon">America/Whitehorse</id>
</country>
<country code="cc" default="Indian/Cocos" everutc="n">
@@ -698,7 +698,7 @@
<id notafter="1315828800000" repl="Asia/Vladivostok">Asia/Ust-Nera</id>
<id>Asia/Chita</id>
<id notafter="1459015200000" repl="Asia/Chita">Asia/Yakutsk</id>
- <id notafter="1315832400000" repl="Asia/Chita">Asia/Khandyga</id>
+ <id notafter="1315832400000" repl="Asia/Yakutsk">Asia/Khandyga</id>
<id>Asia/Irkutsk</id>
<id>Asia/Krasnoyarsk</id>
<id notafter="1459022400000" repl="Asia/Krasnoyarsk">Asia/Novokuznetsk</id>
@@ -710,7 +710,7 @@
<id>Europe/Samara</id>
<id>Europe/Saratov</id>
<id notafter="1480806000000" repl="Europe/Saratov">Europe/Ulyanovsk</id>
- <id notafter="701823600000" repl="Europe/Saratov">Europe/Astrakhan</id>
+ <id notafter="701823600000" repl="Europe/Ulyanovsk">Europe/Astrakhan</id>
<id>Europe/Volgograd</id>
<id alts="W-SU">Europe/Moscow</id>
<id>Europe/Kirov</id>
@@ -833,7 +833,7 @@
<country code="ua" default="Europe/Kiev" everutc="n">
<id>Europe/Kiev</id>
<id notafter="686102400000" repl="Europe/Kiev">Europe/Zaporozhye</id>
- <id notafter="686091600000" repl="Europe/Kiev">Europe/Uzhgorod</id>
+ <id notafter="686091600000" repl="Europe/Zaporozhye">Europe/Uzhgorod</id>
<id picker="n">Europe/Simferopol</id>
</country>
<country code="ug" default="Africa/Kampala" everutc="n">
@@ -850,27 +850,27 @@
<id notafter="1130652000000" repl="America/New_York" alts="America/Fort_Wayne,America/Indianapolis,US/East-Indiana">America/Indiana/Indianapolis</id>
<id notafter="1194159600000" repl="America/New_York">America/Indiana/Vincennes</id>
<id notafter="972802800000" repl="America/New_York">America/Kentucky/Monticello</id>
- <id notafter="247042800000" repl="America/New_York">America/Indiana/Petersburg</id>
+ <id notafter="247042800000" repl="America/Indiana/Vincennes">America/Indiana/Petersburg</id>
<id notafter="1173600000000" repl="America/New_York">America/Indiana/Winamac</id>
- <id notafter="89186400000" repl="America/New_York">America/Indiana/Vevay</id>
- <id notafter="183535200000" repl="America/New_York">America/Indiana/Marengo</id>
+ <id notafter="89186400000" repl="America/Indiana/Indianapolis">America/Indiana/Vevay</id>
+ <id notafter="183535200000" repl="America/Indiana/Indianapolis">America/Indiana/Marengo</id>
<id alts="US/Central">America/Chicago</id>
<id notafter="104918400000" repl="America/Chicago">America/Menominee</id>
<id notafter="1143964800000" repl="America/Chicago">America/Indiana/Tell_City</id>
- <id notafter="688546800000" repl="America/Chicago" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
+ <id notafter="688546800000" repl="America/Indiana/Tell_City" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
<id notafter="1289116800000" repl="America/Chicago">America/North_Dakota/Beulah</id>
<id notafter="1067155200000" repl="America/Chicago">America/North_Dakota/New_Salem</id>
<id notafter="720000000000" repl="America/Chicago">America/North_Dakota/Center</id>
<id alts="America/Shiprock,Navajo,US/Mountain">America/Denver</id>
<id alts="US/Arizona">America/Phoenix</id>
- <id notafter="129114000000" repl="America/Phoenix">America/Boise</id>
+ <id notafter="129114000000" repl="America/Denver">America/Boise</id>
<id alts="US/Pacific">America/Los_Angeles</id>
<id alts="US/Alaska">America/Anchorage</id>
<id notafter="436359600000" repl="America/Anchorage">America/Juneau</id>
- <id notafter="341402400000" repl="America/Anchorage">America/Sitka</id>
+ <id notafter="341402400000" repl="America/Juneau">America/Sitka</id>
<id notafter="436363200000" repl="America/Anchorage">America/Nome</id>
<id notafter="1547978400000" repl="America/Anchorage">America/Metlakatla</id>
- <id notafter="436356000000" repl="America/Anchorage">America/Yakutat</id>
+ <id notafter="436356000000" repl="America/Juneau">America/Yakutat</id>
<id alts="Pacific/Johnston,US/Hawaii">Pacific/Honolulu</id>
<id alts="America/Atka,US/Aleutian">America/Adak</id>
</country>
diff --git a/testing/data/test2/output_data/distro/distro.zip b/testing/data/test2/output_data/distro/distro.zip
index c05baa4..fdc0f4c 100644
--- a/testing/data/test2/output_data/distro/distro.zip
+++ b/testing/data/test2/output_data/distro/distro.zip
Binary files differ
diff --git a/testing/data/test3/output_data/android/tzlookup.xml b/testing/data/test3/output_data/android/tzlookup.xml
index e70c285..328ff79 100644
--- a/testing/data/test3/output_data/android/tzlookup.xml
+++ b/testing/data/test3/output_data/android/tzlookup.xml
@@ -45,13 +45,13 @@
<id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Cordoba,America/Rosario">America/Argentina/Cordoba</id>
<id notafter="1237082400000" repl="America/Argentina/Buenos_Aires" alts="America/Mendoza">America/Argentina/Mendoza</id>
<id notafter="1087099200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Tucuman</id>
- <id notafter="1096171200000" repl="America/Argentina/Buenos_Aires">America/Argentina/Salta</id>
- <id notafter="1090728000000" repl="America/Argentina/Buenos_Aires">America/Argentina/San_Juan</id>
- <id notafter="687931200000" repl="America/Argentina/Buenos_Aires" alts="America/Jujuy">America/Argentina/Jujuy</id>
- <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
- <id notafter="687931200000" repl="America/Argentina/Buenos_Aires">America/Argentina/La_Rioja</id>
- <id notafter="673588800000" repl="America/Argentina/Buenos_Aires">America/Argentina/Rio_Gallegos</id>
- <id notafter="1087704000000" repl="America/Argentina/Buenos_Aires">America/Argentina/Ushuaia</id>
+ <id notafter="1096171200000" repl="America/Argentina/Mendoza">America/Argentina/Salta</id>
+ <id notafter="1090728000000" repl="America/Argentina/Salta">America/Argentina/San_Juan</id>
+ <id notafter="687931200000" repl="America/Argentina/Salta" alts="America/Jujuy">America/Argentina/Jujuy</id>
+ <id notafter="1087704000000" repl="America/Argentina/Salta" alts="America/Argentina/ComodRivadavia,America/Catamarca">America/Argentina/Catamarca</id>
+ <id notafter="687931200000" repl="America/Argentina/Catamarca">America/Argentina/La_Rioja</id>
+ <id notafter="673588800000" repl="America/Argentina/La_Rioja">America/Argentina/Rio_Gallegos</id>
+ <id notafter="1087704000000" repl="America/Argentina/Salta">America/Argentina/Ushuaia</id>
<id>America/Argentina/San_Luis</id>
</country>
<country code="as" default="Pacific/Pago_Pago" everutc="n">
@@ -64,7 +64,7 @@
<id alts="Australia/ACT,Australia/Canberra,Australia/NSW">Australia/Sydney</id>
<id notafter="796147200000" repl="Australia/Sydney" alts="Australia/Victoria">Australia/Melbourne</id>
<id notafter="1193500800000" repl="Australia/Sydney" alts="Australia/Tasmania">Australia/Hobart</id>
- <id notafter="37728000000" repl="Australia/Sydney">Australia/Currie</id>
+ <id notafter="37728000000" repl="Australia/Hobart">Australia/Currie</id>
<id alts="Australia/Queensland">Australia/Brisbane</id>
<id notafter="762883200000" repl="Australia/Brisbane">Australia/Lindeman</id>
<id notafter="1286035200000" repl="Australia/Sydney">Antarctica/Macquarie</id>
@@ -130,15 +130,15 @@
<id alts="Brazil/DeNoronha">America/Noronha</id>
<id alts="Brazil/East">America/Sao_Paulo</id>
<id notafter="1550368800000" repl="America/Sao_Paulo">America/Bahia</id>
- <id notafter="1214280000000" repl="America/Sao_Paulo">America/Santarem</id>
- <id notafter="1330221600000" repl="America/Sao_Paulo">America/Recife</id>
- <id notafter="972180000000" repl="America/Sao_Paulo">America/Fortaleza</id>
- <id notafter="1013911200000" repl="America/Sao_Paulo">America/Belem</id>
- <id notafter="824004000000" repl="America/Sao_Paulo">America/Maceio</id>
- <id notafter="1361066400000" repl="America/Sao_Paulo">America/Araguaina</id>
+ <id notafter="1214280000000" repl="America/Recife">America/Santarem</id>
+ <id notafter="1330221600000" repl="America/Bahia">America/Recife</id>
+ <id notafter="972180000000" repl="America/Recife">America/Fortaleza</id>
+ <id notafter="1013911200000" repl="America/Recife">America/Belem</id>
+ <id notafter="824004000000" repl="America/Fortaleza">America/Maceio</id>
+ <id notafter="1361066400000" repl="America/Bahia">America/Araguaina</id>
<id alts="Brazil/West">America/Manaus</id>
<id notafter="1550372400000" repl="America/Manaus">America/Cuiaba</id>
- <id notafter="1076814000000" repl="America/Manaus">America/Campo_Grande</id>
+ <id notafter="1076814000000" repl="America/Cuiaba">America/Campo_Grande</id>
<id notafter="761713200000" repl="America/Manaus">America/Porto_Velho</id>
<id notafter="971578800000" repl="America/Manaus">America/Boa_Vista</id>
<id alts="America/Porto_Acre,Brazil/Acre">America/Rio_Branco</id>
@@ -172,21 +172,21 @@
<id>America/Blanc-Sablon</id>
<id notafter="120636000000" repl="America/Toronto">America/Thunder_Bay</id>
<id notafter="972802800000" repl="America/Toronto">America/Iqaluit</id>
- <id notafter="89186400000" repl="America/Toronto">America/Nipigon</id>
- <id notafter="796806000000" repl="America/Toronto">America/Pangnirtung</id>
+ <id notafter="89186400000" repl="America/Thunder_Bay">America/Nipigon</id>
+ <id notafter="796806000000" repl="America/Iqaluit">America/Pangnirtung</id>
<id alts="America/Coral_Harbour">America/Atikokan</id>
<id alts="Canada/Saskatchewan">America/Regina</id>
- <id notafter="73472400000" repl="America/Winnipeg">America/Swift_Current</id>
+ <id notafter="73472400000" repl="America/Regina">America/Swift_Current</id>
<id notafter="1130659200000" repl="America/Winnipeg">America/Rankin_Inlet</id>
- <id notafter="986112000000" repl="America/Winnipeg">America/Rainy_River</id>
+ <id notafter="986112000000" repl="America/Rankin_Inlet">America/Rainy_River</id>
<id notafter="1173600000000" repl="America/Winnipeg">America/Resolute</id>
<id notafter="309945600000" repl="America/Edmonton">America/Yellowknife</id>
- <id notafter="1604214000000" repl="America/Edmonton">America/Dawson_Creek</id>
- <id notafter="84013200000" repl="America/Edmonton">America/Creston</id>
- <id notafter="1425808800000" repl="America/Edmonton">America/Fort_Nelson</id>
- <id notafter="294228000000" repl="America/Edmonton">America/Inuvik</id>
+ <id notafter="1604214000000" repl="America/Whitehorse">America/Dawson_Creek</id>
+ <id notafter="84013200000" repl="America/Dawson_Creek">America/Creston</id>
+ <id notafter="1425808800000" repl="America/Dawson_Creek">America/Fort_Nelson</id>
+ <id notafter="294228000000" repl="America/Yellowknife">America/Inuvik</id>
<id notafter="986115600000" repl="America/Edmonton">America/Cambridge_Bay</id>
- <id notafter="120646800000" repl="America/Edmonton">America/Dawson</id>
+ <id notafter="120646800000" repl="America/Whitehorse">America/Dawson</id>
<id alts="Canada/Yukon">America/Whitehorse</id>
</country>
<country code="cc" default="Indian/Cocos" everutc="n">
@@ -698,7 +698,7 @@
<id notafter="1315828800000" repl="Asia/Vladivostok">Asia/Ust-Nera</id>
<id>Asia/Chita</id>
<id notafter="1459015200000" repl="Asia/Chita">Asia/Yakutsk</id>
- <id notafter="1315832400000" repl="Asia/Chita">Asia/Khandyga</id>
+ <id notafter="1315832400000" repl="Asia/Yakutsk">Asia/Khandyga</id>
<id>Asia/Irkutsk</id>
<id>Asia/Krasnoyarsk</id>
<id notafter="1459022400000" repl="Asia/Krasnoyarsk">Asia/Novokuznetsk</id>
@@ -710,7 +710,7 @@
<id>Europe/Samara</id>
<id>Europe/Saratov</id>
<id notafter="1480806000000" repl="Europe/Saratov">Europe/Ulyanovsk</id>
- <id notafter="701823600000" repl="Europe/Saratov">Europe/Astrakhan</id>
+ <id notafter="701823600000" repl="Europe/Ulyanovsk">Europe/Astrakhan</id>
<id>Europe/Volgograd</id>
<id alts="W-SU">Europe/Moscow</id>
<id>Europe/Kirov</id>
@@ -833,7 +833,7 @@
<country code="ua" default="Europe/Kiev" everutc="n">
<id>Europe/Kiev</id>
<id notafter="686102400000" repl="Europe/Kiev">Europe/Zaporozhye</id>
- <id notafter="686091600000" repl="Europe/Kiev">Europe/Uzhgorod</id>
+ <id notafter="686091600000" repl="Europe/Zaporozhye">Europe/Uzhgorod</id>
<id picker="n">Europe/Simferopol</id>
</country>
<country code="ug" default="Africa/Kampala" everutc="n">
@@ -850,27 +850,27 @@
<id notafter="1130652000000" repl="America/New_York" alts="America/Fort_Wayne,America/Indianapolis,US/East-Indiana">America/Indiana/Indianapolis</id>
<id notafter="1194159600000" repl="America/New_York">America/Indiana/Vincennes</id>
<id notafter="972802800000" repl="America/New_York">America/Kentucky/Monticello</id>
- <id notafter="247042800000" repl="America/New_York">America/Indiana/Petersburg</id>
+ <id notafter="247042800000" repl="America/Indiana/Vincennes">America/Indiana/Petersburg</id>
<id notafter="1173600000000" repl="America/New_York">America/Indiana/Winamac</id>
- <id notafter="89186400000" repl="America/New_York">America/Indiana/Vevay</id>
- <id notafter="183535200000" repl="America/New_York">America/Indiana/Marengo</id>
+ <id notafter="89186400000" repl="America/Indiana/Indianapolis">America/Indiana/Vevay</id>
+ <id notafter="183535200000" repl="America/Indiana/Indianapolis">America/Indiana/Marengo</id>
<id alts="US/Central">America/Chicago</id>
<id notafter="104918400000" repl="America/Chicago">America/Menominee</id>
<id notafter="1143964800000" repl="America/Chicago">America/Indiana/Tell_City</id>
- <id notafter="688546800000" repl="America/Chicago" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
+ <id notafter="688546800000" repl="America/Indiana/Tell_City" alts="America/Knox_IN,US/Indiana-Starke">America/Indiana/Knox</id>
<id notafter="1289116800000" repl="America/Chicago">America/North_Dakota/Beulah</id>
<id notafter="1067155200000" repl="America/Chicago">America/North_Dakota/New_Salem</id>
<id notafter="720000000000" repl="America/Chicago">America/North_Dakota/Center</id>
<id alts="America/Shiprock,Navajo,US/Mountain">America/Denver</id>
<id alts="US/Arizona">America/Phoenix</id>
- <id notafter="129114000000" repl="America/Phoenix">America/Boise</id>
+ <id notafter="129114000000" repl="America/Denver">America/Boise</id>
<id alts="US/Pacific">America/Los_Angeles</id>
<id alts="US/Alaska">America/Anchorage</id>
<id notafter="436359600000" repl="America/Anchorage">America/Juneau</id>
- <id notafter="341402400000" repl="America/Anchorage">America/Sitka</id>
+ <id notafter="341402400000" repl="America/Juneau">America/Sitka</id>
<id notafter="436363200000" repl="America/Anchorage">America/Nome</id>
<id notafter="1547978400000" repl="America/Anchorage">America/Metlakatla</id>
- <id notafter="436356000000" repl="America/Anchorage">America/Yakutat</id>
+ <id notafter="436356000000" repl="America/Juneau">America/Yakutat</id>
<id alts="Pacific/Johnston,US/Hawaii">Pacific/Honolulu</id>
<id alts="America/Atka,US/Aleutian">America/Adak</id>
</country>
diff --git a/testing/data/test3/output_data/distro/distro.zip b/testing/data/test3/output_data/distro/distro.zip
index af6fe34..ad5caad 100644
--- a/testing/data/test3/output_data/distro/distro.zip
+++ b/testing/data/test3/output_data/distro/distro.zip
Binary files differ